第3章循环结构程序设计试题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第3章 循环结构程序设计

3.1 典型试题剖析

3.1.1 选择题

【例1】若有如下程序段,其中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;

✧ 考点:本例考查for 循环。分析:初始赋值时s=a ,那么s 的值一定与a 有关,C 、D 答案中不含a 所以排除掉。只用清楚for 循环的次数,不管b 以前的值为多少,第一次循环时b=1,当b>c 时循环结束,那么显然s 要加c 次1。所以s 的值为a 与c 的和。

【例2】设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; }

✧ 考点:本例考查for 循环中break 和continue 的用法,以及区别。

✧ 分析:break 用在循环中,只能退出一层循环。尤其是在嵌套循环中,只能退出它所在的那一层循环。不能期望用break 从最内层循环一下子退出最外层循环(可以用goto 实现)。continue 语句只能用在循环中,它的作用是跳过其后面的语句,直接将控制转移到下一轮循环条件的测试。语句“if(x>=10) break;”中的break 只有当x>=10时,才会执行,并且跳出for 循环;语句“x+=5;continue;”是每次执行完一次跳过其后面的语句,直接将控制转移到下一轮循环条件的测试for(y=1,x=1;y<=50;y++)中。

【例3】以下程序中,while 循环的循环次数是_______。

main()

{ i nt i=0;

while(i<10)

{ if(i<1) continue;

if(i==5) break; i++; } ...... }

✧ 考点:本例考查while 循环的用法,以及continue 和break 的分别。

✧ 分析:本题要求的是循环次数,首先要检查while 中的判断条件,i<10是有限循环,然后再观察while 内部,if(i<1) continue;第一次循环i=0,满足if 条件,执行continue 直接跳出循环,不再执行循环内部的其它语句,再次执行while(i<10),而此时i 的值仍为0,无疑仍然重复以上步骤,那么i 的值没有变化,循环继续,本题是死循环。

【例4】假定a 和b 为int 型变量,则执行以下语句后b 的值为 。

a=1;b=10;

do{

b-=a;a++;

}while(b--<0);

✧ 考点:本例考查do-while 循环的用法。分析:第一次循环a=1,b 减去a 后b=9。然后执行“while(b--<0);”,为假跳出循环。所以本程序的循环仅执行1次,9-1=8。

【例5】设j 为int 型变量,则下面

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

【例6】在下列选项中,没有构成死循环的程序段是 。

A) int i=100 B) for(;;);

int i=100;

while(1)

{

i=i%100+1;

if(i>100) break; }

C) int k=1000; D) int s=36;

do{++k; while(s);--s;

} while(k>=1000);

✧ 考点:本例考查死循环。分析:A)要退出循环必须满足i>100,但是执行语句“i=i%100+1;”后,

i 不可能超过100;B)没有循环条件,显然为死循环;C)经过“k++”后,k 的值一定是大于1000的,所以也为死循环;D)中的循环控制为s ,s 每循环一次则递减,s<0时,退出循环,所以D 不是死循环。 答案:D

【例7】运行以下程序后,如果从键盘上输入china#<回车>,则输出结果为 。 #include

main()

{ int v1=0,v2=0;

char ch;

while((ch=getchar())!='#')

switch(ch)

{ case 'a':

case 'h': case 'o': v2++; default: v1++; }

printf("%d,%d\n",v1,v2); }

✧ 考点:本例考查switch 的用法。分析:本题的程序是为了检查输入字符中a 、h 、o 的个数。 【例8】以下程序的输出结果是 。

main()

{ int a=0,i;

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

{ switch(i)

{ case 0:

case 3:a+=2;

case 1:

case 2:a+=3;

default:a+=5; } }

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

✧ 考点:本例考查for 循环中switch 的用法。

✧ 分析:可以看出此题和上一例题类型一样,只不过上一例题考的是while 和switch ,而此题考查

的是for 和switch 。大家在分析历年考题时会发现很多题型多次重复出现,所以我们在复习的过程中对以前试题要详加分析。分析本题得到,for 一共循环4次,每次循环内部再执行switch ,但是有一个问题,本题的case 没有break 语句结束,所以要从case i 一直执行到default ,这一点一定要注意!不难发现,i=1时,a=a+3+5=8;i=2时,a=a+3+5=16;i=3时,a=a+2+3+5=16+10=26

相关文档
最新文档