Cn1973 发表于 2021-4-19 17:10:28

来自C语言初学者的求助555,希望大神指点,真的非常感谢啦·!!


想请教一下为什么形参中最后的返回值return 为什么只能返回f,如果是改成return 0,只会统计90~100分之间的人数,其他分数段的人数输出结果则不会统计;
在最后主函数printf输出时为什么60分以下的最后输出要用定义的‘aver’?

人造人 发表于 2021-4-19 19:39:57

我觉得几乎没有人会愿意照着图片抄一遍代码,你觉得呢?
问问题要把代码贴出来

Uair梦云 发表于 2021-4-19 21:48:04

本帖最后由 Uair梦云 于 2021-4-19 21:56 编辑

ave是求平均数?
可以先把printf的参数改一下:
printf("90~100的有%.0f个\n80~90的有%.0f个\n70~80的有%.0f个\n60~70的有%.0f个\n小于60的有%.0f个\n最大值为%.2f,最小值为%.2f,平均分%.2f",num1,num2,num3,num4,aver,max(n,m),min(n,m),ave(n,m));

aver没有错,虽然 num5 更直观

Uair梦云 发表于 2021-4-19 21:52:23

本帖最后由 Uair梦云 于 2021-4-19 21:56 编辑

请输入学生的人数(0~100):5
请输入每个学生的成绩:23
25
32
98
99
90~100的有2个
80~90的有0个
70~80的有0个
60~70的有0个
小于60的有3个
最大值为99.00,最小值为23.00,平均分55.40



请输入学生的人数(0~100):5
请输入每个学生的成绩:20
25
25.5
98.5
99
90~100的有2个
80~90的有0个
70~80的有0个
60~70的有0个
小于60的有3个
最大值为99.00,最小值为20.00,平均分53.60

Cn1973 发表于 2021-4-20 09:35:52

Uair梦云 发表于 2021-4-19 21:48
ave是求平均数?
可以先把printf的参数改一下:
printf("90~100的有%.0f个\n80~90的有%.0f个\n70~80的 ...

这个题目用的是extern,意思就是以多文件的形式,主函数调用外部函数输出结果,那个aver是主函数中定义的,主函数如下
main()
{
        extern float app(float a[],int n);
        extern float ass(float a[],int n);
        extern float add(float a[],int n);
        float n,aver;
        int i,m;
        printf("请输入学生的人数:");
        scanf("%d",&m);
        printf("请输入每个学生的成绩:");
        for(i=0;i<m;i++)
                scanf("%f",&n);
        aver=a(n,m);
        printf("90~100的有%.0f个\n80~90的有%.0f个\n70~80的有%.0f个\n60~70的有%.0f个\n小于60的有%.0f个\n最大值为%.2f,最小值为%.2f,平均分为%.2f\n",num1,num2,num3,num4,aver,app(n,m),ass(n,m),add(n,m));
}

Cn1973 发表于 2021-4-20 09:37:42

人造人 发表于 2021-4-19 19:39
我觉得几乎没有人会愿意照着图片抄一遍代码,你觉得呢?
问问题要把代码贴出来

抱歉啊哈哈哈。第一次在鱼C论坛上发表问题{:10_254:}
代码如下
#include<stdio.h>
float num1,num2,num3,num4,num5;
float a(float m[],int n)
{
        int i;
        num1=num2=num3=num4=num5=0;
        for(i=0;i<n;i++)
        {
                if(m>=90&&m<=100)
                        num1=num1+1;
                else if(m>=80&&m<90)
                        num2=num2+1;
                else if(m>=70&&m<80)
                        num3=num3+1;
                else if(m>=60&&m<70)
                        num4=num4+1;
                else if(m<60)
                        num5=num5+1;
        }
        return num5;
}
main()
{
        extern float app(float a[],int n);
        extern float ass(float a[],int n);
        extern float add(float a[],int n);
        float n,aver;
        int i,m;
        printf("请输入学生的人数:");
        scanf("%d",&m);
        printf("请输入每个学生的成绩:");
        for(i=0;i<m;i++)
                scanf("%f",&n);
        aver=a(n,m);
        printf("90~100的有%.0f个\n80~90的有%.0f个\n70~80的有%.0f个\n60~70的有%.0f个\n小于60的有%.0f个\n最大值为%.2f,最小值为%.2f,平均分为%.2f\n",num1,num2,num3,num4,aver,app(n,m),ass(n,m),add(n,m));
}
extern float add(float a[],int n)
{
        int i;
        float min=a;
        for(i=1;i<n;i++)
                if(min>a)
                        min=a;
                return min;
}
extern float ass(float a[],int n)
{
        int i;
        float ave,sum=a;
        for(i=1;i<n;i++)
                sum=sum+a;
        ave=sum/n;
        return ave;
}
extern float app(float a[],int n)
{
        int i;
        float max=a;
        for(i=1;i<n;i++)
                if(max<a)
                        max=a;
                return max;
}

Uair梦云 发表于 2021-4-20 12:13:57

本帖最后由 Uair梦云 于 2021-4-20 12:15 编辑

Cn1973 发表于 2021-4-20 09:35
这个题目用的是extern,意思就是以多文件的形式,主函数调用外部函数输出结果,那个aver是主函数中定义的 ...

习惯用 include 载入的文件,所以不太会extern,感觉有点鸡肋{:5_109:}

a,m,n 是数组在代码中出现太多的 a,m,n 写成 a,m,n
printf最后的 平均数ass 与 最小数add 搞反了
for(i=1...中 i 应该等于 0 ,数组的第一个元素为0
max min sum赋值为0.0,100.0,0.0更好
max肯定比0大,否则就是0,min 同理
统一i=0更直观   sum为0 相加即可,如果都是0,结果为0

由于分数上限为100分,下限为0,可以加一个报错判断:

#include<stdio.h>
float num1,num2,num3,num4,num5;
float a(float m[],int n)
{
      int i;
      num1=num2=num3=num4=num5=0;
      for(i=0;i<n;i++)
      {
                if(m>=90&&m<=100)
                        num1=num1+1;
                else if(m>=80&&m<90)
                        num2=num2+1;
                else if(m>=70&&m<80)
                        num3=num3+1;
                else if(m>=60&&m<70)
                        num4=num4+1;
                else if(m<60)
                        num5=num5+1;
      }
      return num5;
}
int main()
{
      extern float app(float a[],int n);
      extern float ass(float a[],int n);
      extern float add(float a[],int n);
      float n,aver;
      int i,m;
      printf("请输入学生的人数:");
      scanf("%d",&m);
      for(i=0;i<m;i++)
      {
                do      //增加判断循环
                {
                        printf("请输入第%d个学生的成绩:",i+1);      //没有第0个学生一说吧
                        scanf("%f",&n);
                        if(n>100&&n<0==0)
                        {
                              printf("错误,试卷分数应该在满分100分,白卷0分之间(包含100分和0分)\n");      //这里就是一个 报错信息 提示重新输入的
                        }
                }while(n>100&&n<0==0);
      }
      aver=a(n,m);
      printf("90~100的有%.0f个\n80~90的有%.0f个\n70~80的有%.0f个\n60~70的有%.0f个\n小于60的有%.0f个\n最大值为%.2f,最小值为%.2f,平均分为%.2f\n",num1,num2,num3,num4,aver,app(n,m),add(n,m),ass(n,m));
}
extern float add(float a[],int n)
{
      int i;
      float min=100.0;
      for(i=0;i<n;i++)
      {
                if(min>a)
                {
                        min=a;
                }
      }
                return min;
}
extern float ass(float a[],int n)
{
      int i;
      float ave,sum=0.0;
      for(i=0;i<n;i++)
      {
                sum+=a;
      }
      ave=sum/n;
      return ave;
}
extern float app(float a[],int n)
{
      int i;
      float max=0.0;
      for(i=0;i<n;i++)
      {
                if(max<a)
                {
                        max=a;
                }
      }
                return max;
}

桃花飞舞 发表于 2021-4-20 13:31:19

第一个问题我没看懂,不过不会出你说的那种问题,其实num1,num2,num3,num4,num5可以定义为int类型啊,第二个那个不就是返回的小于60分的么,你也可以用num5输出啊!
页: [1]
查看完整版本: 来自C语言初学者的求助555,希望大神指点,真的非常感谢啦·!!