李二瓶 发表于 2017-4-8 22:07:35

C语言的题目

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

float max = 0, min = 0;
float try1(float score, 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;
                        ave = sum / 3.0;
                        if (score > max) max = score;
                        if (score < min) min = score;

                }
        }
        return ave;
}
int main()
{
        int i, j;
        float score, 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);
                }
        }
        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 22:23:17

#include<stdio.h>

float max = 0, min = 0;
float try1(float score, 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;
                        ave = sum / 3.0;
                        if(score > max) max = score;
                        if(score < min) min = score;

                }
        }

        return ave;
}

int main()
{
        int i, j;
        float score, 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);
                        scanf("%f", &score);
                }
        }

        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 22:35:19

求每科成绩,涉及到了矩阵的转制问题
你将循环中的i和j调转了,但数组中没调转....

李二瓶 发表于 2017-4-8 22:35:41

人造人 发表于 2017-4-8 22:23


似乎还是不行诶,我测试时所有成绩都输入同一个数字 结果出来的答案是不对的噢

李二瓶 发表于 2017-4-8 22:44:00

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

具体要怎么操作呢 矩阵转置我刚刚查了,不知道怎么应用呢

聆云 发表于 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;
                         ave = sum / 3.0;
                         if (score > max) max = score;
                         if (score < min) min = score;

                }
         }

聆云 发表于 2017-4-8 22:49:50

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

                }
         }
刚发错了

李二瓶 发表于 2017-4-8 23:06:19

聆云 发表于 2017-4-8 22:49
for (i = 0; i < b; i++) {
               for (j = 0; j < a; j++) {
                         sum...

并没有解决诶

聆云 发表于 2017-4-8 23:07:39

还有一个问题,你要计算的是每科成绩的平均分,最低,最高分,
你却只用了三个变量来存放,总共有5科成绩哦
应该要用15个变量来存放,最好用数组存放吧

人造人 发表于 2017-4-8 23:07:43

#include<stdio.h>

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

        //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;
                        //ave = sum / 3.0;
                        if(score > max) max = score;
                        if(score < min) min = score;

                }
        }

        ave = sum / 15;

        return ave;
}

int main()
{
        int i, j;
        float score, 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);
                        scanf("%f", &score);
                }
        }

        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:23:05

人造人 发表于 2017-4-8 23:07


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

李二瓶 发表于 2017-4-8 23:23:31

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

嗯嗯 这个确实是

李二瓶 发表于 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个学生在这一科的平均分 而不是他们个人所有成绩的平均分哦

李二瓶 发表于 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;
                        //ave = sum / 3.0;
                        if (score > max) max = score;
                        if (score < min) min = score;

                }
        }
这一块的差别

人造人 发表于 2017-4-8 23:35:57

#include<stdio.h>

float max, min;

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

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

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

                ave = sum / 5;
        }
}

int main()
{
        int i, j;
        float score, ave;

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

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

        return 0;
}

聆云 发表于 2017-4-8 23:47:23

#include<stdio.h>


float fengshu;
void try1(float score, 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;
                         ave = sum / 3.0;
                         if (score >= max) max = score;                  
                         if (score <= min) min = score;
                }
                fengshu = ave;
                fengshu = max;
                fengshu = min;
         }
}
int main()
{
         int i, j;
         float score;

      for (i = 0; i < 3; i++) {
               for (j = 0; j < 5; j++) {
                         printf("请输入第%d个学生的第%d门成绩:\n", i + 1, j + 1);
                         scanf("%f", &score);
               }
         }
         try1(score, 3, 5);
         printf("平均分:");
         for (i = 0; i<5; i++) {
               printf("%.2f   ",fengshu );
         }
      printf("\n最高分:");
         for (i = 0; i<5; i++) {
               printf("%.2f   ",fengshu );
         }
      printf("\n最低分:");
         for (i = 0; i<5; i++) {
               printf("%.2f   ",fengshu );
         }
         return 0;
}
测试已通过
页: [1]
查看完整版本: C语言的题目