C语言博客作业--一二维数组
一、PTA实验作业
题目1:7-2 求整数序列中出现次数最多的数
1. 本题PTA提交列表
2. 设计思路
定义变量n,i,j用于循环,count1,count2用于数的重复个数,number表示做为重复次数最多的数
输入n的值并定义a[n]
for i=0 to i<n 输入a[i] end
for i=0 to i<n i=i+2
for k=0 to k<n
若a[i]=a[k]
count1++
若a[i+1]=a[k]
count2++
end
若count1>=count2且count1>=sum
sum=count1;number=a[i]
若count1<count2&&count2>=sum
sum=count2;number=a[i+1]
count1=count2=0
end
输出number和sum的值
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
最初的编辑运行结果认为可以,交上后部分正确
调试发现值与理想的不符
位置不同结果有正确与错误的区别,思考后加上与sum的比较后答案正确
题目2:7-3 出生年
1. 本题PTA提交列表
2. 设计思路
定义变量year,year1,n, k=0,j=0,用于循环x用于存放每次的年份flag=0,count=0;
定义数组 a[4];
输入year,number的值
year1=year
while当year>0时
a[0]=year1/1000;//直接保留每个位的值
a[1]=year1/100%10;
a[2]=year1%100/10;
a[3]=year1%10;
for j=0 to j<3
for k=j+1 to k<=3
若a[k]=a[j]
break;
若k=3
count++
end
end
若count=n-1
break;
year1++;count=0;
while end
输出year1-year,year1的值
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
一开始编辑时输出不对,调试发现count不一样,没想象中的结果,改正后pta部分正确
自己在调试的时候感觉a[j]值奇怪,自己用printf让其输出
调整循环后感觉输出正确,但pta显示不正确
自己一开始很奇怪,觉得自己输出正确,后才知道自己的理解有问题,自己没有把赋上去的0很好的考虑进去
自己在借鉴别人代码,思考之后,把对数组a的赋值进行修改,保证都有四个数值,后才调整正确
题目3:7-7 找鞍点
1. 本题PTA提交列表
2. 设计思路
定义变量n变量i,j,k用于循环,flag,count用于判断
输入n的值,并定义数组a[n][n]
定义下标变量row=0,col=0
for i=0 to i<n
for j=0 to j<n
输入a[i][j]
end
end
for i=0 to i<n
row=i;flag=0
for j=0 to j<n
若a[i][j]>=a[row][col]
col=j;
若j=(n-1))
for k=0 to k<n
若a[row][col]>a[k][col]
flag=1;break
若k=n-1
count++;
输出row与col的值
end
end
end
若flag=1且count=0
输出NONE
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
自己一开始输出不正确,读自己代码时发现输出应该是row与col而不是i与j,会变化
改正后输出没有预想的效果,调试之后发现自己的条件设定问题,在count前加了k=n-1的条件
感觉输出可以,pta部分正确
思考后在一个判断条件上加了等号
二、截图本周题目集的PTA最后排名
三、同学代码结对互评
1.互评同学名称
林岑
2.我的代码、互评同学代码截图
-
林岑的
-
我的
3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题
林岑的代码是利用嵌套循环把每个数与所有的数比较,比较巧妙的用flag1和flag2=0初值比较,直接能循环得出最大的值
我的代码是两两比较,找出重复较多的数在比较,用较多的数替代较少的数,直至得出最多的数及其数量
我更喜欢林岑的代码,我觉得她的代码比较简洁易懂,在循环比较,赋值方面的做法比较巧妙
四、本周学习总结
1.你学会了什么?
1.1 C中如何存储字符串?
可以定义字符数组实现,数组长度上限取80,以‘\n‘作为输入结束符
1.2 字符串的结束标志是什么,为什么要结束标志?
字符串的结束标志是‘\0’,‘\0’可以用来控制字符数组的输入与输出,控制循环
1.3 字符串输入有哪几种方法?
- 使用gets()吸收整个字符串遇到回车结束
- 使用scanf语句输入(注意没有&)遇到空格与回车结束
- 使用循环如while(link[k]=getchar()!='\n')结尾记得加link[k]='\0'
1.4 数字字符怎么转整数,写个伪代码?
- 定义数字字符number
- 输入数字字符number的值
- number=number-‘0’
- 输出number的值
1.5 16进制、二进制字符串如何转10进制?写伪代码?
- 16进制
定义数组si[60]存放字符串,number存放结果,i用于下标递增
输入字符串
如果是0~9的数字字符
number=number *16+si[i]-‘\0’
如果是A~F的大写字母
number=number*16+si[i] - 'A'+10
如果是a~f的小写字母
number=number*16+si[i] - 'a'+10
- 10进制
定义数组str[80]用于存放2进制数,定义number存放转换为十进制的结果,i用于递增
输入字符串
number=number* 2+str[i]-'0'
输出number的值
2.本周的内容,你还不会什么?
自己在回答这道题的时候基础不够扎实,i++,所以其判断是从第二个字符开始的,而且scanf输出时遇空格停止,所以空格后不用考虑
自己在改错题查找方面还要加强
自己在本周pta数组方面对于比较复杂的数组会有些找不到思路,考虑不够,在数组的调试方面也不太知道从哪里下手
3.期中考试小结
3.1 你认为为什么没考好?
- 对于课本的知识没有很好的消化吸收,课堂派的错题也没有好好理解,对待预习作业不够认真
- 选择题得分不好,自己在一些赋值,运算符的计算顺序上不够扎实
- 自己手写代码的失误较多,平常有Dev-c++的帮助找错,在自己手写时,就出现许多问题
- 自己读代码的能力不够,一些题目的要求没有很好的理解
- 在代码改错方面也应加强,平常要注意小细节
3.2 罗列错题
- 自己在读这题的时候有些懵,自己对赋值的顺序和!的使用比较模糊
- 运算顺序是!>&&>||,对于A选项先!b为0判断0==0是1,c选项!(b+b)是0&&(c-a)结果是0,再判断或(a-1)是0
第一空输出为1.0/(i*i)
最后的返回值为return a,自己在读题时思考不够
猜数字的编程题,自己的分较低,除了对随机数的不了解之外,自己平常打代码依赖c++而且写题时没有较好的考虑就直接写,思路不够清晰周全
随机数的用法:srand(time(NULL));int num=rand()%100
3.3 下半学期要怎么调整C的学习?
- 自己要合理安排复习时间,多回归课本,不局限于打代码
- 多理解,查看自己的错题,减少自身的失误
- 多读读别人的代码,提高自己的读代码能力
- 减少对Dev-c++的依赖,自己草稿找错验证