题目描述:统计五个学生四门课程的考试成绩,要求输出每个学生的总成绩,每个学生的平均成绩,每门课程的平均分,最高分,最低分。
#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就不可以,还有为什么第一个总分就输出错误,其他就正常输出(好像也不太正常)
运行结果是这样的
有两个地方不对
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;
}
你
#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;
}
为了解决问题,我们可以使用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)不能正常输出的问题,可能是由于计算最小值的代码中存在错误。我们可以检查最小值的计算代码是否正确,并确保它符合预期。
关于为什么第一个学生的总成绩输出不正确,而其他学生的总成绩输出正常的问题,可能是由于总成绩计算的逻辑或代码错误。我们可以检查计算总成绩的代码,并确保它正确地计算每个学生的总成绩。