C语言I博客作业07

这个作业属于那个课程 C语言程序设计II
这个作业要求在哪里 作业要求
我在这个课程的目标是 将swith语句运用好,学习透
这个作业在那个具体方面帮助我实现目标 在通过解决PTA的习题中的判断switch语句的条件中逐渐帮助我实现目标
参考文献 集美大学林丽老师

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, d;本来想打day的,后面输入比较麻烦就简化成了d。
数据处理:首先用到了个大的if-else分支结构来将闰年和平年分开讨论,然后在其中分别进行switch语句的嵌入,而且在语句段中我就直接printf了

伪代码

include"stdio.h"

int main (void)
{
定义整形变量 年,月,日;
输入年(四位)/月(两位)/日(两位);
如果(满足闰年的条件)
{
switch(月){
case 1:输出("%d ",d)(闰年第一个月的天数);break;
case 2:输出("%d ",31d)(闰年第二个月的天数);break;
case 3:输出("%d ",60d)(闰年第三个月的天数);break;
......
case 12:输出("%d ",335d)(闰年第十二个月的天数);break;
}
}
else(非闰年)
{
switch(月){
case 1:输出("%d ",d)(非闰年第一个月的天数);break;
case 2:输出("%d ",31d)(非闰年年第二个月的天数);break;
case 3:输出("%d ",59d)(非闰年第三个月的天数);break;
......
case 12:输出("%d ",334d)(非闰年第十二个月的天数);break;
}
}
return 0;
}

1.1.2实验代码截图


1.1.3 造测试数据

输入数据 输出数据 说明
2019/06/18 169 非闰年跨2月的数
2004/o8/18 231 普通闰年跨2月的数
2019/02/08 39 非闰年不跨2月的数
2019/02/08 39 普通闰年不跨2月的数
2000/04/26 117 被100和400整除的闰年跨2月的数

1.1.4 PTA提交列表及说明

  • 部分正确:是由于将题中判别闰年的条件看错了,看成了能被100整除但不能被4整除,导致漏过了部分闰年。
  • 编译错误:因为首先在vs上面编译的,所以未将scanf_s调为scanf。
    还有下面多了个大括号,可能是截图时不小心按到了

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

伪代码

include"stdio.h"

int main(void)
{
定义整形变量N, m, d, i, A=0, B=0, C=0, D=0, E=0;
scanf("%d ", &N);输出N
i=1且<=运用循环语句累加;
{
scanf("%d", &m);输出m
d = m/10;m除以10计算出五分制的首数
switch (d) {
case 10:
case 9: A的个数累加; break;
case 8: B的个数累加; break;
case 7: C的个数累加; break;
case 6: D的个数累加; break;
case 5:case 4:case 3:case 2:case 1
:case 0: E的个数累加; break;
}
}
分别输出A B C D E的个数
return 0;
}

1.2.1 数据处理

数据表达:定义了整型变量 N, m, d, i, A=0, B=0, C=0, D=0, E=0;
数据处理:用到了循环语句for (i = 1; i <= N; i++),以及switch多分支结构,其中在其语句段中是直接将变量累加起来的,到了最后才输出五分制成绩的人数。

1.2.2实验代码截图

1.1.3 造测试数据

输入数据 输出数据 说明
6 68 68 89 98 78 87 1 2 1 2 0 其中一个A,两个B,一个C,两个D,0个E
528 99 61 59 60 1 0 0 2 2 1个A 0个B 0个C 2个D 2个E
429 42 18 55 0 0 0 0 4 0个A 0个B 0个C 0个D 4个E

1.1.4 PTA提交列表及说明

  • 编译错误:两次编译错误的原因都是没有在编译器上写的scanf_s改为scanf。

2.代码互评

同学代码截图

自己代码截图


  • 首先这位同学的代码写的十分简短,给人一种很舒服的感觉,而我的就显得比较繁琐。
  • 她的前半部分的代码与我后半部分的平年代码差不多,而她的后面则是直接说如果满足闰年的条件切月份大于2的话就直接在日期上加上一天,值得借鉴,很聪明!

同学代码截图

自己代码截图

  • 最大的不同之处就是这位同学用到了我们还为学习的数组,虽然在简便程度上并不会很容易的看出谁的更好,但在他提前学习并运用新知识这方面就足以让我拿来互评与借鉴了
  • 然后可以看出他写了两条for语句,不过并没有增添什么麻烦,其实感觉也差不多,现在我还不怎么懂数组,emm各有各的好吧

3.学习总结

3.1 学习进度条

3.2 累积代码行和博客字数

3.3 学习内容总结和感悟

3.3.1 学习内容总结

3.3.2 学习体会

  • 在本周的学习里,我慢慢了解并会运用多分支结构switch语句了,虽然感觉用起来还不是很熟,但我会再用心学的。时间过得真的挺快的,进入大学已经两三个月了,但在c语言的学习上还是有点吃力,可能最开始几个星期的基础没打牢吧,不过这么可本来就是要多靠自学的,每次说多出些时间来好好把之前的基础知识再好好学一遍,但每次都落空了,离期末也不是很远了,真的要好好把基础巩固牢了,再好好的往后学!加油啊,相信自己!
原文地址:https://www.cnblogs.com/FluoxetineX/p/11817210.html