实验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,厉害。

 

posted @ 2023-03-02 17:04  崩崩大圆帽  阅读(34)  评论(0编辑  收藏  举报