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了
- 他的代码量少,简洁有效,要向大佬学习
posted @ 2018-12-08 20:31  玥如  阅读(391)  评论(0编辑  收藏  举报