A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 道本真 于 2014-7-17 16:07 编辑

这是一道求平均值的问题,要求不管你输入几个正整数它都能算出它们的平均值,是不管几个!新人求解啊,有能力的帮个忙,没能力的赏个脸。。。。。跪求技术分啊。。。。

25 个回复

倒序浏览
用for循环就可以,然后把几个正整数相加赋值给一个第三变量,然后用第三变量除以2求以平均值,再把平均值输出就可以
回复 使用道具 举报
本帖最后由 为梦想挺身而出 于 2014-7-16 02:44 编辑
  1. #include <stdio.h>
  2. #include <string.h>

  3. int main()
  4. {
  5.     char num[10000]; // 用来存储输入的字符串
  6.    
  7.     char s[1000][100]; // 用来把字符串中的数字取出来
  8.    
  9.     int one = 0; // 第一个下标,初始化为0
  10.     int two = 0; // 第二个下标,并且初始化为0
  11.    
  12.     int count; // 数组要计算的个数
  13.    
  14.     printf("请输入需要计算平均值的个数!提示:代码不是很完善,请按照提示输入:\n");
  15.    
  16.     scanf("%d", &count);
  17.    
  18.     printf("请输入正整数,中间以英文逗号隔开\n");
  19.    
  20.     scanf("%s", num);

  21.     for (int i = 0; i<strlen(num); i++) {
  22.         
  23.         
  24.         
  25.         if ( num[i] != ',' ) {
  26.             
  27.             s[one][two] = num[i];
  28.             s[one][two+1] = '\0'; // 下面一个是\0
  29.             
  30.             two++; // 如果没有逗号就+1
  31.         }
  32.         else
  33.         {
  34.             one++;
  35.             two = 0; // 如果有逗号就赋值为0
  36.         }

  37.     }
  38.    
  39.     for (int j = 0; j<count; j++) {
  40.         // atof 是将字符串转为double类型
  41.         printf("%.3f的平均数为%.3f\n", atof(s[j]), atof(s[j])/2);
  42.     }
  43.    
  44.       
  45.     return 0;
  46. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1

查看全部评分

回复 使用道具 举报
1.用循环控制1---n遍历(数组存储输入的正整数)
2.遍历时sum计算累加值
3.遍历是count记录遍历次数
4.循环外sum/count计算平均值
回复 使用道具 举报
这是我今天早上弄的,很感谢各位,我想问一下,有没有简单点,性能更好的,以求借鉴,我现在只是基础视频,用c语言的。
#include <stdio.h>

int main ()
{
    int num1 = 0 ;
   
    double sum;
   
    double average ;
   
    int i = 0 ;
   
    printf ("请输入一个正整数\n");
   
    scanf ("%d", & num1);
      while (1)
      {
         
        if (num1 > 0)
        {
         
          sum+= num1 ;
         
          i++;
         
          average = sum / i ;
         
          printf ("输入的个数是%d   平均值为%f\n", i  , average );
        }
   
        else
        {
          printf("非法输入\n");
         
        }
          printf ("请输入一个正整数\n");
          scanf ("%d"  , & num1);

      }
    return 0 ;

}

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1

查看全部评分

回复 使用道具 举报

写得很详细,非常感谢,万分感激:lol
回复 使用道具 举报
道本真 发表于 2014-7-16 09:18
这是我今天早上弄的,很感谢各位,我想问一下,有没有简单点,性能更好的,以求借鉴,我现在只是基础视频, ...

原来是这个意思啊,是我理解错了,不好意思
回复 使用道具 举报
看了楼主的提问,我有点懵,特别是那句:是不管几个。电脑怎么知道你要输入几个数啊,想了半天,还是没想出来怎么去弄。:(
回复 使用道具 举报
陆习康 发表于 2014-7-16 11:12
看了楼主的提问,我有点懵,特别是那句:是不管几个。电脑怎么知道你要输入几个数啊,想了半天,还是没想出 ...

说得不明白是我的失误,就是提示你输入一个正整数,你输入完之后,它会提示你输入了几个数,平均值是多少,再次提示你输入一个正整数。。。这样一直循环,
比如:你输入1  它输出 个数1       平均值 1 又提示输入一个正整数
        你再输入8 它输出 个数2       平均值4.5 又提示你输入一个正整数
回复 使用道具 举报
道本真 发表于 2014-7-16 12:08
说得不明白是我的失误,就是提示你输入一个正整数,你输入完之后,它会提示你输入了几个数,平均值是多少 ...

你的代码已经非常好了,没什么性能问题。但有个bug,scanf要移到while循环内,否则只会读入一个数字。另外要增加读到负数时退出循环的判断
回复 使用道具 举报
fantacyleo 发表于 2014-7-16 12:10
你的代码已经非常好了,没什么性能问题。但有个bug,scanf要移到while循环内,否则只会读入一个数字。另 ...

我也觉得有点不妥,所以代码scanf 我是写了2个 一个在while 外 一个在while 内,能只用一个scanf 就行我就是想不出来,还有就是我没有想到输入负数时退出程序,感激不尽!
回复 使用道具 举报
道本真 发表于 2014-7-16 12:23
我也觉得有点不妥,所以代码scanf 我是写了2个 一个在while 外 一个在while 内,能只用一个scanf 就行我 ...

把while上面的 printf 和scanf放到while里的if上面,后面的 printf和scanf删掉  前面的sum初始化0.0
回复 使用道具 举报
为梦想挺身而出 发表于 2014-7-16 19:12
把while上面的 printf 和scanf放到while里的if上面,后面的 printf和scanf删掉  前面的sum初始化0.0 ...

突然之间,我好像有点懂了:L
回复 使用道具 举报
楼主加个油
回复 使用道具 举报
楼上回答都好高大上
回复 使用道具 举报
本帖最后由 丶白菜你个小番 于 2014-7-17 14:17 编辑

1,定义一个足够大的数组接收你的输入,2,写一个函数,参数是数组和数组的大小,在函数中遍历数组求值。

回复 使用道具 举报 1 0

彼此共勉!
回复 使用道具 举报
能加分的给个分:lol
回复 使用道具 举报
用数组是最快的,2个思路
1,新建空长度数组,输入赋值给数组,然后循环相加得总和,然后除以数组长度,即为平均值
2,先获取总个数,新建相应长度数组,分别输入给每个元素赋值,然后...
回复 使用道具 举报
道本真 发表于 2014-7-16 12:08
说得不明白是我的失误,就是提示你输入一个正整数,你输入完之后,它会提示你输入了几个数,平均值是多少 ...

2个变量,一个记录总和,一个记录个数
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马