一、PTA实验作业
题目1:打印九九口诀表
1.本题PTA提交列表
2. 设计思路
- 第一步:定义整型变量N表示要做到N*N处,i用来控制第一层循环,j用来控制第二层循环
- 第二步:输入N的值
- 第三步:i=1
- 第四步:当i<=N时执行步骤五
- 第五步:i++
- 第六步:j=1
- 第七步:当j<=i时执行第八步
- 第八步:j++
- 第九步:输出j*i的值并换行
3.本题调试过程碰到问题及解决办法
- (1)不知道如何做到上下不同个数字符对齐(如图)
解决办法:查找资料 学到了在输出中用“%-4d”表示输出数据占四个字符并且是左对齐,如果是“%nd”则表示输出占n个字符右对齐
题目2:换硬币
1.本题PTA提交列表
2. 设计思路
- 第一步:定义整型变量money表示输入的金额,fen5表示五分钱的数量,fen2表示两分钱的数量,fen1表示一分钱的数量,count表示硬币总数
- 第二步:输入money的值
- 第三步:如果money>8且money<100则执行步骤四
- 第四步:fen5=20;fen2=50;fen1=100;
- 第五步:当fen5>=1时执行步骤六
- 第六步:fen5--
- 第七步:当fen2>=1时执行步骤八
- 第八步:fen2--
- 第九步:当fen1>=1时执行步骤十
- 第十步:fen1--
- 第十一步:如果fen55+fen22+fen1*1=money成立,则执行步骤十二,否则执行步骤五
- 第十二步:count++
- 第十三步:输出fen5,fen2,fen1的个数并输出fen5+fen2+fen1的总数
- 第十四步:输出count的值
3.本题调试过程碰到问题及解决办法
- (1)最开始很混乱,思维不清晰,下不去手 解决办法:想起之前有做过类似的凑数的题目,看了一遍之前的题目有了头绪
- (2)题目要求从总数最少的开始依次排列,我最开始的for语句中条件是从fen=1开始累加,一直达不到又小到大排列的目的 解决办法:由于不知道怎么做问了同学,同学提示如果是fen从大数一直减到小数就可以达到又小到大显示的效果。
题目3:歌唱比赛评分系统
1.本题PTA提交列表
2. 设计思路
- 第一步:定义整型变量 repeat表示做成绩计算的次数,n表示成绩的个数,i控制第一层循环,m控制第二层循环,number表示每一个成绩,sum用来存放成绩总和,b用来存放用替换法比较出最小值时的数据,min用来存放最小值,max用来存放最大值
- 第二步:定义浮点型变量score来存放最终的成绩
- 第三步:输入repeat的值
- 第四步:i=1
- 第五步:当i<=repeat时执行步骤六
- 第六步:i++
- 第七步:sum=0;a=0;min=0;max=0
- 第八步:输入n的值
- 第九步:m=1
- 第十步:当m<=n时执行步骤十一
- 第十一步:m++
- 第十二步:输入number的值
- 第十三步:sum=sum+number;赋值a=max;
- 第十四步:如果min=0 赋值b=number否则b=min
- 第十五步:如果a>number 赋值max=a 否则赋值max=number
- 第十六步:如果b>number 赋值min=number 否则赋值min=b
- 第十七步:score=1.0*(sum-min-max)/(n-2);
- 第十八步:输出score的值
3.本题调试过程碰到问题及解决办法
- (1)这一题提交了很多很多次,错误很多,刚刚开始的错误是直接结果没正确,但我自己觉得是正确的
解决办法:由于步骤较多,我选择了使用输出值的方法直接看哪一个值错误 最终发现是最大值和最小值找错了,结果多次完善替换的方法终于输出的最大最小值正确了 - (2)再次提交,结果这一次是部分正确,某一个组测试数据没有通过
解决办法:通过林丽老师提醒,我输入了多组数据测试,发现只有第一组数据能正确算出成绩,之后的数据都不正确,最后发现是sum,min,max的值在上一次的计算中被赋其他的值,导致我之后的累加sum和找最大最小值失效。
二、同学代码结对互评
题目:歌唱比赛评分系统
1.互评同学名称:梁志湖
2.代码展示
3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。
- 输出的score成绩我定义的时浮点型变量,而志湖同学时定义为整型变量在输出那里有把变量变为浮点型变量
- 在输入多个分数的循环外,志湖同学先将前两个值比较后赋值给max和min,而我是在输入多个分数循环内进行这个操作的。所以志湖同学在之后的循环内的结束条件是i<=n-2(n为成绩个数),去掉了max,min中的两个数据个数。志湖同学的这种做法使得max,min在重新调用比如需要计算两组成绩的最终得分时不用像我得代码一样将max,min得值赋为0.
- 志湖同学将求和公式写在了if-else语句内,实际上我认为可以把求和公式写在输入成绩之后,因为求和是每个数据都加上的。
- 可能是因为志湖同学没有标注变量的用途的原因,我读起他的代码来有一些不理解,有些地方是在询问他之后才知道意思的,所以希望志湖同学可以多标注一些注释方便自己和别人理解代码。
- 我们两个的代码在求最大最小值时都显得有些繁琐,下面我贴一个我在群里看到的其他同学求最大最小值的代码,先赋值max=0,min=100
scanf("%d",&score);//score为每次输入的成绩
if (score>max){
max=score;
}
if(score<min){
min=score;
}
这样就简洁得多,需要得变量也少,利用了分数在0到100内的特性。
三、截图本周题目集的PTA最后排名
四、本周学习总结
1.你学会了什么?
- 学会了在输出中如何用%nd控制输出数据占多少字符,如:%4d表示输出的数据占四个字符并且左端以空格补齐,%-4d表示输出数据占四个字符并且右端以空格补齐
- 学会了使用分支结构比较多个数字大小找出最大最小值,在这方面我做的不是最简洁的,看了其他同学的代码,发现他们在找出最大最小值上面设计的代码用的变量比我少,应多多学习
- 知道了在if语句中可以以函数的值来充当判断条件,比如一个函数返回值是1就可以执行该语句,返回值是0就不执行该语句
2.本周的内容,你还不会什么?
- 打印菱形那一道题是在老师讲解之后才凭记忆一点一点打出来的,老师分析题目的时候懂了一部分,打印下半部分的地方还有点模糊,如果让我做类似的题我估计要花很多时间才能理清楚题目
- 不能精简的设计出代码,比如本周嵌套作业的第八题,我定义了大概有十多个变量,最终算是勉勉强强完成了题目要求,但我自己看自己的代码还是觉得有点繁琐