j){printf("%d\n",s);break;}s+=i;}}A.4B.5C.6" />
第五章循环结构
一、单项选择题(本大题共20小题,每小题1分,共20分)
1.执行下面程序段后,输出字符B的个数是()
x=0;
while(x<=5)
{printf("B");
x+=2;}
A.0个B.3个C.5个D.6个
2.在下述程序中,for循环执行的次数是()
main( )
{int i =0,j=10,k=2,s=0;
for(; ;)
{i+=k;
if(i>j)
{printf("%d\n",s);
break;}
s+=i;
}
}
A.4 B.5 C.6 D.7
3.执行下面程序段后,输出字符A的个数是()
for(i=0;i<=5;i+=2)
printf(“A”);
A.0个B.3个C.5个D.6个
4.执行while(表达式)循环的条件是()
A.当表达式的值为0时B.仅当表达式的值为1时
C.当表达式的值非0时D.当表达式的值不为1时
5.下列程序段输出的结果是()
for(i=1;i<3;i+ +)
for(j=1;j<3;j+ +)
printf("%d",i+j);
A.2 3 3 4 B.2 3 4
C.2 3 D.2
3 4 3 4
6.对do语句while(表达式);结构的循环,下列说法正确的是()A.当表达式的值为非零时不执行循环体
B.循环体至少被执行一次
C.当表达式的值为零时循环体一次也不执行
D.循环体仅被执行一次
7.只能在循环语句中用于结束本轮循环的语句是()
A.break; B.continue; C.goto D.if
10.下列程序段的输出结果是()
i=1;
while(i<3)
{j=1;
while(j<=i)
{printf(“%d”,i+j);
j++;}
i++;
printf(“\n”);
}
A. 2 3 3 4
B. 2 3 4
C. 2 3
D. 2
3 4 3 4
8.下列程序段的输出结果是()
a=100;
do
a=a+l;
while(a>120);
printf(“%d”,a);
A.100
B.101
C.120
D.121
9.关于break和continue语句,下列说法正确的是()
A.在循环体中可以用break语句结束本次循环
B.在循环体中可以用continue语句结束本次循环
C.break语句仅能使用在switch结构中
D.可以使用continue语句跳出switch结构
10.对于for(表达式l;表达式2;表达式3)语句;控制循环结束的表达式是()
A.表达式1
B.表达式2
C.表达式3
D.表达式l和表达式3
11.下列语句中不能
..实现循环结构的语句是()
A.if语句
B.while语句
C.do—while语句
D.for语句
12.以下程序的输出结果是()
main()
{ int y=10;
while(y——);
printf("y=%d",y);
}
A.y=-1
B.y=0
C.y=1
D.y=随机值
13.关于break语句,以下说法不正确
...的是 ( )
A.它可以用于循环语句中
B.它可以用于switch语句中
C.可以从最内层循环结构中直接跳出最外层循环结构
D.可以从当前switch结构中跳出
14.执行下面程序段后,a的值是( )
int a=100;
do
{a++;}while(a>120);
A.100
B.101
C.120
D.121
15.在下列选项中,没有构成死循环的程序段是()
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;二、多项选择题(本大题共5小题,每小题2分,共10分)
1.下列循环将会产生死循环的有()
A.while(1); B.do{ }while(0);
C.do{ }while(1); D.for(k=1;k>―10;k+ +); E.for(k=1;k=10;k+ +,k――);
2.下列关于break、goto、continue语句的说法中正确的是()
A. break语句能够用于循环语句中
B. break语句不能用于switch语句中
C. goto语句可以用于直接从多层循环中退出
D. continue语句可用于跳出循环体
E. continue语句不能用于switch语句中
3.下面能执行循环结构的语句有()
A.if语句
B.while语句
C.do—while语句
D.for语句
E.switch语句
三、简答题(本大题共4小题,每小题4分,共16分)
1.用while循环结构完成下面程序段的功能。
s=0
for(i=1;i<=10;i++)
s+=i;
2.写出do-while语句的一般形式及其执行过程。
3.写出for语句的一般形式并分析循环体被执行的条件。
4.简述break语句和continue语句在循环体中的功能。
5.写出for语句的一般形式及执行过程。
6.设有下面程序:
void main(void)
{int x;
x=1;
while(x<20){
printf("x=%d\n",x);
x+=2; }
}
请把程序改写为for结构。
7.下面是求1到100之和的程序
main( )
{int i,sum=0;
for(i=1;i<=100;i++)
sum+=i;
printf("%d\n",sum);
}
问如何修改循环体,使其仅求前10个数之和。
四、阅读分析题(本大题共6小题,每小题5分,共30分)
1.阅读下面程序:
void main(void)
{int s=0,n=0,x;
label: scanf("%d",&x);
if(x>0){
s+=x;
n++;
printf("s=%d,n=%d,even=%f\n",s,n,1.0,*s/n); } if(x!=0)
goto label;
else
printf("good bye!");
}
当依次输入12 -3 -6 5 13 0↙时,写出程序的运行结果。2.阅读下面程序,写出运行结果。
main()
{int x,sum=0;
loop1:
scanf(“%d”,&x);
if(x!=8)
{if(x%2= =0)
{sum+=x;
printf(“sum =%d\n”,sum);
}
goto loopl;
}
sum-=x;
printf( “sum=%d\n”,sum);
}
当程序执行时输入数据1 2 3 4 5 6 7 8 ↙,写出程序运行结果。3.阅读下面程序,写出运行结果。
main()
{int a[3][3],i,j;
for (i=0;i<3,i+ +)
for(j=0,j<3;j+ +)
a[i][j]=i+j;
for(i=0;i<3;i++)
{for(j=0;j<=i;j+ +)
printf(“%2d”,a[i][j]);
printf(“\n”);
}
}
3.请阅读分析下列程序,然后写出程序的循环次数和运行结果。
main(void)
{int i;
for(i=1; i<6; i+ +)
{if(i%2)
{printf("@");continue;}
printf("*");}
printf("\n");
}
4.阅读分析下面程序后,写出程序的运行结果。
#include “stdio.h”
main( )
{int n,m;
for(n=1;n<=5;n++)
{for(m=1;m<=4;m++)
printf("%4d",m n);
printf("\n");
}
}
5.下列程序的功能和输出结果是什么?
void main(void)
{int k=0,total=0;
while(k<=100){
total+=k;
k++;}
print("total=%d\n",total);
}
6.分析下列两个程序的区别,并写出它们的运行结果。
void main(void) void main(void)
{ {
int y=0,s,k; int y=0,s,k;
for(k=0;k<6;k++) for(k=0;k<6;k++){
s=k*k; s=k*k;
y+=s; y+=s;
}
printf("y=%d\n",y); printf("y=%d\n",y);
} }
7.写出下面程序的功能及运行结果。
main()
{
int n=1,sum=0;
do{
sum=sum+n;
n+=2;
}while(n<100);
printf("sum=%d\n",sum);
}
8.阅读下列程序,当依次输入11,l2,l3,14,16这5个数时,请写出程序的运行结果。
void main(void)
{int x ,i ,s=O ;
for(i=O ;i<5;i++)
{scanf("%d",&x);
if(x%2)continue ;
printf("%d\t",x);
s+=x;
}
printf("\n");
printf("s=%d\n",s);
}
9.阅读下列程序并写出运行结果。
main( )
{int s=0,k=1,i ;
for(i=0;i<10;i++)
{k=k+i ;
s+=k ;
if(i>3) break ;
s+=2*k :
printf("s=%d\n",s);}
printf("s=%d\n",s);
}
五、程序设计题(本大题共2小题,每小题12分,共24分)
1.用以下近似公式编一个求π的近似值的程序。
1
21)1(715131141
--++-+-=-n n π
,其中n 的值由键盘输入。 2.从键盘上输入一个正整数n(n ≤10),求n 的阶乘并输出结果。
3.从键盘上输入20个整数,求其中正数的累加和并输出结果。
4.从键盘输入10个整数,编程求其中大于3且小于100的数的平均值并输出结果。
5.编程求20至100之间素数的累加和并输出该累加和。
6.从键盘上输入30个整数,输出其中能被3整除的数,并求出所有能被3整除的数之和。
第五章循环结构程序设计 1.用for循环语句编程输出1~20之间的所有整数,两数之间以空格分隔。 #include
printf(" "); } } 4.输出100~200之间所有能被3和7整除的数(每行输出4个数)。#include
int i,j=0; for(i=1;i<=1000;i++) { if((i%3==2)&&(i%5==3)&&(i%7==2)) { j++; printf("%12d",i); if(j%5==0) printf("\n"); } } } 6.先读入一个正整数n,然后计算并显示前n个偶数的和。例如n为5,则求2+4+6+8+10的值,即sum=30。 #include
第5章循环结构程序设计作业参考答案 班级学号姓名 【第140页】 5-1、请画出课本里5.6中给出的3个程序段的传统流程图。 (1)程序1: #include
for (j=1;j<=5;j++,n++) { if(n%5==0)printf("\n"); //控制在输出5个数据后换行 if (i==3 && j==1) continue; //遇到第3行第1列,提前结束执行本次内循环体 printf("%d\t",i*j); } printf("\n"); return 0; } (1)程序1流程图(2)程序2流程图(3)程序3流程图 5-3、输入两个正整数m和n,求其最大公约数和最小公倍数。 #include
第五章循环结构 一、选择题 1.C语言中while和do_while循环的主要区别是( )。 A.do_while的循环体至少无条件执行一次 B.while的循环控制条件比do_while的循环控制条件严格 C.do_while允许从外部转到循环体内 D.do_while的循环体不能是复合语句 2.以下描述中正确的是( )。 A.由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句 B.do-while循环由do开始,用while结束,在while(表达式)后面不能写分号 C.在do-while循环体中,是先执行一次循环,再进行判断 D.do-while循环中,根据情况可以省略while 3.语句while (!E); 括号中的表达式!E等价于( ) 。 A.E==0 B.E!=1 C.E!=0 D.E==1 4.以下程序的功能是计算:s= 1+1/2+1/3+……+1/10 main() { int n; float s s=1.0; for(n=10;n>1;n--) s=s+1/n; printf("%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); 5.下面程序段的运行结果是( )。 a=1;b=2;c=2; while(a第5章循环结构程序设计
第5章循环结构程序设计 通过本章实验作业应达目标 1.熟悉while、for、do_while、break、continue语句的作用与使用规范,能使用while语句、for 语句、do_while语句实现循环结构; 2.掌握循环结构和选择结构之间嵌套、多重循环间嵌套的设计方法。 3.进行算法设计训练,能综合所学控制结构语句解决一般问题。 本章必须上交作业 程序5_1.c、5_2.c、5_3.c、5_5.c、5_6.c、5_7.c、5_8.c、5_11.c上传至http://121.251.227.27:8080/c 1.循环设计 循环是在循环条件为真时重复执行一组循环体语句的控制结构,是计算机解题的一个基本结构。循环控制有两种基本方法:计数法和标志法。 (1)计数器控制的循环 事先准确地知道循环次数,因此设计一个循环控制变量,由变量值来控制循环次数。每循环一次,循环变量的值会递增(增值通常为1或-1),当其值达到终值时结束循环。 (2)标志控制的循环 事先不知道准确的循环次数,由某一目标值标记循环的结束。如,例3-23中以变量sum的值达到标记值1000作为循环的结束,例3-24中就是以键盘输入一个负数为标记结束循环。 2.基本算法 程序设计的首要工作是算法设计,离开了算法也就没有了程序。算法,是指完成某一项工作而采取的方法和步骤,具体到程序设计,是对解题过程的准确而完整的描述,并用一种程序设计语言的来实现。 循环主要用来解决程序设计中两类基本的算法:穷举和迭代。 1. 穷举算法 穷举的基本思想是对问题的所有可能状态一一测试,直到找到解或将全部可能状态都测试过为止。穷举是一种重复型算法,其核心是设计循环,在循环体中依次测试。 例1 输入两个正整数x和y,求其最大公约数。 #include 第三章循环结构 3.1 选择题 1.以下程序的输出结果是( )。 main() { int n=4; while (n--) printf(〞%d〞,--n); } A.20 B.31 C.321 D.210 2.以下程序的输出结果是( )。 main() {int x=10,y=10,i; for(i=0;x>8;y=++i) printf("%d%d",x--,y); } A.10192 B.9876 C.10990 D.101091 3.当执行以下程序段时。 x=-1; do {x=x*x;} while (!x); A.循环体将执行一次 B.循环体将执行两次 C.循环体将执行无数多次 D.系统将提示有语法错误4.执行以下程序后输出的结果是()。 main() { int y=10; do{y--;}while(--y); printf("%d\n",y--);} A.-1 B.1 C.8 D.0 5.下面程序的输出结果是()。 main() { int x=3,y=6,a=0; while (x++!=(y-=1)) {a+=1; if (y A.x=4,y=4,a=1 B.x=5,y=5,a=1 C.x=5,y=4,a=3 D.x=5,y=4,a=1 6.若i,j已定义为int类型,则以下程序段中内循环的总的执行次数是()。 for (i=5;i;i--) for (j=0;j<4;j++) {…} A.20 B.24 C.25 D.30 7.请读程序: #include 第五章循环结构 5.1 选择题 1.以下程序的输出结果是( )。 main() { int n=4; while (n--) printf(〞%d〞,--n); } A.20 B.31 C.321 D.210 2.以下程序的输出结果是( )。 main() {int x=10,y=10,i; for(i=0;x>8;y=++i) printf("%d%d",x--,y); } A.10192 B.9876 C.10990 D.101091 3.当执行以下程序段时。 x=-1; do {x=x*x;} while (!x); A.循环体将执行一次 B.循环体将执行两次 C.循环体将执行无数多次 D.系统将提示有语法错误4.执行以下程序后输出的结果是()。 main() { int y=10; do{y--;}while(--y); printf("%d\n",y--);} A.-1 B.1 C.8 D.0 5.下面程序的输出结果是()。 main() { int x=3,y=6,a=0; while (x++!=(y-=1)) {a+=1; if (y A.x=4,y=4,a=1 B.x=5,y=5,a=1 C.x=5,y=4,a=3 D.x=5,y=4,a=1 6.若i,j已定义为int类型,则以下程序段中内循环的总的执行次数是()。 for (i=5;i;i--) for (j=0;j<4;j++) {…} A.20 B.24 C.25 D.30 7.请读程序: #include 第五章循环结构 一、单项选择题(本大题共20小题,每小题1分,共20分) 1.执行下面程序段后,输出字符B的个数是() x=0; while(x<=5) {printf("B"); x+=2;} A.0个B.3个C.5个D.6个 2.在下述程序中,for循环执行的次数是() main( ) {int i =0,j=10,k=2,s=0; for(; ;) {i+=k; if(i>j) {printf("%d\n",s); break;} s+=i; } } A.4 B.5 C.6 D.7 3.执行下面程序段后,输出字符A的个数是() for(i=0;i<=5;i+=2) printf(“A”); A.0个B.3个C.5个D.6个 4.执行while(表达式)循环的条件是() A.当表达式的值为0时B.仅当表达式的值为1时 C.当表达式的值非0时D.当表达式的值不为1时 5.下列程序段输出的结果是() for(i=1;i<3;i+ +) for(j=1;j<3;j+ +) printf("%d",i+j); A.2 3 3 4 B.2 3 4 C.2 3 D.2 3 4 3 4 6.对do语句while(表达式);结构的循环,下列说法正确的是()A.当表达式的值为非零时不执行循环体 B.循环体至少被执行一次 C.当表达式的值为零时循环体一次也不执行 D.循环体仅被执行一次 7.只能在循环语句中用于结束本轮循环的语句是() A.break; B.continue; C.goto D.if 10.下列程序段的输出结果是() i=1; while(i<3) {j=1; while(j<=i) {printf(“%d”,i+j); j++;} i++; printf(“\n”); } A. 2 3 3 4 B. 2 3 4 C. 2 3 D. 2 3 4 3 4 8.下列程序段的输出结果是() a=100; do a=a+l; while(a>120); printf(“%d”,a); A.100 B.101 C.120 D.121 9.关于break和continue语句,下列说法正确的是() A.在循环体中可以用break语句结束本次循环 B.在循环体中可以用continue语句结束本次循环 C.break语句仅能使用在switch结构中 D.可以使用continue语句跳出switch结构 10.对于for(表达式l;表达式2;表达式3)语句;控制循环结束的表达式是() A.表达式1 B.表达式2 C.表达式3 D.表达式l和表达式3 11.下列语句中不能 ..实现循环结构的语句是() A.if语句 B.while语句 C.do—while语句 D.for语句 12.以下程序的输出结果是() main()第5章 循环结构 习题
第五章 循环结构
第5章 循环结构