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 学习体会

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

原文地址:https://www.cnblogs.com/pengjie20199484/p/11804846.html