【实验结论】
一、Part1:验证性内容。
1、在循环中使用控制语句continue和break的功能区别。
(1)探索过程。
有下列两段代码,为方便对比,分别标号①②。
序号 | ① | ② |
代码 |
#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; } |
#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整除时,终止当次循环并从头开始进入下一次循环;②中break的作用是当i能被3整除时,终止当前循环。
那么,continue和break的作用区别便显而易见了。
(2)总结。
continue语句:结束本次循环,开始下一次循环。
break语句:结束本层循环。
2、结合程序demo6_1.cpp和demo6_2.cpp运行结果对比,回答:
(1)在两层嵌套循环中,内层循环中如果出现continue,是否影响外层循环?
(2)在两层嵌套循环中,内层循环中如果出现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的倍数,则结束本次循环,开始下一次循环 continue; printf("%5d", col); } printf("\n"); // 每输出完一行,换行 } return 0; } |
#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; } |
运行结果 |
经对比结果,答:(1)不影响外层循环。
(2)不影响外层循环。break语句仅用于结束内层循环。
二、Part2:补足程序,使得程序运行。
·找出5个数中最大和最小的数。
(1)补足程序,代码如下:
#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; }
运行结果为:
(2)若使用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;){ printf("输入第%d个数:",n); scanf("%d",&number); if(number>=max) max=number; else if (number<=min) min=number ; n++ ; } printf("最大数为:%d\n",max); printf("最小数为:%d\n",min); return 0; }
运行结果为:
(1)(2)运行结果如出一辙。
三、Part3:编程练习。
1、找出100到200之间的素数。
思路:先把101—200这些数循环出来。
再一个个分别除以2—某个数-1,若不能整除则为素数。
代码如下:
#include<stdio.h> int main(){ int i,m,n; i=0; for (n=101;n<=200;n++){ for(m=2;m<n;m++){ if(n%m==0) break; } if(m>=n) { i++; printf("%d\t",n); if(i%5==0){ printf("\n"); } } } printf("\n共输出%d个素数\n",i); return 0; }
ps:搞清这个内外层循环以及表达式成立的条件着实花了很长时间,但写完也就慢慢摸清楚了。
运行结果如下:
2、输出三角形*阵。
先分析输出的图形,设行数为n
第一行有4个空格,1个*;
第二行有3个空格,3个*;
第三行有2个空格,5个*;
第四行有1个空格,7个*;
第五行有0个空格,9个*;
做道小学找规律题(手动滑稽)得:
第n行有(5-n)个空格,(2n-1)个*。
于是,可以想到,让输出空格循环(5-n)次,然后再让*输出循环(2n-1)次,然后每行换行,就可以输出此图形。
让空格循环(5-n)次,有:
for(a=1;a<=5-n;a++) { printf(" "); }
再让*循环(2n-1)次,有:
for(b=1;b<=2*n-1;b++){ printf("*"); }
组合加工一下,得源代码:
#include<stdio.h> int main(){ int n,a,b; for(n=1;n<=5;n++){ for(a=1;a<=5-n;a++) { printf(" "); } for(b=1;b<=2*n-1;b++){ printf("*"); } printf("\n"); } return 0; }
运行结果:
为了方便观察,习惯性把for后面的{}标出来,便于弄清循环怎么循环的。要不然就是一团糟。
【实验反思】
遇到编程题,首先要从数学层面上找清楚规律,再依据这些来编程,即可。