C语言博客作业04--数组
1.本章学习总结
1.1 思维导图
1.2 本章学习体会及代码量学习体会
1.2.1学习体会
经过了一两个星期的来回磨练,终于可以正常使用数组来进行算题。开始的时候在一维数组的排序中到处碰壁,而后在二维数组的排序中再次被干倒,在字符的输入输出中也是很迷茫,在不断地刷题中才熟练了起来,最重要的是找到思路才能更好地完成任务。
1.2.2 代码累计
2.PTA总分
2.1截图PTA三次题目集:一维数组、二维数组和字符数组共3次题目集的排名得分
2.2 我的总分:
3.1 PTA题目1
第一题:通过特定输入,来记录数据。当管理员输入0,结束程序应输出当天的读者借书次数和平均阅读时间。
注意:由于线路偶尔会有故障,可能出现不完整的纪录,即只有S没有E,或者只有E没有S的纪录,系统应能自动忽略这种无效纪录。另外,题目保证书号是书的唯一标识,同一本书在任何时间区间内只可能被一位读者借阅。
3.1.1 算法分析
定义整形变量 number; hh,mm, count flag[number] =1; //表示此书已借出 number 表示书号 hh 借书小时 mm 分钟 count表示借书的次数 flag[number] =1 用来判断是否有被借出去,防止出现错误情况
定义字符型变量 ch; 输入ch 来确定表示借书还是还书 ,然后进行记录时间
for(i=0;i<n;i++) 记录天数
while(number!=0) 判断是否退出循环,每天一个
scanf("%d %c %d:%d",&number,&ch,&hh,&mm); 输入
and then 进行判断是否开始计时 if (ch== 'S') 开始计时
else if (ch== 'E') && if (flag[number]) 停止计时 时间差为time
time=time/count; 计算平均时间
printf("%d %.0f\n",count,time); 按题目要求输出
3.1.2代码截图
3.1.3 PTA提交列表及说明
- 本题的重点就是怎么判断是否出现错误输入、如何去计算时间差和结束的次数。弄懂了这些之后基本就可以解决了。
3.2PTA题目2
第一题:给出行数,输出该行数对应的螺旋矩阵。
3.2.1 算法分析
定义二维数组 a[100][100]; 记录数据
定义整形变量 n,n1,flag n用来输入,n1记录n,输出的时候控制换行,flag用来记录循环次数是否减一。
if(x-1<0)
x++; flag = 1; end if 判断是否要换方向递加
if(flag == 1)
flag = 0; -> x--; end if 判断循环次数是否要减一
for(int x = i;x < n-1;x ++)//竖着向下递加
a[x+1][n-1] = a[x][n-1] + 1;
for(int x = n-1;x > i;x --)//横着向左递加
a[n-1][x-1] = a[n-1][x] + 1;
for(int x = n-2;x > i;x --)//竖着向上递加
a[x][i] = a[x+1][i] + 1;
最后输出二维数组。
3.2.2 代码截图
3.2.3 PTA提交列表及说明
- 本题就是要找准转行的时机,注意循环的次数,换行的时间就可以了
3.3 PTA题目3
第三题:输入2个大数,每个数的最高位数可达1000位,求2数的和。
3.3.1 算法分析
定义整形变量 max,i,y,flag,i1,y1 max记录数组较长的长度作为循环变量使用 i,y记录长度 i1,y1复制长度,用于后面的判断结束条件
定义字符型变量 num,op 数组a[1001],b[1001]
scanf("%s%s",&a,&b); 输入 记录大数的每一个数字
i=strlen(a); y=strlen(b); 记录长度
for(int m = max;y>=0;m--,y --) 循环相加,从最后一个加到前面,改变数组长度较长的数组作为结果
输出结果数组即可
3.3.2 代码截图
3.3.3 PTA提交列表及说明
- 本题还有那个字符加减的时候要记得减去‘0’
- 在第一位需要进一的时候需要直接输出一个1,因为数组会越界
4.代码互评
-
同学的代码:
-
我的代码:
4.2 二者的不同
- 他的代码m来表示要赋予的值,用x,y来表示数的位置,会更加的直观
- 我的代码是一直+++只是注意换方向的问题,找逻辑就OK了
- 他的代码量少,简洁有效,要向大佬学习