题目描述 要计算一个学生的 GPA,先将每门学科的等第换算成为一个绩点,规则为: 等第 A 为 4 4 分; 等第 B 为 3 3 分; 等第 C 为 2 2 分; 等第 D 为 1 1 分; 如果有 + 号后缀,则加 0.3 0.3 分。例如 B+ 为 3.3 3.3 分; 如果有 - 号后缀,则减 0.3 0.3 分。例如 C- 为 1.7 1.7 分。 接下来,再计算这些分数的平均数,四舍五入保留两位小数即可获得 GPA。 给定一个字符序列表示小爱每门课程的等第,请计算她的GPA。 输入格式 一个字符序列:表示小爱各门课程的等第,一门课程的等第只可能是 A、B、C、D 中的一个,保证 + 号或 - 号只会出现在字母的后面。 输出格式 一个两位小数:表示输入等第对应的 GPA。 数据范围 1≤n≤1000。
时间: 2024-04-17 11:25:07 浏览: 252
这是一个计算学生 GPA 的问题。每个等第对应一个绩点,然后计算所有课程的平均绩点,最后四舍五入保留两位小数即可获得 GPA。
您可以使用以下 Python 代码来解决这个问题:
```python
def calculate_gpa(grades):
gpa_dict = {'A': 4.0, 'B': 3.0, 'C': 2.0, 'D': 1.0}
gpa = []
for grade in grades:
if grade[-1] == '+':
gpa.append(gpa_dict[grade[0]] + 0.3)
elif grade[-1] == '-':
gpa.append(gpa_dict[grade[0]] - 0.3)
else:
gpa.append(gpa_dict[grade[0]])
average_gpa = sum(gpa) / len(gpa)
return round(average_gpa, 2)
grades = input().split()
gpa = calculate_gpa(grades)
print(gpa)
```
您可以按照以下格式输入小爱每门课程的等第:
```
A B+ C- D
```
然后程序将计算并输出小爱的 GPA。
希望能帮到您!如果您还有其他问题,请随时提问。
相关问题
1. 某学校教学系统中可以对学生的分数及绩点进行计算,张三同学的成绩如下表 课程 课程ID 学分 考试成绩 平时成绩 成绩比例 (考试:平时) 高数 1001 4 80 90 6:4 大学英语 1002 3 80 60 7:3 C语言 1003 3 100 90 5:5 (1)设计一个基类Course,包含private数据成员课程ID、学分credit;public函数get_credit用于读取credit的值,两个纯虚函数:总分计算totalS,课程绩点计算GPA (2)编写三个子类:高数AdvanceMathematic、英语English、C语言Cprogram公有继承基类Course。每个类都两个私有属性考试分数exam,平时分数dailywork。 (3)每门课程绩点的计算方法为:GPA=总分/10.0-5;平均绩点计算方法为: 平均绩点=Σ(学分*GPA)/Σ学分 (4)设计一个main函数,要求使用基类指针,并实现每门课程总分及平均绩点的计算并输出。 (20分)
```cpp
#include <iostream>
#include <string>
using namespace std;
class Course {
protected:
string courseID;
int credit;
public:
Course(string id, int c) : courseID(id), credit(c) {}
virtual double totalS() = 0;
virtual double GPA() = 0;
int get_credit() { return credit; }
};
class AdvanceMathematic : public Course {
private:
int exam;
int dailywork;
public:
AdvanceMathematic(string id, int c, int e, int d) : Course(id, c), exam(e), dailywork(d) {}
double totalS() {
return exam * 0.6 + dailywork * 0.4;
}
double GPA() {
return totalS() / 10.0 - 5;
}
};
class English : public Course {
private:
int exam;
int dailywork;
public:
English(string id, int c, int e, int d) : Course(id, c), exam(e), dailywork(d) {}
double totalS() {
return exam * 0.7 + dailywork * 0.3;
}
double GPA() {
return totalS() / 10.0 - 5;
}
};
class Cprogram : public Course {
private:
int exam;
int dailywork;
public:
Cprogram(string id, int c, int e, int d) : Course(id, c), exam(e), dailywork(d) {}
double totalS() {
return exam * 0.5 + dailywork * 0.5;
}
double GPA() {
return totalS() / 10.0 - 5;
}
};
int main() {
Course* courses[3];
courses[0] = new AdvanceMathematic("1001", 4, 80, 90);
courses[1] = new English("1002", 3, 80, 60);
courses[2] = new Cprogram("1003", 3, 100, 90);
double total_GPA = 0;
int total_credit = 0;
for (int i = 0; i < 3; i++) {
cout << "课程ID: " << courses[i]->courseID << endl;
cout << "学分: " << courses[i]->get_credit() << endl;
cout << "总分: " << courses[i]->totalS() << endl;
cout << "绩点: " << courses[i]->GPA() << endl << endl;
total_GPA += courses[i]->GPA() * courses[i]->get_credit();
total_credit += courses[i]->get_credit();
}
double avg_GPA = total_GPA / total_credit;
cout << "平均绩点: " << avg_GPA << endl;
return 0;
}
```
补充实验题docx -aDDdJ2EANiGzA328HhZ 2某学校教学系统中可以对学生的分数及绩点进行计算,张三同学的成绩如下表 课程 课程ID 学分 考试成平时成成绩比例绩 绩 (考试:平时) 高数 1001 80 90 6:4 大学英语 1002 80 I 7:3 C语言 1003 100 90 5:5 (1)设计一个基类Course,包含prirate数据成员课程ID、学分credit ; public函 数get crei用于读取credit的值,两个纯虚函数:总分计算totalS,课程绩点计算GPA (2)编写三个子类:高数AdranceMathematic、英语English、 C语言Cprogram公有继承基类Course。每个类都两个私有属性考试分数exam,平时分数dailywork。 (3)每门课程绩点的计算方法为: GPA-总分/10.0-5;平均绩点计算方法为:平均绩点=Z(学分*GPA)Z学分 (4)设计-个maim函数,要求使用基类指针,并实现每门课程总分及平均绩点的计算并输出。
实验题目:某学校教学系统中可以对学生的分数及绩点进行计算,张三同学的成绩如下表:
| 课程 | 课程ID | 学分 | 考试成绩与平时成绩比例 | 绩点 |
| -------- | ------ | ---- | ---------------------- | ---- |
| 高数 | 1001 | 80 | 6:4 | |
| 大学英语 | 1002 | 80 | 7:3 | |
| C语言 | 1003 | 100 | 5:5 | |
(1)设计一个基类Course,包含private数据成员课程ID、学分credit ; public函数get_creit用于读取credit的值,两个纯虚函数:总分计算totalS,课程绩点计算GPA
```cpp
#include<iostream>
#include<cmath>
using namespace std;
class Course {
protected:
int courseID;
double credit;
public:
void get_credit() { // 读取credit的值
cout << "请输入课程学分:" << endl;
cin >> credit;
}
virtual double totalS() = 0; // 纯虚函数,计算总分
virtual double GPA() = 0; // 纯虚函数,计算绩点
};
```
(2)编写三个子类:高数AdvanceMathematic、英语English、C语言Cprogram公有继承基类Course。每个类都两个私有属性考试分数exam,平时分数dailywork。
```cpp
class AdvanceMathematic : public Course {
private:
double exam;
double dailywork;
public:
AdvanceMathematic(double e, double d) : exam(e), dailywork(d) {}
double totalS() {
return exam * 0.6 + dailywork * 0.4;
}
double GPA() {
double score = totalS();
if (score >= 90) return 4.0;
else if (score >= 85) return 3.7;
else if (score >= 82) return 3.3;
else if (score >= 78) return 3.0;
else if (score >= 75) return 2.7;
else if (score >= 72) return 2.3;
else if (score >= 68) return 2.0;
else if (score >= 64) return 1.5;
else if (score >= 60) return 1.0;
else return 0;
}
};
class English : public Course {
private:
double exam;
double dailywork;
public:
English(double e, double d) : exam(e), dailywork(d) {}
double totalS() {
return exam * 0.7 + dailywork * 0.3;
}
double GPA() {
double score = totalS();
if (score >= 90) return 4.0;
else if (score >= 85) return 3.7;
else if (score >= 82) return 3.3;
else if (score >= 78) return 3.0;
else if (score >= 75) return 2.7;
else if (score >= 72) return 2.3;
else if (score >= 68) return 2.0;
else if (score >= 64) return 1.5;
else if (score >= 60) return 1.0;
else return 0;
}
};
class Cprogram : public Course {
private:
double exam;
double dailywork;
public:
Cprogram(double e, double d) : exam(e), dailywork(d) {}
double totalS() {
return exam * 0.5 + dailywork * 0.5;
}
double GPA() {
double score = totalS();
if (score >= 90) return 4.0;
else if (score >= 85) return 3.7;
else if (score >= 82) return 3.3;
else if (score >= 78) return 3.0;
else if (score >= 75) return 2.7;
else if (score >= 72) return 2.3;
else if (score >= 68) return 2.0;
else if (score >= 64) return 1.5;
else if (score >= 60) return 1.0;
else return 0;
}
};
```
(3)每门课程绩点的计算方法为: GPA = 总分/10.0-5; 平均绩点计算方法为:平均绩点=Σ(学分×GPA)÷Σ学分
```cpp
int main() {
AdvanceMathematic am(80, 90);
English eng(80, 0);
Cprogram cp(90, 90);
double totalCredit = am.credit + eng.credit + cp.credit;
double totalScore = am.totalS() * am.credit + eng.totalS() * eng.credit + cp.totalS() * cp.credit;
double averageGPA = (am.GPA() * am.credit + eng.GPA() * eng.credit + cp.GPA() * cp.credit) / totalCredit;
cout << "张三同学的总分为:" << totalScore << endl;
cout << "张三同学的平均绩点为:" << averageGPA << endl;
return 0;
}
```
完整代码如下:
```cpp
#include<iostream>
#include<cmath>
using namespace std;
class Course {
protected:
int courseID;
double credit;
public:
void get_credit() { // 读取credit的值
cout << "请输入课程学分:" << endl;
cin >> credit;
}
virtual double totalS() = 0; // 纯虚函数,计算总分
virtual double GPA() = 0; // 纯虚函数,计算绩点
};
class AdvanceMathematic : public Course {
private:
double exam;
double dailywork;
public:
AdvanceMathematic(double e, double d) : exam(e), dailywork(d) {}
double totalS() {
return exam * 0.6 + dailywork * 0.4;
}
double GPA() {
double score = totalS();
if (score >= 90) return 4.0;
else if (score >= 85) return 3.7;
else if (score >= 82) return 3.3;
else if (score >= 78) return 3.0;
else if (score >= 75) return 2.7;
else if (score >= 72) return 2.3;
else if (score >= 68) return 2.0;
else if (score >= 64) return 1.5;
else if (score >= 60) return 1.0;
else return 0;
}
};
class English : public Course {
private:
double exam;
double dailywork;
public:
English(double e, double d) : exam(e), dailywork(d) {}
double totalS() {
return exam * 0.7 + dailywork * 0.3;
}
double GPA() {
double score = totalS();
if (score >= 90) return 4.0;
else if (score >= 85) return 3.7;
else if (score >= 82) return 3.3;
else if (score >= 78) return 3.0;
else if (score >= 75) return 2.7;
else if (score >= 72) return 2.3;
else if (score >= 68) return 2.0;
else if (score >= 64) return 1.5;
else if (score >= 60) return 1.0;
else return 0;
}
};
class Cprogram : public Course {
private:
double exam;
double dailywork;
public:
Cprogram(double e, double d) : exam(e), dailywork(d) {}
double totalS() {
return exam * 0.5 + dailywork * 0.5;
}
double GPA() {
double score = totalS();
if (score >= 90) return 4.0;
else if (score >= 85) return 3.7;
else if (score >= 82) return 3.3;
else if (score >= 78) return 3.0;
else if (score >= 75) return 2.7;
else if (score >= 72) return 2.3;
else if (score >= 68) return 2.0;
else if (score >= 64) return 1.5;
else if (score >= 60) return 1.0;
else return 0;
}
};
int main() {
AdvanceMathematic am(80, 90);
English eng(80, 0);
Cprogram cp(90, 90);
double totalCredit = am.credit + eng.credit + cp.credit;
double totalScore = am.totalS() * am.credit + eng.totalS() * eng.credit + cp.totalS() * cp.credit;
double averageGPA = (am.GPA() * am.credit + eng.GPA() * eng.credit + cp.GPA() * cp.credit) / totalCredit;
cout << "张三同学的总分为:" << totalScore << endl;
cout << "张三同学的平均绩点为:" << averageGPA << endl;
return 0;
}
```
阅读全文
相关推荐
















