实验文档2

关于第二次实践课作业

实验结论

task1.c 

 1 #include<stdio.h>
 2 #include<time.h>
 3 int main()
 4 {
 5     const int N = 5;
 6     const int N1 = 397;
 7     const int N2 = 476;
 8     const int N3 = 21;
 9 
10     int cnt;
11     int random_major, random_no;
12 
13     srand(time(NULL));
14 
15     cnt = 0;
16     while (cnt < N) {
17         random_major = rand() % 2;
18 
19         if (random_major) {
20             random_no = rand() % (N2 - N1 + 1) + N1;
21             printf("20248329%04d\n", random_no);
22         }
23         else {
24             random_no = rand() % N3 + 1;
25             printf("20248395%04d\n", random_no);
26         }
27 
28         cnt++;
29     }
30 
31     return 0;
32 }

回答问题

question1:解释random_no=rand()%(N2-N1+1)+N1;的功能

answer1:N2-N1+1是该专业的总人数,利用随机数取余可以得到【0,N2-N1)内任一整数,并加上该专业的初始学号N1,可得该专业内任意学生的学号

question2:解释random_no=rand()%N3+1;的功能;

answer2:N3是该专业的总人数,利用随机数取余可以得到【0,N3-1)内任意整数,并加上该专业的初始学号N2,可得该专业内任意学生的学号

question3:解释这个程序的功能

answer3:生成5个随机学号,并且这些学号分为两类,每类学号有不同的前缀和范围(其代表着不同的专业),通过随机选择专业(通过random_major的结果为0或为1决定if的走向从而选择专业)并在该专业范围内生成随机学号并按照指定的格式打印出来

 

task2.c

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include<stdio.h>
 3 #include<math.h>
 4 int main()
 5 {
 6     double a, b, c;
 7     double delta, p1, p2;
 8     while (scanf("%lf %lf %lf", &a, &b, &c) != EOF) {
 9         if (a == 0) {
10             printf("a = 0,invalid input\n");
11             continue;
12         }
13         delta = b * b - 4 * a * c;
14         p1 = -b / 2 /a;
15         p2 = sqrt(fabs(delta)) / 2 / a;
16 
17         if (delta == 0) {
18             printf("x1 = x2 = %.2g\n", p1);
19         }
20         else if (delta > 0) {
21             printf("x1 = %.2g , x2 = %.2g\n", p1 + p2, p1 - p2);
22         }
23         else {
24             printf("x1 = %.2g + %.2gi,", p1, p2);
25             printf("x2 = %.2g - %.2gi\n", p1, p2);
26         }
27     }
28     return 0;
29 }

 

task3.c

 1 #include<stdio.h>
 2 int main()
 3 {
 4     char ch;
 5 
 6     printf("请从键盘输入字符用来表示交通信号灯颜色:");
 7     printf("(输入r表示red,输入g表示green, 输入y表示yellow)\n");
 8 
 9     while ((ch = getchar()) != EOF) {
10         getchar();
11 
12         if (ch == 'r') {
13             printf("stop!\n");
14         }
15         else if (ch == 'g') {
16             printf("go go go\n");
17         }
18         else if (ch == 'y') {
19             printf("wait a minute\n");
20         }
21         else {
22             printf("something must be wrong...\n");
23         }
24 
25         }
26         
27     return 0;
28 }

 

 

task4.c

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include<stdio.h>
 3 #include<stdlib.h>
 4 int main()
 5 {
 6     double x;
 7     double max = 0;
 8     double min = 20000.0;
 9     double sum = 0.0;
10 
11     printf("输入今日开销,直到输入-1终止:\n");
12     while (1) {
13         scanf("%lf", &x);
14 
15         if (x == -1) {
16             break;
17         }
18         sum += x;
19         if (x > max) {
20             max = x;
21         }
22         if (x < min) {
23             min = x;
24         }
25 
26     }
27     printf("今日累计消费总额:%.1lf\n", sum);
28     printf("今日最高一笔开销:%.1lf\n", max);
29     printf("今日最低一笔开销;%.1lf\n", min);
30     system("pause");
31     return 0;
32 }

 

task5.c

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include<stdio.h>
 3 #include<stdlib.h>
 4 int main() {
 5     int a, b, c;
 6     printf("输入三角形三边边长:\n");
 7     
 8     while (scanf("%d %d %d", &a, &b, &c) != EOF) {
 9         if (a + c <= b || a + b <= c || b + c <= a) {
10             printf("不能构成三角形");
11         }
12         else if (a == b && b == c) {
13             printf("等边三角形");
14         }
15         else if (a == b || b == c || a == c) {
16             printf("等腰三角形");
17         }
18         else if (a * a + b * b == c * c || a * a + c * c == b * b || b * b + c * c == a * a) {
19             printf("直角三角形");
20         }
21         else {
22             printf("普通三角形");
23         }
24     }
25     return 0;
26 }

 

task6.c

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include<stdio.h>
 3 #include<stdlib.h>
 4 #include<time.h>
 5 int main()
 6 {
 7     srand(time(NULL));
 8     int day = rand() % 30 + 1;
 9     int x;
10     printf("猜猜2024年11月哪一天会是你的lucky day\n");
11     printf("开始喽,你有三次机会,猜吧(1-30):");
12     
13     int  cnt = 0;
14     int  tr = 0;
15     for (cnt = 0; cnt < 3; cnt++) {
16         scanf("%d", &x);
17         if (x == day) {
18             printf("哇,猜中了:)");
19             tr = 1;
20         }
21         else if (x > day) {
22             printf("你猜的日期晚了,你的lucky day在前面哦\n");
23         }
24         else {
25             printf("你猜的日期早了,你的lucky day还没到呢\n");
26         }
27         if (tr==1) {
28             break;
29         }
30         if (cnt < 2) {
31             printf("再猜(1-30):");
32         }
33     }
34     if (tr == 0&&cnt==3) {
35         printf("次数用光啦。偷偷告诉你,11月你的lucky day是%d号", day);
36     }
37 
38 
39     return 0;
40 }

 实验总结

1.可以通过设置变量并赋予其一定的计算法则,实现单一出口

2.格式控制符%g,其用法是:如果数据值是整数,会自动按整数输出, 如果数据值是小数,会自动按小数并按指定精度输出

3.%0,其用法是输出数值时指定左面不使用的空位置自动填0;%d,其用法是输出一定数据长度d的数据,如果数据长度<d,左补空格

其中task1.c中%04d即实现了左补0,且数据长度为4的数据作为符合格式的学号

4.利用rand()生成随机数时注意引入头文件#include<stdlib.h>

此外为了确保每次运行程序时生成的随机数序列不同,需引入头文件#include<time.h>

引入时间库,用于获取当前时间,以当前系统时间作为随机种子,作为随机数生成的种子

并且要在主函数中加入srand(time(NULL))

<stdlib.h>用于调用rand()和srand()函数,以及<time.h>用于获取当前时间

5.引用:

Tips: 与伪随机数生成相关的两个标准库函数: rand(), srand()

int rand(void) 返回一个0~RAND_MAX之间的伪随机数。 头文件(也有的在) rand()函数原型及使用示例参考: https://en.cppreference.com/w/cpp/numeric/random/ra nd

void srand(unsigned int seed)

为rand()设置随机种子。通常以时间作为随机种子,即srand(time(NULL)) 头文件(也有的在), srand()函数运行及使用示例参考: https://en.cppreference.com/w/cpp/numeric/random/sr and   

6.单个字符需要用’ch‘引好,eg ch==’c‘

7.试图实现字符型变量的多组输入时

while()中(ch=getchar())!=EOF是正确写法(既读取了字符又检查了是否到达文件末尾)

而不能舍弃()写成 ch=getchar()!=EOF的形式

在这种错误的形式下,使用了赋值运算符 = 而不是比较运算符 ==。此外,getchar() != EOF 的结果应该被用来控制循环,而不是赋值给 ch,故要添加()

posted @ 2024-10-10 23:34  知返返返  阅读(8)  评论(0编辑  收藏  举报