统计五个学生四门课程的考试成绩,要求输出每个学生的总成绩,每个学生的平均成绩,每门课程的平均分,最高分,最低分。

题目描述:统计五个学生四门课程的考试成绩,要求输出每个学生的总成绩,每个学生的平均成绩,每门课程的平均分,最高分,最低分。

#include<stdio.h>
int main()
{
    int id[5],course[5][4],total[5],ave[5],ave1[4],max[4],min[4];
    int i,j,sum=0;
    
    for(i=0;i<5;i++)
    {
        printf("请输入学生%d的学号:",i+1); 
        scanf("%d",&id[i]);
        printf("请输入学生%d的四门课程的成绩:",i+1);
        for(j=0;j<4;j++)
        {
        scanf("%d",&course[i][j]);
        total[i]=total[i]+course[i][j];
        }
        ave[i]=total[i]/4;
    }
    
    for(i=0;i<4;i++)
    {
        for(j=0;j<5;j++)
        {
            sum+=course[j][i];
            ave1[i]=sum/5;
        }
        sum=0;
    }
    
    
    for(j=0;j<4;j++)
    {
    max[0]=course[0][j];
    min[0]=course[0][j];
    }
    for(i=0;i<4;i++)
    {
        for(j=1;j<5;j++)
        {
        if(max[i]<course[j][i])
        max[i]=course[j][i];
        if(min[i]>course[j][i])
        min[i]=course[j][i];
        }        
    }
    
    //打印输出 
    printf("学号\t课程1\t课程2\t课程3\t课程4\t总分\t平均分\n");    
    for(i=0;i<5;i++)
    {
        printf("%d\t",id[i]);
        for(j=0;j<4;j++)
        printf("%d\t",course[i][j]);
        printf("%d\t",total[i]);    
        printf("%d\t",ave[i]);    
        printf("\n");
    }
    
    printf("平均分\t");
    for(i=0;i<4;i++)
    printf("%d\t",ave1[i]);
    printf("\n");

    printf("最高分\t");
    for(i=0;i<4;i++)
    printf("%d\t",max[i]);
        printf("\n");
    
    printf("最低分\t");
    for(i=0;i<4;i++)
    printf("%d\t",min[i]);    
        printf("\n");
           
    return 0;
}

为什么max可以正常输出,min就不可以,还有为什么第一个总分就输出错误,其他就正常输出(好像也不太正常)
运行结果是这样的

img

有两个地方不对


 for(j=0;j<4;j++)
    {
    max[0]=course[0][j];
    min[0]=course[0][j];
    }
    for(i=0;i<4;i++)
    {
        for(j=1;j<5;j++)
        {
        if(max[i]<course[j][i])
        max[i]=course[j][i];
        if(min[i]>course[j][i])
        min[i]=course[j][i];
        }        
    }

每一个课程的max和min都是需要赋值的,而且不能赋值成随意的值,要赋值成这门课程所有输入数据中的任何一个
遍历的时候要从索引0开始遍历
这是完整代码


#include<stdio.h>
int main()
{
    int id[5]={0},course[5][4]={0},total[5]={0},ave[5]={0},ave1[4]={0},max[4],min[4];
    int i,j,sum=0;
    
    for(i=0;i<5;i++)
    {
        printf("请输入学生%d的学号:",i+1); 
        scanf("%d",&id[i]);
        printf("请输入学生%d的四门课程的成绩:",i+1);
        for(j=0;j<4;j++)
        {
            scanf("%d",&course[i][j]);
            total[i]=total[i]+course[i][j];
        }
        ave[i]=total[i]/4;
    }
    
    for(i=0;i<4;i++)
    {
        for(j=0;j<5;j++)
        {
            sum+=course[j][i];
            ave1[i]=sum/5;
        }
        sum=0;
    }
    
    
    for(j=0;j<4;j++)
    {
        max[j]=course[0][j];
        min[j]=course[0][j];
    }
    for(i=0;i<4;i++)
    {
        for(j=0;j<5;j++)
        {
            if(max[i]<course[j][i])
                max[i]=course[j][i];
            if(min[i]>course[j][i])
                min[i]=course[j][i];
        }        
    }
    
    //打印输出 
    printf("学号\t课程1\t课程2\t课程3\t课程4\t总分\t平均分\n");    
    for(i=0;i<5;i++)
    {
        printf("%d\t",id[i]);
        for(j=0;j<4;j++)
            printf("%d\t",course[i][j]);
        printf("%d\t",total[i]);    
        printf("%d\t",ave[i]);    
        printf("\n");
    }
    
    printf("平均分\t");
    for(i=0;i<4;i++)
        printf("%d\t",ave1[i]);
    printf("\n");
    
    printf("最高分\t");
    for(i=0;i<4;i++)
        printf("%d\t",max[i]);
    printf("\n");
    
    printf("最低分\t");
    for(i=0;i<4;i++)
        printf("%d\t",min[i]);    
    printf("\n");
    
    return 0;
}

img

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7545425
  • 这篇博客你也可以参考下:从键盘上输入3个正整数,判断这3个正整数是否可以构成一个三角形,进一步判断是等边(输出1)、等腰(输出2) 回文是指正读和反读都一样的数或字符,键盘上读取一个包含5位数字的长整数,并判断它是否是回文
  • 除此之外, 这篇博客: (C语言)输入10个学生5门课的成绩, 分别用函数实现以下功能1.计算每个学生的平均分2.计算每门课的平均分3.找出50个分数最高的分数所对应的学生和课程4.计算平均方差中的 输入10个学生5门课的成绩, 分别用函数实现以下功能1.计算每个学生的平均分2.计算每门课的平均分3.找出50个分数最高的分数所对应的学生和课程4.计算平均方差 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <stdlib.h>
    #include<string.h>
    #include<math.h>
    void stu_aver(double(*a)[6]) {//计算学生平均成绩
    	double sum;
    	int i, j;
    	for (i = 0; i < 10; ++i) {
    		sum = 0.0;
    		for (j = 0; j < 5; ++j) {
    			sum += a[i][j];
    		}
    		a[i][5] = sum / 5;
    	}
    }
    void score_aver(double(*a)[6]) {//科目平均成绩
    	double sum;
    	int i, j;
    	for (i = 0; i < 5; ++i) {
    		sum = 0.0;
    		for (j = 0; j < 10; ++j) {
    			sum += a[j][i];
    		}
    		a[10][i] = sum / 10;
    	}
    }
    void top_score(char(*c)[20], char(*s)[20], double(*a)[6]) {//科目最高
    	int row, col, i, j, flag;
    	double top;
    	printf("\n单科最高分\n");
    	printf("科目\t分数\t学生\n");
    	for (i = 0; i < 5; ++i) {
    		row = 0;
    		col = i;
    		top = a[0][i];
    		flag = 0;
    		for (j = 0; j < 10; ++j) {
    			if (a[j][i] > top) {
    				top = a[j][i];
    				row = j;
    			}
    		}
    		printf("%s\t%.2f\t%s\t", c[i], top, s[row]);
    		for (j = 0; j < 10; ++j) {
    			if (a[j][i] == top) {
    				if (flag > 1) {
    					printf("%s\t", s[j]);
    				}
    				++flag;
    			}
    		}
    		putchar('\n');
    	}
    }
    double viriance(double(*a)[6]) {//方差
    	double x1 = 0;
    	double x2 = 0;
    	int i;
    	for (i = 0; i < 10; ++i) {
    		x1 += a[i][6];
    		x2 += pow(a[i][6], 2);
    	}
    	return x2 / 10 - pow(x1 / 10, 2);
    }
    void input(char(*c)[20], char(*s)[20], double(*a)[6]) {//输入
    	int i, j;
    	for (i = 0; i < 5; ++i) {
    		printf("请输入第%d门课的课程名\n", i + 1);
    		scanf("%s", c[i]);
    	}
    	for (i = 0; i < 10; ++i) {
    		printf("请输入第%d名学生的姓名\n", i + 1);
    		scanf("%s", s[i]);
    		for (j = 0; j < 5; ++j) {
    			printf("请输入这名学生的成绩\n");
    			scanf("%lf", &a[i][j]);
    		}
    	}
    	system("cls");
    }
    void print(char(*c)[20], char(*s)[20], double(*a)[6]) {//打印
    	int i, j;
    	putchar('\t');
    	for (i = 0; i < 5; ++i) {
    		printf("%s\t", c[i]);
    	}
    	printf("平均成绩");
    	for (i = 0; i < 10; ++i) {
    		printf("\n%s\t", s[i]);
    		for (j = 0; j < 6; ++j) {
    			printf("%.2f\t", a[i][j]);
    		}
    	}
    	printf("\n\n课程\n平均分\t");
    	for (j = 0; j < 5; ++j) {
    		printf("%.2f\t", a[i][j]);
    	}
    	putchar('\n');
    }
    int main() {
    	char c[5][20];//课程名字
    	char s[10][20];//学生姓名
    	double a[11][6];//学生成绩
    	input(c, s, a);//输入
    	stu_aver(a);//学生平均成绩
    	score_aver(a);//课程平均成绩
    	print(c, s, a);//打印
    	top_score(c, s, a);//课程最高分
    	printf("方差为:%f\n", viriance(a));//方差
    	system("pause");
    	return 0;
    }
    

    在这里插入图片描述

  • 以下回答由chatgpt基于相关博客总结生成:

    解决方案

    为了解决问题,我们可以使用Python编写一个程序来统计五个学生四门课程的考试成绩并输出结果。

    首先,我们可以创建一个二维列表来表示学生和课程的成绩表。列表的每一行表示一个学生的成绩,列表的每一列表示一门课程的成绩。我们可以使用以下代码创建成绩表:

    scores = [[75, 80, 85, 90],  # 学生1的成绩
              [85, 90, 95, 100], # 学生2的成绩
              [95, 80, 90, 85],  # 学生3的成绩
              [80, 70, 75, 85],  # 学生4的成绩
              [90, 85, 95, 90]]  # 学生5的成绩
    

    接下来,我们可以使用循环遍历成绩表,计算每个学生的总成绩和平均成绩,以及每门课程的平均分、最高分和最低分。我们可以使用以下代码计算这些值:

    # 统计每个学生的总成绩和平均成绩
    student_totals = []    # 保存每个学生的总成绩
    student_avgs = []      # 保存每个学生的平均成绩
    for student_scores in scores:
        total = sum(student_scores)       # 计算总成绩
        avg = total / len(student_scores) # 计算平均成绩
        student_totals.append(total)      # 将总成绩添加到列表中
        student_avgs.append(avg)          # 将平均成绩添加到列表中
    
    # 统计每门课程的平均分、最高分和最低分
    course_avgs = []       # 保存每门课程的平均分
    course_maxs = []       # 保存每门课程的最高分
    course_mins = []       # 保存每门课程的最低分
    for i in range(len(scores[0])):
        course_scores = [student[i] for student in scores]  # 获取每门课程的成绩列表
        avg = sum(course_scores) / len(course_scores)       # 计算平均分
        max_score = max(course_scores)                      # 计算最高分
        min_score = min(course_scores)                      # 计算最低分
        course_avgs.append(avg)                             # 将平均分添加到列表中
        course_maxs.append(max_score)                       # 将最高分添加到列表中
        course_mins.append(min_score)                       # 将最低分添加到列表中
    

    最后,我们可以使用以下代码输出结果:

    # 输出每个学生的总成绩和平均成绩
    for i in range(len(student_totals)):
        print(f"学生{i+1}的总成绩为: {student_totals[i]}, 平均成绩为: {student_avgs[i]}")
    
    # 输出每门课程的平均分、最高分和最低分
    for i in range(len(course_avgs)):
        print(f"第{i+1}门课程的平均分为: {course_avgs[i]}, 最高分为: {course_maxs[i]}, 最低分为: {course_mins[i]}")
    

    通过上述代码,我们可以得到每个学生的总成绩、平均成绩,以及每门课程的平均分、最高分和最低分。

    关于为什么最大值(max)可以正常输出,而最小值(min)不能正常输出的问题,可能是由于计算最小值的代码中存在错误。我们可以检查最小值的计算代码是否正确,并确保它符合预期。

    关于为什么第一个学生的总成绩输出不正确,而其他学生的总成绩输出正常的问题,可能是由于总成绩计算的逻辑或代码错误。我们可以检查计算总成绩的代码,并确保它正确地计算每个学生的总成绩。