第三次计算机实验
Part1: 验证性内容
对比demo5_1和demo5_2理解控制语句continue和break的功能
demo5_1
#include <stdio.h> int main() { int i; for(i=1; i<=5; i++) { if (i%3 == 0) // 如果i是3的倍数,则结束本次循环,开始下一次循环 continue; printf("i=%d\n",i); } return 0; }
demo5_2
#include <stdio.h> int main() { int i; for(i=1; i<=5; i++) { if (i%3 == 0) // 如果i是3的倍数,则结束整个循环 break; printf("i=%d\n",i); } return 0; }
contine语句只用于循环结构,遇到continue程序跳过循环体中后边的所有语句,提前结束本次循环开始新一次的本层循环。
break可以用在循环结构和case子句,通过break跳出switch或是直接结束本层循环,执行循环之后的语句。
对比demo6_1和demo6_2,理解在嵌套的循环中,控制语句continue和break的功能
demo6_1
#include <stdio.h> const int LINE=3; // 定义符号常量LINE ,以及行数 const int COLUME=5; // 定义符号常量COLUME,以及列数 int main() { int line; // 定控制行数 int col; // 控制列数 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; }
demo6_2
#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) // 如果col是3的倍数,则结束内层循环体 break; printf("%5d", col); } printf("\n"); } return 0; }
如demo6 1,经过continue,程序直接跳过本次循环未输出3,而外层循环仍然进行,显示为执行了三行。
如demo6 2,经过break,程序断开本层循环开启外层循环,仍显示为执行三行。
Part2: 补足程序
编程找出5个整数的最大数和最小数
(while形式)
/* 编程找出5个整数的最大数和最小数 */ #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; }
(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); //要牢记循环语句括号内各部分所实现的功能及其意义 //while()后的分号容易忘记 printf("最大数为: %d\n", max); printf("最小数为: %d\n", min); return 0; }
(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<6;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的运行图
Part3: 编程练习
求素数
/* 求出100到200间的素数 */ #include<stdio.h> int main(){ int i,j,k; for(i=100;i<200;i++){ for(j=2;j<i;j++){ if(i%j==0) break; } if(i==j) printf("%d ",i); } return 0; }
for语句里边判断条件可以根据需要修改,所以。。。让我们去掉他。。
#include<stdio.h> int main(){ int i,j,k; for(i=1;;i++){ for(j=2;j<i;j++){ if(i%j==0) break; } if(i==j) printf("%d ",i); } return 0; }
嗯 有场面多了。
打印****号
#include<stdio.h> const int LINE=20; int main(){ int line,col; for(line=1;line<=LINE;line++){ for(col=LINE-line;col>=1;col--) printf(" "); for(col=1;col<=2*line-1;col++) printf("*"); printf("\n"); } return 0; }
(把LINE修改为20)
这里直接想去定义LINE时不是太熟练,所以先去做了简单的5行图形,之后对那条代码进行了修改。
Part4: 拓展
/*十进制转换二进制*/ #include<stdio.h> #include<math.h> #include<stdlib.h> int main(){ printf("输入 0 结束"); while(1){ int x,a,b=0,c=0; printf("\nPlease input a number:"); scanf("%d",&x); if(x<0) { printf("数据输入错误!\n"); exit(0); } if(x>0){ while(x!=0) { a=x%2; c=a*pow(10,b)+c; b++; x=x/2; } printf("The result is:%d\n",c); } else if(x==0)break; } return 0; }
半个月前写除了十进制转换二进制的代码,再加一些其他的东西贴上来吧。
实验总结与体会
这次实验课主要是对循环语句的练习,而循环语句的主要问题是对于循环条件和循环的架构的问题。我先是在主要的问题是对循环的边界条件的设置,一般是通过执行程序输入边界数据查看结果之后再进行更改。在一些练习中也可以逐步感觉到每种循环各有不同,判断条件,语句顺序,实现过程都会有一些细微的区别。比如我之前写的十进制转换的,我一开始去看了for语句,但是感觉并不适合,用while语句去构想就简单了很多,顺着就可以想下来。虽然的确也可以用for语句表现转换,但for相比较下来更适用于已知循环次数的情况。如果有了新的想法,我会及时在这篇博客上去补充的。
附上实验三的评论
https://www.cnblogs.com/amumu0925/p/10714640.html
https://www.cnblogs.com/mgl1999/p/10713091.html
https://www.cnblogs.com/verano/p/10712748.html