这个作业属于那个课程 | C语言程序设计II |
这个作业要求在哪里 | C语言I作业07 |
我在这个课程的目标是 | 掌握C语言 |
这个作业在那个具体方面帮助我实现目标 | 对switch语句的练习 |
参考文献 | 《C语言程序设计(第三版)》《算法笔记》 |
1.PTA实验作业
1.1 计算天数
本题要求编写程序计算某年某月某日是该年中的第几天。
输入格式:
输入在一行中按照格式“yyyy/mm/dd”(即“年/月/日”)给出日期。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。闰年的2月有29天。
输出格式:
在一行输出日期是该年中的第几天。
输入样例1:
2009/03/02
输出样例1:
61
输入样例2:
2000/03/02
输出样例2:
62
1.1.1数据处理
数据表达:本题用了四个整型变量,其中year表示年份,month表示月份,date表示月份的几号,sum表示通过计算得出表示该日是这年的第几天;
数据处理:
伪代码
1.1.2实验代码截图
1.1.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
2004/1/23 | 23 | 闰年一月 |
2008/3/23 | 83 | 闰年三月 |
2009/12/4 | 338 | 平年随机月份 |
1.1.4 PTA提交列表及说明
提交列表说明:
1.部分正确:在刚开始时输出的闰年在一道二月之间的天数总是多一天,经过分析与平年相比较,闰年在2月有29号,也就是二月二十九号之前的天数应与平年一致,到了二月二十九号之后闰年比平年天数多一;因此我认为在判断为闰年后就天数加一这里出了问题,应把天数加一的条件改为判断为闰年且月份(month)大于2时才执行,所以我将if((year%40&&year%100!=0)||(year%4000))改为if((year%40&&year%100!=0)&&month>2||(year%4000)&&month>2);提交后正确。
1.2 统计学生成绩
本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则:
大于等于90分为A;
小于90且大于等于80为B;
小于80且大于等于70为C;
小于70且大于等于60为D;
小于60为E。
输入格式:
输入在第一行中给出一个正整数N(≤1000),即学生人数;第二行中给出N个学生的百分制成绩,其间以空格分隔。
输出格式:
在一行中输出A、B、C、D、E对应的五分制成绩的人数分布,数字间以空格分隔,行末不得有多余空格。
输入样例:
7
77 54 92 73 60 65 69
输出样例:
1 0 2 3 1
1.2.1 数据处理
数据表达:本题用了九个整型变量,其中A,B,C,D,E用来统计各分段的人数分布,i用来执行循环,n表示人数,m表示每个学生的成绩,result表示m/10并取整,方便以10为一个分段计算人数。
数据处理:
伪代码
1.2.2 实验代码截图
1.2.3 造测试数据
1.2.4 PTA提交列表及说明
提交列表说明:
1.部分正确:第一次提交时部分正确时由于没考虑到有同学100分的情况,PTA提交时就显示了有100时这部分错误,因此我就在原来的switch语句中加了一个case 10就正确了。
1.3挑战进阶题:整数的分类处理
给定 N 个正整数,要求你从中得到下列三种计算结果:
A1 = 能被 3 整除的最大整数
A2 = 存在整数 K 使之可以表示为 3K+1 的整数的个数
A3 = 存在整数 K 使之可以表示为 3K+2 的所有整数的平均值(精确到小数点后 1 位)
输入格式:
输入首先在第一行给出一个正整数 N,随后一行给出 N 个正整数。所有数字都不超过 100,同行数字以空格分隔。
输出格式:
在一行中顺序输出 A1、A2、A3的值,其间以 1 个空格分隔。如果某个数字不存在,则对应输出NONE。
输入样例 1:
8
5 8 7 6 9 1 3 10
输出样例 1:
9 3 6.5
输入样例 2:
8
15 18 7 6 9 1 3 10
输出样例 2:
18 3 NONE
1.3.1 数据处理
数据表达:本题用了五个整型变量和两个浮点型变量,其中n表示输入的数的数量,m表示输入的数,result用来存放输入的数m对3取余的结果,a,b,c,d用来表示不同种类的数
数据处理:
伪代码
1.3.2 实验代码截图
1.3.3 造测试数据
1.3.4 PTA提交列表及说明
1.部分正确:在最后一句if语句中,刚开始写的是if(b=c==0),导致调试时无论如何输出的都是NONE,后调试发现并改正。
2.代码互评
同学代码截图1
同学代码截图2
自己代码截图
- 1.第一位同学在写代码时该同学在输出平年时是对输出闰年的数据进行复制后将二月份的29改为28,这样的代码太长太浪费内存了,我之所以选这份同学的代码是因为我的代码可以说是这个代码的升级,在if语句处做了修改使代码相对少了十几行。
- 2.第二位同学的代码大致和我差不多,但在代码的可读性方面,其年份用y,而我用了year,可读性相对较高。
3.学习总结
3.1 学习进度条
周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
7/7-7/13 | 10 小时 | 235 | 循环语句for的使用以及格式 | 无 |
8/14-8/20 | 8小时 | 197 | 定义全局变量 | 无 |
9/21-9/27 | 17小时 | 537 | 函数的调用 | 无 |
10/28-10/3 | 16小时 | 411 | 数据类型的回顾 | 无 |
11/4-11/10 | 24小时 | 1089 | 数组以及一些算法 | 无 |
3.2 累积代码行和博客字数
3.3 学习内容总结和感悟
3.3.1 学习内容总结
3.3.2 学习体会
本周开始我晚自习在学校ATD协会的ACM战队就行刷题和学习,这也是我这周代码量增长了一大截的原因,在这段刷题的时间,我仿佛找到了刚学这门科目在课后进行刷题的感觉,本来上周觉得有点堕落了的感觉已经一去不复返了,有回到了开学那段对代码学习有积极性的日子,因此我希望接下来在ACM训练的日子里我能够继续保持下去!