第3章循环结构程序设计试题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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
;