C语言I博客作业07
这个作业属于那个课程 | C语言程序设计II |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/CST2019-1/homework/9935 |
我在这个课程的目标是 | 熟练地掌握运用C语言,锻炼思维逻辑能力,为以后其他语言的学习打好基础. |
这个作业在那个具体方面帮助我实现目标 | 学习运用switch语句处理多分支选择问题 |
参考文献 | 《C语言程序设计》《C Primer Plus》switch语句用法 |
1.PTA实验作业
1.1统计学生成绩
本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则:
1.大于等于90分为A;
2.小于90且大于等于80为B;
3.小于80且大于等于70为C;
4.小于70且大于等于60为D;
5.小于60为E。
输入格式:输入在第一行中给出一个正整数N(≤1000),即学生人数;第二行中给出N个学生的百分制成绩,其间以空格分隔。
输出格式:在一行中输出A、B、C、D、E对应的五分制成绩的人数分布,数字间以空格分隔,行末不得有多余空格。
1.1.1数据处理
数据表达:用了变量i,N,consult,A,B,C,D,E,score.其中,N,score是通过直接输入得到的,A,B,C,D,E,i,cousult是通过赋值得到的.变量score为双精度浮点型,变量A,B,C,D,E,i,N,consult为整型.
数据处理:N表示输入正整数,score表示输入的分数,consult表示分数/10的商,A,B,C,D,E五个变量分别储存五分制五个等级的数目.
所用表达式:1.A=B=C=D=E=0;consult=score/10;
定义变量,赋值,输入正整数N.
for(i=1;i<=N;i++){
输入N个学生的百分制成绩,consult=score/10;
consult9||10,A++;break;
consult8,B++;break;
consult7,C++;break;
consult6,D++;break;
consult==其他,E++;break;}
输出A,B,C,D,E的数目
1.1.2实验代码截图
1.1.3造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
7 77 54 92 73 60 65 69 | 1 0 2 3 1 | 使用题目数据测试 |
6 93 89 87 87 72 61 | 1 3 1 1 0 | 同sample,有分数段为0 |
7 100 94 88 87 71 63 54 | 2 2 1 1 1 | 最大随机N,各个分数段全有,有最大100分 |
1 0 | 0 0 0 0 1 | 最小N,最小分数 |
1.1.4PTA提交列表及说明
1.编译错误:我定义A,B,C,D,E五个变量分别储存五分制五个等级的数目,我的语句是intA,B,C,D,,E;中间多打了一个逗号。
2.部分正确:没有考虑打100分的情况,我用的case 9:A++;break;正确的语句是case 10:case 9:A++;break;
3.编译错误:在将100考虑进去之后,我的常量表达式与语句段用的分号隔开,正确的语句是case 10:case 9:A++;break;
1.2整数的分类处理
给定 N 个正整数,要求你从中得到下列三种计算结果:
A1 = 能被 3 整除的最大整数
A2 = 存在整数 K 使之可以表示为 3K+1 的整数的个数
A3 = 存在整数 K 使之可以表示为 3K+2 的所有整数的平均值(精确到小数点后 1 位)
输入格式:输入首先在第一行给出一个正整数 N,随后一行给出 N 个正整数。所有数字都不超过 100,同行数字以空格分隔。
输出格式:在一行中顺序输出 A1、A2、A3的值,其间以 1 个空格分隔。如果某个数字不存在,则对应输出NONE。
1.2.1数据处理
数据表达:用了变量N,i,a[100],A1,A2,A3,count,compliment.其中N,a[100]通过直接输入得到.i,A1,A2,A3,count,compliment.通过赋值得来.数据类型全为整型.
数据处理:N表示输入正整数,i表示循环变量,a[100]表示定义1个数组a,它有100个整型元素,A1表示能被3整除的最大整数,A2表示存在整数K使之可以表示为3K+1的整数的数,A3表示存在整数K使之可以表示为3K+2的所有整数的和,count表示存在整数K使之可以表示为3K+2的所有整数的个数,compliment表示输入正整数与3的余数.
所用表达式:A1=-1;A2=A3=count=0;compliment=a[i]%3;compliment;0;1;2;A2++;A3+=a[i];
流程结构:定义变量与赋值,输入正整数N.
for(i=0;i<N;i++){
输入数组a[100]的N个正整数,compliment=a[i]%3;
输入选项compliment
case0-2,运行相应的语句段;}
if(A1-1) printf("NONE");
else printf("%d",A1);
if(A20) printf(" NONE");
else printf(" %d",A2);
if(A30) printf(" NONE");
else printf(" %.1f",A3*1.0/count);
1.2.2实验代码截图
1.2.3造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
8 5 8 7 6 9 1 3 10 | 9 3 6.5 | 样例1等价,3种都有 |
8 15 18 7 6 9 1 3 10 | 18 3 NONE | 样例2等价,缺第3种 |
5 3 6 9 12 15 | 15 NONE NONE | 全被3整除 |
5 1 7 10 13 16 | NONE 5 NONE | 全是3k+1型 |
4 5 8 11 14 | NONE NONE 9.5 | 全是3k+2型 |
1 5 | NONE NONE 5.0 | 最小N |
1.2.4PTA提交列表及说明
1.编译错误:字母打错,我的代码是sacnf("%d",&N);正确的应该是scanf("%d",&N);
case 0:后面的语句段条件不充分,我的代码是case 0:A1=a[i];break;忽视了a[i]%30&&a[i]>A1条件.
正确的语句是case 0:if(a[i]%30&&a[i]>A1) A1=a[i];break;
3.部分正确:我将数组a定义为int a[N];正确的定义是int a[100];
数组定义:数组的长度在定义时必须确定,如果无法确定需要处理的数据数量,至少也要估计其上限,并将该上限值作为数组长度.
-- 引用自《C语言程序设计P153》P153
2.代码互评
我的代码:
同学代码(1):
代码差异:1.定义变量不同,同学(1)多定义了一个变量feb,分闰月和非闰月,分别等于29天和28天.
2.同学(1)的代码更加简洁.而且逻辑也非常清晰,这是我没有考虑到的.
3.同学(1)的case后面的语句段是每个月份的天数相加,而我的是直接写出总天数.
我的代码:
同学代码(2):
代码差异:1.定义变量不同,同学(2)在定义变量的时候还一起赋值,这样更加简洁.
2.同学(2)switch语句中的break语句使用方式和我的不同,我每个语句段的末尾都使用break跳出循环.而他只在default后面break跳出循环.
3.求和方式不同,我是先在本子上算出每个月对于的具体天数,而同学(2)使用sum+=去进行加法求和.
3.学习总结
3.1学习进度条
周数/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较疑惑的问题 |
---|---|---|---|---|
第三周(10/08--10/12) | 12个小时 | 300行左右 | 定义函数,if-else,for循环语句 | 输入与输出格式,空语句 |
第四周(10/14--10/18) | 15个小时 | 250行左右 | for循环语句,基础的循环程序设计,数据的输出宽度 | 数据的输出宽度概念不太清晰,表达式的定义,空语句的定义 |
第五周(10/23--10/26) | 12个小时 | 350行左右 | 自定义函数的声明与调用,break跳出循环,while()循环语句 | 自定义函数的应用 |
第六周(10/30--11/01) | 18个小时 | 500行左右 | if-else的嵌套,学习逻辑运算,条件语句,字符类型以及字符型数据的输入与输出 | 对字符型数据的输入与输出了解太少,缺乏练习,没有理解到getchar()字符输入函数与putchar()字符输出函数以及它们的运用 |
第七周(11/05--11/07) | 24个小时 | 720行左右 | 使用switch语句的三种情况,在switch语句中使用break语句,数组的定义与使用 | continue语句的使用,for语句的嵌套循环 |
3.2累积代码行和博客字数
3.3学习内容总结和感悟
3.3.1学习内容总结
3.3.2学习体会
在这次课程中,我学习了switch语句与break语句,利用switch语句可以处理多分支选择问题,而switch语句中的break可以有三种不同的用法,以便解决不同需求的问题.而对于本次PTA作业,琛姐强制要求我们用switch语句去解答,有的题可以直接用if-self轻松解决,而用switch反而会更加麻烦,我想老师要求我们去用switch解答是想让我们比较对待不同问题去利用多种方式解答的不同效果与难易程度.许多题目可以利用自定义函数去简化代码.而在C语言的学习上,更多的是靠自学,如果仅仅是上课听老师讲那么一点是完全不够的,如果想在编程学习上走得很远,还需要自己的不懈努力和刻苦钻研.加油!锲而舍之朽木不折!锲而不舍金石可镂!