这个作业属于哪个课程 | https://edu.cnblogs.com/campus/zswxy/SE2020-3 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/SE2020-3/homework/11586 |
这个作业的目标 | 进一步深入了解循环语句以及学习while语句和dowhile语句的使用 |
学号 | 20209167 |
1.PTA作业
1.1 题目名1
7-4 猜数字游戏
猜数字游戏是令游戏机随机产生一个100以内的正整数,用户输入一个数对其进行猜测,需要你编写程序自动对其与随机产生的被猜数进行比较,并提示大了(“Too big”),还是小了(“Too small”),相等表示猜到了。如果猜到,则结束程序。程序还要求统计猜的次数,如果1次猜出该数,提示“Bingo!”;如果3次以内猜到该数,则提示“Lucky You!”;如果超过3次但是在N(>3)次以内(包括第N次)猜到该数,则提示“Good Guess!”;如果超过N次都没有猜到,则提示“Game Over”,并结束程序。如果在到达N次之前,用户输入了一个负数,也输出“Game Over”,并结束程序。
输入格式:
输入第一行中给出两个不超过100的正整数,分别是游戏机产生的随机数、以及猜测的最大次数N。最后每行给出一个用户的输入,直到出现负数为止。
输出格式:
在一行中输出每次猜测相应的结果,直到输出猜对的结果或“Game Over”则结束。
输入样例:
58 4
70
50
56
58
60
-2
输出样例:
Too big
Too small
Too small
Good Guess!
1.1.1 数据处理
数据表达:定义了dn为随机产生的所要猜的数;N为猜测的最大次数;c是每次猜的数;cs表示猜数的次数;以上都属于整型变量
数据处理:scanf("%d %d",&dn,&N);(dn和N都由scanf输入);while(cs<=N)(通过while语句循环计算cs的值,以及判断对比c和dn的大小),if(c<0),if(c<dn),if(c>dn),if(c==dn),if(cs==1),else if(cs<=3),else if(cs<=N) (通过if-else语句判断cs和输入的c所猜的数来决定输出的语句以及何时终止程序。)
1.1.2 实验代码截图
1.1.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
60 6 | ||
54 | Too small | 小了 |
45 | Too small | 小了 |
70 | Too big | 大了 |
65 | Too big | 大了 |
60 | Good Guess! | 猜的好啊第五次中了 |
1.1.4 PTA提交列表及说明
- 刚开始编辑错误是因为while括号后打了分号,混淆了两种while语句的用法,后来一次错误是因为cs++后没打分号,
- 后来又发现总有一个测试点过不了,是超过N此输入后无效,然后所有代码删掉重写了一遍,第一遍判断语句只写了if。
- 然后重来一遍用if(c>0)再嵌套if-else语句判断c与dn的大小,最后的else表示最后一个测试点的情况。
1.2 题目名2
7-3 循环-古角猜想
日本数学家古角静夫研究自然数时,发现一个有趣现象:“如果是个偶数就除2,如果是奇数就乘以3加1”,经过有限个这样的处理步骤,最后一定能得到1. 任意输入一个自然数,给出得到结果1的运算过程。
输入格式:
输入一个自然数n
输出格式:
输出每次运算步骤,直到结果为1.
输入样例1:
5
输出样例1:
5*3+1=16
16/2=8
8/2=4
4/2=2
2/2=1
输入样例2:
6
输出样例1:
6/2=3
33+1=10
10/2=5
53+1=16
16/2=8
8/2=4
4/2=2
2/2=1
1.2.1 数据处理
数据表达:定义为整型变量。
数据处理:scanf("%d",&n);(输入一个整数);while(n!=1)(n为1时跳出循环;if(n%2==0){printf("%d/2=%d
",n,n/2);}n为偶数时的相关计算,else{
printf("%d*3+1=%d
",n,n*3+1);n=n*3+1;}(n为奇数时相关计算)
1.2.2 实验代码截图
1.2.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
45 | 奇数 | |
45*3+1=136 | ||
136/2=68 | ||
68/2=34 | ||
34/2=17 | ||
17*3+1=52 | ||
52/2=26 | ||
26/2=13 | ||
13*3+1=40 | ||
40/2=20 | ||
20/2=10 | ||
10/2=5 | ||
5*3+1=16 | ||
16/2=8 | ||
8/2=4 | ||
4/2=2 | ||
2/2=1 |
1.2.4 PTA提交列表及说明
- 第一次出现运行超时不知道是什么情况,但是我知道应该是错了。
- 后来的编译错误又是因为分号漏打,大括号打成了中文的大括号还没注意,卡了很久。
- 答案错误是因为定义了一个整型变量,执行的相关计算放在了外面,后来删除这个变量,把计算放入循环中,并按要求输入相关的计算语句,问题解决
代码互评
同学代码截图
自己代码截图
同学代码截图
自己代码截图
- 同学的代码更完善,能更好地体现题目的要求和思想。
- 同学的代码排版更好,我应该多学习,使界面更简洁,易懂。
- 从代码看来上同学的思路更清晰。
3.学习总结
3.1学习进度条
周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
6/11.30-6/12.6 | 8.5小时 | 410 | while语句和do while语句的使用 | while语句后括号的条件限制 |
3.2 累积代码行和博客字数
3.3 学习内容总结和感悟
3.3.1 学习内容总结
3.3.2 学习体会
(1):在PTA做题过程中迟早会遇到自己解决不了,还有理解不了的部分,这时候向同学请教和交流是很重要的。
(2):做题时从不同的角度思考,尝试用多种方式表达自己的做题思路。
(3):巩固基础,多打代码练习学过的内容,翻翻书,该熟练多看多学。
(4):比较同学之间代码的不同,改进自己的代码。