黑马程序员技术交流社区

标题: 一题关于循环的问题,客官 赏个脸,何如? [打印本页]

作者: 道本真    时间: 2014-7-15 23:23
标题: 一题关于循环的问题,客官 赏个脸,何如?
本帖最后由 道本真 于 2014-7-17 16:07 编辑

这是一道求平均值的问题,要求不管你输入几个正整数它都能算出它们的平均值,是不管几个!新人求解啊,有能力的帮个忙,没能力的赏个脸。。。。。跪求技术分啊。。。。
作者: 楠瓜果    时间: 2014-7-16 00:05
用for循环就可以,然后把几个正整数相加赋值给一个第三变量,然后用第三变量除以2求以平均值,再把平均值输出就可以
作者: 为梦想挺身而出    时间: 2014-7-16 02:21
本帖最后由 为梦想挺身而出 于 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. }
复制代码


作者: zhs    时间: 2014-7-16 07:17
1.用循环控制1---n遍历(数组存储输入的正整数)
2.遍历时sum计算累加值
3.遍历是count记录遍历次数
4.循环外sum/count计算平均值

作者: 道本真    时间: 2014-7-16 09:18
这是我今天早上弄的,很感谢各位,我想问一下,有没有简单点,性能更好的,以求借鉴,我现在只是基础视频,用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 ;

}
作者: 道本真    时间: 2014-7-16 09:20
为梦想挺身而出 发表于 2014-7-16 02:21

写得很详细,非常感谢,万分感激:lol
作者: 为梦想挺身而出    时间: 2014-7-16 10:58
道本真 发表于 2014-7-16 09:18
这是我今天早上弄的,很感谢各位,我想问一下,有没有简单点,性能更好的,以求借鉴,我现在只是基础视频, ...

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

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

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

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

把while上面的 printf 和scanf放到while里的if上面,后面的 printf和scanf删掉  前面的sum初始化0.0
作者: 道本真    时间: 2014-7-16 23:12
为梦想挺身而出 发表于 2014-7-16 19:12
把while上面的 printf 和scanf放到while里的if上面,后面的 printf和scanf删掉  前面的sum初始化0.0 ...

突然之间,我好像有点懂了:L
作者: AndyWang    时间: 2014-7-17 00:25
楼主加个油
作者: 温天恩    时间: 2014-7-17 09:30
楼上回答都好高大上
作者: 丶白菜你个小番    时间: 2014-7-17 14:16
本帖最后由 丶白菜你个小番 于 2014-7-17 14:17 编辑

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


作者: 道本真    时间: 2014-7-17 16:10
AndyWang 发表于 2014-7-17 00:25
楼主加个油

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

2个变量,一个记录总和,一个记录个数
作者: David.L    时间: 2014-7-18 09:36
道本真 发表于 2014-7-16 12:08
说得不明白是我的失误,就是提示你输入一个正整数,你输入完之后,它会提示你输入了几个数,平均值是多少 ...

2个变量,一个记录总和,一个记录个数
作者: -(_)-    时间: 2014-7-18 18:31
像JAVA之类的高级语言, 函数都可以接受多个参数, 并且是不确定个数的, 或者你可以考虑用一个大的数组把这些数字保存进行再进行运行, 是可以实现的
作者: 爱情路13号    时间: 2014-7-18 23:59
自己多去琢磨
作者: megatron    时间: 2014-7-19 00:19
好多高手啊,我是小白就不献丑了:#
作者: istream    时间: 2014-7-19 14:39
和楼主程序差不多,少几行代码,版主能否给加个分?{:3_64:}
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         int num;
  5.         long sum = 0;
  6.         int count = 0;
  7.         printf("输入一个正整数(输入负数结束):");
  8.         scanf("%d", &num);
  9.         while (num >= 0)
  10.         {
  11.                 ++count;
  12.                 sum += num;
  13.                 printf("sum = %d, avg = %.2f\n", sum, (float)sum / count);
  14.                 printf("输入一个正整数(输入负数结束):");
  15.                 scanf("%d", &num);
  16.         }
  17.         return 0;
  18. }
复制代码




作者: 道本真    时间: 2014-7-21 23:25
AndyWang 发表于 2014-7-17 00:25
楼主加个油

一一起加油~~~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2