2022-2023-1 20221414《计算机基础和程序设计》第12周学习总结
基本信息
这个作业属于哪个课程 | 2022-2023-1-计算机基础与程序设计 |
---|---|
这个作业要求在哪里 | 2022-2023-1计算机基础与程序设计第12周作业 |
这个作业的目标 | c语言第11章 |
作业正文 | https://i.cnblogs.com/posts/edit;postId=16888840 |
教材问题
1.stdin是什么东西?
stdin是标准输入,一般指键盘输入到缓冲区里的东西。
2.fgets函数是什么?
fgets函数功能为从指定的流中读取数据,每次读取一行。其原型为:char *fgets(char *str, int n, FILE *stream);从指定的流 stream 读取一行,并把它存储在 str 所指向的字符串内。当读取 (n-1) 个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。
3.二维数组的行地址、列地址,与元素的存储
1)行地址
1、二维数组中,数组名a的值,是数组a首元素a[0][0]的地址,即&a[0][0],第一行第一个元素的地址;
2、二维数组中,数组名a+1是数组a的元素a[1][0]的地址,即&a[1][0],第二行第一个元素的地址;
2)列地址
1、二维数组中,a[0]的值,即该数组的首元素a[0][0]的地址,即&a[0][0];
2、二维数组中,a[0]+1的值,是数组元素a[0][1]的值,即&a[0][1];
原文链接:https://blog.csdn.net/pl0020/article/details/81199164
补充:若一个二维数组只带一个[],那么它表示的是行首地址。
代码问题
1,如何删除一个字符串数组中的某个元素?
分析:处理字符串,在C语言中,我们把他转换为字符数组,则本质是要处理数组,在数组中删除某一元素的最简单方法是设定一个标记位point初始为0,它代表着当前保存的非删除字符的位置,而循环变量i则是要遍历整个字符数组,在循环时,若遇到删除字符,则i向前进(递增),而point由于当前不是有效字符,所以point不变,当遇到有效字符时,将该字符保存在point的位置,并且point向前进(递增),通过i和point以不同的规律递增,从而找到出有效的字符并逐一覆盖前面的要删除的字符。
原文链接:https://blog.csdn.net/syzdev/article/details/104234227
#include<stdio.h>
#include<string.h>
int main(void)
{
int i, j;
int len;
char s[100];
char c;
printf("Input a string:");
gets(s);
printf("Input a character:");
scanf("%c", &c);
len = strlen(s);
for (i = len; i>=0; i--)
{
if (s[i] == c)
{
for (j = i; j < len; j++) //是通过数组元素的移动进行删除字符,像覆盖一样。
{
s[j] = s[j + 1];
}
}
}
printf("Results:%s\n", s);
}
2.在字符串中插空。与1相似的一道题,结果的最后出现了其他字符,且出现了内存破坏(Run-Time Check Failure #2 - Stack around the variable 's' was corrupted.)
#include<stdio.h>
#include<string.h>
void sssss(char s[200]);
main()
{
char s[1000];
printf("Input a string:");
scanf_s("%s",s,99);
sssss(s);
printf("\nInsert result:%s\n", s);
}
void sssss(char s[200])
{
int i, l;
l = strlen(s);
for (i = l-1; i > -1; i--)
{
s[2* i] = s[i];
s[2* i -1] = '\40';
}
s[2*i]='\0';
}
s[2*i]='\0';//此时i为-1,无法为其结尾附上'\0'。可以改为s[l*2-1]='\0',另外,l还是有len好,不然容易与1混淆。
把循环从l-1开始改为从l开始。这样既可以省去'\0'的另外赋值,也可以防止其他字符的出现。
分析,认为函数中的循环还给s[-1]赋值了,由此破坏了内存。
3.a的涵义?
a表示:首先,要求a对应的存储单元中的数据一定是另一个存储单元的地址。
于是,a表示另一个存储单元中的数据。
int *a = &i
一级指针变量:变量名a实际所指的内容为变量i的地址,即a=&i=&( * a )= * (&a);其中a表示通过a中的内容(i的地址)取值即i。存在两个地址:&a(唯一表示方式)和a(表示方式不唯一,如上)。
链接:https://www.jianshu.com/p/fe0d7ac36988(这篇文章不止于此。强推!)
上周错题
IPv6 operates in parallel with IPv4 addressing, creating essentially two parallel networks.
正确答案:正确
(IPv6与IPv4寻址并行运行,基本上创建了两个并行网络。)
A social network is a collection of related web pages.
正确答案:错误
(社交网络是相关网页的集合。)应该是website。
Metalanguage is a specification of the organization of an XML document.
正确答案:正确
(元语言是 XML 文档组织的规范。)
总结
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第12周 | 160/1800 | 1/18 | 20/120 |
心得
原来markdown可以插入代码块,用```即可。