c语言第一行输入2个正整数n和k,分别表示计算的人数和课程数目; 第二行k个以空格分隔的实数,依次表示k门课的学分; 其后n行,依次表示n个同学的成绩,每行k个以空格分隔的实数。 输出格式: 每行输出一个同学的学分绩点,小数点后保留3位小数。
时间: 2024-10-28 09:12:20 浏览: 24
在C语言中,你可以按照以下步骤编写程序来解决这个问题:
1. 首先,使用`scanf()`函数从标准输入读取两个整数n和k,代表人数和课程数目。例如:
```c
int n, k;
scanf("%d %d", &n, &k);
```
2. 然后,读取k门课程的学分。这里也用`scanf()`,但是格式字符串需要包含浮点数:
```c
double course_scores[k];
for (int i = 0; i < k; i++) {
scanf("%lf", &course_scores[i]);
}
```
3. 接着,使用循环读取每个同学的成绩,并计算学分绩点。可以假设有一个结构体`Student`来存储学生的信息,包括姓名或其他标识符以及成绩数组。对每位同学,遍历其成绩数组,将分数除以学分,再乘以100得到绩点(四舍五入到三位小数)。例如:
```c
typedef struct {
// 假设每位同学有姓名和成绩数组
char name[50];
double grades[k];
} Student;
// 对于每位同学
for (int student_index = 0; student_index < n; student_index++) {
Student students[1]; // 为了简化,假定只有一个学生
scanf("%s", students[student_index].name); // 读取姓名
for (int i = 0; i < k; i++) {
scanf("%lf", &students[student_index].grades[i]);
double grade_point = students[student_index].grades[i] / course_scores[i] * 100.0f;
printf("%.3f\n", grade_point);
}
}
```
4. 最后,记得处理输入错误并确保正确关闭文件流,避免资源泄露。
阅读全文