第一道题目, 使用指针创建一个二维整型数组,并通过用户输入初始化数组的元素。然后计算并输出所有元素的和

要求输入示例

刚开始尝试实现的结果是这样的

很疑惑,为什么结果会多出来10,换了几个数字和数组大小,结果总是和预期不同

猜测可能是访问越界,导致访问数组的值不正确

通过搜索得知,二维数组涉及到一个动态分配的问题

int** arr = (int**)malloc(sizeof(int*)* hang);         //申请一个二级指针,用来记录有多少个指向整型的指针。行数
for (int i = 0;i < hang;i++){
    arr[i] = (int*)malloc(sizeof(int)* lie);           //循环,为每行分配列数的内存
}

其中,int**是指向整个一维数组的指针,即整个二维数组,int*则是指向一维数组

将动态分配加上后,果然,数值计算就正确了


而第二道题目

编写一个C程序,使用指针创建一个一维数组,并通过用户输入初始化数组的元素,然后通过计算每个元素(大写,小写,空格,数字)出现的次数

要求:

一开始,我使用的是scanf,却忽略了一点,scanf(“%s”)只能接收字符串,不能接收空格等内容,导致无法成功统计

换了gets_s后就正常运行了,但是gets_s限制的长度理应是只要不超过即可,但是限制的值太大又会导致无法输出

于是我又尝试了fgets,然后输出就正常了

fgets(str1,128,stdin);


题目3

编写一个C程序,通过文件指针创建一个input.txt,并且向里面写入YYDDHel,后面读取input.txt并且把每个字符转化成二进制,并且将每个字符循环右移它的索引值

要求

思路是有,但是移位实现有点迷糊

一开始有数据溢出现象,memset后,再调整一下限制,就解决了,可以正常打印2进制

现在需要的就是将数据移位它的索引值的数量,由题可以看出来是左移

搜索后得到一个思路,可以分别将值右移n位,再将值位移8-n位(YYDDHell长度为8),然后用或(|)运算将两个位移过后的数合并,最后得到值

于是用了一个函数来实现