在一行上输入一个整数
与三个小数点后位数不超过
位浮点数
,表示学生学号、三科成绩。其中,学号和成绩之间用英文分号隔开,成绩之间用英文逗号隔开。
在一行上输出格式化后的学号与三科成绩,您可以查看样例得到更具体的说明。
17140216;80.845,90.55,100.00
The each subject score of No. 17140216 is 80.85, 90.55, 100.00.
123456;93.33,99.99,81.20
The each subject score of No. 123456 is 93.33, 99.99, 81.20.
本题已于下方时间节点更新,请注意题解时效性:
1. 2025-10-28 优化题面文本与格式。
2. 2025-11-07 优化题面文本与格式。
#include <stdio.h>
int main() {
int n = 0;
double c = 0.0;
double math = 0.0;
double english = 0.0;
scanf("%d;%lf,%lf,%lf",&n,&c,&math,&english);
printf("The each subject score of No. %d is %.2f, %.2f, %.2f.\n", n, c + 1e-9, math + 1e-9, english + 1e-9);
return 0;
}
#include <stdio.h>
// 四舍五入保留两位小数
float qqq(float num)
{
num = num * 100;
if (num - (int)num >= 0.5)
{
num = (int)num + 1;
}
else
{
num = (int)num;
}
return num / 100.00;
}
int main() {
int id;
float c_score, math_score, english_score;
// 读取输入数据,按照格式解析
scanf("%d;%f,%f,%f", &id, &c_score, &math_score, &english_score);
// 四舍五入保留两位小数
c_score = qqq(c_score);
math_score = qqq(math_score);
english_score = qqq(english_score);
// 输出结果
printf("The each subject score of No. %d is %.2f, %.2f, %.2f.\n",
id, c_score, math_score, english_score);
return 0;
} #include <stdio.h>
int main() {
int id;
double score1, score2, score3;
scanf("%d;%lf,%lf,%lf", &id, &score1, &score2, &score3);
// 添加0.0005偏移确保四舍五入正确
printf("The each subject score of No. %d is %.2f, %.2f, %.2f.",
id,
score1 + 0.0005,
score2 + 0.0005,
score3 + 0.0005);
return 0;
} float类型用不了,四舍五入的精度不够,让人很费解 我这个一直报错是什么原因
#include <stdio.h>
double a, b, c;
unsigned int xuehao;
int main()
{
scanf("%d;%lf,%lf,%lf", &xuehao, &a, &b, &c);//scanf可以实现一次获取多个不同类型的按键值
printf("The each subject score of No. %d is %.2lf, %.2lf, %.2lf.", xuehao, a, b, c);
return 0;
} 这样子可以通过,我猜大概率是浮点数存储有误差,导致有时候没法很好做到四舍五入。我这里定义了一个函数可以稍微纠正一下;#include <stdio.h>float sheru(float q){int x=0;x=(int)(q*1000)%10;if(x>4) q=q+0.01-x*0.001;else q=q-x*0.001;return q;}int main() {long number=0;float c=0,m=0,e=0;scanf("%ld;%f,%f,%f",&number,&c,&m,&e);c=sheru(c);m=sheru(m);e=sheru(e);printf("The each subject score of No. %ld is %.2f, %.2f, %.2f.",number,c,m,e);return 0;}
#include <math.h>
#include <stdio.h>
int main()
{
int SuID = 0;
float C = 0;
float math = 0;
float Eg = 0;
scanf("%d;%f,%f,%f",&SuID,&C,&math,&Eg);
printf("The each subject score of No. %d is %.2f, %.2f, %.2f.",SuID,round(C * 100) / 100,math,Eg);
return 0;
}
//C语言成绩这里因为浮点数存储有不准确性,所以有概率出现四舍五入不对的情况,这个时候要用round(变量 * 100) / 100 来让浮点数变得具有准确性