第六章 循环结构程序设计
基础练习(A)
一、选择题
1C语言中whiledo-while循环的主要区别是(A)。
A) do-while的循环体至少无条件执行一次
B) while的循环控制条件比do-while的循环控制条件严格
C)C)    do-while允许从外部转到循环体内
D)  do-while的循环体不能是复合语句
2、以下描述中正确的是(C)。
A) 由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句
B)    do-while循环由do开始,用while结束,在while(表达式)后面不能写分号
C) do-while循环体中,一定要有能使while后面表达式的值变为零(“假”)的操作
D)    do-while循环中,根据情况可以省略while
3、设有程序段
    int k=10;
    while(k) k=k-1;
    则下面描述中正确的是( A )。
            Awhile循环执行10            B)循环是无限循环
            C)循环体语句一次也不执行        D)循环体语句执行一次
4、下列循环语句中有语法错误的是(  D   )。
A) while(x=y) 5          B) while(0)
C) do 2while(x==b)  D) do x++  while(x==10)
5、已知int i=1 执行语句while (i++<4) ;后,变量i的值为(  C  )。
A)  3        B)  4      C)  5        D)    6
6、语句while(!E);中的表达式!E等价于( A ) 。
    AE==0        BE!=1        CE!=0        D E==1
7、下面程序段的运行结果是( A )。
    a=1; b=2; c=2;
    while(a<b<c) {    t=a; a=b; b=t; c--;    }
    printf(“%d,%d,%d”,a,b,c);
    A1,2,0        B2,1,0        C1,2,1        D2,1,1
8、下面程序的运行结果是( C )。
    #include <stdio.h>
    main()
    {
            int num=0;
            while(num<=2)
            {
                num++;
                printf(“%d\n”,num);
            }
    }
            A1        B1        C1        D1
                          2          2          2
                                      3          3
9、以下能正确计算1×2×3×…×10的程序段是( C  )。
            Ado{i=1; s=1;                Bdo{i=1; s=0;   
               s=s*i;                      s=s*i;
                  i++;                          i++;
                }while(i<=10);                }while(i<=10);
            Ci=1; s=1;                  Di=1; s=0;   
              do{s=s*i;                      do{s=s*i;
                  i++;                          i++;
                }while(i<=10);                }while(i<=10);
10、下面程序的运行结果是( D )。
    #include <stdio.h>
    main()
    {
            int y=10;
            do{ y--; }while(--y);
            printf(“%d\n”,y--);
    }
    A-1          B1          C8              D0
11、已知int i=1,j=0;执行下面语句后j的值是( D  )。
while(i)
switch(i)
{ case 1: i+=1j++break
case 2: i+=2j++break
case 3: i+=3j++break
default: i--j++break
}
A)  1              B)  2          C)  3      D)  死循环
12、若运行以下程序时,从键盘输入2473<回车>,则下面程序的运行结果是( A )。
    #include <stdio.h>
    main()
    {
            int c;
            while((c=getchar())!=\n)
                switch(c-2)
                {
                    case 0:
                    case 1: putchar(c+4);
                    case 2: putchar(c+4); break;
                    case 3: putchar(c+3);
                    default: putchar(c+2); break;
                }
            printf(“\n”);
    }
    A668977        B668966        C66778777        D6688766
二、填空题
1、执行下面程序段后,k值是 36 
    k=1; n=263;
    do{ k*=n%10; n/=10; }while(n);
2、下面程序的运行结果是 s=254 
    #include <stdio.h>
    main()
    {
        int a,s,n,count;
        a=2; s=0; n=1; count=1;
        while(count<=7) { n=n*a; s=s+n; ++count; }
        printf(“s=%d”,s);
    }
3、下面程序段的运行结果是 * * 
    x=2;
    do{ printf(“*”); x--; }while(!x==0);
4、运行以下程序时,从键盘键入China#<CR><CR>代表回车),则下面程序的运行结果是 5,5 
    #include <stdio.h>
    main()
    {
        int v1=0,v2=0; char ch;
        while((ch=getchar())!=‘#’)
        switch(ch)
        {
            case ‘a’:
            case ‘h’:
            default: v1++;
            case ‘o’: v2++;
        }
        printf(“%d,%d\n”,v1,v2);
    }
三、编程:
1 编程求1*3*5*7*9的值
 
 
2、编写程序计算下列算式的值:
直到某一项A<=0.000001时为止。输出最后C的值。
 
3、从键盘输入的字符中统计数字字符的个数,用换行符结束循环。
1、参考答案:
main()
{ int i;
long p=1;
  do
{ p=p*i;
i=i+2;
}  while (i<=9);
printf(“1*3*5*9=%ld\n”,t);
}
2参考答案:
#define E 0.000001
main()
{ float x,y=1,s=0
printf("Please enter x=")
scanf("%f",&x)
while(1/y>E)
{ s=s+1/y
y=y*x
}
printf("S=%f\n",s)
}
3、参考答案:
main()
{  int n=0;
  char c;
c=getchar();
while(c!=’\n’    )
{  if(c>=’0’&&c<=’9’) n++;
        c=getchar();
    }
printf(“%d\n”,n);
}
 
能力提高(B)
一、选择填空题
1、下面程序的功能是将从键盘输入的一组字符中统计出大写字母的个数m和小写字母的个数n,并输出mn中的较大者,请选择填空。
    #include <stdio.h>
    main()
    {
        int m=0,n=0;
        char c;
        while((    A  )!=\n)
        {
            if(c>=A&&c<=Z) m++;
            if(c>=a&&c<=z) n++;
        }
        printf(“%d\n”,m<n?   A   );
    }
    (1)  Ac=getchar()    Bgetchar()    Cscanf(“%c”,c)
    (2)  An:m            Bm:n            Cm:m        Dn:n
2、下面程序的功能是在输入的一批正整数中求出最大者,输入0结束循环,请选择填空。
    #include <stdio.h>
    main()
    {
            int a,max=0;
            scanf(“%d”,&a);
            while( B  )
            {
                if(max<a) max=a;
                scanf(“%d”,&a);
            }
            printf(“%d”,max);
    }
Aa==0        Ba        C!a==1          D!a
3、下面程序的功能是计算正整数2345的各位数字平方和,请选择填空。
    #include <stdio.h>
    main()
    {
            int n,sum=0;
            n=2345;
            do{
                sum=sum+  B  ;
                n=    C    ;
            }while(n);
            printf(“sum=%d”,sum);
    }
(1)  An%10        B(n%10)*(n%10)    Cn/10          D(n/10)*(n/10)
(2)  An/1000      Bn/100            Cswitch语句必须使用break吗n/10          Dn%10
二、读懂程序,并按照程序的功能将程序补充完整
1、下面程序的功能是用“辗转想除法”求两个正整数的最大公约数。请填空。
    #include <stdio.h>
    main()
    {
        int r,m,n;
        scanf(“%d %d”,&m,&n);
        if(m<n)  r=m,m=n,n=r     ;
        r=m%n;
        while(r) { m=n; n=r; r=  m%n    ; }
        printf(“%d\n”,n);
    }
2、下面程序的功能是用do-while语句求11000之间满足“用3除余2;用5除余3;用7除余2”的数,且一行只打印五个数。请填空。
    #include <stdio.h>
    main()
    {
        int i=1,j=0;
        do{
            if(  i%3==2&&i%5==3&&i%7==2    )
            {
                printf(“%4d”,i);
                j=j+1;
                if(  j%5==0   ) printf(“\n”);
            }
            i=i+1;
        }while(i<1000);
    }
3、等差数列的第一项a=2,公差d=3,下面程序的功能是在前n项和中,输出能被4整除的所有的和。请填空。
    #include <stdio.h>

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。