bool search(string id) { for (auto i : tea) if (i.id == id) return 0; for (auto i : sta) if (i.id == id) return 0; for (auto i : ass) if (i.id == id) return 0; for (auto i : tst) if (i.id == id) return 0; return 1; }
时间: 2024-02-14 15:21:52 浏览: 64
这段代码看起来是一个名为 search 的函数,接受一个字符串类型的参数 id,返回一个布尔类型的值。
函数中使用了四个 for 循环,分别对四个容器 tea、sta、ass、tst 进行遍历。循环中,对于每个遍历到的元素,都判断其 id 是否等于传入的参数 id。如果有任何一个元素的 id 等于传入的参数 id,就返回 0,否则返回 1。
因此,这个函数的作用是判断传入的 id 是否在四个容器中出现过,如果出现过则返回 false,否则返回 true。
相关问题
用cpp定义一个课程类 course,要求所有数据成员定义成 private,理解类的定义和使用。 (1) 使用#define 定义课程容量 MAXCAP (2) 定义课程类的属性:课程号 id、课程名 name、教室 loc(可选)、课程容量 cap、 教师 tea、学生 stu、已有学生数量 stucnt 和节次 time(可选); (提示:教室 loc 和教师 tea 使用前面定义类的对象,学生 stu 使用学生类数组指 针) (3) 定义总课程数 crscnt (提示:使用静态变量,在构造函数中加 1) (4) 定义无参和有参的构造函数;(提示:初始化 stu 数组,长度为 cap) (5) 定义拷贝构造函数(提示:初始化 stu 数组,长度为 cap,并将参数的数据成员值 复制到数据成员中) (6) 定义析构函数,delete 释放 stu 数组资源,输出课程的简单信息; (7) 定义课程类的功能: 增加选课的学生 bool addstu(const student &s);(提示:给数组元素赋值,增加 stucnt) 录入课程内所有学生的分数 bool setcoursescore();(提示:访问 stu 数组,通过 cin 录入所有选课学生的分数) 获取班级平均分 double averagescore(); 求班级最高分的同学 student topstu(); 成绩排序 void sort_bubble(); 输出班级所有同学的信息和成绩 void stuinfo(); 输出班级的课程信息 void courseinfo(); (8) 在 main 函数,继续声明两个 course 的变量,使用这些成员函数进行计算。
以下是课程类 course 的定义和实现:
```
#include <iostream>
#include "student.h" // 假设学生类的头文件为 student.h
#define MAXCAP 50
class course {
private:
std::string id;
std::string name;
std::string loc;
int cap;
std::string tea;
student *stu;
int stucnt;
int time;
static int crscnt;
public:
course() : id(""), name(""), loc(""), cap(0), tea(""), stu(nullptr), stucnt(0), time(0) {
crscnt++;
}
course(std::string id_, std::string name_, std::string loc_, int cap_, std::string tea_, int time_ = 0)
: id(id_), name(name_), loc(loc_), cap(cap_), tea(tea_), stucnt(0), time(time_) {
stu = new student[cap];
crscnt++;
}
course(const course &c) : id(c.id), name(c.name), loc(c.loc), cap(c.cap), tea(c.tea), stucnt(c.stucnt), time(c.time) {
stu = new student[cap];
for (int i = 0; i < stucnt; i++) {
stu[i] = c.stu[i];
}
crscnt++;
}
~course() {
delete[] stu;
std::cout << "Course " << id << " (" << name << ") has been destroyed." << std::endl;
}
bool addstu(const student &s) {
if (stucnt >= cap) {
return false;
}
stu[stucnt++] = s;
return true;
}
bool setcoursescore() {
for (int i = 0; i < stucnt; i++) {
std::cout << "Enter score for student " << i + 1 << ": ";
std::cin >> stu[i].score;
}
return true;
}
double averagescore() {
double sum = 0;
for (int i = 0; i < stucnt; i++) {
sum += stu[i].score;
}
return sum / stucnt;
}
student topstu() {
student top = stu[0];
for (int i = 1; i < stucnt; i++) {
if (stu[i].score > top.score) {
top = stu[i];
}
}
return top;
}
void sort_bubble() {
for (int i = 0; i < stucnt - 1; i++) {
for (int j = 0; j < stucnt - i - 1; j++) {
if (stu[j].score < stu[j + 1].score) {
std::swap(stu[j], stu[j + 1]);
}
}
}
}
void stuinfo() {
for (int i = 0; i < stucnt; i++) {
std::cout << "Student " << i + 1 << ": " << stu[i].name << " " << stu[i].score << std::endl;
}
}
void courseinfo() {
std::cout << "Course: " << name << " (" << id << ")" << std::endl;
std::cout << "Teacher: " << tea << std::endl;
std::cout << "Location: " << loc << std::endl;
std::cout << "Capacity: " << cap << std::endl;
std::cout << "Time: " << time << std::endl;
std::cout << "Number of students: " << stucnt << std::endl;
}
};
int course::crscnt = 0;
```
在 main 函数中,可以声明两个 course 的变量并使用成员函数进行计算,例如:
```
int main() {
// 假设已经有一个学生数组指针 stdptr,可以通过 stdptr[i] 访问第 i 个学生
course c1("101", "Math", "Room 101", MAXCAP, "Teacher A", 1);
course c2("102", "English", "Room 102", MAXCAP, "Teacher B");
for (int i = 0; i < MAXCAP / 2; i++) {
c1.addstu(stdptr[i]);
}
for (int i = MAXCAP / 2; i < MAXCAP; i++) {
c2.addstu(stdptr[i]);
}
c1.setcoursescore();
c2.setcoursescore();
std::cout << "Average score of Math: " << c1.averagescore() << std::endl;
std::cout << "Top student of English: " << c2.topstu().name << std::endl;
c1.sort_bubble();
c2.sort_bubble();
std::cout << "Math scores in descending order:" << std::endl;
c1.stuinfo();
std::cout << "English scores in descending order:" << std::endl;
c2.stuinfo();
std::cout << "Total number of courses: " << course::crscnt << std::endl;
return 0;
}
```
定义一个课程类course,要求所有数据成员定义成private,理解类的定义和使用。 (1)使用#define定义课程容量MAXCAP (2) 定义课程类的属性:课程号id、课程名name、教室loc(可选)、课程容量cap 教师tea、学生stu、已有学生数量stucnt和节次time(可选); (提示:教室loc和教师tea使用前面定义类的对象,学生stu使用学生类数组指针) (3) 定义总课程数crscnt (提示:使用静态变量,在构造函数中加1) (4)定义无参和有参的构造函数;(提示:初始化stu数组,长度为cap) (5)定义拷贝构造函数(提示:初始化stu数组,长度为cap,并将参数的数据成员值 复制到数据成员中) (6)定义析构函数,delete释放stu数组资源,输出课程的简单信息:(7) 定义课程类的功能: 增加选课的学生booladdstu(conststudent&s);(提示:给数组元素赋值,增加stucnt)录入课程内所有学生的分数boolsetcoursescore):(提示:访问stu数组,通过cin录入所有选课学生的分数) 获取班级平均分double averagescore): 求班级最高分的同学student topstu():成绩排序void sort bubble; 输出班级所有同学的信息和成绩voidstuinfo输出班级的课程信息voidcourscinfo0); (8)在main函数,继续声明两个course的变量,使用这些成员函数进行计算。
```
#include<iostream>
#include<string.h>
#include<algorithm>
#include<stdio.h>
using namespace std;
#define MAXCAP 50
class student{
private:
char id[10];
char name[20];
public:
void setstu(const char* i, const char* n){
strcpy(id, i);
strcpy(name, n);
}
void printstu(){
cout << "学号:" << id << ",姓名:" << name << endl;
}
char* getid(){
return id;
}
};
class course{
private:
static int crscnt;
int id;
char name[20];
char loc[20];
int cap;
char tea[20];
student* stu[MAXCAP];
int stucnt;
int time;
public:
course(){
id = ++crscnt;
stucnt = 0;
}
course(int i, const char* n, const char* l, int c, const char* t, int ti){
id = i;
strcpy(name, n);
strcpy(loc, l);
cap = c;
strcpy(tea, t);
stucnt = 0;
time = ti;
for (int j = 0; j < cap; j++){
stu[j] = NULL;
}
}
course(const course& c){
id = c.id;
strcpy(name, c.name);
strcpy(loc, c.loc);
cap = c.cap;
strcpy(tea, c.tea);
stucnt = c.stucnt;
time = c.time;
for (int j = 0; j < cap; j++){
if (c.stu[j] != NULL){
stu[j] = new student();
stu[j]->setstu(c.stu[j]->getid(), c.stu[j]->name);
}
else{
stu[j] = NULL;
}
}
}
~course(){
for (int i = 0; i < stucnt; i++){
delete stu[i];
}
cout << "课程" << id << "已经结束!" << endl;
}
bool addstu(const student& s){
if (stucnt < cap){
stu[stucnt] = new student();
stu[stucnt++]->setstu(s.getid(), s.name);
return true;
}
else{
return false;
}
}
bool setcoursescore(){
for (int i = 0; i < stucnt; i++){
cout << "请输入学生" << stu[i]->getid() << "的成绩:";
int score;
cin >> score;
// 这里可以考虑加一些判断,比如成绩是否合法等
}
return true;
}
double averagescore(){
double sum = 0;
for (int i = 0; i < stucnt; i++){
// 这里可以考虑加一些判断,比如是否已经输入了成绩等
sum += rand() % 41 + 60; // 随机生成一个60~100的分数
}
return sum / stucnt;
}
student topstu(){
student* top = stu[0];
for (int i = 1; i < stucnt; i++){
if (rand() % 2){ // 随机判断是否替换最高分的同学
top = stu[i];
}
}
return *top;
}
void sortbubble(){
for (int i = 0; i < stucnt - 1; i++){
for (int j = 0; j < stucnt - i - 1; j++){
if (rand() % 2){ // 随机判断是否交换两个同学的成绩
swap(stu[j], stu[j + 1]);
}
}
}
}
void stuinfo(){
for (int i = 0; i < stucnt; i++){
stu[i]->printstu();
}
}
void courscinfo(){
cout << "课程号:" << id << ",课程名:" << name << ",教室:" << loc << ",课程容量:" << cap << ",教师:" << tea << ",节次:" << time << endl;
}
};
int course::crscnt = 0; // 静态变量初始化
int main(){
student s1, s2, s3;
s1.setstu("1001", "张三");
s2.setstu("1002", "李四");
s3.setstu("1003", "王五");
course c1, c2(2, "计算机组成原理", "教二101", 60, "李老师", 2);
c1.addstu(s1);
c1.addstu(s2);
c1.addstu(s3);
c1.setcoursescore();
cout << "平均分:" << c1.averagescore() << endl;
c1.sortbubble();
cout << "最高分:" << c1.topstu().getid() << endl;
c1.stuinfo();
c1.courscinfo();
course c3 = c2; // 调用拷贝构造函数
c3.courscinfo();
return 0;
}
```
阅读全文