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%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的过程中我都能学到很多东西,上课没有理解的知识点在做题目的过程中也慢慢的了解了,编译错误几乎没有出现过了。
 希望下一次的作业也能提前做完吧。加油!

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