//已给的代码
#include <stdio.h>
#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 max;
for(int i=0;i<N;i++){
max=S[0];
if(S[i]>=max){
max=S[i];
}else max=max;
}
return max;
}
//运行显示部分正确
//完全正确的代码:
ElementType Max(ElementType S[],int N){
ElementType max=S[0];
for(int i=0;i<N;i++){
if(S[i]>=max){
max=S[i];
}else max=max;
}
return max;
}
//关键就在max的赋值是在循环里面还是外面,我试了好几次觉得应该是一样的吧,问题出在哪里?
你的代码在每次循环的时候,都把max重置为S[0]了,也就是把前面得到的max的值给覆盖掉了,你的代码需要加一个if语句就可以了,如下:
ElementType Max(ElementType S[], int N) {
ElementType max;
for (int i = 0; i < N; i++) {
if(i==0) //增加这个if语句
max = S[0];
if (S[i] >= max) {
max = S[i];
}
else max = max;
}
return max;
}
如果循环在里面,每次循环最大值max都被重新设置为数组S的第一个元素的值,而不是经过比较后得来的最大值,
但如果放在循环外面,则只默认设置第一个为最大值max的值,然后可以在循环里面经过遍历数组S后,用比他大的值来代替,
直到循环结束,就得出正确的最大值max了。
你这个代码明显有问题,你第一次循环,每次给max赋值了S[0],应该在循环外面给max赋值S[0],或者给max赋值0,通过比较大小得到最大的S[i]的i,另max等于这个i,然后返回
max放循环里面了,每次都重新赋值为0
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!