鱼C论坛

 找回密码
 立即注册
查看: 4959|回复: 21

有5个数字,把相同的数去掉,在求剩下数的平均数和它们的和???用C语言

[复制链接]
发表于 2013-12-11 12:18:12 | 显示全部楼层 |阅读模式
1鱼币
有5个数字,把相同的数去掉,在求剩下数的平均数和它们的和???用C语言

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-11 14:14:26 | 显示全部楼层
#include<stdio.h>

double b[5];
void newarray(double a[])
{

        int i,j;
        for(i=0;i<5;i++)
                b[i]=a[i];
        for(i=0;i<5;i++)
        {
                for(j=0;j<5;j++)
                {
                        if(i!=j&&a[i]==a[j])
                        {
                                b[i]=0;
                                b[j]=0;
                        }       
                }               
        }
               
}
int main()
{
        double a[5];
        int i,count=0;
        double average,sum=0;
        printf("please input 5 numbers:\n");
        for(i=0;i<5;i++)
                scanf("%lf",&a[i]);
        newarray(a);
        for(i=0;i<5;i++)
                printf("%lf\t",b[i]);
        for(i=0;i<=4;i++)
        {
                sum+=b[i];
                if(b[i]!=0)
                        count++;
        }
        average=sum/count;
        printf("sum is %lf,average is %lf",sum,average);
        return 0;
}
偶是菜鸟,请指教
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-12-11 16:41:55 | 显示全部楼层
有没有简单一点的????
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-11 17:23:55 | 显示全部楼层
本帖最后由 maomingkun 于 2013-12-11 17:25 编辑

#include <stdio.h>

main()
{
    int a[5]={2,3,2,3,2};                                  //定义五个数
        int i,j,x=0,y=0;                              //x是个标志,是否有重复的数;y是计算有几个重复的数字,用5减去y就是剩的数
        float sum=0.0;                              这个是存储和的,我用了实型
        for(i=0;i<5;i++)                          //取第一个数开始于第二个比较
        {
                for (j=i+1;j<5;j++)
                {
                        if (a==a[j])                                如果相等跳出循环
                        {
                                x=0;
                                y++;                               //重复一次说明有一个重复的数,
                                break;
                        
                        }
                                x=1;                            不相等x=1,说明这个数与后边的数没有重复
               
                }
                if (x==1)
                {
                        sum+=a;                            /  /没有相等的数的时候x=1,a可以相加了
                }
               
        }
        printf("总和是%d,平均数是%1.1f",(int)sum,sum/(5-y));

}

我这个怎么样?能看得懂么?不懂继续追问!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-12-11 17:26:31 | 显示全部楼层

有5个数字,假如有相同的数,要把相同的数去掉,去掉最大值和最小值,再来求剩下数的平均数和它们的和?怎么解决???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-11 18:20:41 | 显示全部楼层
楼主:I服了you!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-12-11 18:57:09 | 显示全部楼层
我是菜鸟,没办法,不会做,求大神指教
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-11 22:25:37 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-11 22:27:17 | 显示全部楼层
本帖最后由 maomingkun 于 2013-12-11 22:29 编辑

#include <stdio.h>

main()
{
    int a[5]={7,4,3,5,2};
        int i,j,x=0,y=0,k=1,max,min;
        float sum=0.0;
        
        for(i=0;i<5;i++)
        {
                for (j=0;j<5;j++)
                {
                        if (a==a[j]&&i!=j)     //如果两个数相同,a不算入sum
                        {
                                x=0;
                                y++;      //判断有几个数相同,当有三个数相同时,1跟2比,y++,然后跳出循环;然后2跟1比;3跟1比,所以正好求出几个数相同
                                break;
                        }
                        x=1;   / /x==1时,说明没有与a重复的a[j]。
                }
                if (x==1)   //下边是将不重复的数进行运算
                {
                        if (k>=1)
                        {
                                max=a;    //将没有重复的第一个数赋值给max和min用于初始化这两个变量
                                min=a;
                                k-=1;  //这个if语句仅使用一次
                        }
                        max=max>a?max:a;   //求出最大值
                        min=min<a?min:a;    //求出最小值
                        
                        
                        sum+=a;     //求和
                        printf("%d\t",a);
                }
               
        }
        printf("\n");
        switch (y)    //判断有几个数相同,根据不同的值有不同的输出。这些你自己完善一下吧
        {
        case 0:
                {
                        sum=sum-max-min;
                        printf("有5个不同的数, 去掉最大数%d和最小数%d,总和是%d,平均数是%1.1f\n",max,min,(int)sum,sum/3);
                        break;
                }
        case 2:
                {
                        sum=sum-max-min;
                        printf("有3个不同的数, 去掉最大数%d和最小数%d,总和是%d,平均数是%1.1f\n",max,min,(int)sum,sum/1);
                        break;
                }
        case 3:
                {
                        break;
                }
        case 4:
                {
                        
                        printf("有1个不同的数, 和是%d,平均数是%d\n",(int)sum,(int)sum);
                        break;
                }
        case 5:
                {
                        printf("5个数都相同!");
                        break;
                }
        }
}

对不住了兄弟,有点事儿,发的有点晚了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-12 00:33:09 From FishC Mobile | 显示全部楼层
我也是蔡鸟混经验
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-12 10:12:39 | 显示全部楼层
想了一个晚上加两节课的时间。。
代码比较粗糙。。。其实可以优化的。
您的意思 是先去掉重复的,再去掉最大最小的是吧。
#include <stdio.h>

int main ()
{
        float a[7]={0},b[7]={0}, temp=0, count=0, max=0, min=0, sum=0, aver=0;
        int i=0,j=0,p=0;
        bool boolSame=false;
        for (i=1; i!=6; i++)/*这个for循环用来把重复的数过滤掉*/
        {   scanf("%f", &temp);  /*输入5个数。 */
                if (i==1)  /*首次循环需要 确定max ,min  的大小 */
                {          /*max,min的值不能随便给出,否则会出现错误 */
                         max =temp;
                        min = max +1;
                }                
                boolSame=false;/*标志位,标志着输入的数是否有重复,默认false不重复*/
                for (j=1; j<=i; j++) 
                {
                        if ( a[j] == temp) /*如果发现了重复的*/
                        {
                                boolSame=true;  /*把标志位设置成true,然后跳出for循环*/
                                break;
                        } 
                        else if (max < temp)
                        {
                                max = temp;
                        }
                        else if(min > temp)
                        {
                                min = temp;
                        }
                }
                if ( false == boolSame )  /*如果和前面中没有一个相同,same就是false */
                {
                        ++p;       /*p代表数组a有几个元素,每当筛选出一个符合的*/
                        a[p]=temp;        /*就放入数组,然后p加1  */
                           a[p+1]=temp;/*把a[p]后面的一个元素放人和a[p]一样的值*/        
                }        
        }        
        a[0]=p; /*a[0]没用,这回用上了。。让它保存P,因为一会P要*/
        p = 0;/*,因为一会P要统计新的数组b[]的元素个数,同时指向数组最后一个值*/
        for (i=1; i <=a[0]; i++)/*这个for把剩下的最大最小值过滤掉*/
        {                
                if ( (a[i]-min==0)||(a[i]-max==0) ) 
                {            //如果发现了最大值或者最小值,则不放入b[]数组 
                        continue;//跳出进行下一步循环                     
                } 
                 
                else
            {
                        p++;
                       b[p]=a[i];
                       sum=sum+b[p];
                }
        } 
        aver = sum/p;
        printf("数组元素:"); 
        for (i=1; i<=p; i++)
        {
                printf("%f  ",b[i]);
        }
        printf("\n筛选后剩余:%d  max:%f  min:%f  sum:%f  aver:%f",p,max,min,sum,aver);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2013-12-12 11:26:34 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-12 13:31:12 | 显示全部楼层
maomingkun 发表于 2013-12-11 22:25
兄弟,你这个貌似有点问题吧?

额 我不是什么兄弟。。。什么问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-12 17:25:04 | 显示全部楼层
本帖最后由 maomingkun 于 2013-12-12 17:27 编辑

1. for(int j = i+1;j<size;j++)
                {
                        if(p==p[j])//这个地方p是放的地址吧?而p[j]这个应该是数值吧?p是不是应改为*p呢?
                        {
                                //用pc数组记录p数组中重复的数据,0表示重复,1表示不重复
                                pc=0;
                                pc[j]=0;
                        }

2.void getNums(int* p,int size)
{
        cout<<"请输入五个整数:";
        for(int i = 0;i<size;i++)
        {
                cin>>p;//这个地方也是,p是个指针变量吧?应该用*p来接受输入吧!
        }
}


姐们儿,你看看这两个地方,是不是有点出入啊?我给p改为*p了,但是运行结果还是不对!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-12 17:26:31 | 显示全部楼层
trary 发表于 2013-12-12 13:31
额 我不是什么兄弟。。。什么问题


1. for(int j = i+1;j<size;j++)
                {
                        if(p==p[j])//这个地方p是放的地址吧?而p[j]这个应该是数值吧?p是不是应改为*p呢?
                        {
                                //用pc数组记录p数组中重复的数据,0表示重复,1表示不重复
                                pc=0;
                                pc[j]=0;
                        }

2.void getNums(int* p,int size)
{
        cout<<"请输入五个整数:";
        for(int i = 0;i<size;i++)
        {
                cin>>p;//这个地方也是,p是个指针变量吧?应该用*p来接受输入吧!
        }
}


姐们儿,你看看这两个地方,是不是有点出入啊?我给p改为*p了,但是运行结果还是不对!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-12 20:18:18 | 显示全部楼层
maomingkun 发表于 2013-12-12 17:26
1. for(int j = i+1;j

这不是我写的吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-12 20:19:56 | 显示全部楼层
袁小贤 发表于 2013-12-11 16:41
有没有简单一点的????

我是菜鸟。。。我写的已经是非常简单了。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-12 21:47:58 | 显示全部楼层
本帖最后由 maomingkun 于 2013-12-12 21:53 编辑
trary 发表于 2013-12-12 20:19
我是菜鸟。。。我写的已经是非常简单了。。。

:funk:看错了  呵呵  你的代码没问题   不好意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-13 13:31:43 | 显示全部楼层
maomingkun 发表于 2013-12-12 21:47
看错了  呵呵  你的代码没问题   不好意思

没事啊 不过我现在还不是鱼友 加不了好友啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-13 15:43:13 | 显示全部楼层
trary 发表于 2013-12-13 13:31
没事啊 不过我现在还不是鱼友 加不了好友啊

晓得晓得  我刚开始也是  别人加我我没权限
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 18:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表