标题:学习C语言中 编程有问题 希望大家帮我看一下哪有问题
只看楼主
JBL
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2016-1-29
结帖率:0
已结贴  问题点数:20 回复次数:9 
学习C语言中 编程有问题 希望大家帮我看一下哪有问题

这里面输出的average出了问题 为什么呢 我感觉我弄的没有问题啊
搜索更多相关主题的帖子: average average C语言 C语言 
2016-01-29 20:22
jklqwe111
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:35
帖 子:335
专家分:1125
注 册:2014-4-13
得分:0 
我看到两个问题,sum未初始化,min   max如果是求极值的话比较逻辑不对,并且a[i+1]最后越界
2016-01-29 21:17
jklqwe111
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:35
帖 子:335
专家分:1125
注 册:2014-4-13
得分:0 
我看到两个问题,sum未初始化,min   max如果是求极值的话比较逻辑不对,并且a[i+1]最后越界
2016-01-29 21:20
JBL
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2016-1-29
得分:0 
回复 2楼 jklqwe111
好我修改看看 谢谢
2016-01-29 21:29
JBL
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2016-1-29
得分:0 
回复 2楼 jklqwe111
那最好怎么写逻辑上比较正确 求教 我刚开始学这个 不是很懂
2016-01-29 21:32
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:7 
程序代码:
#include<stdio.h>
int main(){
    int count=20;
    double average;
    int a[20];
    int i;
    int sum=0,min,max;
    for(i=0;i<20;i++){
        scanf("%d",a+i);
        if(i==0)
            min=max=a[0];   

        else if(a[i]>max)
            max=a[i];
        else if(a[i]<min)
            min=a[i];
        sum+=a[i];
    }
    average=1.0*(sum-max-min)/(count-2);
    printf("count=%d,average=%f",count,average);
}


剑栈风樯各苦辛,别时冰雪到时春
2016-01-29 21:40
JBL
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2016-1-29
得分:0 
#include <stdio.h>
int main (void)
{
    int count=20;
    double average;

    int a[20];
    int i,j;
    int sum=0,min,max;
   
    for(i=0;i<20;i++)
    {
        scanf("%d",a+i);
    }
    for(i=0;i<20;i++)
    {
        max=min=a[0];
        if(a[i]<min)
        {
            min=a[i];
        }
        if(a[i]>max)
        {
            max=a[i];
        }
    }
    for(i=0;i<20;i++)
    {
        sum+=a[i];
    }
    for(i=0;i<20;i++)
    {

        if(a[i]==min||a[i]==max)
        {
            count--;
            sum-=a[i];
        
        }
    }
    average=(double)sum/count;
        
    printf("count=%d,average=%f",count,average);
    return 0;
}
   
这是我修改好的 答案也对了
主要就是最后average加了(double)
那为什么加了double就对了呢? 不懂
2016-01-29 22:00
jklqwe111
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:35
帖 子:335
专家分:1125
注 册:2014-4-13
得分:7 
for(i=0;i<20;i++)
    {
       if (i==0)//这一句不能省
        max=min=a[0];
        if(a[i]<min)
        {
            min=a[i];
        }
        if(a[i]>max)
        {
            max=a[i];
        }
    }
楼主修改后的程序还是有问题的,虽然运算结果正确,但那只是巧合罢了,你把输入的改为乱序看看看。
2016-01-30 02:22
jklqwe111
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:35
帖 子:335
专家分:1125
注 册:2014-4-13
得分:0 
  max=min=a[0];
 for(i=1;i<20;i++)//从1开始
    {
        if(a[i]<min)
        {
            min=a[i];
        }
        if(a[i]>max)
        {
            max=a[i];
        }
    }
以上是另一写法。
2016-01-30 02:36
w2015
Rank: 2
等 级:论坛游民
帖 子:23
专家分:26
注 册:2016-1-28
得分:7 
我请问下,scanf("%d",a+i)这个对了?想用函数名做函数参数? 还有就是判断语句没对。可以列如这样:
int max;
max=a[0];
for(i=1;i<20;i++)
if(a[i]>max)
max=a[i];
这个应该可以形成判断最值的语句,最小值也是一样的道理,改改就可以了。
2016-01-31 10:27



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-461463-1-1.html




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

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