张世来4610484 发表于 2020-2-19 16:24:30

问题求助

#include <stdio.h>
void main ()
{
        int i,max,a;
        float avg =0.0;
        printf("input 10 numbers: ");
        for (i=0;i<10;i++)
                scanf("%d",&a);
        max=a;
        for(i=0;i<10;i++)
        {
                avg=avg+a/10.0;
                if(a>max)max=a;
        }
        printf("avg=%f,max=%d\n",avg,max);
       
}
如上的一段代码,我改了如下if(a>max) max=a;的位置,结果就不一样,想知道,假设a是最大的,
赋值给了max后,在第二个for循环里max=a会变成max=吗,意思是整个程序里的i最后只能是同一个值,是这个意思吗
#include <stdio.h>
void main ()
{
        int i,max,a;
        float avg =0.0;
        printf("input 10 numbers: ");
        for (i=0;i<10;i++)
        {       
      scanf("%d",&a);
        max=a;
        if(a>max)max=a;
      }
        for(i=0;i<10;i++)
        {
                avg=avg+a/10.0;
               
        }
        printf("avg=%f,max=%d\n",avg,max);
       
}

miao_meng 发表于 2020-2-19 17:04:23

max只需在初始化时赋值一次,第一个程序因为在不同循环中,max的被重复赋值为a,但未影响到第二个循环中的比较。第二个程序因为赋值和比较在同一循环中,最后一次比较是a和a的比较,没有承载之前的最大值。

龙龙龙龙龙龙 发表于 2020-2-19 22:29:02

先明确目的
可以知道,是让求10个数的平均值和其中最大数
例如输入:0 1 2 3 4 5 9 7 8 6
max=a   //将第一个值先赋给max
for(i=0;i<10;i++)
      {
                avg=avg+a/10.0;
                if(a>max)    //   i=5,5>4,max=5;       i=6,9>5,max=9;      i=7,7<9,max=9
                  max=a;   
      }
//如果将scanf和max=a放进for循环里
for (i=0;i<10;i++)
      {      
      scanf("%d",&a);
      max=a;
      if(a>max)
            max=a;
      }          //i=0,a=0,max=0,0>0,假,不执行max=a,输出max=0;   十个数会依次过一遍,max会等于最后一个数

张世来4610484 发表于 2020-2-20 18:45:44

龙龙龙龙龙龙 发表于 2020-2-19 22:29
先明确目的
可以知道,是让求10个数的平均值和其中最大数
例如输入:0 1 2 3 4 5 9 7 8 6


那输入第二个i=1;a=1,max=a;a>max,执行max=,不是这么理解吗,直到最后的6,比8小,不执行,输出结果不是8吗

龙龙龙龙龙龙 发表于 2020-2-21 14:11:17

张世来4610484 发表于 2020-2-20 18:45
那输入第二个i=1;a=1,max=a;a>max,执行max=,不是这么理解吗,直到最后的6,比8小,不执 ...

不不不 每次都会初始max=a=0
除了第一次a都是和0比肯定都大于
max=a=6
页: [1]
查看完整版本: 问题求助