定义类模板Storestruct Student { // 结构体Student int id; //学号 float gpa; //平均分 }; //定义类模板及函数,函数在类体外定义 template class Store //类模板:实现对任意类型数据进行存取 裁判测试程序样例: int main() { try { Store<int> s1, s2; //定义两个Store<int>类对象,其中数据成员item为int类型 s1.putElem(3); //向对象S1中存入数据(初始化对象S1) s2.putElem(-7); //向对象S2中存入数据(初始化对象S2) cout << s1.getElem() << " " << s2.getElem() << endl; //输出对象S1和S2的数据成员 Student g = { 1000, 23 }; //定义Student类型结构体变量的同时赋以初值 Store<Student> s3; //定义Store<Student>类对象s3,其中数据成员item为Student类型 s3.putElem(g); //向对象D中存入数据(初始化对象D) cout << "The student id is " << s3.getElem().id << endl; //输出对象s3的数据成员 Store<double> d; //定义Store<double>类对象s4,其中数据成员item为double类型 cout << "Retrieving object d... "; cout << d.getElem() << endl; //输出对象D的数据成员 //由于d未经初始化,在执行函数D.getElement()过程中导致程序终止 } catch (...) { cout << "get item error!"; } return 0; }
时间: 2024-04-03 19:30:35 浏览: 62
这段代码定义了一个类模板 `Store`,用于实现对任意类型数据进行存取。其数据成员为 `item`,可以存储任意类型的数据。其中,`putElem` 函数用于向对象中存储数据,`getElem` 函数用于获取对象中存储的数据。
在主函数中,先定义了两个 `Store<int>` 类对象 `s1` 和 `s2`,并分别使用 `putElem` 函数向其中存储数据。然后输出两个对象中存储的数据成员。
接着定义了一个 `Student` 类型的结构体变量 `g`,其中包含了学号和平均分两个数据成员。然后定义了一个 `Store<Student>` 类对象 `s3`,并使用 `putElem` 函数向其中存储 `g` 变量。最后输出了对象 `s3` 中存储的学号数据成员。
最后定义了一个 `Store<double>` 类对象 `d`,并在调用 `getElem` 函数时由于 `d` 未经初始化而导致程序终止。在 `main` 函数最后使用 `try-catch` 语句捕获了异常并输出错误信息。
相关问题
struct Student { // 结构体Student int id; //学号 float gpa; //平均分 }; //定义类模板及函数,函数在类体外定义 template class Store //类模板:实现对任意类型数据进行存取 裁判测试程序样例: int main() { try { Store<int> s1, s2; //定义两个Store<int>类对象,其中数据成员item为int类型 s1.putElem(3); //向对象S1中存入数据(初始化对象S1) s2.putElem(-7); //向对象S2中存入数据(初始化对象S2) cout << s1.getElem() << " " << s2.getElem() << endl; //输出对象S1和S2的数据成员 Student g = { 1000, 23 }; //定义Student类型结构体变量的同时赋以初值 Store<Student> s3; //定义Store<Student>类对象s3,其中数据成员item为Student类型 s3.putElem(g); //向对象D中存入数据(初始化对象D) cout << "The student id is " << s3.getElem().id << endl; //输出对象s3的数据成员 Store<double> d; //定义Store<double>类对象s4,其中数据成员item为double类型 cout << "Retrieving object d... "; cout << d.getElem() << endl; //输出对象D的数据成员 //由于d未经初始化,在执行函数D.getElement()过程中导致程序终止 } catch (...) { cout << "get item error!"; } return 0; }
这段代码定义了一个类模板 `Store`,用于实现对任意类型数据进行存取。其数据成员为 `item`,可以存储任意类型的数据。其中,`putElem` 函数用于向对象中存储数据,`getElem` 函数用于获取对象中存储的数据。
在主函数中,先定义了两个 `Store<int>` 类对象 `s1` 和 `s2`,并分别使用 `putElem` 函数向其中存储数据。然后输出两个对象中存储的数据成员。
接着定义了一个 `Student` 类型的结构体变量 `g`,其中包含了学号和平均分两个数据成员。然后定义了一个 `Store<Student>` 类对象 `s3`,并使用 `putElem` 函数向其中存储 `g` 变量。最后输出了对象 `s3` 中存储的学号数据成员。
最后定义了一个 `Store<double>` 类对象 `d`,并在调用 `getElem` 函数时由于 `d` 未经初始化而导致程序终止。在 `main` 函数最后使用 `try-catch` 语句捕获了异常并输出错误信息。
【问题描述】结构体应用。全班有30位同学,某学期的课程数量为4门,利用结构体存储学生的基本信息(包括学号、姓名、4门成绩、绩点),通过从键盘上输入30个同学的学号、姓名、4门成绩,计算出每个同学的绩点,输出所有同学的信息(学号、姓名、4门成绩、绩点),并输出绩点最高的同学的学号和姓名。其中,存储学生信息的结构体为: struct stdinfo { char no[20]; char name[10]; float score[4]; float gpa; //绩点 }; 这里假设每个人的绩点为各科绩点的总和,单科成绩可通过下述公式转换为对应绩点值。 image.png 例如,成绩50分对应绩点0,成绩62对应绩点1.2,成绩85对应3.5 【输入形式】 【输出形式】标题名Id、Name、Score1、Score2、Score3、Score4、GPA用\t分隔; 一行中的数据也用\t分隔; 【输入/输出样例】红色部分代表输入的信息。 Please enter students number:5 Please input all student information: 101 s01 88 68 76 80 102 s02 78 80 88 69 103 s03 50 68 62 55 104 s04 90 99 92 95 105 s05 62 71 80 75 Id Name Score1 Score2 Score3 Score4 gpa 101 s01 88.00 68.00 76.00 80.00 11.20 102 s02 78.00 80.00 88.00 69.00 11.50 103 s03 50.00 68.00 62.00 55.00 3.00 104 s04 90.00 99.00 92.00 95.00 17.60 105 s05 62.00 71.00 80.00 75.00 8.80 The highest gpa is 17.60, Id is 104, name is s04.
以下是参考代码:
```
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 35;
struct stdinfo
{
char no[20];
char name[10];
float score[4];
float gpa;
};
stdinfo students[N]; // 存储学生信息的数组
int main()
{
int n;
cout << "Please enter students number:";
cin >> n;
cout << "Please input all student information:" << endl;
for (int i = 0; i < n; i++)
{
cin >> students[i].no >> students[i].name;
for (int j = 0; j < 4; j++)
cin >> students[i].score[j];
}
cout << "Id" << "\t" << "Name" << "\t" << "Score1" << "\t" << "Score2" << "\t" << "Score3" << "\t" << "Score4" << "\t" << "gpa" << endl;
for (int i = 0; i < n; i++)
{
students[i].gpa = 0; // 初始化绩点
for (int j = 0; j < 4; j++)
{
// 根据单科成绩计算绩点
if (students[i].score[j] >= 90)
students[i].gpa += 4.0;
else if (students[i].score[j] >= 85)
students[i].gpa += 3.7;
else if (students[i].score[j] >= 82)
students[i].gpa += 3.3;
else if (students[i].score[j] >= 78)
students[i].gpa += 3.0;
else if (students[i].score[j] >= 75)
students[i].gpa += 2.7;
else if (students[i].score[j] >= 72)
students[i].gpa += 2.3;
else if (students[i].score[j] >= 68)
students[i].gpa += 2.0;
else if (students[i].score[j] >= 64)
students[i].gpa += 1.5;
else if (students[i].score[j] >= 60)
students[i].gpa += 1.0;
}
printf("%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n", students[i].no, students[i].name, students[i].score[0], students[i].score[1], students[i].score[2], students[i].score[3], students[i].gpa);
}
// 找出
阅读全文