问题 | 回答 |
---|---|
这个作业属于那个课程 | C语言程序设计II |
这个作业要求在哪里 | C语言I作业07 |
我在这个课程的目标是 | 自己设计一个小游戏 |
这个作业在那个具体方面帮助我实现目标 | 在PTA题目中多次使用switch语句 |
参考文献 | C语言程序设计,百度文献 伪代码1 伪代码2 |
1.PTA实验作业(20分/题)
1.1计算天数 (15 分)
本题要求编写程序计算某年某月某日是该年中的第几天。
输入格式:
输入在一行中按照格式“yyyy/mm/dd”(即“年/月/日”)给出日期。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。闰年的2月有29天。
输出格式:
在一行输出日期是该年中的第几天。
输入样例1:
2009/03/02
输出样例1:
61
输入样例2:
2000/03/02
输出样例2:
62
1.1.1数据处理
- 数据表达:运用到了整型变量: year, month, day。
- 数据处理:
#include <stdio.h>
int main()
{
int year,month,day;
输入年月日
if(year%4==0&&year%100!=0||year%400==0)/* 判断是不是闰年*/
{ /* 是闰年*/
switch(month)
{
case 1:printf("%d\n",day);break; /* 闰年1月*/
case 2:printf("%d\n",31+day);break; /* 闰年2月*/
case 3:printf("%d\n",60+day);break; /* 闰年3月*/
case 4:printf("%d\n",91+day);break; /* 闰年4月*/
case 5:printf("%d\n",121+day);break; /* 闰年5月*/
case 6:printf("%d\n",152+day);break; /* 闰年6月*/
case 7:printf("%d\n",182+day);break; /* 闰年7月*/
case 8:printf("%d\n",213+day);break; /* 闰年8月*/
case 9:printf("%d\n",244+day);break; /* 闰年9月*/
case 10:printf("%d\n",274+day);break; /* 闰年0月*/
case 11:printf("%d\n",305+day);break; /* 闰年11月*/
case 12:printf("%d\n",335+day);break; /* 闰年12月*/
}
}
else /* 不是闰年*/
{
switch(month)
{
case 1:printf("%d\n",day);break; /* 平年1月*/
case 2:printf("%d\n",31+day);break; /* 平年2月*/
case 3:printf("%d\n",59+day);break; /* 平年3月*/
case 4:printf("%d\n",90+day);break; /* 平年4月*/
case 5:printf("%d\n",120+day);break; /* 平年5月*/
case 6:printf("%d\n",151+day);break; /* 平年6月*/
case 7:printf("%d\n",181+day);break; /* 平年7月*/
case 8:printf("%d\n",212+day);break; /* 平年8月*/
case 9:printf("%d\n",243+day);break; /* 平年9月*/
case 10:printf("%d\n",273+day);break; /* 平年10月*/
case 11:printf("%d\n",304+day);break; /* 平年11月*/
case 12:printf("%d\n",334+day);break; /* 平年12月*/
}
}
return 0;
}
1.1.2实验代码截图
1.1.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
2019/11/06 | 310 | 今日日期,31+28+31+30+31+30+31+31+30+31+6=310 |
2018/03/05 | 64 | 非闰年,31+28+5=64 |
2004/05/05 | 126 | 闰年,31+29+31+30+5=126 |
1.1.4 PTA提交列表及说明
提交列表说明:
答案错误:输入格式错了,忘记在%d之间加\。
1.2统计学生成绩 (15 分)
本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则:
大于等于90分为A;
小于90且大于等于80为B;
小于80且大于等于70为C;
小于70且大于等于60为D;
小于60为E。
输入格式:
输入在第一行中给出一个正整数N(≤1000),即学生人数;第二行中给出N个学生的百分制成绩,其间以空格分隔。
输出格式:
在一行中输出A、B、C、D、E对应的五分制成绩的人数分布,数字间以空格分隔,行末不得有多余空格。
输入样例:
7
77 54 92 73 60 65 69
输出样例:
1 0 2 3 1
1.2.1 数据处理
- 数据表达:运用了九个整型变量:n,i,grade,w,A,B,C,D,E,grade为分数。
- 数据处理:
#include <stdio.h>
int main()
{
int n,i,grade,w;
int A←0,B←0,C←0,D←0,E←0;
输入学生人数
if(n>0) /*学生人数大于0时*/
{
for(i=1;i<=n;i++)
{
scanf("%d",&grade);/*输入学生成绩*/
w=grade/10; /*取分数第一位数以便事件的常量表达*/
switch(w)
{
case 10:A++;break; /*大于等于90分*/
case 9:A++;break; /*大于等于90分*/
case 8:B++;break; /*小于90且大于等于80*/
case 7:C++;break; /*小于80且大于等于70*/
case 6:D++;break; /*小于70且大于等于60*/
default:E++;break; /*小于60*/
}
}
}
printf("%d %d %d %d %d",A,B,C,D,E);
return 0;
}
1.2.2 实验代码截图
1.2.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
5\n 55 66 77 88 99 | 1 1 1 1 1 | 分别为A B C D E |
5\n 96 100 88 76 0 | 2 1 1 0 1 | 分别为A B C D E |
6\n 23 61 70 80 90 60 | 1 1 1 2 1 | 临界值 |
1.2.4 PTA提交列表及说明
答案错误: scanf("%d",& grade);输出放在for语句前,没能实现循环。
2.代码互评(5分)
同学代码截图
自己代码截图
1,我们变量不一样,他他变量多几个,我的少几个。
2我们代码差别很大,他的是在for语句中循环,我的刚是把十个月都列出来了,我这方法比较笨,一看他代码顿悟了,自己当时怎么想到。
3,我的代码行比他的长多了,他的方法值得我学习。
3.学习总结(15分)
3.1 学习进度条(5分)
周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
11.4~11.10 | 12h | 232 | 熟悉多分支结构switch语句的使用 | 在博客园中如何添加小挂饰 |
3.2 累积代码行和博客字数(5分)
3.3 学习内容总结和感悟(5分)
3.3.1 学习内容总结
3.3.2 学习体会
本周学习了多分支结构switch语句,当常量表达式所表达的量与其中一个case语句中的常量相符时,就执行此case语句后面的语句,并依次下去执行后面所有case语句中的语句,除非遇到break;语句跳出switch语句为止。如果常量表达式的量与所有case语句的常量都不相符,就执行default语句中的语句并跳出switch语句。本周PTA第三题如果不限语句,那很容易的,这题我想了很久,在书上看到了for语句中加switch语句才恍然大悟,又学习了一个语句,还是蛮开心的,switch语句作用也很大,不过第一题只记着用switch语句,忘了也能用for语句,想把C语言学好,设计一个小游戏还是蛮难的,不过我会努力的。