实验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次都没猜中的谜底揭示。

 

posted @ 2024-10-09 20:23  安东尼23  阅读(23)  评论(0编辑  收藏  举报