一、PTA实验作业
题目1:换硬币
1.本题PTA提交列表
2.设计思路
1.定义整型变量fen5存放五分硬币数量,fen2存放两分硬币数量,fen1存放一分硬币数量
2.定义整型变量total存放总硬币数量,count存放零钱搭配种数,x存放输入的零钱金额
3.初始化count的值为0
4.输入零钱余额x
5.定义fen5初值为x/5
6.判断fen5的值
7.若fen5>=1,fen5--,重复步骤6,直到fen5<1后退出循环
8.定义fen2初值为x/2
9.判断fen2的值
10.若fen2>=1,fen2--,重复步骤9,直到fen2<1后退出循环
11.定义 fen1初值为x
12.判断fen1的值
13.若fen1>=1,fen1--,重复步骤12,直到fen1<1后退出循环
14.判断fen55+fen22+fen1*1==x是否成立
15.若成立,搭配种数count++,硬币总数total=fen5+fen2+fen1,输出五分硬币fen5、两分硬币fen2和一分硬币fen1的数量
16.若不成立,执行步骤6
17.循环结束后,输出搭配种数count的值
3.本题调试过程碰到问题及解决办法
- 遇到的问题:1.刚开始定义变量fen1初值错了,定义成了fen1=x/2导致答案错误
2.将fen1赋值改过来之后提交还是答案错误,提交多次后发现忘记给count赋初值,没对变量赋值的情况下,Dev会对count自动赋值0,而PTA平台不会,导致刚开始count的值就错误了 - 解决方法:1.将fen1赋值改成fen1=x即可
2.对count进行赋值0即可
题目2:歌唱比赛评分系统
1.本题PTA提交列表
2.设计思路
1.定义整形变量i,j,sum存放成绩总和,max存放最大值,min存放最小值,repeat存放运行次数,n存放裁判人数
2.定义双精度浮点变量score存放输入的成绩
3.i=1
4.sum=0,n=0,max=0,min=100,score=0
5.j=1
6.输入成绩score
7.累加sum,sum=sum+score
8.判断max和score的关系,若max<score,max=score;若min>score,则min=score
9.若i<=n,则j++,重复步骤5到步骤8,直到j>n后跳出循环
10.保留两位小数输出去掉最大值和最小值后的平均成绩score
11.若j<=repeat,则i++,重复步骤3,直到i>repeat跳出循环,结束程序
3.本题调试过程碰到问题及解决办法
- 遇到的问题:1.没审清题意,将输入n放在for循环外面,导致n只能输入一次
2.将变量放在了for循环外面,当repeat的值大于等于2时,变量只初始化值一次,导致答案错误 - 解决方法:1.在第一个for循环(i<=repeat)里面输入n,即循环输入n就符合题意了
2.将变量赋值的位置从for循环(i<=repeat)改到内部即可
题目3:餐饮服务质量调查打分
1.本题PTA提交列表
2.设计思路
1.定义整型变量i,j,repeat存放运算次数,score存放输入的成绩,n存放裁判人数,total1存放一分的次数,total2存放两分的次数,total3存放三分的次数,total4存放四分的次数,total5存放五分的次数
2.定义整形变量a,b,c,d,e
3.i=1
4.对total1、total2、total3、total4和total5初始化赋值0
5.输入裁判人数n
6.j=1
7.输入成绩score
8.判断输入成绩的值
9.若score=1,total1++;score=2,若total2++;score=3,若total3++;若score=4,total4++;若score=5tota5++
10.j++,重复步骤6到步骤10,直到j>n时跳出循环
11.输出1:
12.a=1,打印‘
13.a++,重复步骤12,直到a>total1跳出循环
14.’换行输出2:
15.b=1,打印‘
16.b++,重复步骤15,直到b>total2跳出循环
17.换行输出3:
18.c=1,打印‘’
19.c++,重复步骤’18,直到c>total3跳出循环
20.换行输出4:
21.d=1,打印‘’
22.d++,重复步骤21,直到d>total4跳出循环
23.换行输出5:
24.e=1,打印‘*’
25.e++,重复步骤24,直到e>total5跳出循环
26.输入\n换行
27.程序结束
3.本题调试过程碰到问题及解决办法
- 遇到的问题:1.刚开始想思路时,打算用五个字符型变量分别吸收累加星号,后来完整代码写出来后发现不可取,只能输出一个星号
- 解决方法:2.将定义五个字符型变量更改为定义五个整型变量存放累加星号的次数,之后在for循环内一个一个的输出即可
二、同学代码互评
1.互评同学名称
黄毓颖
2.我的代码、互评同学代码截图
我的代码
{
int i,j,sum,max,min,repeat,n;
double score;
scanf("%d",&repeat);
for(i=1;i<=repeat;i++)
{
sum=0;
n=0;
max=0;
min=100;
score=0;
sum=0;
scanf("%d",&n); //输入评委人数n//
for(j=1;j<=n;j++)
{
scanf("%lf",&score); //输入评委成绩score//
sum=sum+score; //累加成绩//
if(max<score) max=score; //判断最大值//
else if(min>score) min=score; //判断最小值//
}
printf("score:%.2f\n",(double)(sum-max-min)/(n-2)); //去掉最高分和最低分//
} //保留两位小数输出最终成绩的平均分//
}
黄毓颖同学代码
{
int i,j,n,repeat,mark,sum=0,max,min;
double score; //定义score存放平均分//
(n>=3&&n<=10);
(repeat>0&&repeat<10);
scanf("%d%d",&repeat,&n);//输入运算次数和评委人数//
scanf("%d",&mark);//输入成绩//
sum=sum+mark;
max=mark;
min=mark;
for(i=1;i<=repeat;i++){
if(i!=1){
scanf("%d%d",&n,&mark);
max=mark;
min=mark;
sum=mark;}
for(j=1;j<=(n-1);j++){
scanf("%d",&mark);
if(mark>max){
max=mark;
}
if(mark<min){
min=mark;//判断出最大值和最小值//
}sum=sum+mark;}
sum=sum-max-min;//减去最大值和最小值//
score=sum*1.0/(n-2);//算出减去最大值和最小值后的平均成绩//
printf("score:%.2lf\n",score);
}
}
3.我和同学代码不同在哪里?有哪些各自优势?
1.不同点:代码设计思路基本相同,但我觉得我的代码更加简洁明了
2.优势:但是我的代码找最大值和最小值比较简单,而黄毓颖同学的找最大值和最小值就比较麻烦了,她需要在前面交换数值,然后再到后面判断最大值和最小值,而我的只需要直接判断最大值、最小值和输入的成绩score的关系即可;再者,输出最终平均成绩可以利用强制转换类型(double)进行输出,不需要再多写一步sum=sum-max-min
3.我更喜欢简洁明了的代码,可读性高且耗时短,希望自己以后写出的代码和程序能够让人带着愉悦的心情去阅读
三、截图本周题目集的PTA最后排名
四、本周学习总结
1.我学会了什么?
- 1.对嵌套循环中的break和continue有了更深的理解,我曾经以为在嵌套循环内break会跳出整个循环,原来只是跳出包含break的小循环,导致题意审对了,代码敲完运行结果错误,而continue则是跳过后面所有语句继续执行循环,如果continue在小循环内则继续执行小循环,不是执行大循环
- 2.对嵌套循环赋值有了一个全新的认识(血泪史),每次小循环执行完都要对变量重新初始化赋值,即将初始化赋值放在循环内,放在循环外会导致答案错误,如本周PTA 7-7 歌唱比赛评分系统和7-8餐饮服务质量调查打分,没有发现这个问题,导致我7-7提交了快三十遍才过,卡了两天导致那两天情绪都挺低落的,这次长记性了,以后这类错误不会再犯了
- 3.本周通过打印空心字符菱形对打印图形的变式有了了解,行数与空格之间的关系很重要,这类题目要先写好思路再写代码,否则容易逻辑混乱最终导致答案错误
2.本周我还不会什么?
- 1.本周课堂派函数预习作业成绩不是很满意,对函数调用的理解不够,如函数2预习作业的第七题,我忘记要调用函数,直接写m=aaaa+bbbb,隔天老师讲解完才知道自己的错误有多低级
- 2.打印图形的题目还不是非常的熟练,需要加以练习