考核题目复现
第一道题目, 使用指针创建一个二维整型数组,并通过用户输入初始化数组的元素。然后计算并输出所有元素的和
要求输入示例
刚开始尝试实现的结果是这样的
很疑惑,为什么结果会多出来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),然后用或(|)运算将两个位移过后的数合并,最后得到值
于是用了一个函数来实现
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 SUの小站!
评论