第六章循环结构程序设计 学习目的与要求:1.领会程序设计中构成循环的三要素 2.掌握for、 while、do- while语句的用法 3.了解 break、 continue在循环语句中的作用 重点:for、 while、 do-while语句的用法 第1讲 知识归纳 1. while语句 whi1e(条件) 句 //如果不加花括弧{},whi1e语句的范围只有一个语句 (1)循环三要素:循环变量初值、循环条件、循环趋于结束语句。 (2)在循环体中应有使循环趋向于结束的语句。 2.Do… while语句 语句 /如果不加花括弧{}, do. while语句的范围只有一个语句 }whie(条件); (1)循环三要素:循环变量初值、循环条件、循环趋于结束语句。 (2)注意:do…whle循环与 while循环的区别 基础练习(A) 选择题 1.C语言中 while和do- while循环的主要区别是( A)do- while的循环体至少无条件执行一次 B) while的循环控制条件比do- while的循环控制条件严格 C)do- while允许从外部转到循环体内 D)do- while的循环体不能是复合语句 以下描述中正确的是( A)由于do- while循环中循环体语句只能是一条可执行语句,所以循环体内不能使 用复合语句 B)do- while循环由do开始,用 while结束,在 while(表达式)后面不能写分号
第六章 循环结构程序设计 学习目的与要求:1. 领会程序设计中构成循环的三要素。 2. 掌握 for、while、do-while 语句的用法。 3. 了解 break、continue 在循环语句中的作用。 重点:for、while、do-while 语句的用法。 第 1 讲 知识归纳 1. while 语句 while (条件) { 语句 // 如果不加花括弧{},while 语句的范围只有一个语句; } (1) 循环三要素:循环变量初值、循环条件、循环趋于结束语句。 (2) 在循环体中应有使循环趋向于结束的语句。 2. Do…while 语句 do { 语句 // 如果不加花括弧{},do…while 语句的范围只有一个语句; } while ( 条件) ; (1) 循环三要素:循环变量初值、循环条件、循环趋于结束语句。 (2) 注意:do…while 循环与 while 循环的区别。 基础练习(A) 一、选择题 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(表达式)后面不能写分号
156 C语言程序设计上机指导与同步训练 C)在do- while循环体中,一定要有能使 while后面表达式的值变为零(“假”)的操 作 D)do- while循环中,根据情况可以省略whie 3.设有程序段 int k=l0 while(k)k=k-1i 则下面描述中正确的是() A) while循环执行10次 B)循环是无限循环 C)循环体语句一次也不执行D)循环体语句执行一次 4.下列循环语句中有语法错误的是( A)while(x=y)5: B)while(0 C)do 2: while(xb); D)do x++ while(x=10) 5.已知inti=1;执行语句whle(i++<4);后,变量i的值为( A)3 D)6 6.语句 while(E)中的表达式!E等价于( A)E= B)E!=1 C)E!= D)E=1 7.下面程序段的运行结果是 while(a<b<c) t=a; a=b; b=t; c--i printf(”暑d,旨d,d”,a,b,c) A)l,2,0 B)2,1,0 C)1,2 8.下面程序的运行结果是( #include <stdio. h> while(num<=2) num++i printf( d\n",num) A)1 B)1 9.以下能正确计算1×2×3×…×10的程序段是( A)do B}do{i=1;s=0; s=s"1 s=s"1
·156· C 语言程序设计上机指导与同步训练 ·156· C) 在 do-while 循环体中,一定要有能使 while 后面表达式的值变为零(“假”)的操 作 D) do-while 循环中,根据情况可以省略 while 3. 设有程序段 int k=10; while(k) k=k-1; 则下面描述中正确的是( )。 A) while 循环执行 10 次 B) 循环是无限循环 C) 循环体语句一次也不执行 D) 循环体语句执行一次 4. 下列循环语句中有语法错误的是( )。 A) while(x=y) 5; B) while(0) ; C) do 2;while(x==b); D) do x++ while(x==10); 5. 已知 int i=1; 执行语句 while (i++<4) ;后,变量 i 的值为( )。 A) 3 B) 4 C) 5 D) 6 6. 语句 while(!E);中的表达式!E 等价于( ) 。 A) E==0 B) E!=1 C) E!=0 D) E==1 7. 下面程序段的运行结果是( )。 a=1; b=2; c=2; while(a<b<c) { t=a; a=b; b=t; c--; } printf(“%d,%d,%d”,a,b,c); A)1,2,0 B)2,1,0 C) 1,2,1 D) 2,1,1 8. 下面程序的运行结果是( )。 #include <stdio.h> main() { int num=0; while(num<=2) { num++; printf(“%d\n”,num); } } A) 1 B) 1 C) 1 D) 1 2 2 2 3 3 9. 以下能正确计算 1×2×3×…×10 的程序段是( )。 A) do{i=1; s=1; B} do{i=1; s=0; s=s*i; s=s*i; i++; i++; }while(i<=10); }while(i<=10); C) i=1; s=1; D) i=1; s=0;
第二部分¢语言程序设计同步训练 do(s=s'i 0.下面程序的运行结果是 #include <stdio. h> main() do y--i while(--y) printf ("gd\n",y--) A}-1 B)I C)8 D)O 1l.已知nti=1j=0:执行下面语句后j的值是( switch(i) I case 1: i+=l: j++;break case 2: 1+=2: 3++: break: default: i--:3++: break A)1 D)死循环 2.若运行以下程序时,从键盘输入2473<回车>,则下面程序的运行结果是()。 #include <stdio. h> int c while((c=getchar()I='\n case o ase 1: putchar(c+4) case 2: putchar(c+4)i break; case 3: putchar(c+3) default: putchar(c+2)i break printf(n”); A)668977 B)668966 C)66778777 D)6688766 填空题 1.执行下面程序段后,k值是 do k**n310; n/=10;]while(n)
第二部分 C 语言程序设计同步训练 ·157· ·157· do{s=s*i; do{s=s*i; i++; i++; }while(i<=10); }while(i<=10); 10. 下面程序的运行结果是( )。 #include <stdio.h> main() { int y=10; do{ y--; }while(--y); printf(“%d\n”,y--); } A)-1 B)1 C)8 D)0 11. 已知 int i=1,j=0;执行下面语句后 j 的值是( )。 while(i) switch(i) { case 1: i+=1;j++;break; case 2: i+=2;j++;break; case 3: i+=3;j++;break; default: i--;j++;break; } A) 1 B) 2 C) 3 D) 死循环 12. 若运行以下程序时,从键盘输入 2473<回车>,则下面程序的运行结果是( )。 #include <stdio.h> main() { int c; while((c=getchar())!=‘\n’) switch(c-‘2’) { case 0: case 1: putchar(c+4); case 2: putchar(c+4); break; case 3: putchar(c+3); default: putchar(c+2); break; } printf(“\n”); } A)668977 B)668966 C)66778777 D)6688766 一、填空题 1. 执行下面程序段后,k 值是 。 k=1; n=263; do{ k*=n%10; n/=10; }while(n);
15 C语言程序设计上机指导与同步训练 2.下面程序的运行结果是 #include <stdio. h main( int a, s, n, count while(count<=7)I printf("s=备d",s) 3.下面程序段的运行结果是 do{ printf(”*”);x--;}whi1e(!x==0) 4.当运行以下程序时,从键盘键入 Chinaz#<CR>(<CR>代表回车),则下面程序的运行 结果是 #include <stdio. h> int vl=0, v2=0: char ch: while((ch=getchar())1='#') default: yl++ v2++ printf(”告d,号d\r 二、编程题 1.编程求1*3*5*7*9的值。 2.编写程序计算下列算式的值 直到某一项A<=000001时为止。输出最后C的值。 3.从键盘输入的字符中统计数字字符的个数,用换行符结束循环 能力提高(B) 选择填空题 1.下面程序的功能是将从键盘输入的一组字符中统计出大写字母的个数m和小写字 母的个数n,并输出m、n中的较大者,请选择填空。 #include <stdio. h> main o
·158· C 语言程序设计上机指导与同步训练 ·158· 2. 下面程序的运行结果是 。 #include <stdio.h> main() { int a,s,n,count; a=2; s=0; n=1; count=1; while(count<=7) { n=n*a; s=s+n; ++count; } printf(“s=%d”,s); } 3. 下面程序段的运行结果是 。 x=2; do{ printf(“*”); x--; }while(!x==0); 4. 当运行以下程序时,从键盘键入 China#<CR>(<CR>代表回车),则下面程序的运行 结果是 。 #include <stdio.h> main() { int v1=0,v2=0; char ch; while((ch=getchar())!=‘#’) switch(ch) { case ‘a’: case ‘h’: default: v1++; case ‘o’: v2++; } printf(“%d,%d\n”,v1,v2); } 二、编程题 1. 编程求 1*3*5*7*9 的值。 2. 编写程序计算下列算式的值。 1234 1111 C=1+ (x xxxx ++++ >1) 直到某一项 A<=0.000001 时为止。输出最后C的值。 3. 从键盘输入的字符中统计数字字符的个数,用换行符结束循环。 能力提高(B) 一、选择填空题 1. 下面程序的功能是将从键盘输入的一组字符中统计出大写字母的个数 m 和小写字 母的个数 n,并输出 m、n 中的较大者,请选择填空。 #include <stdio.h> main() {
第二部分¢语言程序设计同步训练 159 while( )!=‘\n’) if(c>=“A’&&c<=‘z’)m++; printf(wdln”,m<n? (1)A)c=getchar B) getchar C)scanf(%c", c) (2)A)nm B)m:n C)m:m D)n: n 2.下面程序的功能是在输入的一批正整数中求出最大者,输入0结束循环,请选择 #include <stdio. h> int a, max=0 while( scanf("a", &a) printf("gd", max) A)a=0 B) 3.下面程序的功能是计算正整数2345的各位数字平方和,请选择填空。 #include <stdio. h> int n, sum=0 suma sum+ (1)A)n%10 B)(n%10)°(n%10)C)n/10 D)(n/10)°(n/10) (2)A)n/1000B)n/100 C)n/10 D)n%10 、读懂程序并按照程序的功能将程序补充完整 1.下面程序的功能是用“辗转想除法”求两个正整数的最大公约数,请填空。 #include <stdio. h> main()
第二部分 C 语言程序设计同步训练 ·159· ·159· int m=0,n=0; char c; while(( )!=‘\n’) { if(c>=‘A’&&c<=‘Z’) m++; if(c>=‘a’&&c<=‘z’) n++; } printf(“%d\n”,m<n? ); } (1) A) c=getchar() B) getchar() C) scanf(“%c”,c) (2) A) n:m B) m:n C) m:m D) n:n 2. 下面程序的功能是在输入的一批正整数中求出最大者,输入 0 结束循环,请选择 填空。 #include <stdio.h> main() { int a,max=0; scanf(“%d”,&a); while( ) { if(max<a) max=a; scanf(“%d”,&a); } printf(“%d”,max); } A) a==0 B) a C) !a==1 D) !a 3. 下面程序的功能是计算正整数 2345 的各位数字平方和,请选择填空。 #include <stdio.h> main() { int n,sum=0; n=2345; do{ sum=sum+ ; n= ; }while(n); printf(“sum=%d”,sum); } (1) A) n%10 B) (n%10)*(n%10) C) n/10 D) (n/10)*(n/10) (2) A) n/1000 B) n/100 C) n/10 D) n%10 二、读懂程序并按照程序的功能将程序补充完整 1. 下面程序的功能是用“辗转想除法”求两个正整数的最大公约数,请填空。 #include <stdio.h> main() {