| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 856 人关注过本帖
标题:[求助]程序错(一个评分的程序),请各位指教!
只看楼主 加入收藏
blackstine
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2006-4-10
收藏
 问题点数:0 回复次数:8 
[求助]程序错(一个评分的程序),请各位指教!

从键盘上输入一组分数,以输入“-1”结束输入,去掉一个最高分去掉一个最底分,然后求平均分
编译能通过,但是输入数据以后 回到用户屏幕 没有结果 只有提示:floaing point error:divide by 0

请帮偶看看,错在哪里了
先谢谢了!!!

#include "stdio.h"
int aa(float *s) //定义函数找出最大数所对应的下标 并返回
{
int i,n; float max=*s;
for(i=0; ;i++)
{ if(*s==-1) break; if(max<=*s) {max=*s; n=i; }
s++;
}
return n;

}

int bb(float *s) //定义函数找出最小数所对应的下标 并返回
{
int i,n; float min=*s;
for(i=0; ;i++)
{ if(*s==-1) break; if(min>=*s) {min=*s; n=i; }
s++;
}
return n;
}


main()
{
int i=0,a,b; float a1[100],avg=0,c,d;
printf("\n\nInput some numbers :");
while(1) //使用循环语句输入数据 ,直到输入-1 输入结束
{ scanf("%f",&a1[i]);
if(a1[i]<-2||a1[i]>100)
{ printf("This number is wrong,please enter it again!!!");
scanf("%f",&a1[i]);
} i++; if(a1[i-1]==-1) break;
}
a=aa(a1); b=bb(a1); //调用函数

for(i=a; ;i++) { if(a1[i+1]==-1) break; a1[i]=a1[i+1]; } // 将最大数去掉 可能这两句有问题
for(i=b; ;i++) { if(a1[i+1]==-1) break; a1[i]=a1[i+1]; } // 将最小数去掉

for(i=0; ;i++) { if(a1[i]==-1) break; avg+=a1[i]; avg/=i-1; } //求平均分
printf("\n\nThe avg=%.2f\n",avg);
for(i=0; ;i++) { if(a1[i]==-1) break; printf(" %.2f",a1[i]); } //输出去掉最大和最小数后的数组
getch();
}

大家看后可以复制到 C软件中运行一下 ,谢谢!!!

[此贴子已经被作者于2006-4-10 13:17:56编辑过]

搜索更多相关主题的帖子: 评分 int max float 
2006-04-10 09:06
blackstine
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2006-4-10
收藏
得分:0 
定义的指针并不是想要返回值,主要是返回最大或最小值下标

##今日不签名·#¥!!!
2006-04-10 09:10
え元元え
Rank: 1
等 级:新手上路
帖 子:103
专家分:0
注 册:2006-4-7
收藏
得分:0 

排版不规范````
要改```


2006-04-10 13:38
blackstine
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2006-4-10
收藏
得分:0 
哦,说具体点好吗

##今日不签名·#¥!!!
2006-04-10 13:40
え元元え
Rank: 1
等 级:新手上路
帖 子:103
专家分:0
注 册:2006-4-7
收藏
得分:0 

include "stdio.h"
int aa(float *s) //定义函数找出最大数所对应的下标 并返回
{
int i,n; float max=*s;
for(i=0; ;i++)
{
if(*s==-1)
break;
if(max<=*s)
{
max=*s; n=i;
}
s++;
}
return n;
}

int bb(float *s) //定义函数找出最小数所对应的下标 并返回
{
int i,n; float min=*s;
for(i=0; ;i++)
{
if(*s==-1)
break;
if(min>=*s)
{
min=*s; n=i;
}
s++;
}
return n;
}


main()
{
int i=0,a,b; float a1[100],avg=0,c,d;
printf("\n\nInput some numbers :");
while(1) //使用循环语句输入数据 ,直到输入-1 输入结束
{
scanf("%f",&a1[i]);
if(a1[i]<-2||a1[i]>100)
{
printf("This number is wrong,please enter it again!!!");
scanf("%f",&a1[i]);
}
i++;
if(a1[i-1]==-1)
break;
}
a=aa(a1); b=bb(a1); //调用函数

for(i=a; ;i++)
{
if(a1[i+1]==-1)
break;
a1[i]=a1[i+1];
} // 将最大数去掉 可能这两句有问题
for(i=b; ;i++)
{
if(a1[i+1]==-1)
break;
a1[i]=a1[i+1];
} // 将最小数去掉

for(i=0; ;i++)
{
if(a1[i]==-1)
break;
avg+=a1[i];
avg/=i-1;
} //求平均分
printf("\n\nThe avg=%.2f\n",avg);
for(i=0; ;i++)
{
if(a1[i]==-1)
break;
printf(" %.2f",a1[i]);
} //输出去掉最大和最小数后的数组
getch();
}



2006-04-10 13:43
blackstine
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2006-4-10
收藏
得分:0 

谢谢了,看看能不能运行


##今日不签名·#¥!!!
2006-04-10 23:48
queyapahaha
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2006-4-5
收藏
得分:0 

#include "stdio.h"
int aa(float *s) //定义函数找出最大数所对应的下标 并返回
{
int i,n; float max=*s;
for(i=0; ;i++){
if(*s==-1) break;
if(max<=*s){
max=*s;
n=i;
}
s++;
}
return n;

}

int bb(float *s) //定义函数找出最小数所对应的下标 并返回
{
int i,n;
float min=*s;
for(i=0; ;i++){
if(*s==-1) break;
if(min>=*s) {
min=*s; n=i;
}
s++;
}
return n;
}


main()
{
int i=0,a,b;
float a1[100],avg=0;
printf("\n\nInput some numbers :");
while(1){
//使用循环语句输入数据 ,直到输入-1 输入结束
scanf("%f",&a1[i]);
if(a1[i]<-2||a1[i]>100){
printf("This number is wrong,please enter it again!!!");
continue;
}
i++;
if(a1[i-1]==-1) break;
}
a=aa(a1);
printf("%d\n",a);
b=bb(a1);
printf("%d\n",b); //调用函数
for(i=a; ;i++){
if(a1[i+1]==-1){
a1[i]=a1[i+1];
break;}

a1[i]=a1[i+1];
} // 将最大数去掉 可能这两句有问题
for(i=b; ;i++) {
if(a1[i+1]==-1) {
a1[i]=a1[i+1];
break;}

a1[i]=a1[i+1];
} // 将最小数去掉

for(i=0; ;i++) {
if(a1[i]==-1) break;
avg+=a1[i];
}
avg/=i; //求平均分
printf
("\n\nThe avg=%.2f\n",avg);
for(i=0; ;i++) {
if(a1[i]==-1) break;
printf(" %.2f",a1[i]);
} //输出去掉最大和最小数后的数组
}

看看这个吧
我运行出来了


我为程狂!!
2006-04-11 08:56
blackstine
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2006-4-10
收藏
得分:0 

谢谢大家,特别谢谢queyapahaha,你帮我找到并改正了一些错误。
在把最大和最小数去掉的那几句有点问题,象你上面说的做的话 在有几种情况下回得不到正确答案

把第二个调用语句放在
for(i=b; ;i++) {
if(a1[i+1]==-1) {
a1[i]=a1[i+1];
break;}

a1[i]=a1[i+1}
就完全对了


##今日不签名·#¥!!!
2006-04-11 14:38
blackstine
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2006-4-10
收藏
得分:0 
但是我还是有个问题:为什么这样就对了呢???

##今日不签名·#¥!!!
2006-04-11 14:40
快速回复:[求助]程序错(一个评分的程序),请各位指教!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018559 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved