一、表格
问题 | 答案 |
---|---|
这个作业属于那个课程 | C语言程序设计II |
这个作业要在哪里 | https://edu.cnblogs.com/campus/zswxy/CST2019-1/homework/9935 |
我在这个课程的目标是 | 深入了解C语言,争取掌握更多的数据类型及结构,熟练地编译有效代码 |
这个作业在那个具体方面帮助我实现目标 | 熟练使用新的知识点switch结构,帮助我掌握更多的编程结构,扩展知识面 |
参考文献 | C语言程序设计、百度 |
二、本周作业
1. PTA实验作业
1.1 题目名1
7-13 整数的分类处理 (20 分)
给定 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.1.1 数据处理
数据表达:整型变量int(N,i,b,remainder,max,num),双精度浮点型double(average,sum,c)。N、num是输入的个数和数。
数据处理:运用了for语句、switch语句、if-else语句。这道题把余数作为变量表达式,判断余数为0、1、2.用到了赋值表达式、关系表达式。
伪代码如下:
定义输入
for(i=1;i<=N;i++){ →依次输入每一个数
switch(){
case 0:if(num>max)
max=num;break; →选出符合条件最大的数A1
case 1:→A2
case 2:→A3
break;
}}
if-else{} →判断输出数值还是NONE
打印输出
1.1.2 实验代码截图
1.1.3 造测试数据
输入 | 输出 | 说明 |
---|---|---|
8/5 8 7 6 9 1 3 10 | 9 3 6.5 | 三个数都存在 |
8/15 18 7 6 9 1 3 10 | 18 3 NONE | 有一个不存在的值 |
4/3 6 9 0 | 9 NONE NONE | 有两个值不存在 |
1.1.4 PTA提交列表及说明
- 答案错误:输出上存在错误。第三个数是平均数,可能是小数,但我把average设成整型。所以第三个数一直是0。
注释:
这道题对我来说有点难,一直在Dev上测试,出现了很多错误。但是在不断修改,编译运行中一点一点的改正了。后来三个数都存在的答案是对的,但是一旦有不存在的情况,一直就是0而不是NONE。所以最后用了三个if-else语句来判断输出。因为三个输出是分开的所以还要注意空格的情况。
1.2 题目名2
7-12 统计学生成绩 (15 分)
本题要求编写程序读入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 数据处理
数据表达:整型变量(N,grade,i ,a,b,c,d,e,x),其中a,b,c,d,e是用来记录五个等级的总数。N,grade是输入的值。x表示成绩的前一位或者两位。
数据处理:用了for语句、if-else语句、switch语句。switch表达式时x,常量表达式是1,2,3,4,5,6,7,8,9,0,其中case9和10是一个输出样例,case0和1,2,3,4,5是一个输出。运用了赋值表达式、关系表达式、逻辑表达式。
伪代码如下:
定义输入
for(i=1;i<=N;i++){ →依次输入成绩
if-else{} →判断五个等级的人数
}
switch(x){
case 9:case 10:→第一个等级
case 8: →第二个等级
case 7: →第三个等级
case 6: →第四个等级
case 5:case 4:case 3:case 2:case 1:case 0:→第五个等级
break;
打印输出
1.2.2 实验代码截图
1.2.3 造测试数据
输入 | 输出 | 说明 |
---|---|---|
7/77 54 92 73 60 65 69 | 1 0 2 3 1 | 验证题目数据 |
4/100 98 87 45 | 2 1 0 0 1 | 有最大分100且有分数段没有 |
7/0 12 67 78 89 96 65 | 1 1 1 2 2 | 有最低分0 |
1.2.4 PTA提交列表及说明
注释:
这道题没有错过,主要是一直在Dev上测试。我觉得这道题的关键是几个等级的情况,特别的case10和case9是一个等级,case0、case1、case2、case3、case4、case5是一个等级,这几个等级可以合并,例如case 10:case9:。
2. 代码互评
----------------
自己代码①
同学代码②
同学代码③
评论:
- 这三份代码都是第一题,但是编程上都是有区别的。
- 代码①是以闰年和非闰年两种情况直接从一月到十二月依次写出;代码②是把每月有相同天数的先合并起来,然后在二月里判断闰年与非闰年加上其天数;代码③是先把除二月以外的表达出来,在后面判断闰年与非闰年中再判断一月、二月以及其他月的天数。
- 这三份代码的相同点是都以月份为变量,并且判断二月这一特殊的月份。
3. 学习总结
3.1 学习进度条
周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较困惑的问题 |
---|---|---|---|---|
1/9-21 | 2天 | 30 | 初步接触编程,学习编译Hello,World! | 无 |
2/9-30 | 2天 | 20 | 学习了浮点型变量,及温度转换 | 无 |
3/9-15 | 3天 | 76 | 使用分段函数了解到if-else语句以及数据类型 | 对于定义数值还是不太清楚 |
4/10-16 | 3天 | 100 | for语句 | for循环进行中不清楚循环的细节 |
5/10-24 | 3 天 | 155 | 学习到了自定义函数 | 自定义函数的具体定义过程,实参形参有些迷惑 |
6/11-1 | 3天 | 250 | 学习使用if-else与for语句的嵌套,初步了解了字符型变量 | 对于字符型变量不是很懂,不明白其作用 |
7/11-7 | 2天 | 200 | 这周学习了新的分支结构switch结构,这也适用于选择的情况,其作用类似于if-else。 | switch后面的变量表达式和case后的常量表达式弄不清。 |
3.2 累计代码行和博客字数
3.3 学习内容总结
3.4 学习体会
- 这周学习了分支结构switch语句,其内容是switch(表达式){case 常量表达式1:语句段1;break;case 常量表达式n:语句段n;break;}。
- 这周知识感觉其作用和if-else的作用差不多,都是用于选择不同的情况,但是我感觉表达式与常量表达式有时不太能想明白,或者说不知道该设成什么样。而且我感觉有些题目还是用if-else语句较简单,也好理解。可能用switch会让代码简单一些。
- 这周PTA虽然我用了switch语句,但也用了if-else语句、for语句,这也算是内容复习、新旧知识结合了。