10循环结构程序设计(3)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
上页 下页 主页 结束
问题
形如: 1 多重循环的问题 12 123 1234 … 的形式如果控制输出
上页
下页
主页
结束
多重循环解决的典型问题
(1)平面阵列输出 (2)枚举问题 (3)任意循环嵌套 (4)复杂逻辑推理 …
上页
下页
主页
结束
平面阵列输出
解决问题: 1 12 123 1234 12345 …
课堂实践
1、求1!+2!+3!+… +n!的结果不超过 21350000的最大的n, 其中n由键盘输入。 2、百钱买百鸡问题如果只要一组解,程序该如 何修改?
上页
下页
主页
结束
小结
while for语句的综合练习
break continue语句的应用
上页
下页
主页
结束
continue与break
#include"stdio.h" main( ) {int i; for(i=1;i<=10;i++) { printf(“i=%d\n",i); if(i==3) continue; printf(“circle %d”,i); } printf("over"); } #include"stdio.h" main( ) {int i; for(i=1;i<=10;i++) { printf(“i=%d\n",i); if(i==3) break; } printf("over"); }
上页
下页
主页
结束
for语句中的continue
#include"stdio.h" main( ) { int i; for(i=1;i<=10;i++) { printf(“i=%d\n",i); if(i==3) continue; printf(“circle %d\n", i); } printf("over"); } 上页 下页 主页 结束
1 4 1
2
3 4 5
3
2 1 0
3
5 7 9
上页
下页
主页
结束
平面阵列输出
练习解决问题: 1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9 4*1=4 4*2=8 4*3=12 4*4=16 … 9*1=9 9*2=18 9*3=27 … 9*9=81
上页
下页
主页
结束
枚举问题
continue语句
上页
下页
主页
结束
循环语句中的continue
功能:终止本轮循环循环体语句的执行,
对于while语句:
对于for语句:
转去判断while循环条件
转去执行表达式3,再判断表达式2
上页
下页
主页
结束
while语句中的continue
#include"stdio.h" main( ) { int i=1; while(i<=10) { printf(“i=%d\n",i); if(i==3) continue; printf(“circle %d\n", i); i++; } printf("over"); }
* *** ***** ******* *********
上页
下页
主页
结束
平面阵列输出
问题分析: (1)程序要一行一行输出,因此,需要一个循环来控制 总的要输出多少行 (2)在每一行上,每一列输出的内容是什么,得由另一 个循环来控制 形式如下:
for( row=1; row<n; row++) //n是最大行数 { for( col=1; col < m; col++) //col是最大列数 { //每一列上要输出的具体内容 } printf(“\n”); //每行末尾都要换行 }
解决问题:百钱买百鸡 鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一. 百钱买百鸡, 鸡翁、鸡母、鸡雏各几何? 此类问题的解决办法就是----把所有组合拿来 试一次,符合条件的就留下,不符合的去掉。 (用循环去试遍所有变量)
上页
下页
主页
结束
枚举问题 –百钱买百鸡
for(cock=0; cock<=20;cock++)//鸡翁的所有可能值 { for(hen=0; hen<=33;hen++)//鸡母的所有可能值 { for(chick=0; chick<=100;chick+=3)//鸡雏的所有 可能值 { if( 条件 ) { 输出cock、hen、chick的值 } } } } 条件为: cock+hen+chick==100 && 5*cock+3*hen+click/3==100
平面阵列输出
解决问题: * *** ***** ******* ********* …
问题(1),有多少行?(外层循环) for( row=1; row< ? ; row++) { } 问题(2),每行上的每列的内容?(内循环)(除*外, 还有空格) for(s=1; s<?; s++) { } //每行上各有 多少空格? for(st=1; st<?; st++) { } //每行上各 有多少*? 问题(3),在s循环内输出 空格: printf(“ “); 在st循环内输出* printf(“*”); 问题(4),输出完一行后,要换行
上页
下页
主页
结束
平面阵列输出
解决问题: 1 12 123 1234 12345 123456 1234567 void list() { int row, col; for( row=1; row<7; row++) { for(col=1; col<row;col++) { printf(“%d”, col); } printf(“\n”); //换行 } } 上页 下页 主页 结束
循环结构程序设计
循环结构程序设计(3)
回顾(for、while语句) break语句 continue语句 综合练习 课堂实践
上页
下页
主页
结束
课前回顾
循环的三要素: (1)循环条件 (2)循环体 (3)循环变量的控制语句
C语言中,循环的几种形式: while语句 for语句 do-while语句
上页
下页
主页
结束
平面阵列输出
解决问题: 1 12 123 1234 12345 123456 1234567
问题(1),总共有多少行,得出外循环: for( row=1; row<7; row++) { } 问题(2),每行上各有多少列,得出内循环: for(col=1; col<row;col++) { } 问题(3),每一列上具体输出什么,得出printf语句: printf(“%d”, col); 问题(4),每行输出结束后,要换行,得出需要加下面的 换行语句: printf(“\n”); //换行
上页
下页
主页
结束
平面阵列输出
解决问题: * *** ***** ******* ********* …
S=总行数-行号
St=2*行号-1 for( row=1; row< ? ; row++) { for(s=1; s<?; s++) { //控制空格个数 printf(“ “); } for(st=1; st<?; st++) {//控制*个数 printf(“*”); } printf(“\n”); //换行 } 行号 空格个数s *个数st
循环语句中的break
功能:跳出该break所在的那层循环语句,提前终止当 前循环。 main() { int i; for(i=1;i<=10;i++) { printf(“%d “,i); if(i==5) break; } printf(“game over!”); } 结果:12345game over! 上页 下页 主页 结束
上页
下页
主页
结束
源自文库
枚举问题 –练习
1、实践教材P144思考题(3) 2、求1!+2!+3!+…+10! 3、教材P147,项目训练(2)、(3)、(4)。
上页
下页
主页
结束
break语句
上页
下页
主页
结束
switch 语句中的break
• 例子 功能:结束当前switch main() 的执行,转到该switch { int i=2; 语句的下一条语句执行。 switch(i) { case 0: printf(" i=0 "); break; case 1: printf(" i=1 "); break; case 2: printf(" i=2 "); case 3: printf(" i=3 "); break; default: printf("default");} } 结果:i=2 i=3 上页 下页 主页 结束
问题
形如: 1 多重循环的问题 12 123 1234 … 的形式如果控制输出
上页
下页
主页
结束
多重循环解决的典型问题
(1)平面阵列输出 (2)枚举问题 (3)任意循环嵌套 (4)复杂逻辑推理 …
上页
下页
主页
结束
平面阵列输出
解决问题: 1 12 123 1234 12345 …
课堂实践
1、求1!+2!+3!+… +n!的结果不超过 21350000的最大的n, 其中n由键盘输入。 2、百钱买百鸡问题如果只要一组解,程序该如 何修改?
上页
下页
主页
结束
小结
while for语句的综合练习
break continue语句的应用
上页
下页
主页
结束
continue与break
#include"stdio.h" main( ) {int i; for(i=1;i<=10;i++) { printf(“i=%d\n",i); if(i==3) continue; printf(“circle %d”,i); } printf("over"); } #include"stdio.h" main( ) {int i; for(i=1;i<=10;i++) { printf(“i=%d\n",i); if(i==3) break; } printf("over"); }
上页
下页
主页
结束
for语句中的continue
#include"stdio.h" main( ) { int i; for(i=1;i<=10;i++) { printf(“i=%d\n",i); if(i==3) continue; printf(“circle %d\n", i); } printf("over"); } 上页 下页 主页 结束
1 4 1
2
3 4 5
3
2 1 0
3
5 7 9
上页
下页
主页
结束
平面阵列输出
练习解决问题: 1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9 4*1=4 4*2=8 4*3=12 4*4=16 … 9*1=9 9*2=18 9*3=27 … 9*9=81
上页
下页
主页
结束
枚举问题
continue语句
上页
下页
主页
结束
循环语句中的continue
功能:终止本轮循环循环体语句的执行,
对于while语句:
对于for语句:
转去判断while循环条件
转去执行表达式3,再判断表达式2
上页
下页
主页
结束
while语句中的continue
#include"stdio.h" main( ) { int i=1; while(i<=10) { printf(“i=%d\n",i); if(i==3) continue; printf(“circle %d\n", i); i++; } printf("over"); }
* *** ***** ******* *********
上页
下页
主页
结束
平面阵列输出
问题分析: (1)程序要一行一行输出,因此,需要一个循环来控制 总的要输出多少行 (2)在每一行上,每一列输出的内容是什么,得由另一 个循环来控制 形式如下:
for( row=1; row<n; row++) //n是最大行数 { for( col=1; col < m; col++) //col是最大列数 { //每一列上要输出的具体内容 } printf(“\n”); //每行末尾都要换行 }
解决问题:百钱买百鸡 鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一. 百钱买百鸡, 鸡翁、鸡母、鸡雏各几何? 此类问题的解决办法就是----把所有组合拿来 试一次,符合条件的就留下,不符合的去掉。 (用循环去试遍所有变量)
上页
下页
主页
结束
枚举问题 –百钱买百鸡
for(cock=0; cock<=20;cock++)//鸡翁的所有可能值 { for(hen=0; hen<=33;hen++)//鸡母的所有可能值 { for(chick=0; chick<=100;chick+=3)//鸡雏的所有 可能值 { if( 条件 ) { 输出cock、hen、chick的值 } } } } 条件为: cock+hen+chick==100 && 5*cock+3*hen+click/3==100
平面阵列输出
解决问题: * *** ***** ******* ********* …
问题(1),有多少行?(外层循环) for( row=1; row< ? ; row++) { } 问题(2),每行上的每列的内容?(内循环)(除*外, 还有空格) for(s=1; s<?; s++) { } //每行上各有 多少空格? for(st=1; st<?; st++) { } //每行上各 有多少*? 问题(3),在s循环内输出 空格: printf(“ “); 在st循环内输出* printf(“*”); 问题(4),输出完一行后,要换行
上页
下页
主页
结束
平面阵列输出
解决问题: 1 12 123 1234 12345 123456 1234567 void list() { int row, col; for( row=1; row<7; row++) { for(col=1; col<row;col++) { printf(“%d”, col); } printf(“\n”); //换行 } } 上页 下页 主页 结束
循环结构程序设计
循环结构程序设计(3)
回顾(for、while语句) break语句 continue语句 综合练习 课堂实践
上页
下页
主页
结束
课前回顾
循环的三要素: (1)循环条件 (2)循环体 (3)循环变量的控制语句
C语言中,循环的几种形式: while语句 for语句 do-while语句
上页
下页
主页
结束
平面阵列输出
解决问题: 1 12 123 1234 12345 123456 1234567
问题(1),总共有多少行,得出外循环: for( row=1; row<7; row++) { } 问题(2),每行上各有多少列,得出内循环: for(col=1; col<row;col++) { } 问题(3),每一列上具体输出什么,得出printf语句: printf(“%d”, col); 问题(4),每行输出结束后,要换行,得出需要加下面的 换行语句: printf(“\n”); //换行
上页
下页
主页
结束
平面阵列输出
解决问题: * *** ***** ******* ********* …
S=总行数-行号
St=2*行号-1 for( row=1; row< ? ; row++) { for(s=1; s<?; s++) { //控制空格个数 printf(“ “); } for(st=1; st<?; st++) {//控制*个数 printf(“*”); } printf(“\n”); //换行 } 行号 空格个数s *个数st
循环语句中的break
功能:跳出该break所在的那层循环语句,提前终止当 前循环。 main() { int i; for(i=1;i<=10;i++) { printf(“%d “,i); if(i==5) break; } printf(“game over!”); } 结果:12345game over! 上页 下页 主页 结束
上页
下页
主页
结束
源自文库
枚举问题 –练习
1、实践教材P144思考题(3) 2、求1!+2!+3!+…+10! 3、教材P147,项目训练(2)、(3)、(4)。
上页
下页
主页
结束
break语句
上页
下页
主页
结束
switch 语句中的break
• 例子 功能:结束当前switch main() 的执行,转到该switch { int i=2; 语句的下一条语句执行。 switch(i) { case 0: printf(" i=0 "); break; case 1: printf(" i=1 "); break; case 2: printf(" i=2 "); case 3: printf(" i=3 "); break; default: printf("default");} } 结果:i=2 i=3 上页 下页 主页 结束