四、实验结论
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、未思考清楚就动手,导致了思维混乱,边调试边理清思路效率较低;经比较还是先思考清楚算法再编写效率更高。