2022-2023-1 20221312 《计算机基础与程序设计》第十三周学习总结
班级链接:首页 - 2022-2023-1-计算机基础与程序设计 - 北京电子科技学院 - 班级博客 - 博客园 (cnblogs.com)
作业要求:2022-2023-1 《计算机基础与程序设计》教学进程 - 娄老师 - 博客园 (cnblogs.com)
作业目标:复习C语言语法,学习结构体与联合体、文件操作等。
作业正文:2022-2023-1 20221312 《计算机基础与程序设计》第十三周学习总结 - 20221312付安旭 - 博客园 (cnblogs.com)
教材学习内容总结
学习了结构体与结构体的定义,了解其中的元素构成与其中的地址分配,学习了部分文件操作。
代码调试中的问题与解决过程
- 问题1:对于这样一个程序,为什么它输出的字符串长度不同?
- 问题1解决方案:上网查询资料以及咨询老师可知,字符串中的 \ 作为转义字符在后面为数字时,会转换为八进制下ASCII码对应的值,类似的还有 \x 转换为十六进制下ASCII码的值。
- 问题2:联合体赋值时,怎么会出现这种结果?
- 问题2解决方案:个人经调试,发现ch与a的首地址是相同的,那么在读取数据时,13便会当作int类数据被读入。不过在联合体内部数据读取方式究竟是怎么样的?这里又尝试了一下。 如此看来,int等数据在读入是并不是简单的依次往下读,而是从高地址位向下读入的。由于内部的二进制赋值从低位向高位是00001101 00000001 00000000 00000000,从高位向低位读入时,便是00000000 00000000 00000001 00001101,就是 2 ^ 8 + 2 ^ 3 + 2 ^ 2 + 2 ^ 0 = 269.可以说是比较合理了。
- 问题3:结构体内定义变量的顺序不同,为什么最终内存大小不同?
- 问题3解决方案:个人查阅资料了解到,结构体在为成员分配地址时,有两个要求:第一是要保证成员首地址与结构体首地址之差是该结构体所占空间的倍数,第二是该结构体的总内存是该结构体内所占空间最大的结构类型空间的倍数。那么必然会有一些空间冗余未被分配。在结构体 one 中,double d1 占8个字节,前面仅有15个字节,那么需要空出来1个字节,再将八个字节分给d1,共24个字节。在结构体 two 中,首先是int b2 占4个字节,前面仅有1个字节,那么需要空出来3个字节,同理为了d2前面要空出来6个字节,那么最终two的内存是32字节。据说这种分配是为了优化CPU运算作出的选择。
代码托管
无
上周考试错题总结
上周无考试
感悟
感觉提升代码能力最强的方法不是反复练习直到完全了解它,而是先懂个一知半解,然后去开拓新内容。
一方面,之前的旧知识能在时间的沉淀下逐渐被理解,另一方面,开拓新内容加快进度,也能提升眼界。
事实上,一些语法内更深刻的内容只看课本不太好理解,在未来实践中能更好地深入了解它,如结构体和联合体的内存分配方式。
学习进度条
代码行数(新增/累计) | 博客量(新增/累计) | 学习时间(新增/累计) | 重要成长 | |
第一周 | 0/0 | 4/4 | 12/12 | |
第二周 | 230/230 | 2/6 | 30/42 | |
第三周 | 160/390 | 5/11 | 18/60 | |
第四周 | 200/590 | 2/13 | 14/74 | |
第五周 | 180/770 | 2/15 | 10/84 | |
第六周 | 700/1470 | 5/20 | 20/104 | |
第七周 | 520/1990 | 1/21 | 17/121 | |
第八周 | 680/2670 | 5/26 | 16/137 | |
第九周 | 1100/3780 | 1/27 | 20/157 | |
第十周 | 540/4320 | 1/28 | 14/171 | |
第十一周 | 1300/5620 | 1/29 | 20/191 | |
第十二周 | 550/6170 | 1/30 | 22/213 | |
第十三周 | 1040/7210 | 1/31 | 30/243 |
参考资料
1.计算机科学概论(原书第7版) (豆瓣) (douban.com)
2.C语言程序设计(第4版) (豆瓣) (douban.com)
3.AcWing