真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

08章-結(jié)構(gòu)體--C++基礎(chǔ)入門學(xué)習(xí)筆記

8 結(jié)構(gòu)體

8.1 結(jié)構(gòu)體基本概念

結(jié)構(gòu)體屬于用戶自定義的數(shù)據(jù)類型,允許用戶存儲不同的數(shù)據(jù)類型

成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供民樂企業(yè)網(wǎng)站建設(shè),專注與做網(wǎng)站、成都網(wǎng)站設(shè)計、H5響應(yīng)式網(wǎng)站、小程序制作等業(yè)務(wù)。10年已為民樂眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計公司優(yōu)惠進(jìn)行中。

結(jié)構(gòu)題定義和使用

語法struct 結(jié)構(gòu)體名{ 結(jié)構(gòu)體成員列表 };

通過結(jié)構(gòu)體創(chuàng)建變量的方式有三種:

  • struct 結(jié)構(gòu)體名 變量名
  • struct 結(jié)構(gòu)體名 變量名={成員1值,成員2值...}
  • 定義結(jié)構(gòu)體時順便創(chuàng)建變量

示例

#include
#include
using namespace std;

//1、創(chuàng)建學(xué)生數(shù)據(jù)類型;
//學(xué)生:姓名,年齡,分?jǐn)?shù)
//自定義數(shù)據(jù)類型,一些類型集合組成的一個類型
//語法 struct 類型名稱 { 成員列表 };
struct Student
{
	//成員列表
	
	//姓名
	string name;
	//年齡
	int age;
	//分?jǐn)?shù)
	int score;
}s3;

//2、通過學(xué)生類型創(chuàng)建具體學(xué)生
//2.1 struct Student s1;
//2.2 struct Student s2 = {...}
//2.3 在定義結(jié)構(gòu)體時候順便創(chuàng)建結(jié)構(gòu)體變量

int main()
{
	//2.1 struct Student s1;
	//struct 關(guān)鍵字可以省略
	struct Student s1;
	s1.name = "張三";
	s1.age = 18;
	s1.score = 100;

	cout << "姓名:" << s1.name << " 年齡:" << s1.age << " 分?jǐn)?shù):" << s1.score << endl;
	//2.2 struct Student s2 = {...}
	struct Student s2 = { "李四",19,80 };
	cout << "姓名:" << s2.name << " 年齡:" << s2.age << " 分?jǐn)?shù):" << s2.score << endl;
	//2.3 在定義結(jié)構(gòu)體時候順便創(chuàng)建結(jié)構(gòu)體變量
	s3.name = "王五";
	s3.age = 30;
	s3.score = 100;
	cout << "姓名:" << s3.name << " 年齡:" << s3.age << " 分?jǐn)?shù):" << s3.score << endl;
	system("pause");
	return 0;
}

8.3 結(jié)構(gòu)體數(shù)組

作用:將自定義的結(jié)構(gòu)體放入到數(shù)組中方便維護(hù);

語法struct 結(jié)構(gòu)體名 數(shù)組名[元素個數(shù)] = { {},{},..{} }

示例

#include 
#include 	
using namespace std;

//結(jié)構(gòu)體數(shù)組
//1、定義結(jié)構(gòu)體
struct Student
{
	//姓名
	string name;
	//年齡
	int age;
	//分?jǐn)?shù)
	int score;
};

int main()
{
	//2、創(chuàng)建結(jié)構(gòu)體數(shù)組
	struct Student stuArray[8] =
	{
		{"張三",18,100},
		{"李四",29,99},
		{"王五",18,50}
	};

	//3、給結(jié)構(gòu)體數(shù)組中的元素賦值
	stuArray[0].name = "趙六";
	stuArray[0].age = 80;
	stuArray[0].score = 60;

	//4、遍歷結(jié)構(gòu)體數(shù)組
	for (int i = 0; i < 3; i++)
	{
		cout << "姓名" << stuArray[i].name 
			<< " 年齡:" << stuArray[i].age 
			<< " 分?jǐn)?shù):" << stuArray[i].score << endl;
	}

	system("pause");
	return 0;
}

8.4 結(jié)構(gòu)體指針

作用:通過指針訪問結(jié)構(gòu)體中的成員

  • 利用操作符 -> 可以通過結(jié)構(gòu)體指針訪問結(jié)構(gòu)體屬性

示例

#include
#include
using namespace std;

//結(jié)構(gòu)體指針

//定義學(xué)生結(jié)構(gòu)體
struct Student
{
	string name;//姓名
	int age;//年齡
	int score; //分?jǐn)?shù)
};

int main()
{
	//創(chuàng)建學(xué)生結(jié)構(gòu)體變量
	struct Student s = { "張三",18,100 };

	//通過指針指向結(jié)構(gòu)體變量
	struct Student* p = &s;

	//通過指針訪問結(jié)構(gòu)體變量中數(shù)據(jù)
	cout << "姓名: " << p->name << " 年齡: " << p->age << " 分?jǐn)?shù): " << p->score << endl;

	system("pause");
	return 0;
}

8.5 結(jié)構(gòu)體嵌套結(jié)構(gòu)體

作用:結(jié)構(gòu)體中的成員可以是另一個結(jié)構(gòu)體

例如:每個老師輔導(dǎo)一個學(xué)員,一個老師的結(jié)構(gòu)體中,記錄一個學(xué)生的結(jié)構(gòu)體

示例

#include	
#include	
using namespace std;
//定義學(xué)生結(jié)構(gòu)體
struct Student
{
	string name;//學(xué)生的姓名
	int age; //學(xué)生的年齡
	int score;//學(xué)生的分?jǐn)?shù)
};
//定義老師結(jié)構(gòu)體
struct Teacher
{
	int id;//職工編號
	string name; //教師姓名
	int age; //年齡
	struct Student stu;//輔導(dǎo)的學(xué)生
};
int main()
{
	//結(jié)構(gòu)體嵌套結(jié)構(gòu)體
	//創(chuàng)建老師
	struct Teacher t;
	t.id = 2102;
	t.name = "王老師";
	t.age = 66;
	t.stu.name = "王同學(xué)";
	t.stu.age = 18;
	t.stu.score = 99;

	cout << "老師姓名: " << t.name << " 老師編號:" << t.id 
	<< " 老師年齡: " << t.age 
		<< " 老師輔導(dǎo)學(xué)生為" << t.stu.name <<" 學(xué)生年齡" 
		<< t.stu.age << " 學(xué)生分?jǐn)?shù)" << t.stu.score
		<< endl;


	system("pause");
	return 0;
}

8.6 結(jié)構(gòu)體做函數(shù)參數(shù)

作用:將結(jié)構(gòu)體作為參數(shù)向函數(shù)中傳遞

傳遞方式有兩種:

  • 值傳遞
  • 地址傳遞

示例

#include
#include
using namespace std;

//定義學(xué)生結(jié)構(gòu)體
struct Student
{
	//姓名
	string name;
	//年齡
	int age;
	//分?jǐn)?shù)
	int score;
};

//打印學(xué)生信息函數(shù)
//1、值傳遞
void printStudent1(struct Student s)
{
	s.age = 100;
	cout << "子函數(shù)1中 姓名:" << s.name << " 年齡:" << s.age << " 分?jǐn)?shù):" << s.score << endl;
}
//2、地址傳遞
void printStudent2(struct Student* s)
{
	s->age = 66;
	cout << "子函數(shù)2中 姓名:" << s->name << " 年齡:" << s->age << " 分?jǐn)?shù):" << s->score << endl;
}

int main()
{
	//結(jié)構(gòu)體做函數(shù)參數(shù)
	//將學(xué)生傳入到一個參數(shù)中,打印學(xué)生身上的所有信息

	//創(chuàng)建結(jié)構(gòu)體變量
	struct Student s;
	s.name = "張三";
	s.age = 18;
	s.score = 88;

	cout << "main 函數(shù)中打印 姓名:" << s.name << " 年齡:" << s.age << " 分?jǐn)?shù):" << s.score << endl;
	printStudent2(&s);
	printStudent1(s);
	cout << "main 函數(shù)中打印 姓名:" << s.name << " 年齡:" << s.age << " 分?jǐn)?shù):" << s.score << endl;
	system("pause");
	return 0;
}

8.7 結(jié)構(gòu)體中const使用場景

作用:用const來防止誤操作

示例

#include
#include	
using namespace std;

//const使用場景

struct Student
{
	//姓名
	string name;
	//年齡
	int age;
	//分?jǐn)?shù)
	int score;
};

//值傳遞
void printStudent01(Student s)
{
	s.age = 150;
	cout << "姓名: " << s.name << " 年齡: " << s.age << " 分?jǐn)?shù): " << s.score << endl;
}
//地址傳遞
//將函數(shù)中的形參改為指針,可以減少內(nèi)存空間,而且不會賦值新的副本出來
//加入const之后,不能修改。只能讀不能寫。
void printStudent02(const struct Student* s)
{
	cout << "姓名: " << s->name << " 年齡: " << s->age << " 分?jǐn)?shù): " << s->score << endl;
}

int main()
{
	//創(chuàng)建結(jié)構(gòu)體變量
	struct Student s = { "張三", 15,98 };

	//通過函數(shù)打印結(jié)構(gòu)體變量信息
	printStudent01(s);

	cout << "main 中 姓名: " << s.name << " 年齡: " << s.age << " 分?jǐn)?shù): " << s.score << endl;

	system("pause");
	return 0;
}

8.8 結(jié)構(gòu)體案例

8.8.1 案例1

案例描述:學(xué)校正在做畢設(shè)項目,每名老師帶領(lǐng)5個學(xué)生,總共有3名老師,需求如下:

  1. 設(shè)計學(xué)生和老師和結(jié)構(gòu)體,其中在老師的結(jié)構(gòu)體中,有老師姓名和一個存放5名學(xué)生的數(shù)組作為成員
  2. 學(xué)生的成員有姓名,考試分?jǐn)?shù),創(chuàng)建數(shù)組存放3名老師,通過函數(shù)給每個老師及所帶的學(xué)生賦值
  3. 最重打印老師數(shù)據(jù)已經(jīng)老師所帶學(xué)生數(shù)據(jù)

示例

#include
#include
#include
using namespace std;

//學(xué)生的結(jié)構(gòu)體
struct Student
{
	//姓名
	string sName;
	//分?jǐn)?shù)
	int score;
};

//老師的結(jié)構(gòu)體定義
struct Teacher
{
	//姓名
	string tName;
	//學(xué)生數(shù)組
	struct Student sArray[5];
};

//給老師和學(xué)生賦值的函數(shù)
//給老師
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];

		//通過循環(huán)給每名老師所帶的學(xué)生賦值
		for (int j = 0; j < 5; j++)
		{
			tArray[i].sArray[j].sName = "Student_";
			tArray[i].sArray[j].sName += nameSeed[j];
			int random_score = rand() % 61 + 40;
			tArray[i].sArray[j].score = random_score;
		}
		tArray[i].sArray;
	}
}

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學(xué)生姓名:" << tArray[i].sArray[j].sName << 
				" 考試分?jǐn)?shù):"<

8.8.2 案例2

案例描述

設(shè)計一個英雄的結(jié)構(gòu)體,包括成員姓名,年齡,性別;創(chuàng)建結(jié)構(gòu)體數(shù)組,數(shù)組中存放5名英雄。通過冒泡排序的算法,將數(shù)組中的英雄按照年齡進(jìn)行升序排序,最終打印排序后的結(jié)果。

五名英雄的信息如下:

{"劉備", 23, "男"}
{"關(guān)羽", 22, "男"}
{"張飛", 20, "男"}
{"趙云", 21, "男"}
{"貂蟬", 19, "男"}

示例

#include 
#include 
using namespace std;

//1、設(shè)計英雄的結(jié)構(gòu)體
struct Hero
{
	//姓名
	string name;
	//年齡
	int age;
	//性別
	string sex;
};

//冒泡排序
void bubbleSort(struct Hero heroArray[], int len)
{
	for (int i = 0; i < len - 1; i++)
	{
		for (int j = 0; j < len - i - 1; j++)
		{
			if (heroArray[j].age > heroArray[j + 1].age)
			{
				struct Hero temp = heroArray[j];
				heroArray[j] = heroArray[j + 1];
				heroArray[j + 1] = temp;
			}
		}
	}
}

//打印排序后數(shù)組中的信息
void printHero(struct Hero heroArray[], int len)
{
	for (int i = 0; i < len; i++)
	{
		cout << "姓名:" << heroArray[i].name << " 年齡:" << heroArray[i].age
			<< " 性別:" << heroArray[i].sex << endl;
	}
}

int main()
{
	//2、創(chuàng)建數(shù)組存放5名英雄
	struct Hero heroArray[5] = {
		{"劉備", 23, "男"},
		{"關(guān)羽", 22, "男"},
		{"張飛", 20, "男"},
		{"趙云", 21, "男"},
		{"貂蟬", 19, "男"}
	};

	int len = sizeof(heroArray) / sizeof(heroArray[0]);
	cout << "排序前的打印結(jié)果是" << endl;
	for (int i = 0; i < len; i++)
	{
		cout << "姓名:" << heroArray[i].name << " 年齡:" << heroArray[i].age
			<< " 性別:" << heroArray[i].sex << endl;
	}

	//3、對數(shù)組進(jìn)行排序,按照年齡進(jìn)行升序排列
	bubbleSort(heroArray, len);

	cout << "排序后的打印結(jié)果是" << endl;
	//4、講排序后的結(jié)果打印輸出
	printHero(heroArray, len);

	system("pause");
	return 0;
}

網(wǎng)頁標(biāo)題:08章-結(jié)構(gòu)體--C++基礎(chǔ)入門學(xué)習(xí)筆記
瀏覽地址:http://weahome.cn/article/dsoijsp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部