一、PTA实验作业
题目1. 查询水果价格
1. 本题PTA提交列表(要提交列表,不是结果)
2. 设计思路(此处用流程图最好)
- (1)定义变量choice存放编号,price存放单价,i为循环变量
- (2)定义变量i,用来记录编号数目
- (3)输出菜单:
[1] apple
[2] pear
[3] orange
[4] grape
[0] exit - (4)赋值i=1
- (5)输入数据choice
- (6)如果choice为0,退出循环
- (7)如果choice为1,price=3.00;
- (8)如果choice为2,price=2.50;
- (9)如果choice为3,price=4.10;
- (10)如果choice为4,price=10.20;
- (11)否则,price=0.00;
- (12)i=i+1
- (13)重复步骤5~12,直到不满足i<=5,结束循环
- (14)输出price = 价格,并保留两位小数
3.本题调试过程碰到问题及解决办法
- (1)问题:
①在读入0时,输出时多了一组水果菜单,多了一次循环
②多次尝试还是错误,在同学提醒下知道菜单不应该进行循环,只输出一次就可以了 - (2)解决办法:
①把choice==0的情况放到菜单前面,在读入0时直接退出循环,解决了菜单多了一次循环的问题
②得知菜单不用参加循环后把菜单移除循环外,结果正确
题目2. 换硬币
1. 本题PTA提交列表(要提交列表,不是结果)
2. 设计思路(此处用流程图最好)
- ①定义整型变量fen5,fen2,fen1分别存放5分,2分,1分硬币数量,count存放换法个数;total存放硬币总数;money存放待换零钱数额
- ②输入数据money
- ③赋初值count为0,赋初值total为0
- ④定义fen5=19(5分硬币最多19个),fen5--
- ⑤定义fen2=47(2分硬币最多47个),fen2--
- ⑥定义fen1=93(1分硬币最多93个),fen1--
- ⑦重复步骤④⑤⑥,直到不满足fen5<=19&&fen5>=1,fen2<=47&&fen2>=1,fen1<=93&&fen1>=1
- ⑧如果5fen5+2fen2+fen1==money,输出“fen5:5分硬币数量, fen2:2分硬币数量, fen1:1分硬币数量, total:硬币总数量”
- ⑨count++
- ⑩输出count = 换法个数
3.本题调试过程碰到问题及解决办法
- (1)问题:
①输出未换行
②没有设定每种硬币个数至少为1,导致出现硬币个数为负的情况,出现死循环
③输入数据为13时答案正确,但换一个数据total大小顺序就错乱了 - (2)解决办法:
尝试着换用循环递减的方法实现硬币数量从大到小,把嵌套循环条件改为fen5<=19&&fen5>=1;fen2<=47&&fen2>=1;fen1<=93&&fen1>=1
题目3.歌唱比赛评分系统
1. 本题PTA提交列表(要提交列表,不是结果)
2. 设计思路(此处用流程图最好)
- (1)定义整型变量grade存放成绩,sum存放成绩总和,min存放最低分,max存放最高分,n存放评委人数,repeat为循环次数,i,j为循环变量,定义浮点型变量score存放最终得分
- (2)输入数据repeat,
- (3)赋值i=1,输入数据n,,赋值sum=0,min=100,max=0,j=1,输入数据grade
- (4)sum=sum+grade
- (5)如果grade<min(输入成绩小于最小值),赋值min=grade
- (6)如果grade>max(输入成绩大于最大值),赋值max=grade
- (7)j=j+1
- (8)重复步骤3~6,直到不满足j<=n
- (9)score=(sum-min-max)*1.0/(n-2)
- (10)输出平均分score,并保留两位小数
- (11)i=i+1
- (12)重复步骤3~11,直到不满足i<=repeat
3.本题调试过程碰到问题及解决办法
- (1)问题:
①思考不到位,把赋初值时min=0
②不理解题目意思,不知道repeat控制的循环是哪些部分,把平均数计算和输出放在循环外,虽然repeat=1时输出结果与题目要求一致,但在PTA中测评显示错误。 - 解决办法:
①调试发现不管输入的grade值为多少,最小值min一直为0,于是想到把赋值min=100时才能让最小值赋值给min
②输入repeat=2时,发现第一次循环没有进入平均值计算和输出部分,直接跳到第二次循环部分,因此第一次循环没有输出平均值,尝试把平均值计算和输出部分移到循环里面,这样第一次循环时就可以进入这两条语句中,改动后发现结果正确。
二、同学代码结对互评
1.互评同学名称
黄毓颖
2.我的代码、互评同学代码截图
我的代码
#include<stdio.h>
int main()
{
int repeat,n,grade,sum,min,max,i,j;//grade存放成绩,sum存放成绩总和,min存放最低分,max存放最高分
float score;//score存放最终得分
scanf("%d",&repeat);
for(i=1;i<=repeat;i++){
scanf("%d",&n);
sum=0;//赋值sum为0
min=100;//赋初值min为100
max=0;//赋初值max为0
for(j=1;j<=n;j++){
scanf("%d",&grade);
sum=sum+grade;//累加成绩
if(grade<min)//如果输入成绩小于最小值
min=grade;//将此成绩赋给min
if(grade>max)//如果输入成绩大于最大值
max=grade;//将此成绩赋给max
}
score=(sum-min-max)*1.0/(n-2);//计算平均值
printf("score:%.2f\n",score);
}
return 0;
}
黄毓颖同学的代码
{
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.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。
不同:我的代码中直接赋值min=100,max=0,与输入的成绩grade作比较,找出最小值和最大值,而黄毓颖同学的则使用了课本中的找最大值的方法,先输入一个成绩把它赋值给最大值和最小值,再与剩下的几个成绩对比找出最大值和最小值。
各自优势:我的代码看起来比较简单,但可能会在为什么要赋值min=100处不容易理解。黄毓颖同学的代码程序比较多看起来有点复杂,但是细读起来发现是课本上相似的方法,容易读懂。相比之下我会比较喜欢看起来简单明了一点的代码
另:黄毓颖同学的代码中,注释用的符号只需要一个//即可,不需要两个
三、截图本周题目集的PTA最后排名
PTA排名
四、本周学习总结
1.你学会了什么?
- 函数的定义:
库函数:scanf(),printf()等
自定义函数:用户自己定义的函数 - 函数定义的一般形式:
函数类型 函数名 (形式参数表) /*函数首部*/
{
函数实现过程 /*函数体*/
}
其中:
函数首部后面不能加分号,它和函数体一起构成完整的函数定义
函数类型指函数结果返回的类型,一般与return语句中表达的类型一致。
形式参数表格式:类型1 形参1,类型2 形参2,…,类型n 形参n
(每个形参前的类型必须分别写明)
注:形式参数可以必须时变量
- 函数体:
函数体用return语句返回运算结果 - 函数调用:
①函数调用的一般形式:函数名(实际参数表)
注:实际参数可以是常量,变量和表达式
②参数:
形参:函数定义时,位于其首部的参数;
实参:主调函数的参数
注:形参和实参必须一一对应,两者数量形同,类型尽量一致
③函数结果的返回:格式:return 表达式
return语句的作用:1.结束函数的运行;2.带着运算结果(表达式的值)返回主调函数
注:return语句只能返回一个值
④函数声明:格式:函数类型 函数名(形参表);
注:函数声明是一条C语句,后面要加分号,而函数定义时的函数首部不是语句 - 不返回结果的函数:
不返回结果的函数定义:
{
函数实现过程 /*函数体*/
}
注:在不返回结果的函数定义中,void不能省略,否则,函数类型被默认定义为int
- 局部变量和全局变量
局部变量:定义在函数内部的变量,例:形参;有效作用范围局限于所在的函数内部
全局变量:定义在函数外而不属于任何函数的变量;有效作用范围时从定义开始到程序所在文件的结束
注:允许全局变量和局部变量同名,同名是局部变量有效 - 变量生存周期和静态局部变量
自定义变量形式:auto 类型名 变量表
静态变量定义格式:static 类型名 变量表
注:1.自动变量没有赋初值→随机值;静态变量没有赋初值→自动赋0; 2.静态变量赋初值只在函数第一次调用时起作用,以后调用都按前一次调用保留的值使用。
2.本周的内容,你还不会什么?
①嵌套循环的PTA作业中,“编程打印空心字符菱形”一题还是不能自主完成,本次PTA中的此题是在老师讲解后,又通过其他人的协助指导才勉强完成,但如果再做一次,我想还是没法自己完成。
②对于函数这一章节的认识还处在课本的理论知识,对于自己打代码还有一段距离,希望能在接下来函数的PTA作业中熟悉函数的用法
③对伪代码的用法及流程图还不熟悉