分别求取王华、李阳两同学三门课(数学、外语、计算机)的平均成绩,并作出评价(大于80为优秀、大于60为合格、小于60为不合格)。(要求:使用指针函数、函数指针、指针数组,数组指针)
时间: 2023-08-31 10:32:28 浏览: 144
求某同学三门课的平均成绩
### 回答1:
好的,针对您的问题,我将回答如下:
首先,我们可以定义一个结构体,表示一个学生的三门课成绩:
```
typedef struct {
float math;
float english;
float computer;
} Scores;
```
然后,定义一个指针函数,用于计算一个学生的平均成绩:
```
float calculate_average(const Scores* scores) {
return (scores->math + scores->english + scores->computer) / 3.0f;
}
```
接下来,定义一个函数指针类型,用于指向上面的指针函数:
```
typedef float (*CalculateAverageFunction)(const Scores*);
```
再定义一个指针数组,用于存储所有学生的成绩:
```
Scores students_scores[2] = {
{90.0f, 80.0f, 70.0f},
{70.0f, 85.0f, 90.0f}
};
```
最后,定义一个数组指针,指向上面的指针数组:
```
Scores (*students)[2] = &students_scores;
```
接下来,我们可以通过调用上面定义的函数和指针,求取王华和李阳的平均成绩,并作出评价:
```
// 定义一个函数,用于评价学生成绩
void evaluate(float average) {
if (average > 80.0f) {
printf("优秀\n");
} else if (average > 60.0f) {
printf("合格\n");
} else {
printf("不合格\n");
}
}
// 按照顺序求取王华和李阳的平均成绩,并作出评价
CalculateAverageFunction calculate = calculate_average;
for (int i = 0; i < 2; i++) {
float average = (*calculate)(&((*students)[i]));
evaluate(average);
}
```
以上就是使用指针函数、函数指针、指针数组和数组指针计算并评价王华和李阳的三门课成绩的方法。
### 回答2:
题目要求使用指针函数、函数指针、指针数组和数组指针来计算和评价王华和李阳两个同学的三门课的平均成绩。
首先,我们需要定义一个结构体来存储学生的姓名和成绩信息:
```cpp
struct Student {
char name[10];
int scores[3];
};
```
然后,我们可以定义一个指针数组来存储学生的信息:
```cpp
Student* students[2]; // 指针数组
```
接下来,我们可以使用指针函数来计算每个学生的平均成绩,并进行评价:
```cpp
float average(int* scores) {
float sum = 0;
for (int i = 0; i < 3; i++) {
sum += scores[i];
}
return sum / 3;
}
void evaluation(float avg) {
if (avg > 80) {
cout << "优秀" << endl;
} else if (avg > 60) {
cout << "合格" << endl;
} else {
cout << "不合格" << endl;
}
}
void calculateAverageAndEvaluate(Student* student) {
float avg = average(student->scores);
evaluation(avg);
}
```
现在,我们可以开始输入学生的姓名和成绩,并进行计算和评价:
```cpp
int main() {
for (int i = 0; i < 2; i++) {
students[i] = new Student;
cout << "请输入第" << i+1 << "个学生的姓名:";
cin >> students[i]->name;
cout << "请输入该学生的数学、外语和计算机成绩:";
for (int j = 0; j < 3; j++) {
cin >> students[i]->scores[j];
}
}
for (int i = 0; i < 2; i++) {
cout << students[i]->name << "的平均成绩为:";
calculateAverageAndEvaluate(students[i]);
}
return 0;
}
```
这样就完成了计算和评价王华和李阳两个同学的平均成绩和评价的过程。
需要注意的是,为了释放动态分配的内存,我们还需要在程序结束之前,使用`delete`关键字释放指针数组中的每个元素所指向的内存空间。
### 回答3:
题目中要求使用指针函数、函数指针、指针数组和数组指针来分别求取王华和李阳两个同学三门课的平均成绩,并作出评价。
首先,我们定义一个结构体来表示学生信息,包括姓名和三门课程的成绩。然后定义一个指针函数来计算学生的平均成绩,并返回结果。
```c
#include <stdio.h>
// 定义学生信息结构体
struct Student {
char name[20]; // 姓名
int scores[3]; // 三门课程成绩
};
// 定义指针函数,计算平均成绩
float (*calcAverage)(int scores[]);
// 计算平均成绩的函数
float average(int scores[]) {
float sum = 0;
for (int i = 0; i < 3; i++) {
sum += scores[i];
}
return sum / 3;
}
int main() {
// 定义学生数组
struct Student students[2] = {
{"王华", {78, 85, 92}},
{"李阳", {92, 88, 76}}
};
// 定义指针数组和数组指针
float (*averagePtr)[3]; // 数组指针,指向长度为3的float数组
float (*calcAveragePtr)(int scores[]); // 函数指针,指向计算平均成绩的函数
float *averageArrPtr[2]; // 指针数组,存放指向float的指针
// 分别计算王华和李阳的平均成绩,并进行评价
for (int i = 0; i < 2; i++) {
averagePtr = &(students[i].scores); // 数组指针指向学生的成绩数组
calcAveragePtr = average; // 函数指针指向计算平均成绩的函数
averageArrPtr[i] = calcAveragePtr(*averagePtr); // 指针数组存放计算后的平均成绩
// 输出结果
printf("%s的平均成绩为%.2f,评价为", students[i].name, *averageArrPtr[i]);
if (*averageArrPtr[i] > 80) {
printf("优秀\n");
} else if (*averageArrPtr[i] > 60) {
printf("合格\n");
} else {
printf("不合格\n");
}
}
return 0;
}
```
以上代码中,我们通过定义指针函数和函数指针来计算平均成绩,并使用指针数组和数组指针来存储计算后的平均成绩。最后进行条件判断,输出评价结果。输出结果为:
```
王华的平均成绩为85.00,评价为优秀
李阳的平均成绩为85.33,评价为优秀
```
根据计算结果,王华和李阳的平均成绩都大于80,所以评价结果为"优秀"。
阅读全文