①構造と機能②constでの構造の使用③構造の場合、3人の教師がそれぞれ5人の生徒と5人のヒーローのバブルソートを管理します

構造+機能

1.価値の移転

【スコア変更】【無効】

2.住所配達

【年齢変更】【有効】

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

//学生结构体
struct student
{
    
    
	int age;//年龄
	string name;//名字
	int score;//分数
};

//值传递的函数【改变分数】【无效】
void printstudent1(struct student s)
{
    
    
	cout << "值传递:" << endl;
	cout << "年龄:" << s.age << "名字:" << s.name << "分数:" << s.score << endl;
	s.score = 100;//改变分数(无效)
}

//地址传递的函数【改变年龄】【有效】
void printstudent2(struct student* p)
{
    
    
	cout << "地址传递:" << endl;
	cout << "年龄:" << p->age << "名字:" << p->name << "分数:" << p->score << endl;
	p->age = 20;//改变年龄(有效)
}
int main()
{
    
    
	//定义学生数据
	struct student s;
	s.age = 18;
	s.name = "Amy";
	s.score = 99;

	cout <<"在没有调用函数之前的年龄:" 
         << s.age << endl;
	cout << "在没有调用函数之前的分数:"
		<<s.score  << endl;

    //值传递打印学生数据
	printstudent1(s);

	//地址传递打印学生数据
	printstudent2(&s);

	cout << "在调用函数之后的年龄:"
	     << s.age << endl;
	cout << "在调用函数之后的分数:"
		<< s.score  << endl;

	return 0;
}

構造体でのconstの使用

[学生の代わりに学生*を使用する理由]

値で渡される場合:

会把结构体所有的数据类型的内存全部副本一遍

ただし、アドレス転送の場合:

所有的数据类型都是指针,都只有四个字节

など:

地址传递会减少内存空间,并且不会复制副本

【住所配達時】

如果改变了形参,会影响实参的数据

実際のパラメータデータを恣意的に変更しないため

则使用const student * s
#include <iostream>
#include <string>
using namespace std;

struct student
{
    
    
	int age;//年龄
	string name;//姓名
	int score;//分数
};
/*使用 student *s,而不是student s 的理由:

如果是值传递:
    会把结构体所有的数据类型的内存全部副本一遍
但是如果是地址传递:
    所有的数据类型都是指针,都只有四个字节
所以:
    地址传递会减少内存空间,并且不会复制副本
 */

/*在地址传递的时候
    如果改变了形参,会影响实参的数据
为了不随意的改变实参的数据
    则使用const student * s
*/
void printstudent(const student * s)
{
    
    
	cout << "年龄:" << s->age<< "    "
		<< "姓名:" << s->name<< "    "
		<< "分数:" << s->score << endl;
}
int main()
{
    
    
	student s;
	s.age = 19;
	s.name = "李华";
	s.score = 93;
	printstudent(&s);

	return 0;
}

構造ケース

1.3人の教師がそれぞれ5人の生徒を管理します

[新しく接続された割り当てモード]
アレイとアレイの累積

string nameseed = "ABCDE";
for (int i = 0; i < len; i++)
{
	//老师赋值:
	tArray[i].tname  = "teacher_";
	tArray[i].tname += nameseed[i];//在teacher_后面加上对应的ABCDE

	//学生赋值:
	for (int j = 0; j < 5; j++)
	{
		tArray[i].sAarry[j].sname = "student_";
		tArray[i].sAarry[j].sname += nameseed[j];//同老师的赋值方法一样

[乱数と乱数シード]

乱数

int random = rand()%61 + 40; // 40-100(乱数分布)

rand()%60は0-59(60-1)を意味し
ますその後に数字を追加すると、開始位置に数字を追加することを意味します

乱数シード

srand((unsigned int)time(NULL));
ヘッダーファイルを追加<ctime>

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

//学生结构体
struct student 
{
    
    
	string sname;//名字
	int score;//分数
};
//老师结构体
struct teacher
{
    
    
	string tname;//名字
	struct student sAarry[5];
};
//给老师与学生赋值
void allocateSpace(struct teacher tArray[], int len)
{
    
    
	string nameseed = "ABCDE";
	for (int i = 0; i < len; i++)
	{
    
    
		//老师赋值:
		tArray[i].tname  = "teacher_";
		tArray[i].tname += nameseed[i];//在teacher_后面加上对应的ABCDE

		//学生赋值:
		for (int j = 0; j < 5; j++)
		{
    
    
			tArray[i].sAarry[j].sname = "student_";
			tArray[i].sAarry[j].sname += nameseed[j];//同老师的赋值方法一样

			int random = rand() % 61 + 40;//40 - 100(随机数分配)
			//rand() % 60 代表 0 - 59 (60-1) 若后面再加数字就代表在起始的位置加数字
			tArray[i].sAarry[j].score = random;

		}
		
	}
}
//输出所有内容的函数
void printInfo(struct teacher tArray[], int len)
{
    
    
	for (int i = 0; i < len; i++)
	{
    
    
		cout << "老师的姓名:" << tArray[i].tname << endl;
		for (int j = 0; j < 5; j++)
		{
    
    
			cout << "\t老师所带学生姓名:" << tArray[i].sAarry[j].sname << "\t"
				<< "学生的成绩:" << tArray[i].sAarry[j].score << endl;

		}
	}
}
int main()
{
    
    
	//随机数种子
	srand((unsigned int)time(NULL));
	//第一步:创建老师的数组
	struct teacher tArray[3];
	int len = sizeof(tArray) / sizeof(tArray[0]);
	//第二步:给老师的信息赋值,并且老师所带学生赋值
	allocateSpace(tArray, len);
	//第三步:打印所有的信息
	printInfo(tArray, len);
	return 0;
}

2.5人のヒーローのバブルソート

voidbubbleSort(struct hero Array []、int len)
{
for(int i = 0; i <len-1; i ++)
{
for(int j = 0; j <len --i --1 ; j ++)
{
if(Array [j] .age> Array [j + 1] .age)
{ struct hero temp = Array [j]; //创建与Array臨的数量配列配列[j] =配列[j + 1]; Array [j + 1] = temp; } } }




}

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

//创建英雄结构体
struct hero
{
    
    
	int age;//年龄
	string name;//姓名
};

//冒泡法
void bubbleSort(struct hero Array[], int len)
{
    
    
	for (int i = 0; i < len - 1; i++)
	{
    
    
		for (int j = 0; j < len - i - 1; j++)
		{
    
    
			if (Array[j].age > Array[j + 1].age)
			{
    
    
				struct hero temp = Array[j];//创建与Array相同的数据结构
				Array[j] = Array[j + 1];
				Array[j + 1] = temp;
			}
		}
	}
}
//打印英雄的所有信息
void printHero(struct hero Array[], int len)
{
    
    
	for (int i = 0; i < len; i++)
	{
    
    
		cout << "英雄的姓名:" << Array[i].name << "\t英雄的年龄:" << Array[i].age << endl;
	}
}
int main()
{
    
    
	//1、创建英雄结构体数组	//2、赋值
	struct hero Array[5] =
	{
    
    
		{
    
    18, "张三"},
		{
    
    20, "李四"},
		{
    
    17, "王五"},
		{
    
    23, "赵六"},
		{
    
    21, "周二"}
	};
	int len = sizeof(Array) / sizeof(Array[0]);
	//3、冒泡排序法
	bubbleSort(Array, len);
	//4、输出
	printHero(Array, len);
	return 0;
}

おすすめ

転載: blog.csdn.net/weixin_42198265/article/details/113845036