第六章循环结构程序设计 学习目的与要求: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++ 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++ 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 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 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 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 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 (代表回车),则下面程序的运行 结果是 #include 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 main o
·158· C 语言程序设计上机指导与同步训练 ·158· 2. 下面程序的运行结果是 。 #include main() { int a,s,n,count; a=2; s=0; n=1; count=1; while(count(代表回车),则下面程序的运行 结果是 。 #include 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 main() {
第二部分¢语言程序设计同步训练 159 while( )!=‘\n’) if(c>=“A’&&c int a, max=0 while( scanf("a", &a) printf("gd", max) A)a=0 B) 3.下面程序的功能是计算正整数2345的各位数字平方和,请选择填空。 #include 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 main()
第二部分 C 语言程序设计同步训练 ·159· ·159· int m=0,n=0; char c; while(( )!=‘\n’) { if(c>=‘A’&&c=‘a’&&c main() { int a,max=0; scanf(“%d”,&a); while( ) { if(max 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 main() {
160 C语言程序设计上机指导与同步训练 int r, m,n scanf(w告dd”,m,&n); man: nr: r printf(3d\n”,n) 2.下面程序的功能是用do- while语句求1至1000之间满足“用3除余2:用5除余3 用7除余2”的数,且一行只打印5个数,请填空 #include main() int i=l,j=0; if( printf(”4d”,i); j=j+1; ) printf(“n") }whi1e(i main( int a, d. sum a=2: d=3, sum=( sum+=a ) printf("sdn”,sum); While(sum<200 三、编程题 1.从键盘输入任意的字符,按下列规则进行分类计数。 第一类v0y,"1,"2,3,"4,"5,6,"7","8,9 第三类其他字符 当输入字符时先计数,然后停止接收输入,打印计数的结果 2.求解爱因斯坦数学题。有一条长阶梯,若每步跨2阶,则最后剩余1阶,若每步跨 3阶,则最后剩2阶,若每步跨5阶,则最后剩4阶,若每步跨6阶则最后剩5阶,若每
·160· C 语言程序设计上机指导与同步训练 ·160· int r,m,n; scanf(“%d %d”,&m,&n); if(m main() { int i=1,j=0; do{ if( ) { printf(“%4d”,i); j=j+1; if( ) printf(“\n”); } i=i+1; }while(i main() { int a,d,sum; a=2; d=3; sum=0; do{ sum+=a; ; if( ) printf(“%d\n”,sum); }while(sum<200); } 三、编程题 1. 从键盘输入任意的字符,按下列规则进行分类计数。 第一类 '0','1','2','3','4','5','6','7','8','9' 第二类 '+','-','*','/','%','=' 第三类 其他字符 当输入字符'\'时先计数,然后停止接收输入,打印计数的结果。 2. 求解爱因斯坦数学题。有一条长阶梯,若每步跨 2 阶,则最后剩余 1 阶,若每步跨 3 阶,则最后剩 2 阶,若每步跨 5 阶,则最后剩 4 阶,若每步跨 6 阶则最后剩 5 阶,若每
第二部分¢语言程序设计同步训练 161 步跨7阶,最后才正好一阶不剩。请问,这条阶梯共有多少阶? 分析:据题意,阶梯数满足下面一组同余式 x mod 2==1 x mod 6==5 x mod 7==0 3.从键盘上输入若干学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结 束输入。 第2讲 知识归纳 f。or语句 for循环的一般形式:for(表达式1,表达式2;表达式3) 语句} (1)for语句中的三个表达式,对应循环中的三要素: 表达式1——循环变量的初值 表达式2——循环结束的条件 表达式3——循环趋于结束语句。 (2)for语句中的三个表达式,可以变换位置,但功能不变 如:表达式1; for(;表达式2,表达式3) 语句} for(表达式1;表达式2,) 表达式3 语句} for(表达式1;;表达式3) if!(表达式2) break; 语句} 表达式1 for(;表达式2,) 表达式3 语句}
第二部分 C 语言程序设计同步训练 ·161· ·161· 步跨 7 阶,最后才正好一阶不剩。请问,这条阶梯共有多少阶? 分析:据题意,阶梯数满足下面一组同余式 x mod 2==1 x mod 3==2 x mod 5==4 x mod 6==5 x mod 7==0 3. 从键盘上输入若干学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结 束输入。 第 2 讲 知识归纳 1. for 语句 for 循环的一般形式: for ( 表达式 1; 表达式 2; 表达式 3 ) { 语句 } (1) for 语句中的三个表达式,对应循环中的三要素: 表达式 1——循环变量的初值; 表达式 2——循环结束的条件; 表达式 3——循环趋于结束语句。 (2) for 语句中的三个表达式,可以变换位置,但功能不变: 如:表达式 1; for ( ; 表达式 2; 表达式 3 ) { 语句 } for ( 表达式 1; 表达式 2; ) { 表达式 3 ; 语句 } for ( 表达式 1; ; 表达式 3 ) { if ! (表达式 2) break ; 语句 } 表达式 1 ; for ( ; 表达式 2; ) { 表达式 3 ; 语句 }
C语言程序设计上机指导与同步训练 2.循环的嵌套 种循环可以互相嵌套 3. break和 continue (1) break语句作用:强行终止循环,转到循环体下面语句去执行。 (2) continue语句作用:结束本次循环,再去判断条件,根据条件决定循环是否继续 执行 二者区别: continue只是结束本次循环,而不是终止整个循环的执行。 break则是结束整个循环过程,不再判断执行循环的条件是否成立。 另外: continue只能用于循环体中,而 break即可用于循环体中,还可用于 switch语 句中。 基础训练(A 、选择题 1.下面有关for循环的正确描述是() A)for循环只能用于循环次数已经确定的情况 B)for循环是先执行循环体语句,后判断表达式 C)在for循环中,不能用 break语句跳出循环体 D)for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来 2.对for(表达式1;表达式3)可理解为()。 A)for(表达式1,0,表达式3) B)for(表达式1;1;表达式3) C)for(表达式1;表达式1;表达式3) D)for(表达式1;表达式3表达式3) 3.下列说法中正确的是() A) break用在 witch语句中,而 continue用在循环语句中 B) break用在循环语句中,而 continue用在 switch语句中 C) break能结束循环,而 continue只能结束本次循环。 D) continue能结束循环,而 break只能结束本次循环 以下正确的描述是() A) continue语句的作用是结束整个循环的执行 B)只能在循环体内和 switch语句体内使用 break语句 C)在循环体内使用 break语句或 continue语句的作用相同 D)从多层循环嵌套中退出时,只能使用goto语句 5.若i为整型变量,则以下循环执行次数是()。 for(i-2; i==0, printf( -%d", i--; A)无限次 B)0次 1次 D)2次 6.以下for循环的执行次数是() for(x=0,y=0:(y=123)&&(x<4)x++)
·162· C 语言程序设计上机指导与同步训练 ·162· 2. 循环的嵌套 三种循环可以互相嵌套。 3. break 和continue (1) break 语句作用:强行终止循环,转到循环体下面语句去执行。 (2) continue 语句作用:结束本次循环,再去判断条件,根据条件决定循环是否继续 执行。 二者区别:continue 只是结束本次循环,而不是终止整个循环的执行。 break 则是结束整个循环过程,不再判断执行循环的条件是否成立。 另外:continue 只能用于循环体中,而 break 即可用于循环体中,还可用于 switch 语 句中。 基础训练(A) 一、选择题 1. 下面有关 for 循环的正确描述是( )。 A) for 循环只能用于循环次数已经确定的情况 B) for 循环是先执行循环体语句,后判断表达式 C) 在 for 循环中,不能用 break 语句跳出循环体 D) for 循环的循环体语句中,可以包含多条语句,但必须用花括号括起来 2. 对 for(表达式 1;;表达式 3)可理解为( )。 A) for(表达式 1;0;表达式 3) B) for(表达式 1;1;表达式 3) C) for(表达式 1; 表达式 1;表达式 3) D) for(表达式 1; 表达式 3;表达式 3) 3. 下列说法中正确的是( )。 A) break 用在 switch 语句中,而 continue 用在循环语句中。 B) break 用在循环语句中,而 continue 用在 switch 语句中。 C) break 能结束循环,而 continue 只能结束本次循环。 D) continue 能结束循环,而 break 只能结束本次循环。 4. 以下正确的描述是( )。 A) continue 语句的作用是结束整个循环的执行 B) 只能在循环体内和 switch 语句体内使用 break 语句 C) 在循环体内使用 break 语句或 continue 语句的作用相同 D) 从多层循环嵌套中退出时,只能使用 goto 语句 5. 若 i 为整型变量,则以下循环执行次数是( )。 for(i=2;i==0;) printf(“%d”,i--); A) 无限次 B) 0 次 C) 1 次 D) 2 次 6. 以下 for 循环的执行次数是( )。 for(x=0,y=0;(y=123)&&(x<4);x++)
第二部分¢语言程序设计同步训练 163· A)是无限循环B)循环次数不定C)执行4次D)执行3次 7.以下不是无限循环的语句为() A)for(y=0,x=1;x>++y;x=++)i=x 8.执行语句fo(=1;++=0时什么也不输出 C) printf函数永远也不执行 D)最多允许输出100个非负整数 10.下面程序段()。 if(ly)[ printf("x"); continue;] printf("#”); while(l A)将输出# B)将输出#* C)是死循环 D)含有不合法的控制表达式 、写出下列程序的运行结果 #includ maln for(i=1;i<=5;i++) f(i2) printf(”*”) else continue i printf(”#"); printf("s\n")
第二部分 C 语言程序设计同步训练 ·163· ·163· A) 是无限循环 B)循环次数不定 C) 执行 4 次 D) 执行 3 次 7. 以下不是无限循环的语句为( )。 A) for(y=0,x=1;x>++y;x=i++) i=x B) for(;;x++=i); C) while(1) { x++; } D) for(i=10;;i--) sum+=i; 8. 执行语句 for(i=1;i++=0 时什么也不输出 C) printf 函数永远也不执行 D) 最多允许输出 100 个非负整数 10. 下面程序段( )。 x=3; do{ y=x--; if(!y) { printf(“x”); continue; } printf(“#”); }while(1 main() { int i; for(i=1;i<=5;i++) { if(i%2) printf(“*”); else continue; printf(“#”); } printf(“$\n”); }
164 C语言程序设计上机指导与同步训练 #include nt i, j for(i=4;i>=1;i--) (3=1; j int i,k=0 while(k int i,3,x=0 for(i=0;i<2;i++)
·164· C 语言程序设计上机指导与同步训练 ·164· 2. #include main() { int i,j; for(i=4;i>=1;i--) { for(j=1;j main() { int i,k=0; for(i=1;;i++) { k++; while(k main() { int i,j,x=0; for(i=0;i<2;i++) { x++; for(j=0;j<=3;j++) { if(j%2) continue; x++; }