实验2

发布时间 2023-10-17 10:26:23作者: 热爱睡觉

四、实验结论

1、实验任务1

1.1、代码与截图

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<time.h>
 4 
 5 #define N 5
 6 #define N1 374
 7 #define N2 465
 8 
 9 int main()
10 {
11     int number;
12     int i;
13     
14     srand(time(0));//初始化随机数,以时间为种子 
15     
16     for(i=0;i<N;++i){
17         number = rand()%(N2-N1+1)+N1 ;//在N1N2间取随机整数
18         //其中N1为起始值,(N2-N1+1-1+N1)=N2为终止值 
19         printf("202383290376%04d\n",number); 
20     }
21     
22     return 0;
23 } 

1.2.1、解释line17代码的功能:

rand()%n+a表示在随机数的范围中a是起始值,n-1+a是终止值;

同理,rand()%(N2-N1+1)+N1表示在随机数代范围中,N1为起始值,N2-N1+1-1+N1=N2为终止值;

所以,line17的功能即为为number变量赋以N1~N2(374~465)的一个随机值。

1.2.2、这个程序的功能是什么?

以时间为随机种子,打印五行数字,每一行为:202383290376+常量N1~N2间的随机数(四位,位数不足最前用0补齐);

 

2、实验任务2

2.1、代码与截图 

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

 

3、实验任务3

3.1、代码与截图

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<time.h>
 4 
 5 int main()
 6 {
 7     int day,number,i;
 8     
 9     srand(time(0));
10     day=rand()%30+1;
11     
12     printf("猜猜2023年11月哪一天会是你的lucky day\n开始喽,你有三次机会,猜吧(1~30):");
13      
14         for (i=1;i<=3;++i){
15             scanf("%d",&number);
16         
17             if (number>day)
18                 printf("你猜的日期晚了,你的lucky day已经过啦\n");
19             else if (number<day)
20                 printf("你猜的日期早了,你的lucky day还没到呢\n");
21             else{
22                 printf("哇,猜中了:-)\n");
23                 return 0;
24             }
25         }
26         
27     if (i=3)
28         printf("次数用完啦,偷偷告诉你:11月,你的lucky day是%d号",day); 
29     else
30         printf("再猜(1~30):"); 
31     
32     return 0;
33 }

 

4、实验任务4

4.1、代码与截图

 1 #include<stdio.h>
 2 #include<math.h>
 3 
 4 int main()
 5 {
 6     unsigned n,a,i;
 7     double s;
 8     
 9     while(scanf("%d%d",&n,&a)!=EOF)
10     {
11         s=0;
12         for(i=1;i<=n;++i)
13            s+=i/(a*(pow(10,i)-1)/9);
14         printf("n=%d,a=%d,s=%.6f\n",n,a,s);
15     }
16     
17     return 0;
18 }

 

5、实验任务5

5.1、代码与截图

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int column,line,value;
 5     for (line=1;line<=9;++line){
 6         for (column=1;column<=line;++column){
 7            value=column*line;
 8            printf("%d×%d = %2d  ",column,line,value);    
 9         }
10     if (column=line)
11         printf("\n");
12     }
13     return 0;
14 } 

 

6、实验任务6

6.1、代码与截图

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int n,line,number,space;
 5     
 6     printf("input n:");
 7     scanf("%d",&n);
 8     
 9     for (line=n;line>0;--line){
10 
11             for (space=1;space<=n-line;++space)
12                 printf("   \t");        
13             for (number=1;number<=2*line-1;++number)
14                 printf(" O \t");            
15             printf("\n");
16             
17             
18             for (space=1;space<=n-line;++space)
19                 printf("   \t");    
20             for (number=1;number<=2*line-1;++number)
21                     printf("<H>\t");
22             printf("\n");
23         
24             
25             for (space=1;space<=n-line;++space)
26                 printf("   \t");                
27             for (number=1;number<=2*line-1;++number)
28                     printf("I I\t");            
29             printf("\n");
30     
31     }
32     
33     return 0;
34 }

 

五、实验总结

1、在进行task2程序的编写中出现了如下错误:

 经过排查,发现是未添加一行getchar();的缘故。而此知识点在实验1中已有涉及,现在仍未完全掌握。

2、scanf("%d",&a)中经常少写&,Dev编译时并不会报错,排查问题花了一些时间。

3、未思考清楚就动手,导致了思维混乱,边调试边理清思路效率较低;经比较还是先思考清楚算法再编写效率更高。