难受,直接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:} 您的代码逻辑是正确的,但是在计算比例时有一个小错误。因为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;
} 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]