Part1: 验证性内容
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; }
通过实验验证可得: 把上面代码中嵌套使用的if语句部分替换成以下代码,仍旧可以正确输出三角形形状
#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 || b==c) { if (a==b && a==c) printf("构成等边三角形\n"); else printf("构成等腰三角形\n"); } else printf("构成一般三角形\n"); } else printf("不能构成三角形\n"); return 0; }
拓展:把原代码中输入三边长并且判断三角形类型的代码放到while循环里,运行程序,如下所示
#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; }
经过比较,在该实验中while比if更简便,不需要重复编译过程,可以一直输入三角形三边,直到不想输入三边长为止,下面这一小段就是控制上述过程的代码
while(scanf("%ld%ld%ld",&a,&b,&c)) { // ... }
int x;
while(scanf("%d",&x) != 0) { // 等价于while( scanf("%d",&x) != EOF )
// 也等价于while( scanf("%d", &x) )
//...
}
我想问一下:在比较while和if的便捷性的时候可以通过编译时间来比较吗?
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; }
我不太懂为什么上面1的程序中while后有具体的内容而这个代码中不能表示成下面
while(scanf("%d",&score))
的样子,如果这样的话运行后会显示
C:\Users\卓尔不群\Documents\collect2.exe [Error] ld returned 1 exit status
不过按F10后可以弹出小黑窗,也能正确的进行等级评判
用switch语句改写
#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; // 结束本次循环,开始下一次循环 } switch(score/10) { // 使用switch进行分数等级判断 case 10: case 9: grade='A'; break; case 8: grade='B'; break; case 7: grade='C'; break; case 6: grade='D'; break; default: grade='E'; } printf("等级为: %c\n\n", grade); } return 0; }
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; }
break是结束本层循环,而continue只是结束本次的循环,开始下一次循环(相当于跳过只这次)
4.分别运行下面两个程序,比较在嵌套的循环中控制语句 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和break对外层循环无影响
Part2: 补足程序,使得程序运行
1.编程找出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(max<=number) max = number; else if(min>=number) min = number; } printf("大数为: %d\n", max); printf("小数为: %d\n", min); return 0; }
Part3:编程练习
1.找100-200间素数
#include<stdio.h> int main() { int i=0; int j=0; int count=100; for(i=100;i<=200;i++) { for(j=2;j<=i;j++) { if(i%j==0) break; } if(i==j) { count++; printf("%d ",i); } } printf("\n100~200之间有%d个素数\n",count); return 0; }
2.显示以下图案
#include<stdio.h> int main() { int x,y,z; for(x=1;x<=5;x++) { for(y=1;y<=5-x;y++) { printf(" "); } for(z=1;z<=(2*x-1);z++) { printf("*"); } printf("\n"); } return 0; }
实验总结与体会
个别知识点还是不能够很好的使用,如找出100-200间素数的那个实验,我特别想控制数字输出的格式,但是却不能很好的加入格式控制的代码。所以说还是要多加练习。不过有进步的是在编写代码时思路更加清晰了。
互评网址:
https://www.cnblogs.com/yesung/
https://www.cnblogs.com/Baeky/
https://www.cnblogs.com/1623449-w/