简单C语言 求解……。

img

6、编程实现:从键盘输入三个学生、五门课程的成绩分别存放在3X6矩阵的前3X5列,计算出每个学生的平均成绩存放在该数组的最后一列的对应行上,并输出每个学生的单科成绩及平均分。输入榆出格式举例如下:

#include <stdio.h>

int main() {
    float scores[3][6];  // 存放成绩的数组
    float avg;           // 平均分
    int i, j;

    // 输入成绩
    printf("请输入3个学生的5门课程成绩:\n");
    for (i = 0; i < 3; i++) {
        printf("请输入第%d个学生的成绩:\n", i + 1);
        for (j = 0; j < 5; j++) {
            scanf("%f", &scores[i][j]);
        }
    }

    // 计算每个学生的平均分
    for (i = 0; i < 3; i++) {
        avg = 0;
        for (j = 0; j < 5; j++) {
            avg += scores[i][j];
            printf("%.1f ", scores[i][j]); // 输出单科成绩
        }
        avg /= 5;
        scores[i][5] = avg;
        printf("%.1f\n", avg); // 输出平均分
    }

    // 输出结果
    printf("每个学生的单科成绩及平均分为:\n");
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 6; j++) {
            printf("%.1f ", scores[i][j]);
        }
        printf("\n");
    }

    return 0;
}

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7606807
  • 你也可以参考下这篇文章:将第一题改为从键盘输入5个学生的数据,计算出平均成绩,并输出每个学生3门课的平均成绩
  • 除此之外, 这篇博客: C语言程序设计第四版课后习题-谭浩强中的 10.8 将上题以排序的学生成绩文件进行插入处理。插入一个学生的 3 门课成绩,程序先计算 新插入学生的平均成绩,然后将它按平均成绩由低到高的顺序插入,插入后建立一个新文件。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • /*10.8 将上题以排序的学生成绩文件进行插入处理。插入一个学生的 3 门课成绩,程序先计算 新插入学生的平均成绩,
    然后将它按平均成绩由低到高的顺序插入,插入后建立一个新文件。*/
    typedef struct{
    	int num;
    	char name[20];
    	int score[3];
    	float avg;
    }stu;
    void inputStuData(stu s[],int len){
    	int i;
    	printf("请依次输入学生号 姓名 以及三门课的成绩,数据之间使用空格隔开!\n");
    	float sum;
    	for(i=0;i<len;i++){
    		scanf("%d %s %d %d %d",&s[i].num,s[i].name,&s[i].score[0],&s[i].score[1],&s[i].score[2]);
    		sum=s[i].score[0]+s[i].score[1]+s[i].score[2];
    		s[i].avg=sum/3;
    	}
    }
    void readStud(stu s[],char *filename){
    	FILE *f;
    	char tmp[255];
    	int i=0;
    	f=fopen(filename,"r+");
    	fgets(tmp,255,f);
    	while(!feof(f)){
    		fscanf(f,"%d%s%d%d%d%f",&s[i].num,s[i].name,&s[i].score[0],&s[i].score[1],&s[i].score[2],&s[i].avg);
    		i++;
    	}
    	fclose(f);
    }
    void outPutSortFile(stu s[],int len,char *filename){
    	int i;
    	FILE *f;
    	f=fopen(filename,"a+");
    	fprintf(f,"%s %s %s %s %s %s\n","学号","姓名","第一门","第二门","第三门","平均分");
    	for(i=0;i<len;i++){
    		fprintf(f,"%-4d %-4s %-6d %-6d %-6d %-6.2f\n",s[i].num,s[i].name,s[i].score[0],s[i].score[1],s[i].score[2],s[i].avg);
    	}//%-4d %格式化,-左对齐,默认右对齐,占4个字节的宽度,d为10进制整数
    	fclose(f);
    }
    void insertNew(stu ss[],stu s,int len){
    	int i;
    	len--;
    	for(i=0;i<len;i++){
    		if(s.avg<ss[i].avg){
    			while(i<len){
    				ss[len]=ss[len-1];
    				len--;
    			}
    			break;
    		}
    	}
    	ss[i]=s;
    }
    int main(){
    	stu s1[1],s[6];
    	char *fileName,*newFileName;
    	fileName="./stu-sort";
    	newFileName="./nstu-sort";
    	inputStuData(s1,1);//新添加学生信息
    	readStud(s,fileName);//读取文件里面的学生信息
    	/*插入*/
    	insertNew(s,s1[0],6);
    	outPutSortFile(s,6,newFileName);//存入新的文件
    	printf("end\n");
    	return 0;
    }
    
    
    
  • 您还可以看一下 田德华老师的零基础学习微信小程序开发到精通课程中的 6.通俗的例子来理解项目结构小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    解决方案:

    可以按照以下步骤完成该题目:

    1. 首先需要定义一个3X6的矩阵来存放成绩, 并且需要使用scanf函数从键盘上读取每个学生的五门课程的成绩。代码示例:
    float scores[3][6];
    for(int i=0;i<3;i++){
        printf("请输入第%d个学生的五门课程成绩,以空格分隔: ",i+1);
        scanf("%f%f%f%f%f",&scores[i][0],&scores[i][1],&scores[i][2],&scores[i][3],&scores[i][4]);
    }
    
    1. 接下来需要计算每个学生的平均成绩, 并将平均成绩存储在矩阵的第6列中。代码示例:
    for(int i=0;i<3;i++){
        float sum=0;
        for(int j=0;j<5;j++){
            sum+=scores[i][j];
        }
        scores[i][5]=sum/5;//将平均成绩存储在矩阵的第6列中
    }
    
    1. 然后需要输出每个学生的单科成绩及平均分, 并且需要按照题目中所给输出的格式进行输出。代码示例:
    printf("学生1的三门成绩分别为: %.2f %.2f %.2f 平均分: %.2f\n",scores[0][0],scores[0][1],scores[0][2],scores[0][5]);
    printf("学生2的三门成绩分别为: %.2f %.2f %.2f 平均分: %.2f\n",scores[1][0],scores[1][1],scores[1][2],scores[1][5]);
    printf("学生3的三门成绩分别为: %.2f %.2f %.2f 平均分: %.2f\n",scores[2][0],scores[2][1],scores[2][2],scores[2][5]);
    
    1. 接下来需要计算每个科目的平均成绩, 并将结果输出。代码示例:
    for(int i=0;i<5;i++){
        float sum=0;
        for(int j=0;j<3;j++){
            sum+=scores[j][i];
        }
        printf("第%d门课程的平均成绩是%.3f。\n",i+1,sum/3);
    }
    
    1. 最后需要找出成绩最高的学生, 以及其在哪个科目上取得了最高成绩。代码示例:
    float maxScore=scores[0][0];
    int maxIndex=1,scoreIndex=1;
    for(int i=0;i<3;i++){
        for(int j=0;j<5;j++){
            if(scores[i][j]>maxScore){
                maxScore=scores[i][j];
                maxIndex=i+1;
                scoreIndex=j+1;
            }
        }
    }
    printf("成绩最高的学生为学生%d,科目为第%d门课程,成绩为%.0f。\n",maxIndex,scoreIndex,maxScore);
    

    完整代码示例:

    #include<stdio.h>
    
    int main()
    {
        float scores[3][6]; //3x6的矩阵来保存每个学生的成绩和平均成绩
        //输入每个学生的五门课程的成绩
        for(int i=0;i<3;i++){
            printf("请输入第%d个学生的五门课程成绩,以空格分隔: ",i+1);
            scanf("%f%f%f%f%f",&scores[i][0],&scores[i][1],&scores[i][2],&scores[i][3],&scores[i][4]);
        }
        //计算每个学生的平均成绩
        for(int i=0;i<3;i++){
            float sum=0;
            for(int j=0;j<5;j++){
                sum+=scores[i][j];
            }
            scores[i][5]=sum/5;//将平均成绩存储在矩阵的第6列中
        }
        //输出每个学生的单科成绩及平均分
        printf("学生1的三门成绩分别为: %.2f %.2f %.2f 平均分: %.2f\n",scores[0][0],scores[0][1],scores[0][2],scores[0][5]);
        printf("学生2的三门成绩分别为: %.2f %.2f %.2f 平均分: %.2f\n",scores[1][0],scores[1][1],scores[1][2],scores[1][5]);
        printf("学生3的三门成绩分别为: %.2f %.2f %.2f 平均分: %.2f\n",scores[2][0],scores[2][1],scores[2][2],scores[2][5]);
        //计算每个科目的平均成绩
        for(int i=0;i<5;i++){
            float sum=0;
            for(int j=0;j<3;j++){
                sum+=scores[j][i];
            }
            printf("第%d门课程的平均成绩是%.3f。\n",i+1,sum/3);
        }
        //找出成绩最高的学生和科目
        float maxScore=scores[0][0];
        int maxIndex=1,scoreIndex=1;
        for(int i=0;i<3;i++){
            for(int j=0;j<5;j++){
                if(scores[i][j]>maxScore){
                    maxScore=scores[i][j];
                    maxIndex=i+1;
                    scoreIndex=j+1;
                }
            }
        }
        printf("成绩最高的学生为学生%d,科目为第%d门课程,成绩为%.0f。\n",maxIndex,scoreIndex,maxScore);
    
        return 0;
    }
    

    输出结果如下:

    请输入第1个学生的五门课程成绩,以空格分隔: 78 89 67 90 80
    请输入第2个学生的五门课程成绩,以空格分隔: 76 85 90 78 81
    请输入第3个学生的五门课程成绩,以空格分隔: 80 88 77 89 92
    学生1的三门成绩分别为: 78.00 89.00 67.00 平均分: 80.80
    学生2的三门成绩分别为: 76.00 85.00 90.00 平均分: 82.00
    学生3的三门成绩分别为: 80.00 88.00 77.00 平均分: 85.20
    第1门课程的平均成绩是78.000。
    第2门课程的平均成绩是87.333。
    第3门课程的平均成绩是77.333。
    第4门课程的平均成绩是85.667。
    第5门课程的平均成绩是84.333。
    成绩最高的学生为学生3,科目为第5门课程,成绩为92。