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


    一、PTA实验作业

    题目1:按等级统计学生成绩

    1. 本题PTA提交列表

    2. 设计思路

    for i=0 to i=n
        如果分数大于等于85,就让grade为A
        如果分数大于等于75,就让grade为B
        如果分数大于等于60,就让grade为C
        如果分数小于60,就让grade为D,count++  count用于统计不合格人数
    end i
    返回count
    

    3.代码截图

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

    • 本题没错

    题目2:6-4 结构体数组按总分排序

    1. 本题PTA提交列表

    2. 设计思路

    calc函数
    定义i
    for i=0 to i=n
        将三科总分存入sum
    end
    sort函数
    定义struct student 类型的temp
    冒泡排序:for i=0 to i=n-1
                        for j=0 to j=n-i-1
                            如果前一个的总分小于后一个交换两个结构变量
                        end
                    end
    

    3.代码截图

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

    • 本题没错

    题目3:7-2 时间换算

    1. 本题PTA提交列表

    2. 设计思路

    struct time{
    	int hour;
    	int minute;
    	int second;
    }now     //用来存放时间的时分秒
    定义pass存放过去时间
    输入现在时间
    输入过去时间
    将过去时间加在now.second
    while(now.second>=60)
        now.minute++;
        now.second-60;    //表示过去一分钟
    while(now.minute>=60)
        同上     //表示过去一小时
    while(now.hour>=24)
        now.hour-=24;     //过去一天
    

    3.代码截图

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

    • 答案错误:时间格式应该是59后00我却设置为59后60导致错误

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

    三、阅读代码

    1.strcat函数的源代码

    char * __cdecl strcat (
            char * dst,
            const char * src
            )
    {
            char * cp = dst;
    
            while( *cp )
                    cp++;                   /* find end of dst */
           /*不能写成while(*cp++)/ 因为这样的话为*cp为0时还会+1,导致cp执向了的后一个。
    
    
            while( *cp++ = *src++ ) ;       /* Copy src to end of dst */
    
            return( dst );                  /* return dst */
    
    }
    

    他的做法非常的精简,特别是while( *cp++ = *src++ )这一句要是我肯定不会把赋值语句放在while里面,虽然这样也是可行的,而且更精简,但它的做法也是可行的
    不失为一个好做法

    2.strcmp函数

    int __cdecl strcmp (
            const char * src,
            const char * dst
            )
    {
            int ret = 0 ;
    
            while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst)
                    ++src, ++dst;
    
            if ( ret < 0 )
                    ret = -1 ;
            else if ( ret > 0 )
                    ret = 1 ;
    
            return( ret );
    }
    

    我觉得这个代码就是好在! (ret = *(unsigned char *)src - *(unsigned char *)dst) && dst这个循环条件设置的很精练,定义了一个ret变量存放两数组比较的结果,
    并且用&&
    dst这个条件保证会比较到dst的最后一个字符或两字符串不相等,这样大大减少了代码量,还用了const来保证数组的值不会被改变,在不需要改变数组的
    情况下这样定义可以很好的避免意外

    四、本周学习总结

    1.总结本周学习内容

    • struct结构体是一种自定义型变量,可以用于存储一个变量的个个属性,使他们整体化
      • 结构的定义:单独定义,混合定义,无类型名定义
      • 结构的使用:一般可以用.运算符引用结构中的变量,对于指针来说还可以用->运算符
      • 结构的整体赋值可以一次对多个变量进行操作,但在结构成员数量较多时运行效率很低
    • union共用体和结构体非常相似,只是里面的变量会公用相同内存单元,必要的时候可以用它减少内存的使用
    • 枚举类型enum 类型名{常量1,常量2....常量n} 变量名
      • 枚举元素不是变量,而是常数,因此枚举元素又称为枚举常量。因为是常量,所以不能对枚举元素进行赋值。
      • 枚举元素作为常量,它们是有值的,C 语言在编译时按定义的顺序使它们的值为,1,2,…。
    • 递归实际上是把问题简化为形式相同,但较简单的问题,程序书写时只给出统一形式,到运算时再展开,每经过一次递归,问题就被简化一次
    • 递归的关键在于归纳出递归式子,确定出口,写程序时只要给出运算规律,对于具体过程不要深究

    2.罗列本周一些错题。

    A选项会给出一整串字符串,只有C会输出M
    根据运算符优先级可以知道它最后是对地址进行自增所以错误
    它这里Shangxi和zhangsan比较时要注意z是小写
    这一题要注意先是函数的嵌套调用再是输出

  • 相关阅读:
    文本框设置只读,后台可获取
    div 在同一行的 CSS处理
    在标签中添加属性
    (转)如何使用SignalTap II觀察reg與wire值? (SOC) (Verilog) (Quartus II) (SignalTap II)
    (转)如何使用ModelSim對Megafunction或LPM作仿真? (SOC) (MegaCore) (ModelSim)
    (笔记)TSL235新型光感器件强烈推荐使用
    (转)如何增加SignalTap II能觀察的reg與wire數量? (SOC) (Quartus II) (SignalTap II)
    (转) 如何將10進位轉2進位? (C/C++) (C)
    (转)如何使用ModelSim作前仿真與後仿真? (SOC) (Quartus II) (ModelSim)
    (笔记)关于LM3S片内FLASH编程的一点建议
  • 原文地址:https://www.cnblogs.com/Airoure/p/8081645.html
Copyright © 2020-2023  润新知