4.3.2习题参考答案
一.选择题
1.C语言中while和do-while循环的主要区别是。 A.do-while的循环体至少无条件执行一次
B.while的循环控制条件比do-while的循环控制条件严格 C.do-while允许从外部转到循环体内 D.do-while的循环体不能是复合语句 2.下列叙述中正确的是
A.break 语句只能用于 switch 语句体中
B.continue语句的作用是使程序的执行流程跳出包含它的所有循环 C.break 语句只能用在循环体内和 switch 语句体内
D.在循环体内使用 break语句和 continue 语句的作用相同 3.下列叙述中正确的是
A.do-while语句构成的循环不能用其它语句构成的循环来代替。 B.do-while语句构成的循环只能用break语句退出。
C.用do-while语句构成的循环,在while后的表达式为非零时结束循环。 D.用do-while语句构成的循环,在while后的表达式为零时结束循环。 4.执行x=-1; do { x=x*x; } while (!x); 循环时,下列说法正确的是 A.循环体将执行一次 B.循环体将执行两次
C.循环体将执行无限次 D.系统将提示有语法错误
5.假设变量s、a、b、c均已定义为整型变量,且a、c均已赋值(c大于0),则与以下 程序段s=a; for(b=1;b<=c;b++) s=s+1; 功能等价的赋值语句是 B 。 A.s=a+b; B.s=a+c; C.s=s+c; D.s=b+c; 6.以下程序段的输出结果是。
第30/106页
int main(void) {
int num = 0,s = 0; while(num <= 2){ num++; s += num;
}
printf(\return 0; }
A.10 B.6 C.3 D.1
7.运行以下程序后,如果从键盘上输入65 14<回车>,则输出结果为。 int main(void) {
int m, n;
printf(\scanf(\while (m!=n)
{ while (m>n) m=m-n; while (n>m) n=n-m; }
printf(\return 0; }
A.m=3 B.m=2 C.m=1 D.m=0 8.下列程序段的输出结果是。 int main(viod) {
for(int i=1;i<6;i++) { if( i%2 != 0) { printf(\continue; }
printf(\
}
printf(\return 0; }
A.#*#*# B.##### C.***** D.*#*#* 二.填空题
1.若s=0,执行循环语句\后,i的值为 2.下列程序段的输出结果是。 int x=2; do {
第31/106页
printf(“*”); x--; } while(!x==0);
3.下列程序段的功能是计算:s=1+12+123+1234+12345。则划线处应填 int t=0,s=0,i;
for(i=1;i<=5;i++) {
t=i+ printf(\4.以下程序的输出结果是。
int main(void)
{ }
5.阅读下列程序并回答问题。 main()
{ int i, j, k=0, m=0; for(i=0; i<2; i++) {
; /* 第6行*/
for(j=0; j<3; j++) k++;
m++; /* 第9行*/ }
printf(\(1)程序的输出是
(2)将第9行改为 \,程序的输出是 。
(3) 将第6行改为\,将第9行改为 \,程序的输出是 。 6.输入 happy$$new$$year!<回车>,则下列程序的运行结果是 int main(void) {
int i,word=0; char c; while((c=getchar())!='\\n') { if (c=='$') word=0; else if(word==0)
if (c>='a'&&c<='z') { c=c-'a'+'A'; word=1; word=0;
} } int num=0; while(num<6) { num++; if(num==3) break; printf(%um); } return 0; else putchar(c); return 0;
第32/106页
}
三.程序设计题
1.输入一批正整数(以零或负数为结束标志),求其中的偶数和。 解答:
#include
int x, sum;
printf(\scanf(\sum = 0;
while(x>0){
if(x%2==0) sum = sum + x; scanf(\}
printf(\return 0; } 2.输入1个实数 x,计算并输出下式的值,直到最后一项的绝对值小于10-5(保留2位小数)。要求定义和调用函数fact(n)计算n的阶乘,可以调用pow()函数求幂。 x2x3x4
s?x????? 2!3!4! 解答:
#include
int i;
double item, s, x; double fact(int n);
scanf(\s = 0; item = x; i = 1;
while(fabs(item) >= 0.00001){ item = pow(x,i)/fact(i); s = s+ item; i++; }
printf(\return 0;
第33/106页
}
double fact(int n) {
int i;
double result=1; for(i=1;i<=n;i++)
result=result*i;
return result; } 3.输入一个整数,求它的各位数字之和及位数。例如234的各位数字之和是9,位数是3。 解答: #include
int count, sum; long in;
printf(\scanf(\if(in<0) in=-in; count=0; sum=0;
while(in!=0){
sum = sum + in; in=in/10; count++; }
printf(\return 0; }
4.输入一个正整数n,输出 2/1+3/2+5/3+8/5 +?的前n项之和,保留2位小数。(该序列从第二项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子) 解答:
#include
int i,n,a,b,t; float s;
printf(\scanf(\a=2;b=1;s=0;
for(i=1;i<=n;i++){ s=s+a*1.0/b; t=a;