鱼C论坛

 找回密码
 立即注册
查看: 2562|回复: 7

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

[复制链接]
发表于 2021-4-19 17:10:28 | 显示全部楼层 |阅读模式

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

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

x
333.png 222.png 111.png
想请教一下为什么形参中最后的返回值return 为什么只能返回f,如果是改成return 0,只会统计90~100分之间的人数,其他分数段的人数输出结果则不会统计;
在最后主函数printf输出时为什么60分以下的最后输出要用定义的‘aver’?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-19 19:39:57 | 显示全部楼层
我觉得几乎没有人会愿意照着图片抄一遍代码,你觉得呢?
问问题要把代码贴出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 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 更直观
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-20 09:35:52 From FishC Mobile | 显示全部楼层
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[100],aver;
        int i,m;
        printf("请输入学生的人数:");
        scanf("%d",&m);
        printf("请输入每个学生的成绩:");
        for(i=0;i<m;i++)
                scanf("%f",&n[i]);
        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));
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-20 09:37:42 From FishC Mobile | 显示全部楼层
人造人 发表于 2021-4-19 19:39
我觉得几乎没有人会愿意照着图片抄一遍代码,你觉得呢?
问问题要把代码贴出来

抱歉啊哈哈哈。第一次在鱼C论坛上发表问题
代码如下
#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[i]>=90&&m[i]<=100)
                        num1=num1+1;
                else if(m[i]>=80&&m[i]<90)
                        num2=num2+1;
                else if(m[i]>=70&&m[i]<80)
                        num3=num3+1;
                else if(m[i]>=60&&m[i]<70)
                        num4=num4+1;
                else if(m[i]<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[100],aver;
        int i,m;
        printf("请输入学生的人数:");
        scanf("%d",&m);
        printf("请输入每个学生的成绩:");
        for(i=0;i<m;i++)
                scanf("%f",&n[i]);
        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[0];
        for(i=1;i<n;i++)
                if(min>a[i])
                        min=a[i];
                return min;
}
extern float ass(float a[],int n)
{
        int i;
        float ave,sum=a[0];
        for(i=1;i<n;i++)
                sum=sum+a[i];
        ave=sum/n;
        return ave;
}
extern float app(float a[],int n)
{
        int i;
        float max=a[0];
        for(i=1;i<n;i++)
                if(max<a[i])
                        max=a[i];
                return max;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-20 12:13:57 | 显示全部楼层
本帖最后由 Uair梦云 于 2021-4-20 12:15 编辑
Cn1973 发表于 2021-4-20 09:35
这个题目用的是extern,意思就是以多文件的形式,主函数调用外部函数输出结果,那个aver是主函数中定义的 ...


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

a,m,n 是数组在代码中出现太多的 a[i],m[i],n[i] 写成 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[i]>=90&&m[i]<=100)
                        num1=num1+1;
                else if(m[i]>=80&&m[i]<90)
                        num2=num2+1;
                else if(m[i]>=70&&m[i]<80)
                        num3=num3+1;
                else if(m[i]>=60&&m[i]<70)
                        num4=num4+1;
                else if(m[i]<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[100],aver;
        int i,m;
        printf("请输入学生的人数:");
        scanf("%d",&m);
        for(i=0;i<m;i++)
        {
                do        //增加判断循环
                {
                        printf("请输入第%d个学生的成绩:",i+1);        //没有第0个学生一说吧
                        scanf("%f",&n[i]);
                        if(n[i]>100&&n[i]<0==0)
                        {
                                printf("错误,试卷分数应该在满分100分,白卷0分之间(包含100分和0分)\n");        //这里就是一个 报错信息 提示重新输入的
                        }
                }while(n[i]>100&&n[i]<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[i])
                {
                        min=a[i];
                }
        }
                return min;
}
extern float ass(float a[],int n)
{
        int i;
        float ave,sum=0.0;
        for(i=0;i<n;i++)
        {
                sum+=a[i];
        }
        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[i])
                {
                        max=a[i];
                }
        }
                return max;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-4-20 13:31:19 | 显示全部楼层
第一个问题我没看懂,不过不会出你说的那种问题,其实num1,num2,num3,num4,num5可以定义为int类型啊,第二个那个不就是返回的小于60分的么,你也可以用num5输出啊!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-14 15:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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