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可以插入代码块,用```即可。

posted @ 2022-11-20 18:37  20221414徐鹿鸣  阅读(40)  评论(0编辑  收藏  举报