C语言博客作业--一二维数组
一、PTA实验作业
题目1:7-2 求整数序列中出现次数最多的数
1. 本题PTA提交列表
2. 设计思路(用代码表示扣分)
- int n为输入的整数i,j,是循环变量,count=0表示出现最多的数的次数,indexindex表示出现最多的数的下标;
- 定义数组a储存输入的值,b储存数组中每个数出现的次数
- 输入("%d",&n);
- 将输入的数赋给数组for(i=0;i<n;i++),scanf("%d",&a [i]);
- 令数组b的前n个数的初值为-1
- for(i=0;i<n;i++)for(j=0;j<n;j++)
- 如果(a[i]==a[j])b[i]++;
- 寻找出现次数最多的数:for(i=0;i<n;i++)
- 如果 if(b[i]>count)
- count=b[i];最大值下标index=i;
- 输出:("%d %d",a[index],count);
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
- 在对表示出现次数的数组b赋初值时出现错误,开始将b中每个数的初值赋为-1,想的是a[i]和b[i],表示同一个值就不算了,调试后发现错误并改正
- 最小值出现错误,粗心导致的错误,习惯了将循环变量的初值赋为1,忘了在数组中第一个变量的下标是1
题目2:将数组中的数逆序存放
1. 本题PTA提交列表
2. 设计思路(用代码表示扣分)
- 定义整型变量n,i,temp用于交换过程的中间值,整形数组a【10】
- 输入n
- for 0 to n-1
- 将输入的整数存入数组a中
- for 0 to n/2-1
- 令temp=a【i】,a [i]=a [n-i-1];a [n-i-1]=temp;
- 输出a【0】
- for 1to n-1
- 输出a【i】
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
- 循环的设置没有习惯,从0开始应该是到n-1结束,虽然有n个元素但下标是从0到n-1,开始没有注意到导致错误
题目3:
1. 本题PTA提交列表
2. 设计思路(用代码表示扣分)
- 定义整型变量n,i,j,x,index用于交换过程的中间值整形数组a【9】
- 输入n
- for 0 to n-1,将输入的整数赋给数组元素
- 输入x
- 从a【0】开始比较,if x<a【i】,则index=i;a[index]=x;
- for i to n,a[i+1]=a[i],调出大循环
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
- 问题基本都在于下标的转换,最初没有另外定义变量作为转换过程中间值,导致数组中的数一个个被消掉
- 寻找出它要插入的位置后,将其与下一位进行了转换,但让后续数的下标逐个后移后移方法不恰当,最后一个数总是被消掉变成0,参考了同学的一些方法后改进
二、截图本周题目集的PTA最后排名。
三、同学代码结对互评
1.互评同学名称
郭锐倩
2.我的代码、互评同学代码截图
同学代码截图:
我的代码截图:
3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?
- 我的代码更长更复杂一点,定义了两个数组,同学只定义了一个,且篇幅较短,更好一点
- 我们的主要区别在于对于对每个数出现次数的统计上,我用了数组来保存每个数的出现次数,同学设置了变量,只保留出现次数最多的数的出现次数
- 就本题,同学的代码显然是更好的,思路清晰,代码简洁,给了我新的启发
四、本周学习总结
1.你学会了什么?
1.1 C中如何存储字符串?
-c 语言中用一维字符数组来储存:类型名 数组名[数组长度]
- eg.储存字符串happy:char s [6]={"happy"}或char s [6]=
1.2 字符串的结束标志是什么,为什么要结束标志?
- '\0'是字符串的结束标志
- 因为字符串并没有显示地给出有效字符的个数,所以必须用结束符来决定是否结束循环
1.3 字符串输入有哪几种方法?
- 1.使用循环结构输入,用结束符来结束循环:scanf("%c", )语句
- 2.scanf("%s", )输入,但不能碰到空格
- 3.gets()直接吸收整个字符,遇‘\n’终止
1.4 数字字符怎么转整数,写个伪代码?
- 定义字符型变量和整型变量
- 读入字符型变量
- 整型=字符型-‘0’
- 按字符型输出
1.5 16进制、二进制字符串如何转10进制?写伪代码?
- 定义变量n存放十进制数,a [ i ]存放十六进制字符串
- while(a[i]!='\0' )
- ifa[i]为字符0~9:number=number16+a[i]-'0';
- ifa[i]为字符A~Z:number=number16+a[i]-'A'+10;
- ifa[i]为字符a~z:number=number*16+a[i]-'a'+10;
2.本周的内容,你还不会什么?
- 各种排序方法不是很熟练和熟悉
- 做pta时的一些思路总是想不到,
- 用到数组时用devc查错的嫩肤李明显不足
3.期中考试小结
3.1 你认为为什么没考好?
- 1.平时只注重pta上的作业,只在乎那个结果是否正确,忽略了好多知识点
- 2.学习不认真,不扎实,很多概念和小知识自己根本没有掌握
- 3.阅读程序方面能力不足,平时欠缺对这方面的训练
- 4.自我差错能力不行,平时例如很小的标点符号错误都是通过devc发现的
3.2 罗列错题。
:选择第十八题
- 错因:没有弄清各个运算符的优先级,没有先转成二进制然后再转回八进制,没有注意到取反、异或、左移、&运算符操作后不改变原先变量的值
- :先将057转化为二进制:00101111,再将其取反,再将00101111左移两位后与00101111进行&操作,再将操作结果和00101111的取反值进行异或操作,最后将其转换为八进制
:填空第三题:
- 错因:没有将字
- 改正:转换为字符即可
改错第一题
- 第三、四、五的错误没有改正
- 第三个因为对函数的调用的使用不熟练,没有发现问题;第4.5个错误因为时间紧,没有认真去阅读程序,没静下心来分析,没有看出来
- 第三问要将变量前的int去掉,第四问改成不等于,第五问的返回值应该是a
编程题第一题:
- 随机数不会使用,变量定义的有些乱,中间过程繁琐,书写不规范
- 使用随机数先加上编译预处理命令:#include<stdlib.h>,;srand(time(null));int number=rand()%100;
3.3 下半学期要怎么调整C的学习?
- 1.利用好预习的价值,未上课前好好看课本并完成课堂派上的习题,明白哪里是自己看不懂的地方,上课要更加注意听讲
- 2.做好笔记,事实证明只听老师上课讲一次下课后百分之九十九都忘记了,自己不懂得,重要的知识点要及时记录,课后温习
- 3.做好课后复习工作,上完一堂课,就该回过头来看一下这一堂课的课本内容以及自己记录的笔记
- 4.对待作业要认真, 错题要弄懂,不能只关注结果
- 5.pta上的题以后尽量手写代码,遇到问题不能总借助devc,先自己分析