打印本文 打印本文  关闭窗口 关闭窗口  
全国计算机等级考试二级C语言循环结构测试
作者:佚名  文章来源:不详  点击数  更新时间:2008/4/18 14:36:54  文章录入:杜斌  责任编辑:杜斌

一、选择题
(1)有以下程序段
  int  n,t=1,s=0;
  scanf("%d",&n);
  do{  s=s+t;   t=t-2;  }while (t!=n);
为使此程序段不陷入死循环,从键盘输入的数据应该是
  A)任意正奇数 
  B)任意负偶数 
  C)任意正偶数 
  D)任意负奇数

(2)设变量已正确定义,则以下能正确计算f = n!的程序段是
  A) f=0;              B) f=1;
    for(i=1;i<=n;i++) f*=i;       for(i=1;i<n;i++) f*=i;
  C) f=1;              D) f=1;
    for(i=n;i>1;i++) f*=i;          for(i=n;i>=2;i--) f*=i;

(3)有以下程序
 main()
 { int  k=5,n=0;
   while(k>0)
   {  switch(k)
      {  default  :  break;
         case  1  :  n+=k;
         case  2  :
         case  3  :  n+=k;
      }
     k--;
   }
   printf("%d\n",n);
 }
程序运行后的输出结果是
  A)0   
  B)4   
  C)6   
  D)7

(4)有以下程序
main()
{
   int  a=1,b;
   for(b=1;b<=10;b++)
   {
      if(a>=8)   break;
      if(a%2==1)  {  a+=5;  continue;}
      a-=3;
   }
   printf("%d\n",b);
}
程序运行后的输出结果是              
  A)3
  B)4
  C)5
  D)6
(5) 有以下程序
main ()
{ int  s=0,a=1,n;
scanf("%d",&n);
do
{  s+=1;    a=a-2;  }
while(a!=n);
printf("%d\n",s);
}
 若要使程序的输出值为2,则应该从键盘给n输入的值是
  A) -1        
  B) -3        
  C) -5        
  D) 0

(6) 若有如下程序段,其中s、a、b、c均已定义为整型变量,且a、c均已赋值(c大于0)
s=a;
for(b=1;b<=c;b++) s=s+1;
则与上述程序段功能等价的赋值语句是
  A) s=a+b;      
  B) s=a+c;     
  C) s=s+c;        
  D) s=b+c;

(7) 有以下程序
main()
{ int  k=4,n=4;
for( ; n<k ;)
{  n++;
if(n%3!=0)  continue;
k--; }
printf("%d,%d\n",k,n);
}
程序运行后的输出结果是
  A) 1,1       
  B) 2,2       
  C) 3,3        
  D) 4,4

(8) 要求以下程序的功能是计算:  
main ()
{ int  n;   float   s;
s=1.0;
for(n=10;n>1;n--)
s=s+1/n;
print("%6.4f\n",s);
}
程序运行后输出结果错误,导致错误结果的程序行是
  A) s=1.0;                
  B) for(n=10;n>1;n--)
  C) s=s+1/n;             
  D) printf("%6.4f/n",s);



(9)有以下程序
main()
{  int i;
 for(i=0;i<3;i++)
  switch(i)
  { case 1: printf("%d",i);
   case 2: printf("%d",i);
   default: printf("%d",i);
  }
}
执行后输出结果是
  A) 011122   
  B) 012   
  C) 012020   
  D) 120

(10)有以下程序
main()
{ int i=0,s=0;
do{
if(i%2){i++;continue;}
i++;
s +=i;
}while(i<7);
 printf("%d\n",s);
}
执行后输出结果是
  A) 16 
  B) 12 
  C) 28  
  D) 21


(11) 以下程序的功能是:按顺序读入10名学生4门课程的成绩,计算出每位学生的平均分并输出,程序如下:
main()
{   int n,k;
float score ,sum,ave;
sum=0.0;
for(n=1;n<=10;n++)
{   for(k=1;k<=4;k++)
{   scanf(“%f”,&score);  sum+=score;}
ave=sum/4.0;
printf(“NO%d:%f\n”,n,ave);
   }
}
上述程序运行后结果不正确,调试中发现有一条语句出现在程序中的位置不正确。这条语句是
  A) sum=0.0;            
  B) sum+=score;
  C) ave=sun/4.0;      
  D) printf(“NO%d:%f\n”,n,ave);

 (12) 有以下程序段
int n=0,p;
do{scanf(“%d”,&p);n++;}while(p!=12345 &&n<3);
此处do—while循环的结束条件是
  A) P的值不等于12345并且n的值小于3
  B) P的值等于12345并且n的值大于等于3
  C) P的值不等于12345或者n的值小于3
  D) P的值等于12345或者n的值大于等于3

(13) 以下程序中,while循环的循环次数是
main()
{ int  i=0;
while(i<10)
{   if(i<1)   continue;
if(I==5)  break;
       i++;
}
......
}
  A) 1                        
  B) 10
  C) 6                            
  D) 死循环,不能确定次数

(14) 以下程序的输出结果是
main()
{ int  a=0,i;
for(i=;i<5;i++)
{  switch(i)
{ case 0:
case 3:a+=2;
case 1:
case 2:a+=3;
default:a+=5;
}
}
printf("%d\n",a);
}
  A) 31   
  B) 13   
  C) 10   
  D) 20

(15) 以下程序的输出结果是
#include   <stdio.h>
main()
{ int  i=0,a=0;
while(i<20)
{  for(;;)
{ if((i%10)==0)  break;
else        i--;
}
i+=11;      a+=i;
}
printh("%d\n",a);
}
  A) 21              
  B) 32        
  C) 33           
  D) 11

(16)  t为int类型,进人下面的循环之前,t的值为0
while( t=l )
{ ……   }
则以下叙述中正确的是
  A) 循环控制表达式的值为0  
  B) 循环控制表达式的值为1
  C) 循环控制表达式不合法   
  D) 以上说法都不对

(17) 以下程序的输出结果是
main()
{   int   num= 0;
while(num<=2)
{  num++;  printf(“%d\n”,num);
}
  A) 1   B) 1    C)1    D) l
    2      2         2
       3      3
      4
(18) 以下程序的输出结果是
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);
}
  A) 101   
  B) 6    
  C) 5    
  D) 4


(19) 有以下程序段
int  k=0
while(k=1)k++;
while  循环执行的次数是
  A) 无限次       
  B) 有语法错,不能执行
  C) 一次也不执行      
  D) 执行1次

(20) 以下程序执行后sum的值是
  A)15              
  B)14    
  C) 不确定    
  D)0
min()
{ int  i ,  sum;
  for(i=1;i<6;i++) sum+=i;
  printf(“%d\n”,sum);
}

(21) 有以下程序段
int  x=3
do
{   printf(“%d”,x-=2);   }
while (!(--x));
其输出结果是
  A)中 1               
  B) 3  0    
  C) 1  -2    
  D) 死循环

(22) 有如下程序
main0
{    int    i,sum;
for(i=1;i<=3;sum++)   sum+=i;
printf(“%d\n”,sum);
}
该程序的执行结果是
  A) 6               
  B) 3               
  C) 死循环         
  D) 0

(23) 有如下程序 
main0
{    int    x=23;
do
{   printf(“%d”,x--);}
while(!x);
}
该程序的执行结果是
  A) 321             
  B) 23            
  C) 不输出任何内容   
  D) 陷入死循环

(24) 有如下程序
main0
{     int    n=9;
while(n>6)   {n--;printf(“%d”,n);}
}
该程序段的输出结果是
  A) 987             
  B) 876             
  C) 8765           
  D) 9876

(25) 以下循环体的执行次数是
  A) 3          B) 2                C) 1             D) 0
     main()
     { int i,j;
           for(i=0,j=1;  i<=j+1; i+=2, j--)printf("%d \n",i);
     }

(26) 以下叙述正确的是
  A) do-while语句构成的循环不能用其它语句构成的循环来代替。
  B) do-while语句构成的循环只能用break语句退出。
  C) 用do-while语句构成的循环,在while后的表达式为非零时结束循环。
  D) 用do-while语句构成的循环,在while后的表达式为零时结束循环。

(27) 以下程序段的执行结果是
  A) a=12 y=12                      B) a=12 y=12
         a=14 y=16                          a=16 y=28
         a=16 y=20
         a=18 y=24
  C) a=12 y=12                      D) a=12 y=12
                                              a=14 y=26
                                              a=14 y=44
        int  a, y;
        a=10; y=0;
        do
        { a+=2; y+=a;
          printf("a=%d y=%d\n",a,y);
          if(y>20) break;
        { while(a=14);

(28) 以下程序的输出结果是
  A) 10 1 9 2   
  B) 9 8 7 6   
  C) 10 9 9 0   
  D) 10 10 9 1

      main(   )
     {     int    x=10,y=10,I;
           for(i=0;x>8;y=++i)
              printf("%d,%d ",x--,y);
     }



(29) 以下程序的输出结果是
  A) 2  0    
  B) 3  1    
  C) 3  2  1    
  D) 2  1  0
      main(  )
      {      int   n=4;
             while(n--)printf("%d ",--n);
      }

(30) 以下程序的输出结果是
  A) #*#*#    
  B) #####     
  C) *****   
  D) *#*#*
   main(  )
   {  int  i;
      for(i=1;i<6;i++)
      {   if(i%2){printf("#");continue;}
          printf("*");
      }
      printf("\n");
   }

(31) 执行以下程序段时
  A) 循环体将执行一次                
  B) 循环体将执行两次
  C) 循环体将执行无限次              
  D) 系统将提示有语法错误
          X=-1;
          do  {x=x*x;    }   while(! x);

(32) 执行以下程序后,输出的结果是
  A) -1            B) 1              C) 8              D) 0
        main ()
        {   int  y=10;
            do  { y - -;}  while(- - y);
        printf("%d\n",y - -);
        }

(33) 在下列选项中,没有构成死循环的程序段是
  A) int  i=100                           B)  for( ; ;);
        while(1)
        {  i=i%100+1;
          if(i>100)break;
        }
  C) int k=1000;                         D)  int    s=36;
        do{++k;} while(k>=10000);               while(s);--s;

(34) 执行语句:   for(i=l:i++<4:);后,变量i的值是
  A) 3             
  B) 4              
  C) 5              
  D) 不定

(35) 以下程序的输出结果是
  A) x=4           B) x=8            C) x=6            D) x=12
        main()
        {  int  i,j,x=0;
           for(i=0;i<2;i++)
           { x++;
            for(j=0;j<=3;j++)
               {  if(j%2)continue;
                  x++;
               }
            x++;
        }
        printf("x=%d\n",x);
       }

(36) 运行以下程序后,如果从键盘上输入65  14<回车>,则输出结果为:
  A) m=3           B) m=2            C) m=1       D) m=1
        main()
       {  int    m, n;
          printf("Enter m,n;");   scanf("%d%d", &m,&n):
          while (m!=n)
          { while (m>n)m-=n;
            while (n>m)n-=m;
          }
          printf("m=%d\n",m);
       }

(37) 设x和y均为int型变量,则执行下的循环后,y值为
     for(y=1,x=1;y<=50;y++)
     { if(x>=10))break; 
       if (x%2==1)
        {  x+=5;   continue;}
        x-=3;
     }
  A) 2       B) 4        C) 6               D) 8

(38) 假定a和b为int型变量,则执行以下语句后b的值为
a=1;    b=10;
do
{    b-=a;    a++;  }
while (b--<0) ;
  A) 9               B) -2                 C) -1               D) 8



(39) 设j为int型变量,则下面for循环语句的执行结果是
     for( j=10;j>3;j--)
        {  if(j%3)j--;
         --j;    --j;
         printf("%d  ",j);
        }
  A) 6   3         
  B) 7  4           
  C) 6  2           
  D) 7  3

(40) 若ij已定义为int类型,则以下程序段中内循环体的总的执行次数是
     for (i=5;i;i--)
        for(j=0;j<4;j++){...}
  A)20          
  B)25    
  C)24              
  D)30

(41) 执行下面的程序后,a的值为
main()
{   int a,b;
for (a=1,b=1;a<=100;a++)
{     if(b>=20) break;
if(b%3==1)  {b+=3;  continue; } 
b-=5;         }     }
  A) 7          
  B) 8          
  C) 9          
  D) 10

(42) 以下程序段的输出结果是
int x=3;
    do  {    printf("%3d",x-=2);}  while(!(--x));
  A) 1          
  B) 3 0        
  C) 1-2         
  D) 死循环

(43) 定义如下变量: int n=10; 则下列循环的输出结果是
while(n>7)
{   n--;   
printf("%d\n",n);        }
  A) 10         B) 9          C) 10         D) 9
         9             8                 9              8
            8             7                 8              7
    7              6

(44) 下面的程序
  A) 输出的是1       
  B) 输出的是1和-2 
  C) 输出的是3和0   
  D) 是死循环
main()
{ int x=3;
do {
printf("%d\n",X-=2);
}while(!(--x));}

(45) 下面程序的输出是
  A) 741           
  B) 852            
  C) 963            
  D) 875421
main()
{ int y=9;
for( ; y>0; y--)
{ if(y%3==0)
{ printf("%d", --y);continue;}
}.
}

(46) 若x是int型变量,且有下面的程序片段:
for(x=3; x<6; x++) printf((x%2)?("**%d"):("##%d\n"),x);
上面程序片段的输出结果是
  A) **3           B) ##3            C) ##3            D) **3##4
   ##4                **4                 **4##5               **5
   **5                ##5

(47) 请读程序片段:
#include<stdio.h>
main()
{ int a, b;
for(a=1;b=1;a<=100;a++)
{ if(b>=20) break;
if(b%3==1)
{b+=3;
continue;
}
b-=5;
}
printf("%d\n",a);
}
上面程序的输出结果是
  A) 7             
  B) 8             
  C) 9              
  D) 10


(48) 请读程序:
#include<stdio.h>
main()
{ int mun=0;
while(num<=2)
{ num++; printf("%d\n",num);}
}
上面程序的输出结果是
  A) 1         B) 1        C) 1       D) 1
    2                    2                    2
       3                    3
    4

(49) 请读程序:
#include<math.h>
#include<stdio.h>
main()
{ float x,y,z;
scan("%f%f",&x,&y);
z=x/y;
while(1)
{ if(fabs(z)>1.0)
{ x=y; y=z; z=x/y;
}
else break
}
printf("%f\n",y);
}
若运行时从键盘上输入3.6 2.4<CR>(<CR>表示回车),则输出的结果是
  A) 1.500000      
  B) 1.600000       
  C) 2.000000       
  D) 2.400000

(50) 执行下面程序片段的结果是
int x=23;
do
{ printf("%2d",x--);}
while(!x);
  A) 打印出321     
  B) 打印出23      
  C) 不打印任何内容    
  D) 陷入死循环

(51) 语句while(!E);中的条件!E等价于 。
  A)E = = 0     
  B)E!=1     
  C)E!=0      
  D)~E

(52)C语言中 。
  A)不能使用do-while语句构成的循环  
  B)do-while语句构成的循环必须用break语句才能退出
  C)do-while语句构成的循环,当while语句中的表达式值为非零时结束循环
  D)do-while语句构成的循环,当while语句中的表达式值为零时结束循环

(53)以下程序的输出结果是 。
# include <stdio.h>
main()
{ int  i;   
 for ( i=1;i<=5;i + + )   {if ( i%2 )  printf("*");
    else  continue;  printf("#");}
 printf("$\n");  }
  A) *#*#*#$    
  B) #*#*#*$   
  C) *#*#$    
  D) #*#*$
二、填空题:
(1)以下程序的功能是计算:s=1+12+123+1234+12345。请填空。    
 main()
 { int  t=0,s=0,i;
   for( i=1; i<=5; i++)
   { t=i+ 【1】  ;  s=s+t;  }
   printf("s=%d\n",s);
 }

(2)以下程序的功能是输出如下形式的方阵:       
     13  14  15  16
    9  10  11  12
    5   6   7   8
    1   2   3   4
请填空。
 main()
 { int  i,j,x;
   for(j=4; j 【2】  ; j--) 
   {  for(i=1; i<=4; i++)
   { x=(j-1)*4 +  【3】  ;
     printf("%4d",x);
   }
    printf("\n");
   }
 }


(3) 以下程序运行后的输出结果是 【4】  。 
main()
{ int  i,m=0, n=0, k=0;
for (i=9; i<=11; i++)
switch(i/10)
{ case  0 :  m++; n++; break;
case 10:   n++;break;
default:   k++;n++;

printf("%d %d %d\n",m,n,k);


(4) 以下程序运行后的输出结果是   [5]   。
main()
{  int x=15;
while(x>10 && x<50)
{  x++;
if(x/3){x++;break;}
else continue;
}
printf(“%d\n”,x);
}

(5) 以下函数的功能是计算s=1+ + +……+ ,请填空。
double fun(int n)
{  double s=0.0,fac=1.0;  int  i;
for(i=1,i<=n;i++)
{ fac=fac    [6]    ;
s=s+fac;
}
return s;
}

(6) 以下程序的输出结果是【7】 。  
main() 
  {int  s,i;
    for(s=0,i=1;i<3;i++,s+=i);
    printf("%d\n",s);
}

(7)以下程序运行后的输出结果是 【8】 。
main()
{   int   i=10,  j=0;
do
{ j=j+i;  i-;
while(i>2);
printf(“%d\n”,j);
}

(8) 设有以下程序:
main()
{   int   n1,n2;
scanf(“%d”,&n2);
while(n2!=0)
{   n1=n2%10;
n2=n2/10;
printf(“%d”,n1);
}
}
程序运行后,如果从键盘上输入1298;则输出结果为 【9】 。

(9) 下面程序的功能是:计算1到10之间奇数之和及偶数之和,请填空。
       #include <stdio.h>
       main()
       {  int a, b, c, i;
          a=c=0;
          for(i=0;i<10;i+=2)
          {  a+=i;
              [10]  ;
             c+=b;
          }
          printf("偶数之和=%d\n",a);
          printf("奇数之和=%d\n",c-11);
       }

(10) 下面程序的功能是:输出100以内能被3整除且个位数为6的所有整数,请填空。 
     #include <stdio.h>
     main()
     {  int  i, j;
        for(i=0; [11] ; i++)
        {  j=i*10+6;
           if( [12] ) continue;
           printf("%d",j);
        }
     }

(11) 设i,j,k均为int型变量,则执行完下面的for循环后,k的值为【13】 。
for(i=0,j=10;i<=j;i++,j--)
k=i+j;

(12) 以下程序的功能是:人键盘上输入若干个学生的成绩, 统计并输出最高成绩和最低成绩,当输入负数时结束输入.请填空. 
main()
{ float x,amax,amin;
scanf("%f",&x);
amax=x;          amin=x;
while(【14】)
{ if(x>amax)    amax=x;
if(【15】)   amin=x;
scanf("%f",&x);         }
printf("\namax=%f\namin=%f\n",amax,amin);       }
(13) 下面程序的输出是 【16】 。
main()
{ int x=2;
while(x--);
printf("%d\n", x);}

(14) 设有如下程序段:
int i=0, sum=1;
do
{ sum+=i++;}
while(i<6);
printf("%d\n", sum);
上述程序段的输出结果是 【17】 。


答案:
一、选择题
01) D   02) D   03) D   04) B   05) B 
06) B   07) C   08) C   09) A   10) A

11) A   12) D   13) D   14) A   15) B 
16) B   17) B   18) D   19) A   20) C

21) C   22) C   23) B   24) B   25) C 
26) D   27) B   28) D   29) A   30) A

31) A   32) D   33) C   34) C   35) B 
36) C   37) C   38) D   39) B   40) A

41) B   42) C   43) B   44) B   45) B 
46) D   47) B   48) C   49) B   50) B

51) A   52) D   53) A 

二、填空题

(1) t*10

(2) >0

(3) i

(4) 1 3 2

(5) 17

(6) /i

(7) 5

(8) 52

(9) 8921

(10) B=i+1

(11) I<10

(12) i%3!=0

(13) 10

(14) x>=0.0

(15) amin>=x

(16) -1

(17) 16
打印本文 打印本文  关闭窗口 关闭窗口