C语言 关于for语句问题

来源:百度知道 编辑:UC知道 时间:2024/05/29 16:19:17
请看我的程序:
#include "stdio.h"
int Max=0,Mc=0;
void hp(int a[],int n)
{int i=0;
Max=a[0];
Mc=a[0];
for(i=1;i<5;i++)
if(a[i]>Max)
Max=a[i];
if(a[i]<Mc)
Mc=a[i];
}

void main()
{int i;
int a[5];
for(i=0;i<5;i++)
scanf("%d",&a[i]);
hp(a,5);
printf("the max is%d\nthe mc is%d\n",Max,Mc);

}
Max,Mc是全局变量,hp函数被main函数调用。
当输入 6 3 4 2 7和6 5 4 2 7得到的结果都是
the max is7
the mc is5
这明显不对。
在hp函数中第一个if语句完全在for语句循环控制之内,
跳出循环事Max为输入数值中的最大值7
故输出的第一句“the max is7"没有问题。
但执行第二个if语句时,
i=4 a[i]即a[4]为7,又因为Mc已被赋值为a[0]等于6
根据语句 if(a[i]<Mc)
Mc=a[i];
Mc的值保持初值6
输出the mc is 6才对啊
请大家帮忙看下是什么问题

虽然第二个if不在for循环内,但当for循环退出时i=5,此时执行这个if语句,a[5]是数组外的一个数,它里面存的是5,你加一条语句
printf("%d\n",a[5]);
把a[5]输出就知道了。

for(i=1;i<5;i++)
{
if(a[i]>Max)
Max=a[i];
if(a[i]<Mc)
Mc=a[i];
}
没有大括号,程序只看一句的,你原来的相当于
for(i=1;i<5;i++)
{
if(a[i]>Max)
Max=a[i];
}
然后再
if(a[i]<Mc)
Mc=a[i];
这里只走1次

for(i=1;i<5;i++)
if(a[i]>Max)
Max=a[i];
if(a[i]<Mc)
Mc=a[i];

这个 for 语句 只控制的第一个 if 第二个没有循环

改为

for(i=1;i<5;i++)
{if(a[i]>Max)
Max=a[i];
if(a[i]<Mc)
Mc=a[i]; }

改成这样试一试。

#include "stdio.h"
int Max=0,Mc=0;
void hp(int a[],int n)
{int i=0;
Max=a[0];
Mc=a[0];
for(i=0;i<n;i++)
{if(a[i]>Max)
Max=a[i];
if(a[i]<Mc)
Mc=a[i];}
}

void main()
{int i;
int a[5];
for(i=0;i<5;