驭行 发表于 2021-11-21 21:37:59

c语言作业题求解

从键盘输入8个数用数组保存,找出其中的最大值和最小值,并分别输出相应的位置(下标);
帮孩子看看出了啥问题,没报错,运行不成功


#include<stdio.h>
int main()
{
        int a;
        int b,max,min,c,d;
        for(b=0;b<8;b++)
                scanf("input:%d",&a);
        max=a;
        min=a;
        for(b=0;b<8;b++)
        {        if(a>max)
                {
                        max=a;
                        d=b;
                }
                else if(a<min)
                {
                        min=a;
                        c=b;
                }
        }
        printf("最大值为a[%d]=%d\n",d,max);
        printf("最小值为a[%d]=%d\n",c,min);
}

番杰 发表于 2021-11-21 22:00:33

本帖最后由 番杰 于 2021-11-21 22:02 编辑

scanf("input:%d",&a);不能这么写,另外c、d需要赋初值
#include<stdio.h>
int main()
{
      int a;
      int b,max,min,c = 0,d = 0;//赋初值
      for(b=0;b<8;b++)
      {
            printf("input:");   //添加
          scanf("%d",&a); //修改
      }
        max=a;
      min=a;
      for(b=1;b<8;b++)//从1开始比较大小
      {      
                if(a>max)
                {
                        max=a;
                        d=b;
                }
                else if(a<min)
                {
                        min=a;
                        c=b;
                }
      }
      printf("最大值为a[%d]=%d\n",d,max);
      printf("最小值为a[%d]=%d\n",c,min);
}

驭行 发表于 2021-11-22 07:56:37

番杰 发表于 2021-11-21 22:00
scanf("input:%d",&a);不能这么写,另外c、d需要赋初值

谢谢你。代码的逻辑我明白了,可是c,d为啥要赋初值呢,我一开始的想法是我后面给它赋值了。我现在的理解是,我写的c=b只是令两个字母相等,相当于没有意义。不知道我的理解对不对。

驭行 发表于 2021-11-22 08:23:06

番杰 发表于 2021-11-21 22:00
scanf("input:%d",&a);不能这么写,另外c、d需要赋初值

我试着把c d的初值删掉了,并没有影响运行。我重新去看了下scanf的函数,前面是格式控制。。

lightninng 发表于 2021-11-22 08:37:46

驭行 发表于 2021-11-22 08:23
我试着把c d的初值删掉了,并没有影响运行。我重新去看了下scanf的函数,前面是格式控制。。

一个比较常见的说法是,任何程序中在创建变量时都需要给他设定一个初值,赋值以前,他里面存储的值是不确定的,可能带来一些意想不到的问题。这是一个习惯问题,尤其是你的代码量比较大时,养成这个习惯能让你避免很多不必要的麻烦。
因为很久不碰C了,所以以上是个人理解,作为参考~~

番杰 发表于 2021-11-22 09:04:15

本帖最后由 番杰 于 2021-11-22 09:07 编辑

驭行 发表于 2021-11-22 08:23
我试着把c d的初值删掉了,并没有影响运行。我重新去看了下scanf的函数,前面是格式控制。。

这个赋初值是对应for循环中,b从1开始的情况,也就是我这么写的情况,你开始的时候写的是b = 0;
如果c、d不赋初值的话,
当a为最大或最小的时候,
按照这个程序的逻辑,
c、d就没有被赋值过,
就相当于打印出来是个随机的下标,而不是0;
像你开始的程序中,for循环中b = 0 开始,就不需要把c、d进行赋值。

另:for循环中,b改为从1开始,
是因为在for之前已经把max,min赋值为a;
所以就不需要让它跟自身比较。

驭行 发表于 2021-11-22 09:57:08

lightninng 发表于 2021-11-22 08:37
一个比较常见的说法是,任何程序中在创建变量时都需要给他设定一个初值,赋值以前,他里面存储的值是不确 ...

受教了

tomok 发表于 2021-11-22 10:24:36

学习了

人少地多 发表于 2021-11-22 15:16:23

学习了
页: [1]
查看完整版本: c语言作业题求解