习题五  循环结构程序设计
1. 有以下程序
main()
{ int  i,  j;
  for(i=1;i<4;i++)
  { for(j=i;j<4;j++)  printf("%d*%d=%d  ",i,j,i*j);
    printf("\n");}  }
程序运行后的输出结果是     
A1*1=1  1*2=2  1*3=3         B1*1=1  1*2=2  1*3=3
  2*1=2  2*2=4                   2*2=4  2*3=6
  3*1=3                          3*3=9
C1*1=1                       D1*1=1
  1*2=2  2*2=4                  2*1=2  2*2=4
  1*3=3  2*3=6  3*3=9          3*1=3  3*2=6  3*3=9
解析:本题考查的是循环嵌套。在一个循环体内又完整地包含了另一个循环,称为循环嵌套。外循环i的值分别为123,当i=1,内循环j=1时,输出1*1=1;当内循环j=2时,输出1*2=2;当内循环j=3时,输出1*3=3;当i=2,内循环j=2时,输出2*2=4;当内循环j=3时,输出2*3=6;当i=3,内循环j=3时,输出3*3=9。故本题答案选B
2. 有以下程序
main()
{ int k=5, n=0;
  do
  {switch(k)
    {case 1:    case 3:  n+=1;  k--;  break;
      default:  n=0;  k--;
      case 2:    case 4:  n+=2;  k--; break;}
  printf("% d",n);
  }while(k>0 && n<5);}
程序运行后的输出结果是______
A235     B0235   C02356   D2356
解析:本题考查的是循环嵌套。do-while语句的特点是先执行循环体,然后判断循环条件是否成立,当循环条件的值为0时循环结束。执行switch语句,寻与5吻合的case 5分支,没有寻到,于是执行default后的语句,n=0k的值变为4,继续执行switch语句,寻与4吻合的case 4分支,开始执行其后的各语句:n+=2=0+2=2k的值变为3,遇到break语句跳出该switch语句体。执行printf语句输出2;此时n=2k=3依旧满足do-while
环条件,将用同样的方式再次执行switch语句,直到n=5时不再满足do-while循环条件退出所有循环。此时输出的结果为235。故本题答案选A
3. 以下叙述中正确的是______
Abreak语句只能用于switch语句体中
Bcontinue语句的作用是:使程序的执行流程跳出包含它的所有循环
Cbreak语句只能用在循环体内和switch语句体中
D、在循环内使用break语句和continue语句的作用相同
解析:本题考查的是breakcontinue的特性。break语句的使用说明:(1)只能用在循环体内和switch语句体内使用break语句。(2)当break出现在循环体中的switch语句体内时,其作用只是跳出该switch语句体。当break出现在循环体中,但并不在switch语句体内时,则在执行break后,跳出本层循环体。故本题答案选C
4.有以下程序
main()
{ int  k=5;
  while(--k) printf("%d",k-=3);
  printf("\n");}
执行后的输出结果是______
A1   B2   C4   D、死循环
  解析:本题考查的是while语句的应用。此题中首先给k赋初值5,执行while语句:中的表达式"--k"k先自行减1结果为4,满足while执行条件输出:k=k-3=4-3=1;此时输出结果为1。返回执行while语句,重复上面的操作,while后的表达式为0,退出循环,所以最后的输出结果为1 故本题答案为A
5. 有以下程序
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);}
程序执行后的输出结果是______
Ax=4    Bx=8     Cx=6    Dx=12
  解析:本题考查的是循环嵌套和continue语句的应用。当外层循环for(i=0;i<2;i++)满足条件的情况下执行循环体,循环体中包含了嵌套的内层循环for(j=0;j<=3,j++){……},在内层循环中,当if条件语句不成立时执行continue语句,其作用是跳过"x++;",继续执行内层循环的for语句,直到内层循环条件不满足,则执行跳出内层循环,执行外层循环的"x++;"语句,然后再对i进行判断,直到外层循环条件不满足,跳出外层循环,执行输出语句,结果为8。故本题答案为B
6. 在以下给出的表达式中,与while(E)中的(E)不等价的表达式是______
A(!E==0)   B(E>0||E<0)     C(E==0)   D(E!=0)
    解析:本题考查的是while条件表达式的判断。while(表达式)语句用来实现"当型"循环结构,当表达式为非0值时,执行while语句中的内嵌语句。选项A非零即为1,选项B与选项D的结果也为1,只有选项C0。故本题答案为C
7. 有以下程序
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、4    B、5     C、6    D、7
解析:本题考查的是while语句。在本题中,当k=5k=4的时候,case都没有与其匹配的值,所以执行了default语句;当k=3时,执行"case 3 : n+=k;"n=3,然后执行default;当k=2时,执行"case 2 :  case 3 : n+=k;"n=5,然后执行default;当k=1时,执行"case 1 : n+=k;    case 2 :  case 3 : n+=k;"使得n加两次k,得到n=7 故本题答案为D
8. 有以下程序段
int  n,t=1,s=0;
scanf("%d",&n);
do{  s=s+t;  t=t-2;  }while (t!=n);
为使此程序段不陷入死循环,从键盘输入的数据应该是______
A、任意正奇数  B、任意负偶数  C、任意正偶数  D、任意负奇数
    解析:本题考查的是while循环语句。要使得程序段不陷入死循环,则必须存在终止循环的条件"t=n",由于t的初始值为1,且每执行一次循环都会使得t的值减2,故执行本程序后t
有可能的最大值为-1,然后,依次减2,所以键盘输入的n的值必须是t的值之一,即为任意负奇数。 故本题答案为D
9. 设变量已正确定义,则以下能正确计算f=n!的程序段是______
Af=0; for(i=1;i<=n;i++)  f*=i;    Bf=1; for(i=1;i<n;i++)  f*=i;
Cf=1; for(i=n;i>1;i++)  f*=i;    Df=1; for(i=n;i>=2;i--)  f*=i;
    解析:本题考查的是for语句。n!=n*(n-1)*……*2*1,由于选项Af的初值为0,所以循环n次后,f值依然为0,故选项A错误;选项B中循环的终止条件是"i<n",即只执行i-1次循环,得到的f值为(n-1)*……*2*1的值,故选项B错误;选项C中,当n>1时,由于初值"i=n"是符合条件"i>1"的,且增量为+1,故循环中永远不会出现不满足条件"i>1"的值,所以出现死循环。故本题答案为D
10. 有以下程序
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); }
程序运行后的输出结果是______
A3  B4   C5   D6
  解析:本题考查的是breakcontinue的区别。本题具体执行过程如下:
a=1,b=1a>=8不成立,判断a%2==1成立,a+=5a=6continue,执行下一次循环;
a=6,b=2a>=8不成立,判断a%2==1continue语句执行过程不成立,a-=3a=3,执行下一次循环;
a=3,b=3a>=8不成立,判断a%2==1成立,a+=5a=8continue,执行下一次循环;
a=8,b=4a>=8成立,break,结束整个循环,输出b的值4
故本题答案为B
11.有以下程序
main()
{ int i=0,s=0;
  for (;;)
  {if(i==3||i==5) continue;
    if (i==6) break;
    i++;s+=i;};
  printf("%d\n",s);}
程序运行后的输出结果是______
A10    B13   C21  D、程序进入死循环
  解析:此题考的是continue的用法。此题中,执行时首先是i=0,两个if条件都不成立,则接下执行i++,s+=i;第二次循环继续执行,判断if语句,当执行到i=3时,就执行continue,跳过它下面的语句,继续执行下一轮循环,而又因为此时在for循环中并没有使变量i增值,所以这轮循环的i值还是3,继续continue,无终止条件,进入死循环。故本题答案为D
12.下面程序的功能是输出以下形式的金字塔图案:
              *

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