用C语言 编程:数组存储3名同学5门课程成绩 输出最好成绩及所在的行和列 要求:将输入、查找和打印的功能编写成函数 并将二维数组通过指针参数传递的方式由主函数传递到子函数中 输入格式: 每行输入一个同学的5门课的成绩,每个成绩之间空一格 输出格式: 输出共3行
时间: 2023-11-27 14:55:37 浏览: 127
以下是具体的代码实现:
```c
#include <stdio.h>
// 定义常量
#define ROW 3
#define COL 5
// 函数声明
void input_scores(int *ptr);
void find_best_score(int *ptr, int *row, int *col);
void print_result(int *ptr, int row, int col);
int main()
{
int scores[ROW][COL];
int row, col;
// 输入成绩
input_scores(&scores[0][0]);
// 查找最好成绩
find_best_score(&scores[0][0], &row, &col);
// 输出结果
print_result(&scores[0][0], row, col);
return 0;
}
// 输入成绩
void input_scores(int *ptr)
{
printf("请依次输入3名同学的5门课程成绩:\n");
for (int i = 0; i < ROW; i++)
{
printf("请输入第%d名同学的成绩:", i + 1);
for (int j = 0; j < COL; j++)
{
scanf("%d", ptr++);
}
}
}
// 查找最好成绩
void find_best_score(int *ptr, int *row, int *col)
{
int max_score = *ptr;
*row = 0;
*col = 0;
for (int i = 0; i < ROW; i++)
{
for (int j = 0; j < COL; j++)
{
if (*(ptr + i * COL + j) > max_score)
{
max_score = *(ptr + i * COL + j);
*row = i;
*col = j;
}
}
}
}
// 输出结果
void print_result(int *ptr, int row, int col)
{
printf("最好成绩为:%d,所在的行和列分别为:%d行%d列\n", *(ptr + row * COL + col), row + 1, col + 1);
}
```
代码思路:
1. 定义二维数组 `scores` 来存储 3 名同学 5 门课程的成绩;
2. 通过指针参数的方式,将二维数组在主函数中传递给子函数;
3. 在 `input_scores` 函数中,利用两个嵌套的循环,分别输入每个同学的 5 门课程成绩;
4. 在 `find_best_score` 函数中,先将第一个成绩设为最好成绩,然后遍历整个二维数组,找到最好成绩以及该成绩所在的行和列;
5. 在 `print_result` 函数中,输出最好成绩以及所在的行和列。
注意事项:
1. 在使用指针访问二维数组元素时,要根据数组的行数和列数进行计算,即 `*(ptr + i * COL + j)`;
2. 在输出最好成绩所在的行和列时,由于数组下标从 0 开始,所以需要将行和列分别加 1。
阅读全文