实验2 C语言分支与循环基础应用编程

发布时间 2023-10-20 16:23:50作者: Forgiver

摘要

一、实验目的

二、实验准备

三、实验内容

四、实验结论

 task1

源代码:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <time.h>
 4 #define N 5
 5 #define N1 374
 6 #define N2 465
 7 
 8 int main()
 9 {
10 int number;
11 int i;
12 srand( time(0) ); // 以当前系统时间作为随机种子
13 for(i = 0; i < N; ++i) {
14 number = rand()%(N2 - N1 + 1) + N1;
15 printf("202383290376%04d\n", number);
16 }
17 
18 system("pause");
19 return 0;
20 }

结果:

问题1:确保number在374~465之间

问题2:随机取数number,实现学号随机抽取

 

task2

 源代码:

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

结果:

 

task3

源代码:

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

结果:

为测试猜中后执行语句,补充结果:

 

task4

源代码:

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

结果:

 

task5

源代码:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 4 
 5 int main()
 6 {    int i,j,ans;
 7     for(i = 1; i <= 9; i++){
 8         for(j = 1; j <= i; j++){
 9             ans = i*j;
10             printf("%dx%d = %2d  ",j,i,ans);
11         }
12     printf("\n");
13     }
14     system("pause");
15     return 0;
16 }

结果:

 

task6

源代码:

 

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

结果:

 

 

五、实验总结

1.新认识了一个报错语句:Run-Time Check Failure #3 - The variable 's' is being used without being initialized.

原因是s没有初始化赋值

2.在task4中总是第一次结果运行为正确,原因在于s和k在一遍循环过后初始值并不等于0,而是以上一次的计算结果为初始值

需要把每次重新赋值为0也加入循环之中

3.在小人题中再次体会到了编程中拆分的奇妙之处,小人的头,身体,腿,是分开来打印的,空格的输出也类推为分行打印。即先打空格(不换行)然后打出头,再打空格,然后不换行打身体......amazing!!!

一开始时完全被图形的思维迷惑住了,一直在思考如何”哐“地空出一整个小人的位置,然后复制粘贴xN,emmmmm......然后就是根本不可能绕开”换行“的操作,一败涂地。

(#希望能警记这次经验&教训)