这个作业属于那个课程 |
这个作业要求在哪里 |
我在这个课程的目标是 |
这个作业在那个具体方面帮助我实现目标 |
参考文献 |
1.PTA实验作业(20分/题)
从PTA题目集中选出2个你最满意的题目完成以下内容,选择题目难度越大,分值越高,每题20分(每项5分),内容要求如下:
1.1 题目名1
7-10 计算天数 (15 分)
本题要求编写程序计算某年某月某日是该年中的第几天。
输入格式:
输入在一行中按照格式“yyyy/mm/dd”(即“年/月/日”)给出日期。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。闰年的2月有29天。
输出格式:
在一行输出日期是该年中的第几天。
输入样例1:
2009/03/02
输出样例1:
61
输入样例2:
2000/03/02
输出样例2:
62
1.1.1数据处理
#include<stdio.h>
#include<math.h>
int main()
{
int 年 = 0, 月 = 0, 日 = 0, 天数 = 0,判断是否闰年 = 0;
输入("%d/ %d/ %d", &年, &月, &日);
if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)) //判断是否为闰年
b = 1;
if (b != 1) {
switch (m) { /*
case 1:天数 = 0; break;
case 2:天数 = 31; break;
case 3:天数 = 59; break;
case 4:天数 = 90; break;
case 5:天数 = 120; break;
case 6:天数 = 151; break; 闰年
case 7:天数 = 181; break;
case 8:天数 = 212; break;
case 9:天数 = 243; break;
case 10:天数 = 273; break;
case 11:天数 = 304; break; */
case 12:天数 = 334; break;
}
}
else {
switch (m) {
case 1:天数 = 0; break; /*
case 2:天数 = 31;break;
case 3:天数 = 60; break;
case 4:天数 = 91; break;
case 5:天数 = 121; break;
case 6:天数 = 152; break; 非闰年
case 7:天数 = 182; break;
case 8:天数 = 213; break;
case 9:天数 = 244; break;
case 10:天数 = 274; break;
case 11:天数= 305; break;
case 12:天数 = 335; break; */
}
}
printf("%d", 天数 + 日);
return 0;
}
1.1.2实验代码截图
1.1.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
2009/03/02 | 61 | 非闰年 |
2000/03/02 | 62 | 闰年 |
2000/01/02 | 2 | 月份小于2 |
1.1.4 PTA提交列表及说明
答案错误:将闰年与非闰年的情况写反了
部分正确:第六行100写成了10
解决方法:改正即可
1.2 题目2
7-13 整数的分类处理 (20 分)
给定 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:
8
15 18 7 6 9 1 3 10
输出样例 2:
18 3 NONE
1.2.1 数据处理
#include<stdio.h>
int main() {
int 数字量, 数字, 最大的数字 = 0, 判断, A1 = 0, A2 = 0, A3情况的计数 = 0;;
double A3 = 0;
输入("%d
", &数字量);
for (int i = 1; i <= n; i++) {
输入("%d", &数字);
if (数字 % 3 == 0) {
判断 = 1;
if (数字 > 最大的数字)
最大的数字 = 数字;
}
if (m % 3 == 1)
判断 = 2;
if (m % 3 == 2) {
判断 = 3;
A3情况的计数++;
}
switch (判断) {
case 1:A1=最大数; break;
case 2:A2++; break;
case 3:A3+=m; break;
}
}
if (A1 == 0)
printf("NONE");
else
printf("%d", A1);
if (A2 == 0)
printf(" NONE");
else
printf(" %d", A2);
if (A3 == 0)
printf(" NONE");
else
printf(" %.1f", A3/c);
return 0;
}
1.2.2 实验代码截图
1.2.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
8 /5 8 7 6 9 1 3 10 | 9 3 6.5 | 题目所给 |
8 /15 18 7 6 9 1 3 10 | 18 3 NONE | A3=0 |
0 | 0 | n=0 |
1.2.4 PTA提交列表及说明
错误:虽然pta上没错误,但在VS2019上写代码时还是遇到了问题,那便是将if ese结构写在了for循环结构里面,导致输出了很多多余的东西
解决方法:将if else结构移到for循环结构外面
2.代码互评(5分)
找2份同学代码,和自己代码比较,建议互评代码尽量找代码风格差异较大。
同学代码截图
同学1
同学2
自己代码截图
1.第一位同学用的是x%3余出来的数作为switch的判断条件,相比我的本可以简单一些,但由于没有使用case 0,而使这种情况分出来了,是代码显得不是那么整齐
2.第二位同学的代码由于设置了过多的变量和switch结构,导致代码显得很杂,可读性弱
3.我的代码是每个情况都给b赋值一次,可以使代码更有条理,但方法可以像第一个同学一样改进
3.学习总结(15分)
3.1 学习进度条(5分)
周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
第一周 | 2h | 72 | 输出 | 对于输出的符号还不熟 |
第二周 | 3.5h | 57 | 计算 | 算法陌生 |
第三周 | 3.5h | 81 | 分支结构 | 分支的逻辑理不清 |
第四周 | 1.5h | 180 | for循环,+= | 终止条件理不清 |
第五周 | 2h | 600 | 函数结构 | 对于算法的处理比较迷惑 |
第六周 | 2h | 1000 | 嵌套 | 对于嵌套的结构过多会解读的很吃力 |
第七周 | 2h | 1246 | switch结构 | switch结构里的case最后若是不加break会怎么样 |
3.2 累积代码行和博客字数(5分)
3.3 学习内容总结和感悟(5分)
3.3.1 学习内容总结
3.3.2 学习体会
经过了这么久C语言的学习,我感觉对于已学知识的运用越来越熟练了,但我觉得现在依然是完全不够用的,
所以我们还是要能够找机会学习一些新的知识,或是新的操做,虽然这次的作业只能用switch结构,但我
们也可以试试如果不用switch结构写一遍;就比如这次学长又将我的代码改了,虽然他没用switch结构,
但他用代码解决问题的方法确实是简单明了,并且之前我对于数组的认识只停留在怎么声明数组变量,但
不知道能一次把所有数组的变量赋值,在看了学长的代码后,我知道了用{}来给数组的变量赋值,代码如下:
并且我的代码写了两大串switch结构,如果按照学长的方法,在判断是否闰年后只改2月的值就可以了,这样只用写
一串就可以了。