C语言博客作业--结构体

一、PTA实验作业

题目1:时间换算

1. 本题PTA提交列表

2. 设计思路

定义变量n;n存放需要加的秒数,定义结构体变量times
输入已知时间和需加秒数scanf("%d:%d:%d",&times.h,&times.m,&times.s);
scanf("%d",&n);
计算加上n后的秒数times.s=times.s+n;
只要times.s大于60,利用每次循环减去60,分钟加上1,知道秒数小于60
while(times.s>=60)
times.m=times.m+1;
times.s=times.s-60;
times.m和times.h也一样
while(times.m>=60)
times.h=times.h+1;
times.m=times.m-60;
while(times.h>=24)
times.h=times.h-24;
输出最终结果printf("%02d:%02d:%02d\n",times.h,times.m,times.s);

3.代码截图

4.本题调试过程碰到问题及PTA提交列表情况说明。

  • 本题其实很简单,但是一直都是部分正确,是因为我步明白%02d的概念,所以无法输出正确答案,然后问了可爱的小牙牙,就输出结果了,又多学到了一个新知识。

  • 修改前:

  • 修改后:

题目2:结构体数组中查找指定编号人员

1. 本题PTA提交列表

2. 设计思路

定义变量i,flag=0;i作为循环变量,flag作为辅助变量,判断是否存在与n[]相同编号的成员
定义结构变量struct student A;A存放找到的成员,以便返回
for i=0 to N
如果找到if(std[i].num[0]num[0])
把std赋给A A=std[i];
并且改变辅助变量的值 flag=1;
跳出循环 break;
循环结束后,if(flag
0),判断是否找到改人员
没有这A赋值0
返回A

3.代码截图

4.本题调试过程碰到问题及PTA提交列表情况说明。

  • 一开始我的思路是想找到对应的编号后直接把找到的对应的stu[i]变量返回但是,提示上写的是返回的变量类型与主函数中的p不同,然后我就自己定义了一个结构体变量。

  • 修改前:

题目3:通讯录的录入与显示

1. 本题PTA提交列表

2. 设计思路

3.代码截图

4.本题调试过程碰到问题及PTA提交列表情况说明。

  • 这道题有俩个错误,一个是输入时的错误,一个是输出时的错误。第一:输入时我把电话号码,手机号码,性别同时放在一个scanf语句中输入,这就会导致输入无法达到我们要的效果。第二:在输出是输出性别的时候我使用的是%s,一步一步的调试之后发现到了输出性别的时候系统会崩溃,然后就改换了%c就好了。

  • 修改前:

二、截图本周题目集的PTA最后排名。

三、阅读代码

  • 我选的代码是一个大家都玩过的游戏贪吃蛇的中间一小部分的代码,因为没有前面的一部分所以很难看的明白,只有从开头看下来,才可以明白。其中void show()的作用主要是用来显示整个游戏的界面,sleep函数是用来刷新界面,if(over)是判断蛇死了后的操作,system("cls");用于清屏,为下次游戏作准备,输入‘q'结束,输入’r'重新开始。选这个代码主要的原因是:代码的缩进十分的好,并且代码量少,因为主要都是使用函数来实现的,这可以大大降低了代模块间的耦合度,并且会使得思路非常的清晰,值得学习。
void show() {
    int i, j, x, y;
    for (i = 0; i < 17; i++) { 
        for (j = 0; j < 17; j++) {
            printf("%c", map[i][j]);
        }
        printf("\n");
    }
    while (1) {
        Sleep(speed); 
        turn();
        move();
        if (over) { 
            while (1) {
                char ch = _getch();
                if (ch == 113) {
                    return;
                }
                else if (ch == 114) {
                    ini();
                    break;
                }
            }
        }
        system("cls");
        for (i = 0; i < 17; i++) {
            for (j = 0; j < 17; j++) {
                printf("%c", map[i][j]);
            }
            printf("\n");
        }

四、本周学习总结

1.学习内容的总结

  • 结构体:这是我找的一篇介绍结构体的博客,自己觉得十分详细,很实用。

  • 公用体:在进行某些算法的C语言编程的时候,需要使几种不同类型的变量存放到同一段内存单元中。也就是使用覆盖技术,几个变量互相覆盖。这种几个不同的变量共同占用一段内存的结构,在C语言中,被称作“共用体”类型结构,简称共用体。注:在某些书籍中可能称之为“联合体”,但是“共用体”更能反映该类型在内存的特点。
    共用体类型数据的特点
    1.同一个内存段可以用来存放几种不同类型的成员,但是在每一瞬间只能存放其中的一种,而不是同时存放几种。换句话说,每一瞬间只有一个成员起作用,其他的成员不起作用,即不是同时都在存在和起作用。
    2.共用体变量中起作用的成员是最后一次存放的成员,在存入一个新成员后,原有成员就失去作用。
    3.共用体变量的地址和它的各成员的地址都是同一地址。
    4.不能对共用体变量名赋值,也不能企图引用变量名来得到一个值。

5.共用体类型可以出现在结构体类型的定义中,也可以定义共用体数组。反之,结构体也可以出现在共用体类型的定义中,数组也可以作为共用体的成员。

  • 枚举:是和结构体同一人写的博客,他对枚举列每一种情况都列举得非常详细,无论是在我自己做笔记还是复习,都要向他学习。

  • 递归函数的深入使用
    递归函数的原理:递归的底层实现其实是一个栈.栈的特点是后进先出,也就是最后进入栈的事件是最先被处理的.
    比如说你现在这个函数。首先在main函数里面实现f1(4),这时候进入f1这个函数,执行到return n*f1(n-1);这里。
    第一次计算的时候是f(n),进入之后会直接return F(n-1)4.也就是把这一项入栈.
    然后这一项到底是多少还不知道需要继续计算.
    第二次递归就是 f(n-1-1)
    (n-1).入栈.
    直到满足n<=1.计算出最后入栈的f(1)=1;return这句就限定了最终栈的大小.
    然后开始出栈.第一个出栈的是f(1);已经计算得出是1;
    第二个出栈是f(2).由f(1)可以得知f(2).
    这样直到栈空,阶乘也就计算出来了。

2.本周的错题

  • 这道题是我们c语言期中考试考过的题,但是我还是错了,希望下次错一遍的题就不要在错第二次。

posted on 2017-12-24 23:00  不是本人  阅读(271)  评论(0编辑  收藏  举报

导航