注册 登录
编程论坛 C++教室

for中嵌套if有点问题,求助

想了很多网名 发布于 2019-12-31 16:41, 3102 次点击
题目;输入十个学生的成绩,放在一维数组中,找出成绩最高的学生的成绩和该生的序号。
以下是我编写的的代码
#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
    float a[10],max=0;
    int i,imax;
    printf("请输入十个学生的成绩;\n");
    for(i=0;i<10;i++)
    {
        scanf("%f",&a[i]);
        if(a[i]>max)
        max=a[i];
        imax=i;
    }
    printf("最高成绩:%6.2f\n该生序号;%d",max,imax);
    return 0;
}

出现的问题:随便输入十个数,能找出最大的数,但是不能正确的输出该数的序号,imax始终等于9,这是怎么回事啊?请教一下各位
11 回复
#2
叶纤2019-12-31 18:23
scanf("%f",&a[i]);这一句什么意思我学C++的只能看懂一个scanf
max=a[i];这一句的意思是你输入的数如果大于Max,则a[i]的位置和Max互换,直至Max成为最大的数,Max是一个最大的数而不是数组
#3
叶纤2019-12-31 18:56
#include <iostream>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main() {
    float a[10];
    float max=a[0];
    int maxi=0;


    for(int i=1; i<10; ++i)
    {   cin >> a[i];
        if(max<a[i])
        {   max=a[i];
            maxi=i;
        }
    }
    cout<<"最大值为" <<max;
    cout << "最大值下标为" <<maxi<< endl;

}

#4
叶纤2019-12-31 19:06
#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
    float a[10],max=a[0];
    int i,imax=0;
    printf("请输入十个学生的成绩;\n");
    for(i=1;i<10;i++)
    {
        scanf("%f",&a[i]);
        if(a[i]>max)
        {max=a[i];
        imax=i;}
    }
    printf("最高成绩:%6.2f\n该生序号;%d",max,imax);
    return 0;
}
#5
想了很多网名2020-01-01 13:43
回复 2楼 叶纤
scanf("%f",&a[i])的意思是:输入一个实数,将其存放在数组中序号为i的元素中。
#6
叶纤2020-01-01 16:56
回复 5楼 想了很多网名
已经知道了,我也已经把答案给你说了,你的float Max=0,并没有和你输入的数组联系起来,所以i总是固定一个数你把
float Max=0,改成float max=a[0]就行了

[此贴子已经被作者于2020-1-1 16:58编辑过]

#7
想了很多网名2020-01-02 14:48
回复 6楼 叶纤
好的    谢谢咯
#8
想了很多网名2020-01-02 15:19
回复 4楼 叶纤
我刚又仔细的看了一下,i总是等于一个固定的数的原因:
 imax=i;  这个语句不是在if语句的范围内,而是在for的范围内。用一个大括号把  max=a[i]; 和imax=i;括起来就行了。还有就是imax=i;要改为imax=i+1;         
    尴尬啊。
#9
叶纤2020-01-02 15:35
回复 8楼 想了很多网名
你原先的代码用for(i=0)开始的确实后面需要加个一,不过我还是比较喜欢for(i=1)开始,循环的少了,内存会变得少一点吧(个人见解)
#10
叶纤2020-01-02 15:46
哥嘞,别纠结这个程序了,知道程序运行的思维就行了,你先尝试着给程序加点难度,比如学生的成绩和,学生的平均数,奇数个数偶数个数,还有输入数字在第几个,然后给数组按成绩大的或小的排序等等
如果还需要提升难度,试一试二维或者三维数组
#11
叶纤2020-01-02 16:01
还有你要想学c++的话,最好连语法也改一下,你如果后期转型C++容易造成C和C++语法混杂,,如果你怕学了C++看不懂C这个完全不用担心,大体上还是能看的懂的,
#12
想了很多网名2020-01-06 09:58
回复 11楼 叶纤
好的,谢谢
1