• 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语言的学习上还是有点吃力,可能最开始几个星期的基础没打牢吧,不过这么可本来就是要多靠自学的,每次说多出些时间来好好把之前的基础知识再好好学一遍,但每次都落空了,离期末也不是很远了,真的要好好把基础巩固牢了,再好好的往后学!加油啊,相信自己!
  • 相关阅读:
    分层图(了解一下,下一道比较好做)
    图论---The Captain
    数论
    NOIp复习计划
    20201116 Day4 卢卡斯定理
    20201113 Day3 斜率优化
    20201110Day2 分块
    20201030 day50 复习13:逆元、裴蜀定理
    20201030day50 模板全掌握
    20201029 day49 模拟(十八)
  • 原文地址:https://www.cnblogs.com/FluoxetineX/p/11817210.html
Copyright © 2020-2023  润新知