c语言输入3名学生4门功课,求每名学生中最高成绩

拜托各位…

方法很多,如果要保存学生名字和学科名称,那么最好用结构数组或链表。

这里我就直接用2维数组。

#include<stdio.h>
int main()
{
    int stu[3][5],score,max,maxIndex,i,j;
    for(i=0;i<3;i++)
    {
        printf("输入学生%d的四科成绩:",i+1);
        max=0;
        for(j=0;j<4;j++)
        {
            scanf("%d",&score);
            stu[i][j]=score;
            if(max<score)
            {
                max=score;9
                maxIndex=j;
            }
        }
        stu[i][j]=maxIndex;
    }
    for(i=0;i<3;i++)
        printf("学生%d的最高成绩是学科%d:%d分\n",i+1,stu[i][4]+1,stu[i][stu[i][4]]);
    return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-05-22
#include <iostream>
#define N 3 //预定义数组大小。本代码直接使用二给数组形式来保存输入的三门成绩
using namespace std;
int main(){    
    float list[N][4],ma=0.0;//list[][0,1,2]用来保存三门成线
    //list[][3]保存最高分下标(取值范围[0,1,2])
    //如果成绩全为整数,可以定义数组为整数类型,下面输出时不用强制转换成整形
    int i=0,k=0;

    while(k!=N){//循环输入最多N(N=20)个整数
     //ctrl+z随时结束循环   
        cin>>list[k][0]>>list[k][1]>>list[k][2];
        i=0;
        ma=0.0;
        while(i!=3){
            if(ma<list[k][i]){
                ma=list[k][i];
                list[k][3]=i;
            }            
            ++i;
        }       
     ++k; 
    }  
    
    for(i=0;i!=k;++i)//输出,注意序号都是从0开始的.
        //list[][3]保存的是float,输出或引用时要注意转换成整数
     cout<<"学生 "<<i<<" 最高成绩是第 "
        <<(int)list[i][3]<<" 门,成绩:"<<list[i][(int)list[i][3]]<<endl;
    cout<<endl;
   
    return 0;
}

第2个回答  推荐于2018-05-22
#define N 3  //3名同学 
#define M 4  //4科成绩
#include <stdio.h>
int getmax(int *p,int n){
int i,max=p[0];
for(i=1;i<n;i++)
if (max<p[i]) max=p[i];
return max;
}
int main(){
int s[N][M],i,j;
for(i=0;i<N;i++){
printf("请输入第%d位同学的%d科成绩\n",i+1,M);
for(j=0;j<M;j++)
scanf("%d",&s[i][j]);
}
for(i=0;i<N;i++)
printf("第%d位同学的最好成绩是%d\n",i+1,getmax(s[i],M));
}

本回答被网友采纳
相似回答