实验2 C语言分支与与循环基础应用编程——1
一、实验目的
1. 能正确使用if语句实现分支结构
2. 能正确使用while语句、do...while语句实现循环结构
3. 能在具体问题场景中正确区分、使用continue和break
4. 能灵活、组合使用c语句编程解决简单应用问题
二、实验准备
1. 分支语句 if 和循环语句 while 、 do...while 的用法:语法规则及注意事项
2. 在循环语句中 continue 和 break 语句的功能和用法
3. 使用 while 语句实现多组输入的方法
4. 常见问题的算法
三、实验内容
1. 实验任务1
代码:
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<time.h> 4 5 #define N 5 6 #define N1 397 7 #define N2 476 8 #define N3 21 9 10 11 int main(){ 12 int cnt; 13 int random_major,random_no; 14 15 srand(time(NULL)); 16 17 cnt=0; 18 while (cnt < N){ 19 random_major =rand() %2; 20 if (random_major){ 21 22 if (random_major){ 23 random_no = rand()%(N2 - N1+1)+N1; 24 printf("20248329%04d\n",random_no); 25 26 } 27 else{ 28 random_no = rand() % N3 +1; 29 printf("20248395%04d\n",random_no); 30 31 32 } 33 cnt++; 34 } 35 36 return 0; 37 38 } 39 }
运行截图:
问题回答:
random_no = rand()%(N2 - N1+1)+N1;用来生成一个在397到496之间的随机数,包括边界
random_no = rand() % N3 +1;用来生成一个1到21之间的随机数,包括边界
这个程序是用来生成两种不同的学号。但是都是限定了格式,有12位一共。
2. 实验任务2
代码:
1 #include<stdio.h> 2 #include<math.h> 3 4 int main() 5 { 6 double a,b,c; 7 double delta,p1,p2; 8 9 while (scanf ("%lf%lf%lf",&a,&b,&c) !=EOF){ 10 if (a == 0){ 11 printf("a =0 ,invalid input \n"); 12 continue; 13 } 14 delta= b*b- 4*a*c; 15 p1= -b/2/a; 16 p2 = sqrt(fabs(delta))/2/a; 17 18 if (delta ==0) 19 printf("x1 = x2 = %.2g\n",p1); 20 21 else if (delta>0) 22 23 24 printf("x=%.2g,x2=%.2g\n",p1+p2,p1-p2); 25 else{ 26 printf("x1=%.2g + %.2gi,",p1,p2); 27 printf("x2=%.2g - %.2gi\n",p1,p2); 28 29 } 30 } 31 return 0; 32 }
运行截图:
3. 实验任务3
代码:
1 #include<stdio.h> 2 int main() 3 { 4 char a; 5 while(scanf ("%c",&a)!=EOF){ 6 if (a =='y'){ 7 printf("wait a minute\n"); 8 getchar(); 9 } 10 else if (a =='g'){ 11 printf("go go go\n"); 12 getchar(); 13 } 14 else if (a =='r'){ 15 printf("stop!\n"); 16 getchar(); 17 18 } 19 else { 20 printf("something must be wrong...\n"); 21 getchar(); 22 23 } 24 } 25 return 0; 26 }
运行截图:
4. 实验任务4
代码:
1 #include<stdio.h> 2 int main(){ 3 printf("请输入今日开销,直到输入-1终止:\n"); 4 double kaixiao,max=0.0,min=20000.0,sum=0.0; 5 6 while(1){ 7 scanf("%lf",&kaixiao); 8 if (kaixiao==-1){ 9 break; 10 } 11 12 13 if (!(kaixiao>=0 && kaixiao<=20000)) 14 { 15 printf("请重新输入在0到2万之间的数\n"); 16 } 17 18 if (kaixiao>max){ 19 max = kaixiao; 20 } 21 22 if (kaixiao<min){ 23 min = kaixiao; 24 } 25 26 sum+= kaixiao; 27 28 } 29 printf("今日累计消费总额:%.2f\n",sum); 30 printf("今日最高一笔开销:%.2f\n",max); 31 printf("今日最低一笔开销:%.2f\n",min); 32 return 0; 33 } 34
运行截图:
5. 实验任务5
代码:
1 2 #include<stdio.h> 3 4 5 int main(){ 6 7 int a,b,c; 8 while ( scanf("%d %d %d",&a,&b,&c)!= EOF) 9 { 10 if ( !(a + b > c && a + c > b && b + c > a)){printf("不能构成三角形\n");} 11 12 13 else if ( a==b && a==c){printf("等边三角形\n");} 14 15 else if ( a==b || a==c || b==c){printf("等腰三角形\n");} 16 17 else if ( a*a+b*b==c*c){printf("直角三角形\n");} 18 19 else printf("普通三角形\n") ; 20 21 22 23 24 } 25 return 0; 26 } 27
运行截图:
6. 实验任务6
代码:
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<time.h> 4 #define x1 1 5 #define x2 30 6 int main(){ 7 8 int y,m=1; 9 10 srand(time(NULL)); 11 12 13 int x=rand()% (x2-x1+1)+x1; 14 15 16 printf("猜猜2024年11月哪一天会是你的lucky day\n\n开始喽,你有三次机会,猜吧(1~30):") ; 17 18 while(1){ 19 scanf("%d",&y); 20 21 if (m==3){ 22 23 printf("\n次数用光啦。偷偷告诉你,11月你的lucky day是 %d 号",x); 24 break; 25 } 26 27 28 if (y==x ) 29 {printf("\n哇,猜中了:)"); 30 break;} 31 32 else if (y<x ) 33 34 {printf("\n你猜的日期早了,你的lucky day还没到呢\n\n再猜(1~30):");} 35 36 else if (y>x ) 37 38 {printf("\n你猜的日期晚了,你的lucky day在前面哦\n\n再猜(1~30):"); } 39 40 41 m++; 42 } 43 44 return 0; 45 } 46
运行截图:
四、实验总结
1. 实验任务1
#include<stdlib.h>和#include<time.h>是随机数生成的重要部分。而srand(time(NULL));达到了运行一次生成一次随机数的效果。
2. 实验任务2
if 分支结构的使用。if --else if ---else if ----.....---else
以及continue跳出当前循环的作用,
以及格式控制符%g
3. 实验任务3
输出一个结果,习惯性地在末尾加上\n来换行。
还有字符的判断用单引号' '
判断相等,用的是==,判断b<c<a用 b<c && c<a
和EOF的使用。
4. 实验任务4
输入-1终止程序,我用了while里一个if 语句判断,内部用上了break达到了终止程序的效果。
引入了max,min,sum,判断与kaixiao之间的关系来得到值。
5. 实验任务5
格式化输入时%d%d%d和%d %d %d 的不同之处
6. 实验任务6
随机生成数的又一次练习。和一次猜中的终止程序。以及3次都没猜中的谜底揭示。