结构体例一

案例描述

学校正在做毕设项目,每名老师带领5个学生,总共有3名老师,需求如下:

(1)设计老师和学生的结构体,其中在老师的结构体中,有老师姓名和一个存放了5名学生的数组作为成员

(2)学生的成员有姓名、考试分数,创建数组存放3名老师,通过函数给每个老师及所带的学生赋值

(3)最终打印出老师数据以及所带的学生数据。

我的代码

#include<iostream>
#include<string>
using namespace std;

struct student{
	string sname;
	int score;
};//学生数量类型 

struct teacher{
	string tname;
	struct student stuArray[5];
}; //老师数据类型 

void assign(struct teacher tArray[],int len){
	string tnames = "教师";//避免和实参混淆,加s 
	string snames = "学生";
	for(int i = 0;i < 3;i++){
		tArray[i].tname = tnames +to_string(i + 1);//大循环存放老师123 
		for(int j = 0;j < 5;j++){
			tArray[i].stuArray[j].sname = snames + to_string(i + 1) + to_string(j + 1);
		}//小循环存放学生12345X3,并在大循环中分别和3老师对应 
	} //to_string函数:将数值类型(如 int、float、double 等)转换为字符串表示
}
void print(teacher tArray[],int len){
	for(int i = 0;i < 3;i++){
		cout<<tArray[i].tname<<endl;//大循环输出老师123 
		for(int j = 0;j < 5;j++){
			cout<<tArray[i].stuArray[j].sname<<endl;
		}//小循环输出学生12345 
	}
}

int main(){
	struct teacher tArray[3];
	int len = sizeof(tArray) / sizeof(tArray[0]);
	assign(tArray,len);//len的用处不懂,但是笔记上都这么写的,所以我也这么写 
	print(tArray,len);
	system("pause");
	return 0;
 
}
代码缺陷

没有加上学生的成绩,水平到这了,加上成绩就不会了www

示例代码

#include<iostream>
#include<string>
#include <ctime>
using namespace std;

struct Student{
	string name;
	int score;
};
struct Teacher{
	string name;
	Student sArray[5];
};

void allocateSpace(Teacher tArray[] , int len){
	string tName = "教师";
	string sName = "学生";
	string nameSeed = "ABCDE";
	for (int i = 0; i < len; i++){
		tArray[i].name = tName + nameSeed[i];
		for (int j = 0; j < 5; j++){
			tArray[i].sArray[j].name = sName + nameSeed[j];
			tArray[i].sArray[j].score = rand() % 61 + 40;
		}
	}
}

void printTeachers(Teacher tArray[], int len){
	for (int i = 0; i < len; i++){
		cout << tArray[i].name << endl;
		for (int j = 0; j < 5; j++){
			cout << "\t姓名:" << tArray[i].sArray[j].name << " 分数:" << tArray[i].sArray[j].score << endl;
		}
	}
}

int main() {
	srand((unsigned int)time(NULL)); //随机数种子 头文件 #include <ctime>
	Teacher tArray[3]; //老师数组
	int len = sizeof(tArray) / sizeof(Teacher);
	allocateSpace(tArray, len); //创建数据
	printTeachers(tArray, len); //打印数据
	system("pause");

	return 0;
}

修改后代码

#include<iostream>
#include<string>
#include<ctime>//如果有随机数种子则需要这个头文件 
using namespace std;

struct student{
	string sname;
	int score;
};//学生数量类型 

struct teacher{
	string tname;
	struct student stuArray[5];
}; //老师数据类型 

void assign(struct teacher tArray[],int len){
	string tnames = "教师";//避免和实参混淆,加s 
	string snames = "学生";
	for(int i = 0;i < len;i++){//len的用处在这里,虽然用3也可以(?) 
		tArray[i].tname = tnames +to_string(i + 1);//大循环存放老师123 
		for(int j = 0;j < 5;j++){
			tArray[i].stuArray[j].sname = snames  + to_string(j + 1);
			int random = rand() % 61 + 40;//随机分数:40~100
			tArray[i].stuArray[j].score = random;//在我垃圾地基础上加上了分数 
		}//小循环存放学生12345X3,并在大循环中分别和3老师对应 
	} //to_string函数:将数值类型(如 int、float、double 等)转换为字符串表示
}
void print(teacher tArray[],int len){
	for(int i = 0;i < len;i++){
		cout<<"老师姓名:"<<tArray[i].tname<<endl;//大循环输出老师123 
		for(int j = 0;j < 5;j++){
			cout<<"\t学生姓名:"<<tArray[i].stuArray[j].sname<<"  "//加\t美化 
			<<"考试分数为:"<<tArray[i].stuArray[j].score<<endl;
		}//小循环输出学生12345 
	}
}

int main(){
	srand((unsigned int)time(NULL)); //随机数种子 
	struct teacher tArray[3];
	int len = sizeof(tArray) / sizeof(tArray[0]);
	assign(tArray,len); 
	print(tArray,len);
	system("pause");
	return 0;
 
}

运行结果

老师姓名:教师1
        学生姓名:学生1  考试分数为:56
        学生姓名:学生2  考试分数为:66
        学生姓名:学生3  考试分数为:76
        学生姓名:学生4  考试分数为:96
        学生姓名:学生5  考试分数为:78
老师姓名:教师2
        学生姓名:学生1  考试分数为:65
        学生姓名:学生2  考试分数为:89
        学生姓名:学生3  考试分数为:41
        学生姓名:学生4  考试分数为:94
        学生姓名:学生5  考试分数为:92
老师姓名:教师3
        学生姓名:学生1  考试分数为:98
        学生姓名:学生2  考试分数为:82
        学生姓名:学生3  考试分数为:97
        学生姓名:学生4  考试分数为:53
        学生姓名:学生5  考试分数为:63
请按任意键继续. . .

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值