Part 1.编程
验证性内容函数
(1)从键盘上输入3个数,让它们表明3条线段的长度,编写一个c程序判断这3条线段组成的三角形属于什么类型(通常三角形、等腰三角形、等边三角形或不构成三角形)。学习
#include <stdio.h> int main() { double a,b,c; scanf("%lf %lf %lf", &a, &b, &c); if(a+b>c && a+c>b && b+c>a) { if(a==b && a==c) printf("构成等边三角形\n"); else if(a==b || a==c || b==c) printf("构成等腰三角形\n"); else printf("构成通常三角形\n"); } else printf("不能构成三角形\n"); return 0; }
运行结果测试
把 demo1.cpp中嵌套使用的if语句部分替换成如下代码spa
if(a+b>c && a+c>b && b+c>a) { if(a==b || a==c || b==c) { if (a==b && a==c) printf("构成等边三角形\n"); else printf("构成等腰三角形\n"); } else printf("构成通常三角形\n"); } else printf("不能构成三角形\n");
以后运行结果以下设计
换代码以后,依旧能够运行。3d
拓展:把demo1.cpp中输入三边长而且判断三角形类型的代码放到while循环里,运行程序code
#include <stdio.h> int main() { double a,b,c; printf("输入三角形三边:\n"); while(scanf("%lf%lf%lf",&a,&b,&c)) { if(a+b>c && a+c>b && b+c>a) { if(a==b && a==c) printf("构成等边三角形\n"); else if(a==b || a==c || b==c) printf("构成等腰三角形\n"); else printf("构成通常三角形\n"); } else printf("不能构成三角形\n"); printf("\n输入三角形三边:\n"); } return 0; }
结果以下blog
while(scanf("%ld%ld%ld",&a,&b,&c)){
// ...
}这段代码可使程序一直运行。教程
(2)用scanf()函数输入一个百分制成绩(整型量),要求输出成绩等级A,B,C,D,E。其中,90~100分为A,80~89
分为B, 70~79分为C, 60~69分为D,60分如下为E。
#include <stdio.h> int main() { int score; // 用于存放百分制分数 char grade; // 用于存放等级制分数(取值'A', 'B','C','D', 'E') while(1) { printf("输入学生成绩: "); if(scanf("%d",&score) == 0) // 若是检测到没有成绩输入,则结束整个循环 break; if(score<0 || score > 100) { printf("输入成绩有误!\n\n"); continue; // 结束本次循环,开始下一次循环 } else if(score>=90 && score<=100) grade = 'A'; else if(score>=80 && score<=89) grade = 'B'; else if(score>=70 && score<=79) grade = 'C'; else if(score>=60 && score <=69) grade = 'D'; else grade = 'E'; printf("等级为: %c\n\n", grade); } return 0; }
用switch语句改写以后获得
(3)理解控制语句continue和break的功能
#include <stdio.h> int main() { int i; // 在循环语句中使用continue for(i=1; i<=5; i++) { if (i%3 == 0) // 若是i是3的倍数,则结束本次循环,开始下一次循环 continue; printf("i=%d\n",i); } return 0; }
运行结果
#include <stdio.h> int main() { int i; // 在循环语句中使用continue for(i=1; i<=5; i++) { if (i%3 == 0) // 若是i是3的倍数,则结束整个循环 break; printf("i=%d\n",i); } return 0; }
在循环中使用控制语句continue和break,其功能区别是什么?
答: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的倍数,则结束本次循环,开始下一次循环 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; }
在两层嵌套循环中,内层循环中若是出现continue,是否影响外层循环?
答:不影响,在上面的第一个运行程序中能够观察到,尽管内层循环中出现了continue,但它仅仅只是影响了内层循环,使得知足条件的3没法输出,但它并未影响到外层循环。
在两层嵌套循环中,内层循环中若是出现break,是否影响外层循环?
答:不影响,在条件知足以后,它的出现直接阻断了内层循环程序的继续运行,或者说是它直接跳出了内层循环,进而开始外层循环。
Part2: 补足程序,使得程序运行
/* 编程找出5个整数的最大数和最小数 《C语言程序设计教程学习指导》p122实验内容(3) */ #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; }
使用for或do...while语句实现的程序源码,及运行测试结果截图
#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; }
#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; }
Part3:编程练习
(1)编程输出101~200之间全部素数,并输出这一区间内素数个数。
#include <stdio.h> #include <math.h> int main(){ int n,m,i,sum=0; for(n=101;n<=200;n++) { m=sqrt(n); for(i=2;i<=m;i++) if(n%i==0)break; if(i>m) { printf("%5d",n); sum++; } } printf(" "); printf("101~200之间共有%d个素数",sum); return 0; }
#include<stdio.h> int main() { int line,k,x; for(line=1;line<=5;line++) { for(k=1;k<=5-line;k++) printf(" "); for(x=1;x<=2*line-1;x++) printf("*"); printf("\n"); } return 0; }
实验总结与体会:
经过完成实验的第一部分,我认识到了continue与break的区别与区别,这意味着之后的程序编写会越发便捷,感受受益不浅。实验的第二部分补足程序也较为简单。第三部分的编写程序我以为对我而言仍旧有点困难,因此在这一部分上我磨蹭了很久,不过最终显示出正确的运行结果的时候仍是以为时间花费的很值。无论怎么说,加油吧!
实验互评:
https://www.cnblogs.com/MR-XN/
https://www.cnblogs.com/sfyq/
https://www.cnblogs.com/plutocharon/