张世来4610484 发表于 2020-2-19 16:33:59

问题求助

#include <stdio.h>
void main ()
{
        int i,max,a;
        printf("input 10 numbers: ");
        for (i=0;i<10;i++)
        {        scanf("%d",&a);
        max=a;
        if(a>max)max=a;}
        printf("max=%d",max);

       
帮忙看下这样的代码输入10个数求最大,有什么问题吗
5,10,13,22,8,30,82,6,36,40,为什么最大数输出的是40,不是82

rt1983525 发表于 2020-2-19 16:39:26

max=a

miao_meng 发表于 2020-2-19 16:43:33

本帖最后由 miao_meng 于 2020-2-19 17:00 编辑

max只需赋值一次,不能在循环中。

良弓无箭 发表于 2020-2-19 18:17:49

你不能把定义数组和遍历数组放在一个for循环里。应该使用两个for循环先是定义,再是使用。代码如下:
#include <stdio.h>
void main ()
{
      int i,max,a;
      printf("input 10 numbers: ");
      for (i=0;i<10;i++)
      {      
                scanf("%d",&a);
                }
      max=a;
      for(i=0;i<10;i++)
      {
              if(a>max)
                        {
                                max=a;
                        }
                }
      
      printf("max=%d",max);

}

pengjiandong 发表于 2020-2-19 18:51:26

#include <stdio.h>
//将max = a放在循环之外可解决该问题,具体原因见注释
int main ()
{
      int i,max,a;
      printf("input 10 numbers: ");
      for (i=0;i<10;i++)
      {      
                scanf("%d",&a);
      max=a;      //每次循环中都定义 max = a
      if(a>max)   //将新输入的数组元素与 max即a做比较,当大于a时,即将max替换为上一个输入的数组元素
                max=a;      //那么根据程序,每次的max都是刚输入的值与第一个元素的比较,最后一个元素40 > 5,故max = 40.
                }
      
      printf("max=%d",max);

      }
       
页: [1]
查看完整版本: 问题求助