这个作业属于那个课程 | C语言程序设计II |
---|---|
这个作业属于那个课程 | C语言I作业07 |
我在这个课程的目标是 | 希望能够在学完后能够自己做出一个C语言的小游戏 |
这个作业在那个具体方面帮助我实现目标 | 熟练使用分支结构和对switch语句的使用 |
参考文献 | C语言程序设计 |
1.PTA实验作业
1.1 (7-12)统计学生成绩
本题要求编写程序读入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.1.1 数据处理
-
数据表达:此题定义了九个整型变量i, n, score, x, A, B, C, D, E;i是作为一个中间变量调动循环结构的进行,n主要是用于for循环的第二表达式,用作确定循环次数,score用作输入的同学的分数;x为switch的选择种类;A、B、C、D、E分别为成绩的五个档次。
-
数据处理:
#include<stdio.h> int main() { A = B = C = D = E = 0; 输入样本数量; for (i = 1; i <= n; i++) { 输入成绩; 成绩除10; switch (x) { x=9或10:A自增; 跳出循环; x=8:B自增; 跳出循环; x=7:C自增; 跳出循环; x=6:D自增; 跳出循环; x<6:E自增; 跳出循环; } } 按顺序输出A、B、C、D、E; return 0; }
1.1.2 实验代码截图
1.1.3 造测试数据
输入 | 输出 | 说明 |
---|---|---|
7 77 54 92 73 60 65 69 | 1 0 2 3 1 | 同sample,有分数段为0 |
1 0 | 0 0 0 0 1 | 最小N,最小分数 |
1 100 | 1 0 0 0 0 | 最大随机N,各个分数段全有,有最大100分 |
1.1.4 PTA提交列表及说明
编译错误:
- scanf我打成了scnaf
- A,B,C,D,E没有进行初始化处理,后来在定义函数后加上了A = B = C = D = E = 0;
部分正确:没有考虑到100分的情况,后来是在case 9:后面加上了case 10:
1.2(7-13)整数的分类处理
给定 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 数据处理
- 数据表达:此题定义了五个整形变量i,n,x,A1,A2,num,其中i是作为一个中间变量调动循环结构的进行;n主要是用于for循环的第二表达式,用作确定循环次数;A1 = 能被 3 整除的最大整数;A2 = 存在整数 K 使之可以表示为 3K+1 的整数的个数;num为switch的选择种类;此外还定义了三个双精度浮点型变量sum,cnt,A3;sum将作为对于符合x % 3 == 2情况下的数的累加;cnt则是作为对于符合x % 3 == 2情况下的数的数量的的记录;A3 = 存在整数 K 使之可以表示为 3K+2 的所有整数的平均值
- 数据处理:
#include<stdio.h>
int main()
{
输入样本数量;
for (i = 0; i < n; i++)
{
输入数值;
判断是否符合A1;
{
选择符合A1的最大值;
}
判断是否符合A2;
{
A2++;记录符合A2的数的数量;
}
判断是否符合A3;
{
求平均值;
}
}
没有一个符合A1,A2,A3
{
定义一个标志1;
}
没有一个符合A2,A3
{
定义一个标志2;
}
没有一个符合A1,A3
{
定义一个标志3;
}
没有一个符合A1,A2
{
定义一个标志4;
}
没有一个符合A3
{
定义一个标志5;
}
没有一个符合A2
{
定义一个标志6;
}
没有一个符合A1
{
定义一个标志7;
}
A1,A2,A3都有符合的
{
定义一个标志8;
}
switch (num)
{
标志1:输出("NONE NONE NONE");跳出循环;
标志2:输出("%d NONE NONE", A1);跳出循环;
标志3:输出("NONE %d NONE", A2);跳出循环;
标志4:输出("NONE NONE %.1lf", A3);跳出循环;
标志5:输出("%d %d NONE", A1, A2);跳出循环;
标志6:输出("%d NONE %.1lf", A1, A3);跳出循环;
标志7:输出("NONE %d %.1lf", A2, A3);跳出循环;
标志8:输出("%d %d %.1lf", A1, A2, A3);跳出循环;
}
return 0;
}
1.2.2 实验代码截图
1.2.3 造测试数据
输入 | 输出 | 说明 |
---|---|---|
8 5 8 7 6 9 1 3 10 | 9 3 6.5 | 样例1等价,3种都有 |
8 15 18 7 6 9 1 3 10 | 18 3 NONE | 样例2等价,缺第3种 |
8 3 6 9 12 15 18 21 24 | 24 NONE NONE | 全被3整除 |
8 4 7 10 13 16 19 22 25 | NONE 8 NONE | 全是3k+1型 |
8 5 8 11 14 17 20 23 26 | NONE NONE 15.5 | 全是3k+2型 |
1 1 | NONE NONE NONE | 最小N |
1.2.4 PTA提交列表及说明
部分正确:第一次的答案错误是由于思路错了的原因,这就不细说了
部分正确:第二次的答案错误是因为我没有将各种情况都一一进行分类的讨论,而是直接由A1,A2,A3的取值情况进行对num的复制,导致最后switch只能判断最后面的A3情况
2.代码互评
赵佳伟同学的代码:
柏朝晖同学的代码:
我的代码:
赵佳伟同学用的是数组进行的输入,这点我之前没有想到,后来自己仔细读了下代码发现用数组来计算简单了很多
柏朝晖同学与我的代码比较相似,唯一的区别就是他将case 10与case 9是分成两行写的,我是并在一起写的
3.学习总结
3.1 学习进度条
周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
第六周 | 20小时 | 372 | if-else语句和数学函数 | 暂无 |
第七周 | 10小时 | 226 | 分支结构 | 暂无 |
第八周 | 12小时 | 110 | for循环结构 | 暂无 |
第九周 | 16小时 | 200 | 函数的声明,定义和调用 | 暂无 |
第十周 | 20小时 | 323 | 分支结构,字符型数据类型,ASCII码,逻辑运算符 | 对于字符型数据类型的运用还是不熟练,需要多加练习 |
第十一周 | 18小时 | 788 | 分支结构,switch语句,简单的数组的使用 | 对于数组的了解还是不够,下周还是要多加学习 |
3.2 累积代码行和博客字数
周数 | 博客字数 | 代码行数 |
---|---|---|
4 | 0 | 0 |
5 | 828 | 0 |
6 | 1985 | 372 |
7 | 4362 | 598 |
8 | 5711 | 708 |
9 | 7731 | 908 |
10 | 9487 | 1231 |
11 | 11610 | 2019 |
3.3 学习内容总结和感悟
3.3.1 学习内容总结
3.3.2 学习体会
这一周挺充实的,因为许多事情都已经定了下来所以现在没有之前的不确定的感觉,这样挺好的,现在每周二,三的晚上我们现在开始刷题训练了,刷题的感觉还是挺爽的,就是有点上头和耗脑细胞