实验1
实验任务一
task1-1
代码1 #include <stdio.h> 2 int main() 3 { 4 int a = 1; 5 while (a < 3) 6 { 7 a++; 8 printf(" O \n"); 9 printf("<H>\n"); 10 printf("I I\n"); 11 } 12 return 0; 13 14 }
实验结论
实验总结
可以用循环语句也可以直接写两次代码。但是遇到复制多次的情况还是用循环语句吧。
task1-2
代码
1 #include <stdio.h> 2 int main() 3 { 4 5 printf(" O O\n"); 6 printf("<H> <H>\n"); 7 printf("I I I I\n"); 8 return 0; 9 10 }
实验结论
实验总结
这个实验除了用这个代码我也不知道还有没有其他代码表示了。总觉得还能更简洁,这种办法是个笨办法。
实验任务二
代码
#include <stdio.h> int main() { int n, sum; scanf_s("%d", &n); int i = 1; sum = 0; while (i <= n) { sum = sum + i; i++; } printf("sum=%d\n", sum); return 0; }
实验结论
写法一和写法二都是可以的。写法三和写法四则会有点问题。“*”,“/”号的运算等级一样,则式子便从左到右计算,数据类型又是以int储存的,所以在写法三中,如果n为奇数,或者在写法四中,n为偶数,均不能达到题目要求。
实验总结
显然,写法一和二要比我自己写的补足代码简洁,但是如果是我自己重写一个新代码来实现要求,代码应该没有这么多行。个人还是比较喜欢用循环语句,这玩意太好玩了。
实验任务三
代码
#include <stdio.h> int main() { int a, b, t; a = 3; b = 4; printf("a = %d, b = %d\n", a, b); t = a; a = b; b = t; printf("a = %d, b = %d\n", a, b); return 0; }
实验结论
line11-13是为了将a,b值相互交换。变量t起到的是一个储存的作用,先将a的值赋予t,将a赋予b的值后再将t的值赋予b,完成交换,防止a或b的值在交换时丢失,从而不能进行交换。
实验总结
很巧妙的一个方法,我自己肯定想不出来用一个变量来进行储存这件事。这个技巧在往后的写代码会大有用处。
实验任务四
代码
#include <stdio.h> int main() { int x, t, m; x = 654; printf("x = %d\n", x); t = 0; m = x % 10; t = t *10 + m; x = x / 10; m = x % 10; t = t * 10 + m; x = x / 10; m = x % 10; t = t * 10 + m; x = x / 10; printf("t = %d\n", t); return 0; }
实验结论
line7到line22的作用就是将x的个、十、百位的数字进行重新排列(倒过来),用取余取出那些数字。
实验总结
代码冗长,不喜欢,可以用一个循环语句里面套一个判断语句,这样既可以弄四位数,也可以更大的数。还有,为什么要加line22的x=x/10,如果是判断的话需要加,但是在这个代码里显得太多余了,删掉或者不删掉所得结果是一样的。这破代码太长了>_<
实验任务五
代码
1 #include <stdio.h> 2 int main() 3 { 4 float a, b, c; 5 scanf_s("%f%f%f", &a, &b, &c); 6 if ((a + b) > c && (a - b) < c && (b - a) < c) 7 printf("能构成三角形\n"); 8 else 9 printf("不能构成三角形\n"); 10 11 return 0; 12 }
实验结论
实验总结
个人认为难点是if()里的条件,尤其是a-b绝对值小于c这个,要分两种情况,不然容易造成例如“a=4,b=3,c=1时,这个三角形存在”的结果(事实上这个结果是错误的)。而且在if()里面似乎不能加上abs函数,不然会把abs看成int abs。
实验任务六
代码
1 #include <stdio.h> 2 #include<math.h> 3 int main() 4 { 5 6 int year; 7 float y; 8 y = pow(10, 9); 9 year = y / (365 * 24 * 60 * 60) + 0.5; 10 printf("10亿秒约等于%d年\n", year); 11 return 0; 12 }
实验结论
实验总结
10亿这个数字有点大,所以在网上找了个函数来表示。最考智商的是四舍五入。10亿秒约等于31.7年,如果是int来表示数据,则是31年,不是四舍五入。但是如果在line 9的式子中加上0.5就很好解决了。这个解决方法同样是向网上的大佬请教的,不得不说非常巧妙。
实验任务七
代码
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int main() 5 { 6 7 int n; 8 srand((unsigned)time(NULL)); 9 n = rand() % 41 + 60; 10 printf("n = %d\n", n); 11 return 0; 12 }
实验结论
实验总结
rand的用法要掌握一下。没有搞懂第8行为什么要这么写。没有第8行时,结果只是60,第8行是srand(0)时,结果只是98,不明白。。。
实验任务八
代码
1 #include <stdio.h> 2 int main() 3 { 4 char ans1, ans2; 5 printf("每次课前认真预习、课后及时复习了没? (输入y或Y表示有,输入n或N表示没有) : "); 6 ans1 = getchar(); 7 getchar(); 8 printf("\n动手敲代码实践了没? (输入y或Y表示敲了,输入n或N表示木有敲) : "); 9 ans2 = getchar(); 10 if ((ans1=='y'||ans1=='Y' )&&(ans2 == 'y'||ans2=='Y')) 11 printf("\n罗马不是一天建成的, 继续保持哦:)\n"); 12 else 13 printf("\n罗马不是一天毁灭的, 我们来建设吧\n"); 14 return 0; 15 }
实验结果
line7那个getchar非常重要,因为当我们输入字母例如“n“时,相当于输入了两个字符”n"和“\n",又因为getchar每次只读一个字符,剩下个那个字符是储存起来,留着下次再读的。如果没有line7,那么我们的结果将是”罗马不是一天毁灭的,我们来建设吧“,因为第二个getchar所读字符是”\n",故会跳到else那里执行命令。
实验总结
之前做小游戏的时候没有line7,所以一直做不成功。请教大佬,大佬让我用strcmp(比较字符串)才解决。但是没想到可以再加个gatchar,厉害。