zoukankan      html  css  js  c++  java
  • C语言I博客作业07

    这个作业属于那个课程 C语言程序设计II
    这个作业要求在哪里 C语言I博客作业07
    我在这个课程的目标是 学会理解运用switch语句
    这个作业在那个具体方面帮助我实现目标 通过PTA作业和阅读教材并练习
    参考文献 《C语言教材》《switch语句中default用法详解》

    一、PTA作业

    1.1 计算天数

    本题要求编写程序计算某年某月某日是该年中的第几天。

    输入格式:

    输入在一行中按照格式“yyyy/mm/dd”(即“年/月/日”)给出日期。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。闰年的2月有29天。

    输出格式:

    在一行输出日期是该年中的第几天。

    输入样例1:

    输出样例1:

    输入样例2:

    输出样例2:

    1.1.1 数据处理

    数据表达:用了四个整型int变量year,month,day,number;再把每个月的case n:number=(第(N-1)个月以及之前月之和)变化表达式列出;
    数据处理:首先定义整型int变量,再用if-else判断输入的年是平年还是闰年,平年则一种switch框架以及相关case,闰年也是switch框架以及相关case,最后通用number=number+day计算得出输入的年月日是输入年的第多少天。

    伪代码:

    include<stdio.h>

    int main()
    {
    int 年,月,日,数字;
    scanf("%4d四位数年/%2d二位数月/二位数日%2d",&year,&month,&day);
    if如果(输入的年份是闰年))
    {
    switch(月份)
    {
    case 1:表达式;break;
    ...
    case 11:表达式;break;
    default :表达式;break;
    }
    数字=输出月份的数字+日期
    }
    else不是闰年
    {
    switch(月份)
    {
    case 1:表达式;break;
    ...
    case 11:表达式;break;
    default :表达式;break;
    }
    数字=输出月份的数字+日期
    }
    输出printf("%d\n",number);
    return 0;
    }

    1.1.2 实验代码截图

    1.1.3 造测试数据

    输入数据 输出数据 说明
    2000/06/25 177 2000年06月25日是该年的第177天
    2008/10/01 275 2008年10月01日是该年的第275天
    2019/11/11 315 2019年11月11日是该年的第315天

    1.1.4 PTA提交列表及说明


    在PTA上虽然只有一次提交,但在编译器上还有一些小错误;

    提交列表说明:

    编译错误:无法编译后看到提示的行后发现break竟然打在switch语句外了;
    答案错误:检查了几遍表达式和case常量表达式没有什么错误,后来发现判断条件弄错了;
    答案错误:把if的条件的两个switch框架的语句写反了。

    1.2整数的分类处理

    给定 N 个正整数,要求你从中得到下列三种计算结果:
    A1 = 能被 3 整除的最大整数
    A2 = 存在整数 K 使之可以表示为 3K+1 的整数的个数
    A3 = 存在整数 K 使之可以表示为 3K+2 的所有整数的平均值(精确到小数点后 1 位)

    输入格式:

    输入首先在第一行给出一个正整数 N,随后一行给出 N 个正整数。所有数字都不超过 100,同行数字以空格分隔。

    输出格式:

    在一行中顺序输出 A1、A2、A3的值,其间以 1 个空格分隔。如果某个数字不存在,则对应输出NONE。

    输入样例 1:

    输出样例 1:

    输入样例 2:

    输出样例 2:

    1.2.1 数据处理

    数据表达:首先输入整型int变量i,N,A1,A2,n,以及数组sum[N],由于题目输出的A3有小数点,所以A3用浮点型double变量定义;
    数据处理:输入N,先把数组的数确定,然后利用for循环把数组里的数输入进去,再利用for循环让数组里的数逐个除以3看余数为多少,再根据余数不同进入不同case常量表达式,输入完之后还得通过三个if-else判断语句让那些不存在的数据变为NONE。

    伪代码:

    include<stdio.h>

    int main()
    {
    int 输入i,N,A1,A2,n;
    scanf("%d",&N);先输出N;
    double A3;A3题目输出有小数点所以浮点型定义;
    int 输入数组sum[N];
    for(有个数字就让它循环几次的条件)
    for循环先把数组给补充完整
    scanf("%d",&sum[i]);
    首先令A1=A2=A3=n=0;
    for(i=1;i<=N;i++)
    switch(让数组的数字逐个除以3判断余数)
    {
    case 1:A2条件;break;
    case 2:A3条件;break;
    default:A1条件:break;
    }
    用判断语句A1,A2,A3分别不存在数字时令其输出"NONE";
    输出A1,A2,A3的值
    return 0;
    }

    1.2.2 实验代码截图

    1.2.3 造测试数据

    输入数据 输出数据 说明
    0 NONE NONE NONE 没有一个数字存在
    5:1 3 5 7 9 9 2 5.0 A1=9 A2=2 A3=5.0
    3:1 4 2 NONE 1 NONE A1不存在 A2=4 A3不存在

    1.2.4 PTA提交列表及说明

    提交列表说明:

    部分正确:没有考虑到两种或两种以上数字都不存在的情况,我通过测试点345的答案错误发现的;

    二、代码互评

    同学(孙梦姣)代码截图

    同学(柏朝晖)代码截图

    我的代码截图

    相同点:

    1、都是用for循环套switch语句为框架;
    2、switch语句的运行都是利用除法运算符为核心,case常量表达式都是对应数据自增;
    3、输入前都会让A=B=C=D=E=0,而且都会在语句前单独输出N;

    不同点:

    1、第一位同学和第二位同学只用一次for循环和一次switch语句,而我用了两次for循环和一次switch语句,我多用一次for循环是为了让数组完整;
    2、我的代码用了六个常量表达式,其中第一个case表达式还是空的,而第一位同学的代码用了七个常量表达式,她把为了让第一个case也符合A,于是把第一个case的常量表达式也写成了第二个case常量表达式,其实这是多余的,因为如果没有输入case的具体表达式,只要不添加break跳出语句,它就会自动进行下一个常量表达式,第二同学则把所有情况都考虑了,虽然答案都对,但是论严谨性还是第二同学实在;
    3、我和他们最大的不同是我用了数组,论便捷性,我的还要多用一个for循环来完整数组,写也是能写出来的,原理也差不多,各有所好吧。

    三、学习总结

    3.1 学习进度条

    |||||
    -|-|-|-|-|
    周/日期|这周所花的时间|代码行|学到的知识点简介|目前比较迷惑的问题|
    第七周|10小时|132行|常用的数学函数,if-else语句|函数的运算问题|
    第八周|13小时|156行|学会运用for循环语句和知晓DevcC++调试|对于DevcC++还是不大会用|
    第九周|12小时|145行|学会了函数定义和调用函数|对于函数的返回,不是很理解|
    第十周|12小时|150行|了解了逻辑运算符和ASCII代码|记不住逻辑运算符的意思以及ASCII代码|
    第十一周|5小时|70行|理解并运用switch语句,对数组有些了解|对于数组的使用还是不熟练|

    3.2 累积代码行和博客字数

    时间 博客字数 代码行数
    第五周 464 0
    第六周 1017 50
    第七周 1638 185
    第八周 2533 341
    第九周 3421 520
    第十周 4399 666
    第十一周 5051 721

    3.3 学习内容总结和感悟

    3.3.1 学习内容总结

    3.3.2 学习体会

    这周又学了一个语句,解题技巧又增加了几分,想起刚报名的时候,不知不觉就过了十一周,还记得刚来那几周对于编程的理解就是制作游戏的,特别酷,直到我学了这个专业,开始编代码,我依然对计算机行业的知识一无所知,甚至编代码都不会,在朋友的帮助下勉勉强强写一下老师讲过的代码,到现在能编一些特简单的小程序,看似不起眼的一步,其实也是我朝我希望的方向前进的一个重要的证明了,我希望我能不忘初心,逐渐成为我理想的样子。

  • 相关阅读:
    使用内部单向链表实现的一个简单堆栈
    通过反射调用内部类的隐藏方法
    动态代理生成空对象
    通过使用java.lang.reflect.Proxy实现动态代理
    简单代理模式
    暗色CSS,适用与Stylish, IE, FF, OPERA等.
    CWnd派生的控件处理MouseMove, MouseHover, MouseLeave
    _tcscpy_s的size应至少为src的长度+1(要把计算在内)
    用INET(CHttpFile)下载有重定向链接时获取最终URL的方法.
    GetDlgItem以及其他获得CWnd相关的函数要注意。。
  • 原文地址:https://www.cnblogs.com/pengjie20199484/p/11804846.html
Copyright © 2011-2022 走看看