问题 |
答案 |
这个作业属于那个课程 |
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%4==0&&year%100!=0)||year%400==0用来区分闰年和非闰年两种情况;
用了表达式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%4==0&&year%100!=0))改为if((year%4==0&&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,a1==0,a2==0,average==0。
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(a1==0) 输出"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的过程中我都能学到很多东西,上课没有理解的知识点在做题目的过程中也慢慢的了解了,编译错误几乎没有出现过了。
希望下一次的作业也能提前做完吧。加油!