《C程序设计》上机实验报告(三) 之循环结构程序设计

1.运行程序

#include

void main( )

{  int num=0;

while(num++<=2)

printf(“%d\n”,num);

}

要求:

(1)输入源程序,编译、连接、运行。

(2)将运行结果填入表4-1,并分析循环的次数及变量num的变化过程。

(3)将”while(num++<=2)”改为”while(++num<=2)”,编译后再次运行,比较前后的差别并分析原因。

《C程序设计》上机实验报告(三) 之循环结构程序设计_第1张图片

2.运行程序

#include

void main( )

{  int i;

  for(i=1;i<5;++i)

    if(i%2)  printf("*");

    else continue;

  printf("End");

}

要求:

(1)输入源程序并进行编译、连接。

(2)运行程序,将运行结果填入表4-2,并分析循环的次数以及continue的流程。

(3)将continue改为break,运行程序分析结果。比较continue语句和break语句在循环控制中的差别。

表4-2 程序测试及结果分析

修改前运行结果:

修改后运行结果:

分析:continue 语句只结束本次循环,而不是终止整个循环。continue 只能在循环语句中使用。

分析:break 语句则是结束整个循环过程,不再判断执行循环的条件是否成立。

3. 运行程序

#include

void main( )

{ int a,b;

  for(a=1,b=1;a<=100;a++)

  {   if(b>=10)  break;

  if(b%3==1)

  {   b+=3;

  continue;

  }

  }

  printf("%d\n",a);

}

要求:

(1)输入源程序并进行编译、连接。

(2)运行程序,将运行结果填入表4-3,并分析循环的次数以及continue的流程。

表4-3 程序测试及结果分析

运行结果

分    析

循环一次,continue其作用为结束本次循环跳过循环体中下面尚未执行的语句,然后进行下一次是否执行循环的判定

4.运行填空

下列程序的功能是:找出200以内最大的能被17整除,在程序的横线上填入适当内容,运行验证结果。

#include

void main( )

{  int i;

   for(        ;         ;i--)

   {   if(         )  break;

  }

  printf("%d\n",i)

}

程序

#include

#include 

void main()

{

    system("color f3");

    int i;

    for (i=200;i>=0 ; i--)

    {

        if (i%17==0)  //能被17整除

            break;

    }

    printf("200以内最大的能被17整除的数是:%d\n", i);

}

5.编写程序

计算并输出数列:1,3,5,…,2n-1,…的前n项之和,其中n由键盘输入。要求分别用3种循环语句实现。

程序:

(1).while语句

#include 
int main(void)
{
    int n, num, sum = 0;
    printf("please input the n:\n");
    scanf_s("%d", &n);
    num = 2 * n - 1;
    while (num >= 1)
    {
        sum += num;
        num -= 2;
    }
    printf("1+3+5+...%d=%d", sum);
    return 0;
}

(2).do-while语句

 #include 
int main()
{
    int n, num, sum = 0;
    printf("please input the n:\n");
    scanf_s("%d", &n);
    num = 2 * n - 1;
    do
    {
        sum += num;
        num -= 2;
    } while (num >= 1);
        printf("1+3+5+...%d=%d", sum);
return 0;
}

(3)for语句

#include 
int main()
{
    int a, n, num, sum = 0;
    printf("please input the n:\n");
    scanf_s("%d", &n);
a = 2 * n - 1;
for (num=1;num<=a;num=num+2)
    {
        sum += num;
    }
    printf("1+3+5+...%d=%d", sum);
    return 0;
}

6.编写程序

求1000以内能被73或127整除的自然数平方根之和。

程序:

#include 

#include

void main()

{

ᅠᅠᅠ int n = 1;

ᅠᅠᅠ double sum = 0.0;

ᅠᅠᅠ while (n <= 1000)

ᅠᅠᅠ {

ᅠᅠᅠᅠᅠᅠᅠ if (n % 73 == 0 || n % 127 == 0)

ᅠᅠᅠᅠᅠᅠᅠ {

ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ sum += sqrt(n);

ᅠᅠᅠᅠᅠᅠᅠ }

ᅠᅠᅠᅠᅠᅠᅠ n++;

ᅠᅠᅠ }

printf("sum=%f\n", sum);

}

7.编写程序

编写程序打印如下乘法表:

   1

   2   4

   3   6   9

   4   8   12  16

   … …

   9  18   27  36  45  54  63  72  81

程序:

#include 

int main()

{

ᅠᅠᅠ int i = 1, j, sum;

ᅠᅠᅠ while (i <= 9)

ᅠᅠᅠ {

ᅠᅠᅠᅠᅠᅠᅠ j = 1;

ᅠᅠᅠᅠᅠᅠᅠ while (j <= i)

ᅠᅠᅠᅠᅠᅠᅠ {

ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ sum = i * j;

ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ printf("%2d\t", sum);

ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ j++;

ᅠᅠᅠᅠᅠᅠᅠ }

ᅠᅠᅠᅠᅠᅠᅠ printf("\n");

ᅠᅠᅠᅠᅠᅠᅠ i++;

ᅠᅠᅠ }

ᅠᅠᅠ return 0;

}

8.一个数如果恰好等于它的因子之和,这个数就称为“完数”。 例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数”。

编写程序,指出1000以内的所有“完数”,并按下面格式输出其因子:

6 its factors are 1,2,3

程序:

#include 

void main()

{

    int n, i, num;//因子之和

    for (n = 2; n <= 1000; ++n)

    {

        num = 0;

        for (i = 1; i < n; ++i)

        {

            if (n % i == 0) //i代表n对应的任何一个可能的因子

            {

                num += i;

            }

        }

        if (num == n)//判断因子之和是否和该数相等

        {

            printf("%d its factors are: ", n);

  for (i = 1; i < n; ++i)

            {

                if (n % i == 0)

                {

                    printf("%5d", i);

                }

            }

            printf("\n");

        }

    }

}

9.编写程序

程序:

#include 

int main()

{

    int i, j, k, n=1;

    for (k = 1; k < 101; k++)

    {

        for (i = 1; i < k; i++)

        {

            for (j = 1; j < k; j++)

                if(i*i+j*j==k*k)

                {

                    printf("第%d组解",n);

                    n++;

                    printf("%3d %3d %3d\t", i, j, k);

                }

        }

    }

}

10.编写程序

输入两个正整数,求它们的最大公约数和最小公倍数。

程序:

#include 

int main()

{

 int a, b, c, m, t;



    printf("请输入两个数:\n");

scanf_s("%d%d", &a, &b);

    if (a < b)

    {

        t = a;

        a = b;

        b = t;

    }

    m = a * b;

    c = a % b;

    while (c != 0)

    {

        a = b;

        b = c;

        c = a % b;

    }

    printf("最大公约数是:\n%d\n", b);

    printf("最小公倍数是:\n%d\n", m / b);

}

程序测试及运行结果:

5.《C程序设计》上机实验报告(三) 之循环结构程序设计_第2张图片

6.

《C程序设计》上机实验报告(三) 之循环结构程序设计_第3张图片

7.

《C程序设计》上机实验报告(三) 之循环结构程序设计_第4张图片

8.

《C程序设计》上机实验报告(三) 之循环结构程序设计_第5张图片

9.

《C程序设计》上机实验报告(三) 之循环结构程序设计_第6张图片

10.

《C程序设计》上机实验报告(三) 之循环结构程序设计_第7张图片

结果分析与讨论:

  1. 在实际应用中三种循环语句应该如何选择?

        答:

     (1)一般来讲需要使用自增++或者自减--这样的形式来遍历的,都会使用for循环;

     (2)判断某个条件是否为真或者为假的时候,就使用while循环多一些;

     (3)do...while...在先执行后判断,至少执行一次 第1要素与第3要素相同时是首选。
do...while...感觉这个用的好少,因为能用它的地方,也都可以用while,只是某些时候用while会显得代码不那么可读的时候可以用do...while...;

        2.对于条件恒为真的循环,如何处理?

          例如:while(1){…}

                     do{…} while(1)

                      for( ; ; ) {…}

        答:

         (1)while(1){…}在循环体中加入break,并使他有机会执行;

       (2)do{…} while(1)还可以设置循环计数变量,当溢出上限时停止程序并报错,          以便自查;

       (3)for( ; ; ) {…}在循环体中设置退出条件break;

        3.当循环体为空语句(;)时是否会出现语法错误?

        答:会,没有退出判定条件,也没有循环执行的对象。相当于一个死循环。大括号中需要加个分号,否则会报语法错误。

你可能感兴趣的:(实验报告,c语言,算法,开发语言)