结构体案例
内容纲要

案例1如图

file

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

/*
学校正在做毕设项目,每名老师带5 个学生,共有3 名老师,需求如下,
设计学生和老师的结构体,其中老师的结构体中,有老师姓名和一个存放5 名学生的数组作为成员
学生的成员有姓名,考试分数,创建数组存放3名老师,通过函数给每个老师所带的学生赋值
最终打印出老师数据以及老师所带学生数据。
*/
struct student
{
    string sName;
    int score;
};

struct teacher
{
    string tName;
    struct student student[5];
};

void InitArr(teacher teacher[], int length) { //这里的teacher * teacher 等价于 teacher teacher[]

    string stuName = "ABCDE";
    string teaName = "123";

    for (size_t i = 0; i < length; i++)
    {
        teacher[i].tName = "Teacher_";  //给老师命名。
        teacher[i].tName += teaName[i];

        for (size_t j = 0; j < 5; j++)
        {
            teacher[i].student[j].sName = "Student_"; //给学生赋初值。
            teacher[i].student[j].sName += stuName[j]; //学生初值后面添加字母以示区别。
            //teacher[i].student[j].score = 60;  //学生分数赋值。
            //给学生赋随机值
            int random = rand() % 101; //rand() % 60 取值范围为0~59  
            teacher[i].student[j].score = random;
        }
    }
}

void printInfo(struct teacher* teacher, int teacherNum)
{
    for (size_t i = 0; i < teacherNum; i++)
    {
        cout << "教师的姓名:" << teacher[i].tName << endl;
        for (size_t j = 0; j < 5; j++)
        {
            cout << "\t学生的姓名:" << teacher[i].student[j].sName
                << "  学生的分数:" << teacher[i].student[j].score << endl;
        }
    }
}

void main() {
    srand((unsigned int)time(NULL));

    struct teacher teacher[3];

    int teacherNum = sizeof(teacher) / sizeof(teacher[0]);

    InitArr(teacher, teacherNum);

    printInfo(teacher, teacherNum);
}

案例2如图

file

#include <iostream>
#include "string"

using namespace std;
/*
案例描述:
设计一个英雄的结构体,包括成员姓名,年龄,性别;创建结构体数组,数组中存放5 名英雄。
通过冒泡排序法,将数组中的英雄按照年龄进行升序排列,最终打印排序后的结果。
*/
struct hero
{
    string name;
    int age;
    string sex;
};

void bubble(struct hero heros[],int arrLength)
{
    //cout << heros[4].name << endl;
    struct hero tempHero;
    //冒泡排序
    for (size_t i = 0; i < arrLength - 1; i++)
    {
        for (size_t j = 0; j < arrLength - i - 1; j++)
        {
            if (heros[j].age > heros[j +1].age)
            {
                //交换位置
                tempHero = heros[j];
                heros[j] = heros[j + 1];
                heros[j + 1] = tempHero;
            }
        }
    }
}

void printHero(struct hero heros[],int length) 
{
    for (size_t i = 0; i < length; i++)
    {
        cout << "姓名:" << heros[i].name << "\t年龄:" << heros[i].age 
            << "\t性别:" << heros[i].sex << endl;
    }
}

void mainx() {
    struct hero heros[5] = {
        {"刘备",23,"男"},
        {"关羽",22,"男"},
        {"张飞",20,"男"},
        {"赵云",21,"男"},
        {"貂蝉",19,"女"}
    };
    bubble(heros,5);
    printHero(heros, 5);

    system("pause");
}

总结:

  • 在做案例1的时候,我发现一个小bug。那就是在程序退出的时候会抛出异常。但是新建一个解决方案用一摸一样的代码,程序退出就没问题。(有异常的程序同样的代码多占用几KB 内存)

file

  • 关于数组冒泡排序的问题。总感觉和java 的不一样。但是说不上来。(大概是引用类型值拷贝的问题,还是地址指向的问题)
  • 对于结构体数组,参数可以是指针,也可以是数组。我测试过,传入 struct teacher * teacher 或者 struct teacher teacher[] 没发现有什么特殊的。甚至 -> 访问符都不能加,只能用 .
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇