鱼C论坛

 找回密码
 立即注册
查看: 973|回复: 2

[已解决]难受,直接0分......

[复制链接]
发表于 2023-9-28 19:11:44 | 显示全部楼层 |阅读模式

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

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

x
某门课规定总成绩由两部分组成,即平时成绩和期末考试成绩,这两部分成绩的比例为a:b,假设a为3,b为7,则意味着在总成绩中平时成绩占30%,期末考试成绩占70%。现在请你写一段程序来计算一下,某位同学是否及格。

输入格式:
为4个用空格分隔的整数,依次代表两种成绩所占比例a,b 以及平时成绩,期末考试成绩。注意:测试用例不保证a+b一定等于10。

输出格式:
为两行,第一行为该同学的总成绩(保留1位小数),第二行,如果该同学总成绩及格(大于等于60),则输出pass,否则输出fail。测试用例保证合法,且整数可以用int存储,小数可以用float存储。

下面是我的代码
#include <stdio.h>

int main()
{
        int a,b,pingshi,mowei;
        
        scanf("%d %d %d %d",&a,&b,&pingshi,&mowei);
        float persent1 = (float)(a/(a + b));
        float persent2 = (float)(b/(a + b));
        int chengji = (pingshi * persent1)+(mowei * persent2);
        printf("%.1f\n",chengji);
        
        if(chengji > 60)
        {
                printf("pass\n");
        }
        else
        {
                printf("fail\n");
        }
        return 0;
}



最佳答案
2023-9-28 19:12:11
C/C++交流

对于你的代码,有几个可以改进的地方。

首先,计算百分比所占比例时,a和b应该强制转换为float类型,以确保计算结果为浮点数。

其次,在计算总成绩时,将pingshi和mowei分别与persent1和persent2相乘后再相加,可以得到更精确的结果。

最后,判断及格与否时,应该使用大于等于60来判断。

修改后的代码如下:
#include <stdio.h>int main() {    int a, b, pingshi, mowei;    scanf("%d %d %d %d", &a, &b, &pingshi, &mowei);        float persent1 = (float)a / (a + b);    float persent2 = (float)b / (a + b);        float chengji = pingshi * persent1 + mowei * persent2;    printf("%.1f\n", chengji);        if (chengji >= 60) {        printf("pass\n");    } else {        printf("fail\n");    }        return 0;}
请注意,以上代码假设输入的a和b之和不为0。如果需要对这种情况进行处理,请在代码中添加相应的条件判断。

希望能对你有所帮助!如果还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-9-28 19:11:57 | 显示全部楼层
您的代码逻辑是正确的,但是在计算比例时有一个小错误。因为a和b都是整数,所以在计算比例时需要将其中一个转换为浮点数,否则计算结果会被截断。所以应该将a或b转换为浮点数,如下所示:

float persent1 = (float)a / (a + b);
float persent2 = (float)b / (a + b);

这样就可以正确计算比例了。另外,输出格式要求保留一位小数,所以应该将输出格式修改为"%.1f\n",而不是"%d\n"。修改后的代码如下所示:

#include <stdio.h>

int main()
{
    int a, b, pingshi, mowei;

    scanf("%d %d %d %d", &a, &b, &pingshi, &mowei);

    float persent1 = (float)a / (a + b);
    float persent2 = (float)b / (a + b);

    float chengji = pingshi * persent1 + mowei * persent2;

    printf("%.1f\n", chengji);

    if (chengji >= 60)
    {
        printf("pass\n");
    }
    else
    {
        printf("fail\n");
    }

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

使用道具 举报

发表于 2023-9-28 19:12:11 | 显示全部楼层    本楼为最佳答案   
C/C++交流

对于你的代码,有几个可以改进的地方。

首先,计算百分比所占比例时,a和b应该强制转换为float类型,以确保计算结果为浮点数。

其次,在计算总成绩时,将pingshi和mowei分别与persent1和persent2相乘后再相加,可以得到更精确的结果。

最后,判断及格与否时,应该使用大于等于60来判断。

修改后的代码如下:
#include <stdio.h>int main() {    int a, b, pingshi, mowei;    scanf("%d %d %d %d", &a, &b, &pingshi, &mowei);        float persent1 = (float)a / (a + b);    float persent2 = (float)b / (a + b);        float chengji = pingshi * persent1 + mowei * persent2;    printf("%.1f\n", chengji);        if (chengji >= 60) {        printf("pass\n");    } else {        printf("fail\n");    }        return 0;}
请注意,以上代码假设输入的a和b之和不为0。如果需要对这种情况进行处理,请在代码中添加相应的条件判断。

希望能对你有所帮助!如果还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-6 01:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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