为运动员打分的程序及我所犯的错误

错误的编码:

#include<stdio.h>
int main()
{
 double score,max=-1,min=11,sum=0,ave;
 int i=1;
 while(i<=9)
 {
 scanf("%lf",&score);
 sum=sum+score;
 if(min>=score)
 min=score;
 if(max<=score)
 max=score;
 i++;
 }
 ave=(sum-min-max)/7;
 printf(".3%f\n",ave);
 return 0;
}

正确答案应该是6.914.

分析:我们的结果是.36.914286,经过查找资料我们发现了该程序中的错误是printf(“.3%f”,ave),正确的格式应该是printf("%.3f",ave);  .3的位置错了,所以我们的结果也就错了。

正确的代码:

#include<stdio.h>
int main()
{
 double score,max=-1,min=11,sum=0,ave;
 int i=1;
 while(i<=9)
 {
 scanf("%lf",&score);
 sum=sum+score;
 if(min>=score)
 min=score;
 if(max<=score)
 max=score;
 i++;
 }
 ave=(sum-min-max)/7;
 printf("%.3f\n",ave);
 return 0;
}


疑惑:虽然这个程序为我们算出来正确的结果,但是与我的所想却不一样!这个程序是把所有的数据全都输入进去,输入多少都可以,但是计算机再计算式取的是前九个数据,可以说是一个一个读取的,但是两个数据之间的空格是否被读取了呢,之前课堂所讲的题目里面,我们用一个scanf("%c",&a),来清空缓冲区(经过我的实验,发现用整型的来清除缓冲区是不行的,这又是为什么!)。

当我对程序单步调试的时候,只有把所有程序都输入进去后按下空格键后,我才能点击next line,我希望的是输入一个数据后,他就能够让我点击next line,又一次实验后发现,输入一个数据后按回车,就可以点击next line了。我希望我再按下空格是它也可以让我点击next line ,同时再输入九个数据后自动输出结果,不能输入九个以上的数。

经过分析后发现我产生了很多的疑问。

也对这个程序很不满意!




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值