zoukankan      html  css  js  c++  java
  • C语言第十次博客作业--结构体

    一、PTA实验作业

    题目1: 结构体数组按总分排序

    1. 本题PTA提交列表

    2. 设计思路

    
    求出每名学生的总分
    定义i,j循环变量
    for i=0 to n
       for j=0 to 3
          p[i].sum+=p[i].score[j]将三个成绩累加即为总分
    end
    
    总分从高到低排序
    定义i,j循环变量
    定义结构体中间变量t
    for i=0 to 5
       for j=0 to 5-i
          冒泡排序从高到低
    end
    

    3.代码截图

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

    • 答案错误:交换数值时只交换了总分,前面的都没被交换,导致答案输出错误。

    • 调试过程:

    解决办法:将中间变量定义成结构体变量,交换时将结构体的内容整体交换

    题目2:有理数比较

    1. 本题PTA提交列表

    2. 设计思路

    struct y{
    	int mol;
    	int den;
    }n,m;    //定义表示分子分母的结构体
             //并同时定义两个结构体变量m,n
    定义a,b,c,d存放原始值
    输入两个有理数
    两个有理数进行通分
    比较两分子大小 并利用a,b,c,d输出结果
    

    3.代码截图

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

    • 答案错误:本题并不难,只用将两个数通分,再比较分子大小就好了。错误在于最后输出时的值已经被改变,输出错误

    • 调试过程:

    解决办法:定义四个变量放原本的值,最后利用他们输出。

    题目3:时间换算

    1. 本题PTA提交列表

    2. 设计思路

    struct time{
    	int hh;
    	int mm;
    	int ss;
    } now,result;   //定义表示时间分钟秒钟的结构体
                    //并同时定义一个现在时间的和一个结果时间结构体变量
    
    定义n为要加的秒数
    输入结构体变量now和n
    利用时间60进制来换算出结果时间(此处运算不太好表述)
        result.ss=(now.ss+n)%60;//根据各自与60的进制关系计算
        result.mm=(now.mm+(now.ss+n)/60)%60;
        result.hh=now.hh+(now.mm+(now.ss+n)/60)/60;
    if result.hh等于24   令它等于0
    

    3.代码截图

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

    • 部分正确 :最后一秒到0点时输出的是24点

    • 调试过程:

    解决办法:加入一个条件判断

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

    三、阅读代码

    整数分解为若干项之和

    这道题是周三上机的一道题目,当时看了题目有思路,但是一直做不出来。回来以后上网一查,发现原来可以用递归的思路来解决这道题,确实简单很多。
    从上面的代码不难看出他的递归出口是累加的总和等于了输入的 N。但是我觉得递归的特点是形式简单,但是实际上细节繁多。需要注意非常多细节。

    #include<stdio.h>
    
    int N;
    
    int s[31]; // 存放划分结果 
    int top = -1; // 数组指针 
    int count = 0; // 统计输出的次数 
    int sum = 0; // 拆分项累加和 
    
    void division (int i);
    
    int main ()
    {
        scanf ("%d", &N);
        
        division (1);
        
        return 0; 
    }
    
    void division (int i) {
        if (sum == N) {
            count ++;
            printf("%d=", N);
            int k;
            for (k=0; k<top; k++) {
                printf("%d+", s[k]);
            }
            if (count%4 == 0 || s[top] == N) {
                printf("%d
    ", s[top]);
            } else {
                printf("%d;", s[top]);
            }
            return;
        } // 输出部分 
        if (sum > N) {
            return;
        }
        for (int j=i; j<=N; j++) {
            s[++top] = j;
            sum += j; 
            division (j);
            sum -= j;
            top --;
        } // 算法主体 
    }
    

    时间换算

    这是戴洁的代码,她的方法简单明了,将所有时间都换成秒数,最后在换算回去。理解上面比我的60进制好很多,而且她最后输出也利用的时%02d来解决0点的问题,不用像我一样再加一个if判断。

    四、本周学习总结

    1.总结本周学习内容

    结构体、共用体、枚举这种构造数据类型特点

    • 结构体:

    结构体是把不同类型的数据组合成一个整体的自定义数据类型,它更像是数组的进化版,数组中的元素必须类型相同。

    struct student
    {
       int num;
       char name;
       int grade;
    };
    

    结构体类型声明描述结构的组织形式,不分配内存。

    • 共用体:

    共用体是使几个不同类型的变量共占一段内存(相互覆盖)

    union 共用体名
    {
        类型标识符   成员名;
        类型标识符   成员名;
        .........
    };
    
    • 结构体与共用体
      区别:储存方式不同
      联系:两者可相互嵌套

    • 枚举:

    枚举元素按常量处理,在定义时由程序员指定,之后不能对他们赋值。

    递归函数原理

    • 递归函数就是直接或者间接的调用自己本身的函数。
      缺点:递归快速耗内存,不方便阅读和维护,效率低
      优点:简洁,适合解决阶乘、涉及相反顺序的编程问题

    • 尾递归:最简单的调用函数,无需返回调用,相当于循环。

    宏定义:用宏来定义一些符号变量,方便程序的编制。

    • 用途:
      符号常量,如PI,数组定义大小,以增加程序的灵活性
      简单的函数功能实现
      为程序书写带来一些方便

    2.罗列本周一些错题。

    • 这一题的循环条件错了导致最后一个数没加上

    • 这道题的第二个空确实不会,听老师讲完后才明白为什么要这样定义。

  • 相关阅读:
    关于ExtJSExtender 拓荒者
    jquery easyui datagrid 分页数据请求 拓荒者
    ExtJS布局:制作后台管理布局 拓荒者
    WebAPI用法 拓荒者
    WordPress实践:上传文件时提示“缺少临时文件夹” 拓荒者
    【转】Javascript MD5编码 拓荒者
    看懂ExtJS的API 拓荒者
    IIS下实现wordpress URL静态化 拓荒者
    再谈angularjs DI(Dependency Injection)
    Javascript覆盖率(jstd)报表解析Maven插件
  • 原文地址:https://www.cnblogs.com/lmb171004/p/8093156.html
Copyright © 2011-2022 走看看