#include
#define MAXN 10
typedef float ElementType;
ElementType Max( ElementType S[], int N );
int main ()
{
ElementType S[MAXN];
int N, i;
scanf("%d", &N);
for ( i=0; i<N; i++ )
scanf("%f", &S[i]);
printf("%.2f\n", Max(S, N));
return 0;
}
ElementType Max( ElementType S[], int N )
{
ElementType j=S[0];
int i;
for(i=0;i {
if(S[i] j=S[i+1];
else j=S[i];
}
return j;
}
以上代码输出的是数组最后一个元素,是哪个地方出错了?而下面的代码去掉else语句后又是正确的
#include
#define MAXN 10
typedef float ElementType;
ElementType Max( ElementType S[], int N );
int main ()
{
ElementType S[MAXN];
int N, i;
scanf("%d", &N);
for ( i=0; i<N; i++ )
scanf("%f", &S[i]);
printf("%.2f\n", Max(S, N));
return 0;
}
ElementType Max( ElementType S[], int N )
{
ElementType j=S[0];
int i;
for(i=0;i<N;i++)
{
if(S[i]<S[i+1])
j=S[i+1];
}
return j;
}
ElementType Max( ElementType S[], int N )
{
ElementType j=S[0];
int i;
for(i=0;i {
if(S[i] j=S[i+1];
else j=S[i];
}
return j;
}
该段 不知道 你的 if 括号都没有不知道怎么看了!帮你格式化了一下自己看:
ElementType Max( ElementType S[], int N )
{
ElementType j=S[0];
int i;
for(i=0;i
{
if(S[i]
j=S[i+1];
else
j=S[i];
}
return j;
}
然后你修改后的是这个样子的
ElementType Max( ElementType S[], int N )
{
ElementType j=S[0];
int i;
for(i=0;i<N;i++)
{
if(S[i]<S[i+1])
j=S[i+1];
}
return j;
}
我大致对对比了一下 发现你的 else内的意思是想
如果新的ElementType 即 s[i] < s[i+1] 时把 s[i+1] 保存到 j; 否则就保存 s[i];
大致的思路是对的,但是他会一直向后遍历,而且你最后一次循环是 s[i+1]是不存在的,会造成数组越界。
导致无法得到正确的答案。 而 ElementType 的初始值 应该是很小的一个数,所以,按照你的要求,数组的最后一个存到了j,
至于这里没有提示你数组的问题,是你使用的语言造成的,若你使用Java来写的话,在运行的时候,它肯定会提示你数组越界。
至于正确的答案:楼上回答的就很好,这里我和他还是有点不同的下方有解释:
``` ElementType Max(ElementType S[], int N)
{
ElementType j = S[0];
int i;
for (i = 1; i < N; i++) {
if (S[i] > j)
j = S[i];
}
return j;
}
在这里和你原来不同的地方在于比较那里,你的最大值保存在 j,所以你每一次都应该与 j 比较,而不是自身的数组。
你的初始化就很对,不过因为你已经初始化 s[0] 是最大值, 所以没必要在重复一次 s[0]的比较,直接从1开始。
Max函数改造成如下即可。假设数组0最大,则逐一比较。
ElementType Max(ElementType S[], int N)
{
ElementType j = S[0];
int i;
for (i = 0; i < N; i++) {
if (S[i] > j)
j = S[i];
}
return j;
}