从键盘输入M个学生(1<=M<=20)N(1<=N<=5)门课程的成绩,统计并输出每个学生各门课程的总成绩,其中每个学生各门课程的总成绩的统计要求使用自定义函数实现
时间: 2024-01-17 09:08:09 浏览: 176
好的,这是一个关于成绩统计的问题,我先给你提供一个简单的代码实现:
```python
def get_total_score(scores):
total_score = sum(scores)
return total_score
m = int(input("请输入学生数:"))
n = int(input("请输入课程数:"))
scores_list = []
for i in range(m):
print("请输入第%d个学生的%d门课成绩:" % (i+1, n))
scores = []
for j in range(n):
score = float(input("请输入第%d门课的成绩:" % (j+1)))
scores.append(score)
scores_list.append(scores)
for i in range(m):
total_score = get_total_score(scores_list[i])
print("第%d个学生的总成绩为:%.2f" % (i+1, total_score))
```
这里我们定义了一个`get_total_score`函数用来计算每个学生的总成绩,然后通过输入学生数和课程数,分别输入每个学生每门课的成绩,最后遍历每个学生的成绩列表,调用`get_total_score`函数计算总成绩并输出。
相关问题
C语言:本题要求使用数组指针作函数参数,进行学生成绩统计。要求如下: 输入m个学生(最多30人)n门课程(最多5门)的成绩,然后计算并打印每个学生各门课的总分和平均分。其中,m和n的值由用户从键盘输入。 输入格式: 学生个数m 课程数n 学生1课程1分数 学生1课程2分数 ... 学生1课程n分数 学生2课程1分数 学生2课程2分数 ... 学生2课程n分数 ... 学生m课程1分数 学生m课程2分数 ... 学生m课程n分数 输出格式: 每个学生总分(整数) 平均分(实数,保留1位小数) 输入样例: 2 3 61 62 70 75 82 90 输出样例: 193 64.3 247 82.3
好的,这是一道关于C语言数组指针的题目。下面是代码实现:
```c
#include <stdio.h>
void calc(int m, int n, int (*score)[5]) {
int i, j, sum;
for (i = 0; i < m; i++) {
sum = 0;
for (j = 0; j < n; j++) {
sum += score[i][j];
}
printf("%d %.1f\n", sum, (float)sum / n);
}
}
int main() {
int m, n, i, j;
int score[30][5];
scanf("%d%d", &m, &n);
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
scanf("%d", &score[i][j]);
}
}
calc(m, n, score);
return 0;
}
```
首先,在 `main` 函数中,我们定义了一个二维数组 `score` 来存储学生成绩,数组的第一维表示学生的编号,第二维表示课程的编号,即 `score[i][j]` 表示第 `i` 个学生的第 `j` 门课的成绩。
然后,我们通过 `scanf` 语句从标准输入中读入学生个数 `m` 和课程数 `n`,再通过两个嵌套的 `for` 循环读入所有学生的成绩。
最后,我们调用 `calc` 函数,将 `score` 数组的地址作为参数传递给它。在 `calc` 函数中,我们使用两个嵌套的 `for` 循环,计算每个学生的总分和平均分,并使用 `printf` 函数输出结果。
需要注意的是,在 `calc` 函数中,我们使用了数组指针 `int (*score)[5]` 作为参数。这里的 `(*score)` 表示一个指向整型数组的指针,而 `(*score)[5]` 则表示一个有 5 个元素的整型数组。因此,`int (*score)[5]` 表示一个指向由 5 个整型数组成的数组的指针,即一个二维数组的指针。这样定义的数组指针可以方便地访问二维数组中的元素。
本题要求实现一个函数,使用数组指针作函数参数,进行学生成绩的输入和统计输出。要求如下:输入m个学生(最多30人)n门课程(最多5门)的成绩,然后计算并打印每个学生各门课的总分和平均分。 函数接口定义: void Array_InputCalculate(int *p, int m, int n); 其中:p为指向学生成绩的数组指针,m和n依次是学生人数、课程数,其值分别由用户从键盘输入。 裁判测试程序样例: #include <stdio.h> void Array_InputCalculate(int *p, int m, int n); int main() { int *p = NULL, m, n; double aver; scanf("%d", &m); //输入学生数 scanf("%d", &n); //输入课程数 p = (int *)calloc(m*n, sizeof(int)); //向系统申请内存 if (p == NULL) /*确保指针使用前是非空指针,当p为空指针时结束程序运行*/ { printf("No enough memory!\n"); exit(1); } Array_InputCalculate(p, m, n); //学生成绩输入及统计输出 free(p); // 释放向系统申请的内存 return 0; } /* 请在这里填写答案 */ 输入格式: 学生个数m 课程数n 学生1课程1分数 学生1课程2分数 ... 学生1课程n分数 学生2课程1分数 学生2课程2分数 ... 学生2课程n分数 ... 学生m课程1分数 学生m课程2分数 ... 学生m课程n分数 输出格式: 每个学生总分(整数) 平均分(实数,保留1位小数) 输入样例: 2 3 61 62 70 75 82 90 输出样例: 193 64.3 247 82.3
根据题目要求,我们需要实现一个函数 `Array_InputCalculate` 来输入学生成绩并计算总分和平均分。函数接收三个参数,分别为指向学生成绩的数组指针 `p`,学生人数 `m`,课程数 `n`。
以下是实现代码:
```c++
void Array_InputCalculate(int *p, int m, int n) {
int i, j, sum;
double avg;
for (i = 0; i < m; i++) {
sum = 0;
printf("%d ", i+1); // 输出学生编号
for (j = 0; j < n; j++) {
scanf("%d", p + i * n + j); // 输入学生成绩
sum += *(p + i * n + j); // 累加学生总分
}
avg = (double) sum / n; // 计算学生平均分
printf("%d %.1lf\n", sum, avg); // 输出学生总分和平均分
}
}
```
在函数中,我们使用两个循环分别循环每个学生和每门课程。在循环每门课程时,我们使用指针 `p + i * n + j` 来访问每个学生每门课的成绩,其中 `i` 表示当前学生的编号,`j` 表示当前课程的编号。
在每个学生循环结束后,我们计算该学生的总分和平均分,并将结果输出到屏幕上,其中平均分保留一位小数。
在主函数中,我们首先根据用户输入的学生人数和课程数,使用 `calloc` 函数申请相应的内存空间,然后将申请到的指针作为参数调用 `Array_InputCalculate` 函数。
最后,我们需要释放向系统申请的内存空间,使用 `free` 函数即可。
完整代码如下:
阅读全文