实验1
实验任务1
实验代码+运行结果:
1:
#include <stdio.h> #include <stdlib.h> int main() { printf(" O \n"); printf("<H> \n"); printf("I I \n"); system("pause"); return 0; }
运行结果截图:
1-1:
#include <stdio.h> #include <stdlib.h> int main() { printf(" O \n"); printf("<H> \n"); printf("I I \n"); printf(" O \n"); printf("<H> \n"); printf("I I \n"); system("pause"); return 0; }
运行结果截图:
1-2:
#include <stdio.h> #include <stdlib.h> int main() { printf(" O\t O \n"); printf("<H>\t<H> \n"); printf("I I\tI I \n"); system("pause"); return 0; }
运行结果截图:
实验任务2
实验代码+运行结果:
#include <stdio.h> #include <stdlib.h> int main() { double a, b, c; scanf_s("%lf%lf%lf", &a, &b, &c); if(a+b>c && a+c>b && b+c>a) printf("能构成三角形\n"); else printf("不能构成三角形\n"); system("pause"); return 0; }
实验任务3
实验代码+运行结果:
#include <stdio.h> #include <stdlib.h> int main() { char ans1, ans2; // 用于保存用户输入的答案 printf("每次课前认真预习、课后及时复习了没? (输入y或Y表示有,输入n或N表示没有) : "); ans1 = getchar(); // 从键盘输入一个字符,赋值给ans1 getchar(); // 思考这里为什么要加这一行。试着去掉这一行,看看对运行有没有影响。 printf("\n动手敲代码实践了没? (输入y或Y表示敲了,输入n或N表示木有敲) : "); ans2 = getchar(); if ((ans1=='y' || ans1=='Y') && (ans2=='y' || ans2=='Y')) // 待补足,判断用户回答ans1和ans2都是小写y或大写Y printf("\n罗马不是一天建成的, 继续保持哦:)\n"); else printf("\n罗马不是一天毁灭的, 我们来建设吧\n"); system("pause"); return 0; }
(另外几种结果测试符合预期,此处不赘述)
思考题:当line9处的代码删去之后,我发现在运行终端我对第一个问题作答后然后按下回车后,第二个问题我没有作答的机会,程序直接就会打印最终结果。我一开始认为这个单独的getchar是初始化的意思,就是将第一次输入的答案给清除掉,然后第二个问题重新输入。但是当我在一个问题中同时输入字符‘y y’时,我发现这个答案也满足ans1和ans2为y的条件,也就是说,这个单独的getchar不是初始化的作用。所以我询问了ai工具,然后我得知了计算机在为程序分配内存时会开辟出一个叫做缓冲区的空间,专门用来存放键盘输入的内容,然后当我们调用键盘输入程序时,它会按顺序依次读取缓冲区里面的内容。也就说这个程序的逻辑如下(以y为例):1.我分别输入y回车y 从上到下的getchar分别读取了'y' '\n' 'y' 此时符合程序设计要求。2.我一次性输入y空格y 与1同理,依然满足条件。3.我去掉单独的getchar后,然后我输入y空格y,第二个问题的getchar读取的内容是空格字符,所以不满足条件。!!!!《但是》,当我直接输入yy,程序符合要求了。同理,当我不去掉getchar时,我连续输入yyy,程序依然满足条件。由此,便明白了键盘输入的本质,以及单独的getchar的意义。
实验任务4
实验代码+运行结果截图:
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() { double x, y; char c1, c2, c3; int a1=0, a2=0, a3=0; scanf("%d%d%d", &a1, &a2, &a3);//出错在没有&字符 printf("a1 = %d, a2 = %d, a3 = %d\n", a1,a2,a3); scanf("%c%c%c", &c1, &c2, &c3); printf("c1 = %c, c2 = %c, c3 = %c\n", c1, c2, c3); scanf("%lf %lf", &x, &y);//出错在lf以及中间的逗号(,) printf("x = %f, y = %lf\n",x, y); return 0; }
实验任务5
实验代码+运行结果截图:
// 计算10亿秒约等于多少年,并打印输出 #include <stdio.h> int main() { int year; // 补足代码 // ××× year = 1000000000 / (24 * 60 * 60); printf("10亿秒约等于%d年\n", year); return 0; }
实验任务6
实验代码+运行结果截图:
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <math.h> int main() { double x, ans; while (scanf("%lf", &x) != EOF) { ans = pow(x, 365); printf("%.2f的365次方: %.2f\n", x, ans); } return 0; }
实验任务7
实验代码+运行结果截图:
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <math.h> int main() { double C,F; while (scanf("%lf", &C) != EOF) { F = (9 * C) / 5 + 32; printf("摄氏度C = %.2f,华氏度F = %.2f\n", C, F); } return 0; }
实验任务8
实验代码+运行结果截图:
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <math.h> int main() { double a,b,c,s,S; while (scanf("%lf %lf %lf", &a,&b,&c) != EOF) { s = (a + b + c) / 2; S = sqrt(s * (s - a) * (s - b) * (s - c)); printf("三角形的面积为S=%.3f",S); } return 0; }
实验总结:
此次实验,是对于理论学习的一次深度复习。纸上得来终觉浅,对于代码的理解不是从书上看出来了,而是从一次次debug中,一次次报错,一次次解决问题中得来的。对于编程的学习,重在理解,更重在实践。