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: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-21 22:00
scanf("input:%d",&a);不能这么写,另外c、d需要赋初值
谢谢你。代码的逻辑我明白了,可是c,d为啥要赋初值呢,我一开始的想法是我后面给它赋值了。我现在的理解是,我写的c=b只是令两个字母相等,相当于没有意义。不知道我的理解对不对。 番杰 发表于 2021-11-21 22:00
scanf("input:%d",&a);不能这么写,另外c、d需要赋初值
我试着把c d的初值删掉了,并没有影响运行。我重新去看了下scanf的函数,前面是格式控制。。 驭行 发表于 2021-11-22 08:23
我试着把c d的初值删掉了,并没有影响运行。我重新去看了下scanf的函数,前面是格式控制。。
一个比较常见的说法是,任何程序中在创建变量时都需要给他设定一个初值,赋值以前,他里面存储的值是不确定的,可能带来一些意想不到的问题。这是一个习惯问题,尤其是你的代码量比较大时,养成这个习惯能让你避免很多不必要的麻烦。
因为很久不碰C了,所以以上是个人理解,作为参考~~ 本帖最后由 番杰 于 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;
所以就不需要让它跟自身比较。 lightninng 发表于 2021-11-22 08:37
一个比较常见的说法是,任何程序中在创建变量时都需要给他设定一个初值,赋值以前,他里面存储的值是不确 ...
受教了 学习了
学习了
页:
[1]