鱼C论坛

 找回密码
 立即注册
查看: 1715|回复: 15

[已解决]C语言的题目

[复制链接]
发表于 2017-4-8 22:07:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目是输入3个学生的五门课成绩,计算并输出每科成绩的班级平均分、最高分、最低分。
我写的是
#include<stdio.h>

float max = 0, min = 0;
float try1(float score[3][5], int a, int b)
{
        int i, j;
        float sum = 0, ave = 0;
        max = 0;
        min = 0;
        for (i = 0; i < b; i++) {
                for (j = 0; j < a; j++) {
                        sum += score[i][j];
                        ave = sum / 3.0;
                        if (score[i][j] > max) max = score[i][j];
                        if (score[i][j] < min) min = score[i][j];

                }
        }
        return ave;
}
int main()
{
        int i, j;
        float score[3][5], ave = 0;

        for (i = 0; i < 3; i++) {
                for (j = 0; j < 5; j++) {
                        printf("请输入第%d个学生的第%d门成绩:\n", i + 1, j + 1);
                        scanf("%lf", &score[i][j]);
                }
        }
        ave = try1(score, 3, 5);
        for (j = 0; j<5; j++) {
                printf("平均分为:%lf", ave);
                printf("最高分:%lf 最低分:%lf\n", max, min);
        }
        return 0;
}
但是结果总是乱码 检查了很多次搞不懂为什么 求助大佬
最佳答案
2017-4-8 23:07:43
#include<stdio.h>

float max = 0, min = 0;
float try1(float score[3][5], int a, int b)
{
        int i, j;
        float sum = 0, ave = 0;
        //max = 0;
        //min = 0;
        max = score[0][0];
        min = score[0][0];

        //for(i = 0; i < b; i++)
        for(i = 0; i < a; i++)
        {
                //for(j = 0; j < a; j++)
                for(j = 0; j < b; j++)
                {
                        sum += score[i][j];
                        //ave = sum / 3.0;
                        if(score[i][j] > max) max = score[i][j];
                        if(score[i][j] < min) min = score[i][j];

                }
        }

        ave = sum / 15;

        return ave;
}

int main()
{
        int i, j;
        float score[3][5], ave = 0;

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

        ave = try1(score, 3, 5);
        for(j = 0; j < 5; j++)
        {
                printf("平均分为:%lf", ave);
                printf("最高分:%lf 最低分:%lf\n", max, min);
        }

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-4-8 22:23:17 | 显示全部楼层
#include<stdio.h>

float max = 0, min = 0;
float try1(float score[3][5], int a, int b)
{
        int i, j;
        float sum = 0, ave = 0;
        max = 0;
        min = 0;

        //for(i = 0; i < b; i++)
        for(i = 0; i < a; i++)
        {
                //for(j = 0; j < a; j++)
                for(j = 0; j < b; j++)
                {
                        sum += score[i][j];
                        ave = sum / 3.0;
                        if(score[i][j] > max) max = score[i][j];
                        if(score[i][j] < min) min = score[i][j];

                }
        }

        return ave;
}

int main()
{
        int i, j;
        float score[3][5], ave = 0;

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

        ave = try1(score, 3, 5);
        for(j = 0; j < 5; j++)
        {
                printf("平均分为:%lf", ave);
                printf("最高分:%lf 最低分:%lf\n", max, min);
        }

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-8 22:35:19 | 显示全部楼层
求每科成绩,涉及到了矩阵的转制问题
你将循环中的i和j调转了,但数组中没调转....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-8 22:35:41 | 显示全部楼层

似乎还是不行诶,我测试时所有成绩都输入同一个数字 结果出来的答案是不对的噢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-8 22:44:00 | 显示全部楼层
聆云 发表于 2017-4-8 22:35
求每科成绩,涉及到了矩阵的转制问题
你将循环中的i和j调转了,但数组中没调转....

具体要怎么操作呢 矩阵转置我刚刚查了,不知道怎么应用呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-8 22:47:45 | 显示全部楼层
李二瓶 发表于 2017-4-8 22:44
具体要怎么操作呢 矩阵转置我刚刚查了,不知道怎么应用呢

for (i = 0; i < b; i++) {
                 for (j = 0; j < a; j++) {
                         sum += score[j][i];
                         ave = sum / 3.0;
                         if (score[j][i] > max) max = score[j][i];
                         if (score[j][i] < min) min = score[j][i];

                }
         }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-8 22:49:50 | 显示全部楼层
for (i = 0; i < b; i++) {
                 for (j = 0; j < a; j++) {
                         sum += score[j][i];
                         ave = sum / 3.0;
                         if (score[j][i] > max) max = score[j][i];
                         if (score[j][i] < min) min = score[j][i];

                }
         }
刚发错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-8 23:06:19 | 显示全部楼层
聆云 发表于 2017-4-8 22:49
for (i = 0; i < b; i++) {
                 for (j = 0; j < a; j++) {
                         sum  ...

并没有解决诶
QQ截图20170408230503.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-8 23:07:39 | 显示全部楼层
还有一个问题,你要计算的是每科成绩的平均分,最低,最高分,
你却只用了三个变量来存放,总共有5科成绩哦
应该要用15个变量来存放,最好用数组存放吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-8 23:07:43 | 显示全部楼层    本楼为最佳答案   
#include<stdio.h>

float max = 0, min = 0;
float try1(float score[3][5], int a, int b)
{
        int i, j;
        float sum = 0, ave = 0;
        //max = 0;
        //min = 0;
        max = score[0][0];
        min = score[0][0];

        //for(i = 0; i < b; i++)
        for(i = 0; i < a; i++)
        {
                //for(j = 0; j < a; j++)
                for(j = 0; j < b; j++)
                {
                        sum += score[i][j];
                        //ave = sum / 3.0;
                        if(score[i][j] > max) max = score[i][j];
                        if(score[i][j] < min) min = score[i][j];

                }
        }

        ave = sum / 15;

        return ave;
}

int main()
{
        int i, j;
        float score[3][5], ave = 0;

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

        ave = try1(score, 3, 5);
        for(j = 0; j < 5; j++)
        {
                printf("平均分为:%lf", ave);
                printf("最高分:%lf 最低分:%lf\n", max, min);
        }

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-8 23:23:05 | 显示全部楼层

啊啊啊
我复制你的代码试了一次果然计算出真正的数了 好棒
可是题目说的是计算每一科的班级平均分呀而不是某个同学的个人平均分 这个可能就是

测试结果是某个同学个人所有学科的平均分

测试结果是某个同学个人所有学科的平均分
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-8 23:23:31 | 显示全部楼层
聆云 发表于 2017-4-8 23:07
还有一个问题,你要计算的是每科成绩的平均分,最低,最高分,
你却只用了三个变量来存放,总共有5科成绩 ...

嗯嗯 这个确实是  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-8 23:24:28 | 显示全部楼层
聆云 发表于 2017-4-8 22:49
for (i = 0; i < b; i++) {
                 for (j = 0; j < a; j++) {
                         sum  ...

可是我想计算的是某一科 3个学生在这一科的平均分 而不是他们个人所有成绩的平均分哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-8 23:27:53 | 显示全部楼层
李二瓶 发表于 2017-4-8 23:23
啊啊啊
我复制你的代码试了一次果然计算出真正的数了 好棒
可是题目说的是计算每一科的班级平均分呀而 ...

可能就是        //for(i = 0; i < b; i++)
        for (i = 0; i < a; i++)
        {
                //for(j = 0; j < a; j++)
                for (j = 0; j < b; j++)
                {
                        sum += score[i][j];
                        //ave = sum / 3.0;
                        if (score[i][j] > max) max = score[i][j];
                        if (score[i][j] < min) min = score[i][j];

                }
        }
这一块的差别
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-8 23:35:57 | 显示全部楼层
#include<stdio.h>

float max[3], min[3];

void try1(float score[3][5], int a, int b, float ave[3])
{
        int i, j;
        float sum;

        for(i = 0; i < a; i++)
        {
                max[i] = score[i][0];
                min[i] = score[i][0];
                sum = 0;

                for(j = 0; j < b; j++)
                {
                        sum += score[i][j];
                        if(score[i][j] > max[i]) max[i] = score[i][j];
                        if(score[i][j] < min[i]) min[i] = score[i][j];
                }

                ave[i] = sum / 5;
        }
}

int main()
{
        int i, j;
        float score[3][5], ave[3];

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

        try1(score, 3, 5, ave);
        for(j = 0; j < 3; j++)
        {
                printf("平均分为:%lf", ave[j]);
                printf("最高分:%lf 最低分:%lf\n", max[j], min[j]);
        }

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-8 23:47:23 | 显示全部楼层
#include<stdio.h>


float fengshu[3][5];
void try1(float score[3][5], int a, int b)
{
         int i, j;
         float sum,ave,max,min;
         for (i = 0; i < b; i++) {
                         sum = 0,ave = 0,max = 0,min=100;
                 for (j = 0; j < a; j++) {
                         sum += score[j][i];
                         ave = sum / 3.0;
                         if (score[j][i] >= max) max = score[j][i];                  
                         if (score[j][i] <= min) min = score[j][i];
                }
                fengshu[0][i] = ave;
                fengshu[1][i] = max;
                fengshu[2][i] = min;
         }
}
int main()
{
         int i, j;
         float score[3][5];

        for (i = 0; i < 3; i++) {
                 for (j = 0; j < 5; j++) {
                         printf("请输入第%d个学生的第%d门成绩:\n", i + 1, j + 1);
                         scanf("%f", &score[i][j]);
                 }
         }
         try1(score, 3, 5);
         printf("平均分:");
         for (i = 0; i<5; i++) {
                 printf("%.2f   ",fengshu[0][i] );
         }
        printf("\n最高分:");
         for (i = 0; i<5; i++) {
                 printf("%.2f   ",fengshu[1][i] );
         }
        printf("\n最低分:");
         for (i = 0; i<5; i++) {
                 printf("%.2f   ",fengshu[2][i] );
         }
         return 0;
}
测试已通过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-28 02:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表