首页 > 编程语言 > 详细

C语言博客作业04--数组

时间:2018-12-08 21:01:45      阅读:272      评论:0      收藏:0      [点我收藏+]

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了
- 他的代码量少,简洁有效,要向大佬学习

C语言博客作业04--数组

原文:https://www.cnblogs.com/yue7521/p/10088909.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!