#2022-2023-1 20221401 《计算机基础与程序设计》第十三周学习总结
2022-2023-1 20221401 《计算机基础与程序设计》第十三周学习总结
作业信息
这个作业属于哪个课程 | <班级的链接>https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP |
---|---|
这个作业要求在哪里 | <作业要求的链接>https://www.cnblogs.com/rocedu/p/9577842.html#WEEK13 |
这个作业的目标 | 学习《C语言程序设计》教材,学习云班课资源,完成总结 |
作业正文 | https://www.cnblogs.com/wangningwangning/p/16928642.html |
教材学习内容总结
学习了《C语言程序设计》第12章的剩余内容,能够嵌套使用结构体,并把结构体作为函数形参。了解了链表实现的原理与方法,能自己初步创建一个链表。理解了结构体产生的初衷和原因,了解了结构体的原理和使用方法,知道了结构体需要先定义类型再定义变量名,能够自己定义一些简单的结构体并用结构体解决一些简单的问题。
学习了《C语言程序设计》第11章的部分内容,对指针与函数的结合运用有了一定的了解,能够自己用指针访问和改变数组中的元素,也能正确使用作为函数形参的指针变量。
教材学习中的问题和解决过程
-
问题1:在学习了链表这个数据结构后,想知道链表具体应用在了哪些方面?
-
问题1解决过程:查找相关资料后得知:链表是一种使用广泛的通用数据结构,它也可以用来作为实现栈、队列等数据结构的基础,基本上除非需要频繁的通过下标来随机访问各个数据,否则很多使用数组的地方都可以用链表来代替。链表插入删除效率极高,达到O(1)。对于不需要搜索但变动频繁且无法预知数量上限的数据,比如内存池、操作系统的进程管理、网络通信协议栈的trunk管理等等等等,缺了它是绝对玩不转的。
-
问题2:书上说在形参上加上了const类型限定符是为了不希望在被调函数中修改实参数组元素的值,这样可以保护形参不会在函数体内被修改。但是下图中的代码为啥修改了被限定的字符指针而编译系统没有报错?很好奇这是为什么。
-
问题2解决过程:上网搜索const限定符的相关资料后得知:有时候我们需要定义一个值不可改变的变量,这时候我们就可以使用const来修饰这个变量(最用使用const变量而不是宏)。
const对象一经创建后就不可改变其值,所以它必须初始化
const int money = 1024;//定义money为常量——常变量,不可修改它的值。
money = 2048;// error: assignment of read-only variable 'money'
当有指针或者引用指向const对象时,会产生一个临时对象,这样指针或引用就不会改变const常量的值了。
例1
优秀的编译器一般不会为"整数型const对象"设置另外的存储空间(除非使用pointer或reference指向它)。至于具体如何来做取决于编译器的实现。
include
using namespace std;
int main()
{
const int money = 9;
cout << hex << &money << endl;//取的是临时对象的地址
int *p = (int*)&money;
*p = 1;//改变的是临时对象
cout << hex << p << endl;
cout << "money = " << money << " *p = " << *p << endl;
int &r = const_cast<int&>(money);
r = 2;//改变的是临时对象
cout << hex << &r << endl;
cout << "money = " << money << " r = " << r << endl;
cout << "*p = " << *p << " r = " << r << endl;
return 0;
}
代码调试中的问题和解决过程
- 问题1:这道题满分25分,第一次提交之后25分只拿了0分,但我试验了很多样本数据一直没有错误。很想知道我为啥拿不到一点分数
- 问题2解决过程:与老师细致交流我的问题与对比我的代码和老师的代码的区别后,我知道了我的部分问题所在,就是没有严格按照题意去写代码,即我没有将所有功能都放到fun函数里,导致主函数出现了很多本应在fun函数里的功能,显得很复杂。同时我的代码在转10进制时的操作也有些麻烦。
老师给的代码如下:
include<stdio.h>
include<string.h>
include<math.h>
int fun(char b[20], int i, int a)
{
for (i = strlen(b) - 1; i > -1; i--)
a += (b[i] - 48) * pow(8, (strlen(b) - i - 1));
return a;
}
int main()
{
int a = 0, i, flag = 0;
char b[20];
printf("输入一个八进制字符串(5位) 😊;
gets(b);
if (strlen(b) > 5)
{
printf("错误: 字符串太长\n\n");
flag = 1;
}
for (i = 0; i < strlen(b); i++)
{
if (b[i] < '0' || b[i] >= '8')
{
printf("错误:%c 不是一个八进制字符\n\n", b[i]);
flag = 1;
break;
}
}
if(!flag)
{
a = fun(b, i, a);
printf("输入的八进制字符串为%s", b);
printf("\n%s 转换成十进制整数为: %d\n", b, a);
}
}
- 问题2:在完成下图中插入字符串的题时,运行出来的代码结尾总是带着一串乱码,检查代码时自己的代码把字符串数组中的每一个字符都转移到了正确的位置,没有转移错位置也没有转移位置,就很好奇问什么会出现乱码。
- 问题2解决过程:回想课上老师的提醒和书后的注意事项,发现自己没有把'\0'放到字符串末尾,导致了乱码的出现,经历这次错误我再也不会忘了字符串结尾的'\0'.
代码托管
上周考试错题总结
上周无测试题
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 100/100 | 2/2 | 10/10 | |
第二周 | 50/100 | 2/4 | 10/10 | |
第三周 | 50/100 | 1/5 | 10/10 | |
第四周 | 50/100 | 1/6 | 10/10 | |
第五周 | 50/100 | 2/8 | 10/10 | 在完成XOR加密作业时有自己的想法并且通过自学相关知识成功付诸实践 |
第六周 | 50/100 | 1/9 | 10/10 | |
第七周 | 50/100 | 1/10 | 10/10 | |
第八周 | 50/100 | 1/11 | 10/10 | 在n个人报数问题中提高了自己自我检查错误的能力,完善了自己思维上的漏洞。 |
第九周 | 50/100 | 1/12 | 10/10 | |
第十周 | 50/100 | 1/13 | 10/10 | |
第十一周 | 50/100 | 1/14 | 10/10 | |
第十二周 | 250/100 | 1/15 | 10/10 | |
第十三周 | 250/250 | 1/16 | 10/10 |