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.罗列本周一些错题。

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

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

  • 相关阅读:
    买房的贷款时间是否是越长越好?https://www.zhihu.com/question/20842791
    asp.net cookie and session
    leelazero and google colab
    download file by python in google colab
    physical processor, core, logical processor
    通过powershell操作eventlog
    openxml in sql server
    get the page name from url
    How to Execute Page_Load() in Page's Base Class?
    Difference between HttpContext.Request and Request
  • 原文地址:https://www.cnblogs.com/lmb171004/p/8093156.html
Copyright © 2011-2022 走看看