实验二:C语言控制语句应用编程

 *实验任务1

task1.c

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<time.h>
 4 
 5 #define N 5
 6 
 7 int main()
 8 {
 9     int grade ,number;
10     int i;
11     
12     srand(time(0));
13     
14     for(i=0;i<N;++i)
15     {
16         grade=rand()%4+2018;     /*随机得到一个值在【2018,2021】之间*/ 
17         number=rand()%999+1;    /*随机得到一个值在【1,999】之间*/ 
18         printf("%d8330%04d\n",grade,number);      /*程序功能即输出四个不同但人数都为999人的年级里随机的五个人的学号*/ 
19     }
20     
21     return 0;
22 }

*实验任务2

 

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<time.h>
 4 int main()
 5 {
 6     printf("猜猜2022年4月哪一天会是你的Lucky day\n开始咯,你有三次机会,猜吧(1~30\n");      /*其实”猜猜“和”再猜“的结构很相似且可以说作用相同平行,都是后面跟一个输入,只是一个在一开始,一个在以后每一次输入前*/
 7     int x,i=0,s;                                                                     /*所以要将第一次判断啊和后几次区分开来,不能共用一个循环*/
 8     srand(time(0));              /*以时间为种子,为后面生成随机数做铺垫*/
 9     s=rand()%29+1;
10     
11     scanf("%d",&x);
12     if(x<s) 
13         printf("你猜的日期早了,你的lucky day还没到呢\n(1~30):");
14         
15         if(x>s)
16         printf("你猜的日期晚了,你的lucky day已经过啦\n(1~30):");
17         
18         if(x==s)
19         {
20             printf("哇,猜中了:)");
21             exit(0); }
22     
23     do
24     {
25         printf("再猜:");            /*因为“再猜”不能跟在任何一个输出后面,不然就会出现虽然次数已经用完还出现“再猜”字眼并且后面立马结束的情况,所以要独立门户*/
26         scanf("%d",&x);
27         if(x<s) 
28         printf("你猜的日期早了,你的lucky day还没到呢\n(1~30):");
29         
30         if(x>s)
31         printf("你猜的日期晚了,你的lucky day已经过啦\n(1~30):");
32         
33         if(x==s)
34         {
35             printf("哇,猜中了:)");
36             exit(0); 
37          } i++;
38          
39      }while (i<2);            /*因为是do{}while;循环,所以其实已经做了两次循环了,如果用while语句,则条件变为(i<=2)*/
40      printf("次数用完啦,偷偷告诉你:4月,你的幸运数字是%d号",x);
41 }

实验三

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 int main ()
 4 {
 5     char c;
 6     while(scanf("%c",&c)!=EOF,getchar())
 7     {
 8         if(c=='r')
 9         printf("stop!\n");
10 
11         else if(c=='g')
12         printf("go go go\n");
13         
14         else if(c=='y') 
15         printf("wait a minute\n");
16     
17         else
18         printf("something must be wrong\n");
19                 
20     }
21     return 0; 
22  }

 

 

实验四

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int n,a,i,j,m;
 5     double s,p;
 6     while(scanf("%d %d",&n,&a)!=EOF)
 7     {
 8         s=0.0;
 9         for(i=1;i<=n;i++)
10         {
11             m=0;                  /*需要在每次进入这个算m的循环前,将m归零*/
12             for(j=1;j<=i;j++)
13             {
14             m=m*10+a;}            /*得到分母m*/ 
15         p=(double)i/m;            /*注意要加double将p变为浮点型*/
16         s=s+p;
17         }
18         printf("%lf\n",s);
19         
20  }
21 }

实验五

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int i,j;
 5     for(i=1;i<=9;i++)                     /*表示第几行*/
 6     {            
 7         for(j=1;j<=i;j++)                 /*每行要输出几次,观察同一行的表达式之间,后一个都是i*/
 8         {
 9             printf("%d*%d=%d  ",j,i,i*j);
10         }
11         printf("\n");
12     }
13  return 0;
14  } 

实验六

task6_1

 1 #include<stdio.h>
 2 
 3 int main()
 4 {
 5     int n,i=1;
 6     scanf("%d",&n);
 7     do
 8     {
 9         i++;
10     printf(" o\n<H>\nI I\n \n");
11     }while(i<=(n+1));
12 
13 }

task6_2

 1 #include<stdio.h>
 2 
 3 int main()
 4 {
 5     int n,i=1;
 6     scanf("%d",&n);
 7     for(i=1;i<=n;i++)
 8     {
 9         printf(" o   ");
10     }
11     printf("\n");
12     for(i=1;i<=n;i++)
13     {
14         printf("<H>  ");
15     }
16     printf("\n");
17     for(i=1;i<=n;i++)
18     {
19         printf("I I  ");
20     }
21 
22 }

task6_3

 1 #include<stdio.h>
 2 #include<math.h>
 3 int main()
 4 {
 5     int n,i,j,k=0;
 6     scanf("%d",&n);
 7     for(i=1;i<=n;i++)        /*这里的i表示当把一排完整小人看成一个整体后,执行自己这样的命令,输出几次*/
 8     {
 9         k=0;
10         while(k<(i-1))          /*第一行输出时不执行空格语句,所以选用while{}而不用do{}while;不然即使条件不满足也会先执行一次*/
11         {
12          printf("     ");        
13          k++;    
14         }                           
15         for(j=1;j<=((abs(i-n-1)-1)*2+1);j++)
16         printf(" o   ");
17         printf("\n");           /*当某个部位全部输出完成,需要换行,且不能直接加在”o     \n",这样每个循环都会执行一次换行*/
18         
19         k=0;                    /*与实验四的分母的计算一样,要及时赋值0再进行循环,注意赋值0语句的位置!*/
20         while(k<(i-1))             /*注意每个身体部位输出前都要有相同的空格,所以相同的语句会出现在每个部位执行之前*/
21         {
22          printf("     ");
23          k++;    
24         }               
25         for(j=1;j<=((abs(i-n-1)-1)*2+1);j++)
26         printf("<H>  ");
27         printf("\n");
28         
29         k=0;
30         while(k<(i-1))
31         {
32          printf("     ");
33          k++;    
34         }               
35         for(j=1;j<=((abs(i-n-1)-1)*2+1);j++)
36         printf("I I  ");
37         printf("\n");
38     }                        
39     
40 }

当尝试另一种对 i 的定义,使表达式简单一些

 1 #include<stdio.h>
 2 #include<math.h>
 3 int main()
 4 {
 5     int n,i,j,k=0;
 6     scanf("%d",&n);
 7     for(i=n;i>0;i--)             /*i从n开始,逐次递减,但是总循环的次数和改前一样*/
 8     {
 9         k=0;
10         while(k<(n-i))          /*相应的空格的语句也要记得改变*/
11         {
12          printf("     ");
13          k++;    
14         }                           
15         for(j=1;j<=((i-1)*2+1);j++)  /*改变的开始->观察每行小人的个数,发现是从最后一行往上每行增加两个,所以系数为2,且直接定义最后一行为i=1,转到写最大的循环的定义,即第7行*/
16         printf(" o   ");
17         printf("\n");
18         
19         
20         k=0;
21         while(k<(n-i))
22         {
23          printf("     ");
24          k++;    
25         }               
26         for(j=1;j<=((i-1)*2+1);j++)
27         printf("<H>  ");
28         printf("\n");
29         
30         
31         k=0;
32         while(k<(n-i))
33         {
34          printf("     ");
35          k++;    
36         }               
37         for(j=1;j<=((i-1)*2+1);j++)
38         printf("I I  ");
39         printf("\n");
40     }                        
41     
42 }

 

实验总结

1.在实验三中,输入字符时按下的回车键也会被当成一个字符,所以需要再加一个getchar()储存回车字符;

2.在计算实验四的分母m时,采用一个循环,需要注意命令每次循环前m归零的位置,要写在紧挨for语句前,如果写在main函数开头,则执行每次for语句时,不会执行m=0,的命令;

3.实验六的第三问,当遇到某个表达式太复杂时,尝试另一种定义方法

posted @ 2022-04-16 15:11  19度的小常  阅读(42)  评论(2)    收藏  举报