不枉风来水顺 发表于 2023-9-28 19:11:44

难受,直接0分......

某门课规定总成绩由两部分组成,即平时成绩和期末考试成绩,这两部分成绩的比例为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;
}



{:5_104:}

isdkz 发表于 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;
}

Mike_python小 发表于 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。如果需要对这种情况进行处理,请在代码中添加相应的条件判断。

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

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页: [1]
查看完整版本: 难受,直接0分......