一、表格

问题 答案
这个作业属于那个课程 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语句,这也算是内容复习、新旧知识结合了。