2022-2023-1 20221309《计算机基础与程序设计》第十三周学习总结

 

这个作业属于哪个课程

<班级的链接>

这个作业要求在哪里

<作业要求的链接>https://www.cnblogs.com/rocedu/p/9577842.html#WEEK13 

这个作业的目标

C语言程序设计》第十二章

作业正文

  https://www.cnblogs.com/Plame/p/16928467.html

教材学习内容总结

C语言程序设计》第十二章:结构体数据类型,共用体数据类型,枚举数据类型,定义数据类型;结构体变量,结构体数组,结构体指针的定义与初始化;结构体成员的引用,成员选择运算符,指向运算符;向函数传递结构体变量,结构体数组,结构体指针;动态数据结构,动态链表。

教材学习中的问题和解决过程

问题1:结构体和共用体二者的区别是什么?

解决方案:

 

 

结构体和共用体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。

 

 

结构体占用的内存大于等于所有成员占用的内存的总和(成员之间可能会存在缝隙),共用体占用的内存等于最长的成员占用的内存。共用体使用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉。

 

 

 

 

代码调试中的问题和解决过程

问题1:找不出问题

 

 

 

解决方案:查找资料得

#include <stdio.h>

void  Print(char **arr, int len); //*arr改成**arr

  void main() 

{

    char  *pArray[] = {"Fred","Barrey","Wilma","Betty"};

    int    num = sizeof(pArray) / sizeof(char*);       

     

    printf("Total string numbers = %d\n", num);

    Print(pArray, num);

}

void  Print(char **arr, int len)  //*arr改成**arr

{

    for (int i=0; i<len; i++)

    {

        printf("%s\n", arr[i]);//*arr[i]改成arr[i]

    }

}

 

但还是不明白为什么char后加*,arr前面为什么加两个*。

查资料得:char*指字符指针

1、char*的使用         

//char*对应char变量的地址外,还 //一重指针对应的是一维数组

char str[] = "hello";                   

char* ch = str;         //ch等同于str

printf(" %s",ch);

2、char**的使用

char**对应char* 变量的地址外,还//二重指针对应的是指针数组,而不是二维数组。

char *str[] = {"hello","world"};         

char **ch = str ;                 //ch等同于str

printf("%s\n",ch[0]);

printf("%s\n",ch[1]);

————————————————

原文链接:https://blog.csdn.net/modi000/article/details/107154520

问题2:

 

 

 

 

如何将数字字符转化为整数?

 

 

解决方案:#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#define N 100

int main()

{

    char str[N];

    printf("Please enter a string:");

    gets(str);

    printf("the result of output:\n");

    int i,j,a[20],temp,num=0;

for(i=0;i<strlen(str);i++)

{

if(*(str+i)>='0'&&*(str+i)<='9')

{

temp=*(str+i)-'0';

for(j=i+1;j<strlen(str);j++)

{

if(*(str+j)>='0'&&*(str+j)<='9')

{

temp=temp*10+*(str+j)-'0';

i++;

}

else

break;

}

*(a+num)=temp;

num++;

}

}

for(i=0;i<num;i++)

printf("%10d\n ",*(a+i));

    return 0;

}

可以通过数字字符的ASCALL码来进行计算。上面的s[i]与’0‘是字符,这两个相减其实就是他们的Ascall码相减的结果,这些数字字符Ascall码相减的结果和整型数字相减的结果是相同的。

'0’是一个char类型的字符,其ASCII码就是一个int型的数字48,在运算过程中等同于int。
所以将字符型数字 ’1‘ 转化为 整型数字 1 : ‘1’-‘0’=1 相当于49-48 = 1.

上周考试错题总结

其他:无

解决方案:

 

学习进度条

 

代码行数(新增/累计)

博客量(新增/累计)

学习时间(新增/累计)

重要成长

目标

3000行

20篇

200小时

 

第十三周

100/1200

1/28

15/180

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2022-11-26 22:08  221309张致远  阅读(29)  评论(0编辑  收藏  举报