#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

int main(int argc, const char *argv[])
{
	unsigned int number;
	double grade1, grade2, grade3;
	scanf("%u;%lf,%lf,%lf", &number, &grade1, &grade2, &grade3);
	printf("The each subject score of No. %u is %.2lf, %.2lf, %.2lf.", number,
		(round(grade1 * 100)) / 100, (round(grade2 * 100)) / 100, (round(grade3 * 100)) / 100);
	return 0;
}

请注意,题目中有这么一句话:“注:输出成绩时需进行四舍五入且保留2位小数”。round()函数对浮点数四舍五入求近似值,参数和返回值均为double,但round四舍五入保留的是整数,即保留0位小数,所以我们先将成绩*100,用round四舍五入后再/100,从而实现四舍五入且保留2位小数。