#include
#define M 4
#define N 5
int main()
{
float score[M], add[N] = { 0 }, k[M] = { 0 }, t, a[N] = { 0 },passed = 0;
int i, j;
for (i = 0; i < N; i++)
{
add[i] = 0;
printf("输入第%d个学生4门课程的成绩\n", i + 1);
for (j = 0; j < M; j++)
{
scanf_s("%f", &score[j]);
a[i] = score[j];
add[i] += score[j];
k[j] += score[j];
}
}
for (i = 0; i < N; i++)
printf("第%d个学生总分:%.1f、平均分:%.1f\n", i + 1, add[i], add[i] / M);
for (j = 0; jfor (i = 0; iif (add[i]<add[i + 1])
{
t = add[i]; add[i] = add[i + 1]; add[i + 1] = t;
}
for (i = 0; i"第%d名的平均分数为%.2f\n", i + 1, add[i] / M);
for (i = 0; i < M; i++)
printf("第%d门课的平均成绩:%.1f\n", i + 1, k[i] / N);
for(i=0;iif (a[i]> 60)
passed++;
}
for (j = 0; j < M; j++)
printf("第%d门课的合格率:%.1f\n", j + 1, passed/ N);
}
我想要计算每门课的合格率,但结果是这样的:
修改后的完整代码实现如下,望采纳
#include <stdio.h>
#define M 4
#define N 5
int main()
{
float score[M], add[N] = { 0 }, k[M] = { 0 }, t, a[N] = { 0 };
int i, j;
int passed[M] = { 0 }; // 新增的数组,记录每门课的通过人数
for (i = 0; i < N; i++)
{
add[i] = 0;
printf("输入第%d个学生4门课程的成绩\n", i + 1);
for (j = 0; j < M; j++)
{
scanf_s("%f", &score[j]);
a[i] = score[j];
add[i] += score[j];
k[j] += score[j];
if (score[j] > 60) passed[j]++; // 记录通过人数
}
}
for (i = 0; i < N; i++)
printf("第%d个学生总分:%.1f、平均分:%.1f\n", i + 1, add[i], add[i] / M);
for (j = 0; j<M; j++)
for (i = 0; i<M - j; i++)
if (add[i]<add[i + 1])
{
t = add[i]; add[i] = add[i + 1]; add[i + 1] = t;
}
for (i = 0; i<N; i++)
printf("第%d名的平均分数为%.2f\n", i + 1, add[i] / M);
for (i = 0; i < M; i++)
printf("第%d门课的平均成绩:%.1f\n", i + 1, k[i] / N);
for(i=0;i<M;i++)
{
printf("第%d门课的合格率:%.1f\n", i + 1, passed[i] / (float) N);
}
return 0;
}
其实一开始就用二维数组会比较方便一些,现在我只能在你的基础上,只在合格率这里使用二维数组完善一下,我这边试过是可以的,你可以看一下
#include <stdio.h>
#define M 4
#define N 5
int main()
{
float score[M], add[N] = { 0 }, k[M] = { 0 }, t, a[N] = { 0 },passed = 0;
float temp[M][N]={0};
int i, j;
for (i = 0; i < N; i++)
{
add[i] = 0;
printf("输入第%d个学生4门课程的成绩\n", i + 1);
for (j = 0; j < M; j++)
{
scanf_s("%f", &score[j]);
a[i] = score[j];
add[i] += score[j];
k[j] += score[j];
temp[j][i]=score[j];
}
}
for (i = 0; i < N; i++)
printf("第%d个学生总分:%.1f、平均分:%.1f\n", i + 1, add[i], add[i] / M);
for (j = 0; j<M; j++)
for (i = 0; i<M - j; i++)
if (add[i]<add[i + 1])
{
t = add[i]; add[i] = add[i + 1]; add[i + 1] = t;
}
for (i = 0; i<N; i++)
printf("第%d名的平均分数为%.2f\n", i + 1, add[i] / M);
for (i = 0; i < M; i++)
printf("第%d门课的平均成绩:%.1f\n", i + 1, k[i] / N);
for(i=0;i<M;i++)
{
for(j=0;j<N;j++){
if (temp[i][j]> 60)
passed++;
}
passed=passed/ N;
printf("第%d门课的合格率:%.1f\n", i+1, passed);
passed=0;
}
}
你在最下面打印出数组a的值来看看就明白了。
运行完后,a【】中存的数是下图中红框中圈出的内容:
要不你就建立二位数组a[N][M]把所有人的所有科目成绩都存储起来
或者
建立一维数组a[M],当分数大于60时候直接对应的a[]加1