袁小贤 发表于 2013-12-11 12:18:12

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

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

trary 发表于 2013-12-11 14:14:26

#include<stdio.h>

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

        int i,j;
        for(i=0;i<5;i++)
                b=a;
        for(i=0;i<5;i++)
        {
                for(j=0;j<5;j++)
                {
                        if(i!=j&&a==a)
                        {
                                b=0;
                                b=0;
                        }       
                }               
        }
               
}
int main()
{
        double a;
        int i,count=0;
        double average,sum=0;
        printf("please input 5 numbers:\n");
        for(i=0;i<5;i++)
                scanf("%lf",&a);
        newarray(a);
        for(i=0;i<5;i++)
                printf("%lf\t",b);
        for(i=0;i<=4;i++)
        {
                sum+=b;
                if(b!=0)
                        count++;
        }
        average=sum/count;
        printf("sum is %lf,average is %lf",sum,average);
        return 0;
}
偶是菜鸟,请指教

袁小贤 发表于 2013-12-11 16:41:55

有没有简单一点的????

maomingkun 发表于 2013-12-11 17:23:55

本帖最后由 maomingkun 于 2013-12-11 17:25 编辑

#include <stdio.h>

main()
{
    int a={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)                              如果相等跳出循环
                        {
                              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));

}

我这个怎么样?能看得懂么?不懂继续追问!

袁小贤 发表于 2013-12-11 17:26:31


有5个数字,假如有相同的数,要把相同的数去掉,去掉最大值和最小值,再来求剩下数的平均数和它们的和?怎么解决???

小亮1201 发表于 2013-12-11 18:20:41

楼主:I服了you!!!!!

袁小贤 发表于 2013-12-11 18:57:09

我是菜鸟,没办法,不会做,求大神指教

maomingkun 发表于 2013-12-11 22:25:37

trary 发表于 2013-12-11 14:14 static/image/common/back.gif
#include

double b;


兄弟,你这个貌似有点问题吧?

maomingkun 发表于 2013-12-11 22:27:17

本帖最后由 maomingkun 于 2013-12-11 22:29 编辑

#include <stdio.h>

main()
{
    int a={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&&i!=j)   //如果两个数相同,a不算入sum
                        {
                              x=0;
                              y++;    //判断有几个数相同,当有三个数相同时,1跟2比,y++,然后跳出循环;然后2跟1比;3跟1比,所以正好求出几个数相同
                              break;
                        }
                        x=1;   / /x==1时,说明没有与a重复的a。
                }
                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;
                }
      }
}

对不住了兄弟,有点事儿,发的有点晚了!

hate茶叶蛋 发表于 2013-12-12 00:33:09

我也是蔡鸟混经验

浮砂 发表于 2013-12-12 10:12:39

想了一个晚上加两节课的时间。。
代码比较粗糙。。。其实可以优化的。
您的意思 是先去掉重复的,再去掉最大最小的是吧。#include <stdio.h>

int main ()
{
        float a={0},b={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 == 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=temp;        /*就放入数组,然后p加1*/
                           a=temp;/*把a后面的一个元素放人和a一样的值*/       
                }       
        }       
        a=p; /*a没用,这回用上了。。让它保存P,因为一会P要*/
        p = 0;/*,因为一会P要统计新的数组b[]的元素个数,同时指向数组最后一个值*/
        for (i=1; i <=a; i++)/*这个for把剩下的最大最小值过滤掉*/
        {               
                if ( (a-min==0)||(a-max==0) )
                {            //如果发现了最大值或者最小值,则不放入b[]数组
                        continue;//跳出进行下一步循环                     
                }
              
                else
          {
                        p++;
                       b=a;
                       sum=sum+b;
                }
        }
        aver = sum/p;
        printf("数组元素:");
        for (i=1; i<=p; i++)
        {
                printf("%f",b);
        }
        printf("\n筛选后剩余:%dmax:%fmin:%fsum:%faver:%f",p,max,min,sum,aver);
        return 0;
}

bestainan 发表于 2013-12-12 11:26:34

trary 发表于 2013-12-12 13:31:12

maomingkun 发表于 2013-12-11 22:25 static/image/common/back.gif
兄弟,你这个貌似有点问题吧?

额 我不是什么兄弟。。。什么问题

maomingkun 发表于 2013-12-12 17:25:04

本帖最后由 maomingkun 于 2013-12-12 17:27 编辑

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

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


姐们儿,你看看这两个地方,是不是有点出入啊?我给p改为*p了,但是运行结果还是不对!

maomingkun 发表于 2013-12-12 17:26:31

trary 发表于 2013-12-12 13:31 static/image/common/back.gif
额 我不是什么兄弟。。。什么问题


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

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


姐们儿,你看看这两个地方,是不是有点出入啊?我给p改为*p了,但是运行结果还是不对!

trary 发表于 2013-12-12 20:18:18

maomingkun 发表于 2013-12-12 17:26 static/image/common/back.gif
1. for(int j = i+1;j

这不是我写的吧?

trary 发表于 2013-12-12 20:19:56

袁小贤 发表于 2013-12-11 16:41 static/image/common/back.gif
有没有简单一点的????

我是菜鸟。。。我写的已经是非常简单了。。。

maomingkun 发表于 2013-12-12 21:47:58

本帖最后由 maomingkun 于 2013-12-12 21:53 编辑

trary 发表于 2013-12-12 20:19 static/image/common/back.gif
我是菜鸟。。。我写的已经是非常简单了。。。
:funk:看错了呵呵你的代码没问题   不好意思

trary 发表于 2013-12-13 13:31:43

maomingkun 发表于 2013-12-12 21:47 static/image/common/back.gif
看错了呵呵你的代码没问题   不好意思

没事啊 不过我现在还不是鱼友 加不了好友啊

maomingkun 发表于 2013-12-13 15:43:13

trary 发表于 2013-12-13 13:31 static/image/common/back.gif
没事啊 不过我现在还不是鱼友 加不了好友啊

晓得晓得我刚开始也是别人加我我没权限
页: [1] 2
查看完整版本: 有5个数字,把相同的数去掉,在求剩下数的平均数和它们的和???用C语言