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执向了\0的后一个。


        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是小写
这一题要注意先是函数的嵌套调用再是输出

posted @ 2017-12-23 10:38  Airoure  阅读(301)  评论(2编辑  收藏  举报