Part 1.验证性内容
//demo5_1.cpp
#include <stdio.h> int main() { int i; for (i=1;i<=5;i++){ if (i%3==0){ continue; printf("i=%d\n",i); } } return 0; }
//demo5_2.cpp
#include<stdio.h> int main() { int i; for (i=1;i<=5;i++){ if (i%3==0){ break; printf("i=%d\n",i); } } return 0; }
continue:i=3时,执行continue语句,结束本次循环,执行下一次循环。
break:i=3时,执行break语句,结束本层循环。
#include<stdio.h> const int LINE=3; const int COLUME=5; int main() { int line; int col; for(line=1;line<=LINE;line++){ for(col=1;col<=COLUME;col++){ if(col%3==0) continue; printf("%5d",col); } printf("\n"); } return 0; }
continue语句不影响外层循环,line=1,col=3时执行continue语句,结束本次内层循环,进入下一次内层循环,此时line=1,col=4。
// 对比demo6_1.cpp和demo6_2.cpp,理解在嵌套的循环中,控制语句continue和break的功能 #include <stdio.h> const int LINE=3; // 定义符号常量LINE const int COLUME=5; // 定义符号常量COLUME int main() { int line; // 定义变量line, 用来控制行数 int col; // 定义变量col, 用来控制列数 // 输出LINE行信息 for(line=1; line<=LINE; line++) { // 每一行中,利用循环,输出各列信息 for(col=1; col<=COLUME; col++) { if(col%3 == 0) // 如果col是3的倍数,则结束内层循环体 break; printf("%5d", col); } printf("\n"); // 每输出完一行,换行 } return 0; }
break语句不影响外层循环,line=1,col=3时执行break语句,结束本层循环,执行换行语句,进入下一次外层循环,此时line=2,col=1.
Part 2.补足程序
#include<stdio.h> int main() { int number,max,min,n; n=1; printf("输入第%d个数:",n); scanf("%d",&number); max = number; min = number; while(n<5){ n++; printf("输入第%d个数:",n); scanf("%d",&number); if(number>max) max = number; else if (number<min) min = number; } printf("最大数为:%d\n",max); printf("最小数为:%d\n",min); return 0; }
运行结果:
体会:相比p124的代码,运用循环使代码变得更简洁。
用for语句:
#include<stdio.h> int main() { int number,max,min,n; n=1; printf("输入第%d个数:",n); scanf("%d",&number); max = number; min = number; for(n=2;n<=5;n++){ printf("输入第%d个数:",n); scanf("%d",&number); if(number>max) max = number; else if (number<min) min = number; } printf("最大数为:%d\n",max); printf("最小数为:%d\n",min); return 0; }
用do... while:
#include<stdio.h> int main() { int number,max,min,n; n=1; printf("输入第%d个数:",n); scanf("%d",&number); max = number; min = number; do{ n++; printf("输入第%d个数:",n); scanf("%d",&number); if(number>max) max = number; else if (number<min) min = number; }while(n<5); printf("最大数为:%d\n",max); printf("最小数为:%d\n",min); return 0; }
Part 3编程练习
1.输出素数
#include<stdio.h> #include<math.h> int main() { int n; int i; int j=0; for(n=101;n<=200;n++){ int isPrime=1; for(i=2;i<=sqrt(n);i++){ if (n%i==0){ isPrime=0; break;} } if(isPrime){ printf("%d\n",n); j++; } } printf("101~200之间共有%d个素数",j); return 0; }
运行结果如下
运行结果的排版感觉可以在输出时改进一下,便于查看。
2.打印图案
#include<stdio.h> int main() { int i; int j; int n=4,m=1; while(n>=0&&m<=9){ for(i = 1;i <= n;i++){ printf(" "); } for(j = 1;j <= m;j++){ printf("*"); } for(i = 1;i <= n;i++){ printf(" "); } n--; m+=2; printf("\n"); } return 0; }
运行结果
感觉代码并不是非常简洁...比较懒的一种算法。
Part 4.拓展实验:猜数游戏。
#include<stdio.h> int main() { int number=rand()+1; int count=0; int a=0; printf("我已经想好了一个1到100之间的数\n"); do{ printf("请猜猜这个1到100之间的数\n"); scanf("%d",&a); count++; if(a>number){ printf("你猜的数大了\n"); } if(a<number){ printf("你猜的数小了\n"); } } while(a!=number); printf("太好了,你用了%d次就猜中了答案\n",count); return 0; }
运行结果如下:
很喜欢这种互动感!!!
实验总结与体会:
1.for循环的终止条件,循环次数问题,容易弄错。
2.还有循环的嵌套问题,譬如输出素数的那篇代码,一开始把isPrime的定义放在总循环外,运行后结果就一个数,肯定有问题。自己定义时习惯把变量都放到最开始定义,但看到运行结果就立马意识到这样在有非素数出现时,isPrime的值变为0后,下次循环仍然是0,后面的数就没法判断了。所以,isPrime的定义应放在循环里面。还有一些问题,诸如用了sqrt函数忘include<math.h>...
3.编程有一个理念叫模块化,感觉循环的嵌套这种思想非常使用,把一个复杂的问题一块一块的解决,每一块其实都是一些很基础的问题。
4.善用调试,可以理清很多问题,特别是对于循环嵌套问题。
原文:https://www.cnblogs.com/rosalyn/p/10686929.html