实验一
#include<stdio.h> int main() { printf(" O \n"); printf("<H>\n"); printf("I I\n\n"); printf(" O \n"); printf("<H>\n"); printf("I I\n\n"); return 0; }
#include<stdio.h> int main() { printf(" O \t"); printf(" O \n"); printf("<H>\t"); printf("<H>\n"); printf("I I\t"); printf("I I\n\n"); return 0; }
任务2
#include<stdio.h> int main() { int x, y; int r1, r2, r3, r4; x = 1, y = 2; r1 = x + y; r2 = x - y; r3 = x * y; r4 = x / y; printf("r1=%d\n",r1); printf("r2=%d\n",r2); printf("r3=%d\n",r3); printf("r4=%d\n",r4); return 0; }
#include<stdio.h> int main() { float x, y; float r1, r2, r3, r4; x = 1, y = 2; r1 = x + y; r2 = x - y; r3 = x * y; r4 = x / y; printf("r1=%f\n",r1); printf("r2=%f\n",r2); printf("r3=%f\n",r3); printf("r4=%f\n",r4); return 0; }
代码1中数据类型为整型,进行整型的运算,小数位置上的数据便被直接略去了。
任务3
#include<stdio.h> int main() { int n, r1, r2, r3, r4; n = 100; r1 = n * (n + 1) / 2; r2 = (n + 1) * n / 2; r3 = n / 2 * (n + 1); r4 = (n + 1) / 2 * n; printf("n=%d\n", n); printf("r1=%d\n",r1); printf("r2=%d\n",r2); printf("r3=%d\n",r3); printf("r4=%d\n",r4); return 0; }
#include<stdio.h> int main() { int n, r1, r2, r3, r4; n = 101; r1 = n * (n + 1) / 2; r2 = (n + 1) * n / 2; r3 = n / 2 * (n + 1); r4 = (n + 1) / 2 * n; printf("n=%d\n", n); printf("r1=%d\n",r1); printf("r2=%d\n",r2); printf("r3=%d\n",r3); printf("r4=%d\n",r4); return 0; }
n×(n+1)÷2
(n+1)×n÷2
n÷2×(n+1)
(n+1)÷2×n
因为当取奇数值时,r3式子中n先进行整型的除法运算舍去了余数,导致了偏差
取偶数时,r4式子中(n+1)为奇数,舍去了余数。
任务4
#include<stdio.h> #pragma warning(disable:4996)int main() { double x, y; char c1, c2, c3; int a1, a2, a3; scanf("%d%d%d", &a1, &a2, &a3); printf("%d,%d,%d\n", a1, a2, a3); scanf("\n%c %c %c", &c1, &c2, &c3);//上一个回车会进入缓冲区,被读入c1中 printf("%c%c%c\n", c1, c2, c3); scanf("%lf%lf", &x, &y);//输入double用lf float用f printf("%.1lf %.1lf\n", x, y); return 0; }
任务5
#include<stdio.h> #pragma warning(disable:4996) int main() { int a1, a2; char c1, c2; scanf("%d%c%d%c", &a1, &c1, &a2, &c2); printf("a1=%d,a2=%d\n", a1, a2); printf("c1=%c,c2=%c\n", c1, c2); return 0; }
任务6
#include <stdio.h> #pragma warning(disable:4996) int main() { int answer; char words[5000]; printf("网课学习让一些人欢喜一些人忧.\n"); printf("1. 作为一个宅,社恐,觉得这样很好. 有网络,自主学习,很ok.\n"); printf("2. 不喜,不喜,很不喜. 眼睛快瞎了. 脑壳有点卡...\n"); printf("3. 中间派. 不知道. 说不清.\n"); printf("4. 其它...\n"); printf("你的选择: "); scanf("%d", &answer); if (answer == 4) { printf("请补充说明你的想法: \n"); getchar(); gets_s(words); printf("\n"); printf("当遇到问题时, 你会选择:\n"); printf("1. 遇到问题, 就解决问题。不懂的,搜索式学习,逐个攻破.\n"); printf("2. 遇到问题, 不高兴。然后,...,没有了.\n"); printf("3. 其它...\n"); printf("你的选择: "); scanf("%d", &answer); } else if (answer == 1) printf(":)\n"); else if (answer == 2) printf("这样不能解决问题啊...我们选择1好不好:)\n"); else if (answer == 3) { printf("请补充说明你的想法: \n"); getchar(); gets_s(words); } return 0; }
改写后的代码
#include <stdio.h> #pragma warning(disable:4996) int main() { int answer; char words[5000]; printf("网课学习让一些人欢喜一些人忧.\n"); printf("1. 作为一个宅,社恐,觉得这样很好. 有网络,自主学习,很ok.\n"); printf("2. 不喜,不喜,很不喜. 眼睛快瞎了. 脑壳有点卡...\n"); printf("3. 中间派. 不知道. 说不清.\n"); printf("4. 其它...\n"); printf("你的选择: "); scanf("%d", &answer); if (answer == 4) { printf("请补充说明你的想法: \n"); //getchar(); gets_s(words); printf("\n"); printf("当遇到问题时, 你会选择:\n"); printf("1. 遇到问题, 就解决问题。不懂的,搜索式学习,逐个攻破.\n"); printf("2. 遇到问题, 不高兴。然后,...,没有了.\n"); printf("3. 其它...\n"); printf("你的选择: "); scanf("%d", &answer); } else if (answer == 1) printf(":)\n"); else if (answer == 2) printf("这样不能解决问题啊...我们选择1好不好:)\n"); else if (answer == 3) { printf("请补充说明你的想法: \n"); //getchar(); gets_s(words); } return 0; }
我不能输入我的想法,而是直接终止了程序
原因:3后面输入了一个回车,其进入了缓冲区,导致本应输入我的想法的位置被占用,程序直接结束
加上getchar()使回车被消耗在了此处,不会占用我的想法的位置