C语言I博客作业07

问题 答案
这个作业属于那个课程 C语言程序设计II
这个作业要求在哪里 C语言I博客作业07
我在这个课程的目标是 熟练掌握C语言
这个作业在哪个具体方面帮助我实现目标 学会了如何去使用switch语句
参考文献 Markdown基本语法

一.PTA实验作业

1. 计算天数

题目内容描述:本题要求编写程序计算某年某月某日是该年中的第几天。

输入格式:

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

输出格式:

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

输入样例1:

2009/03/02

输出样例1:

61

输入样例2:

2000/03/02

输出样例2:

62

(1)数据处理

数据表达:
用了整形变量year,month,day,date=0;
year,month,day分别是用户传入的年,月,日,
date来保存输入的日期是该年中的第几天。
数据处理:
用了switch语句和if语句,
用了表达式month,case 1~case 12,用来判别每一种月份所包含的天数;
用了表达式(year%40&&year%100!=0)||year%4000用来区分闰年和非闰年两种情况;
用了表达式month>2来区分二月以前的月份和二月以后的月份,如果是二月以后则天数加1。

伪代码

include<stdio.h>

int main()
{
定义整形变量 年,月,日;
定义整形变量 天数=0;
输入 年,月,日;
switch(月)
{
case==1~12:闰年到该case月所包含的天数加输入的日;break;
}
if(非闰年)
{
if(月份大于2)
{
天数加1;
}
}
输出天数
return 0;
}

(2)实验代码截图

(3)造测试数据

输入数据 输出数据 说明
2001/08/18 230 输入非闰年跨2月的数
2400/08/18 231 输入被400整除的闰年跨2月的数
2004/08/18 231 输入普通闰年跨2月的数
2100/08/18 230 输入被100整除的非闰年跨4月(大小月)的数
2002/08/18 230 输入非闰年跨9月(7-8月大)的数
2000/01/18 18 输入闰年1月的数
2001/01/18 18 输入非闰年1月的数

(4)PTA提交列表及说明

提交列表说明

1.部分正确:未考虑能被400整除也为闰年这一种结果,将第22行if((year%40&&year%100!=0))改为if((year%40&&year%100!=0)||year%400==0)后,答案正确。

2. 整数的分类处理

题目内容描述:给定 N 个正整数,要求你从中得到下列三种计算结果:

A1 = 能被 3 整除的最大整数
A2 = 存在整数 K 使之可以表示为 3K+1 的整数的个数
A3 = 存在整数 K 使之可以表示为 3K+2 的所有整数的平均值(精确到小数点后 1 位)

输入格式:

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

输出格式:

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

输入样例 1:

8
5 8 7 6 9 1 3 10

输出样例 1:

9 3 6.5

输入样例 2:

15 18 7 6 9 1 3 10

输出样例 2:

18 3 NONE

(1)数据处理

数据表达:
用了整形变量i,N,sum,a,b=0,a1=0,a2=0,a3=0和双精度浮点型变量average;
N,sum是用户传入的参数,N是用户想要区分的数字的个数,
G是用户要区分的数字,
a1,a2,average来保存题目所需要的结果,
a3用来判断是否存在题目所要求输出的A3,
b用来累加符合A3的数的和,
a用来判断输入的数符合哪一个要求。
数据处理:
用了if-else语句和switch语句,
用了表达式a,a10,a20,average0。
switch(a)用来判断输入的数符合哪一个要求,
if(a1
0)和if(a2==0)和if(average=0)用来区分输出满足条件的数是否存在。

伪代码

include<stdio.h>

main()
{
定义整形变量 i,N,正整数,余数,b=0,a1=0,a2=0,a3=0;
定义双精度浮点型变量 平均数;
输入用户需要分类的数的个数
for(i=1;i<=N;i++)
{
输入用户所要分类的正整数;
余数=正整数%3;
switch(余数)
{
case 0:if(a1<正整数){a1=正整数;}break;
case 1:a2=a2+1;break;
case 2:b=正整数+b;a3=a3+1;break;
}
}
平均数=b除以a3;
if(a10) 输出"NONE ";
else if(a2
0) 输出"NONE "; else 输出a1; 输出a2;

if(a3==0) 输出"NONE ";
else 输出平均数;
return 0;
}

(2)实验代码截图

(3)造测试数据

输入数据 输出数据 说明
3 1 2 3 3 1 2.0 3种都有
3 5 8 4 NONE 1 6.5 缺第1种
3 5 8 3 3 NONE 6.5 缺第2种
3 3 6 7 6 1 NONE 缺第3种
3 3 6 9 9 NONE NONE 全被3整除
3 4 7 10 NONE 3 NONE 全是3k+1型
3 5 8 11 NONE NONE 8.0 全是3k+2型
1 1 NONE 1 NONE 最小N

(4)PTA提交列表及说明

提交列表说明

1.一次性答案正确,但在编译器上出现了符号误打成中文符号的错误,还有就是对if-else还是不是很熟练。

二.代码互评

同学(彭杰)代码:

同学(柏朝晖)代码:

自己代码:

比较

(1)第一、二份代码都用了40多行,而我只用了31行解决了这个题目,我的代码所占用的空间更少。

(2)第一、二份代码都使用了if-else语句和两个switch语句,而我只用使用了2个if语句和1个switch语句。

(3)我是将输出放在了最后面,而第二份将输出放在了每一个case后面,相对来说我的比较简单。

三.学习总结

1.学习进度条

周/日期 这周所花的时间 代码行 学到的知识点简介 目前比较迷惑的问题
第四周 7小时 100行 在屏幕上显示Hello World! 暂无
第五周 8小时 100行 求华氏温度对应的摄氏温度 暂无
第六周 30小时 200行 如何用 MinGW-w64 来编译C程序 暂无
第七周 24小时 300行 运用if语句完成各种数学程序 对于&&的用法不了解
第八周 24小时 300行 学会了for循环语句 暂无
第九周 24小时 300行 学会了如何去自定义一个函数 暂无
第十周 30小时 400行 学会了if-else语句的嵌入 对“(Y%100)这个表达式意味着当Y不能整除4时(Y%100的余数不等于0时)表达式为真”这句话不是很懂
第十一周 24小时 450行 学会了如何去使用switch语句来做编程题 暂无

2. 累积代码行和博客字数

3 .学习内容总结和感悟

(1)学习内容总结

(2) 学习体会

做这一次作业所用的时间比往常短了很多,主要是PTA上的题目比往常容易了很多,让我难得提前提交一次作业。
每次在做PTA的过程中我都能学到很多东西,上课没有理解的知识点在做题目的过程中也慢慢的了解了,编译错误几乎没有出现过了。
希望下一次的作业也能提前做完吧。加油!

posted @ 2019-11-07 15:27  sun-梦  阅读(676)  评论(9)    收藏  举报