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