当前位置:   article > 正文

结构体:const + 两个案例_const 结构体

const 结构体

p69 :结构体中const使用场景

1.用const来防止误操作。

2.为了节省空间,选择了地址传递,但地址传递有可能导致被修改,所以加入了const

3.将函数中的形参改为指针,可以减少内存空间,而且不会复制新的副本出来。

  1. void printstudent1( const student * s1)
  2. {
  3. s1->age = 22;
  4. //报错:表达式必须是可修改的左值
  5. //使用const以后不能再函数内修改
  6. cout << "在void函数中打印:" << endl;
  7. cout << "学生姓名:" << s1->name << " " << "学生年龄:" << s1->age << " " << "学号:" << s1->id << endl;
  8. }
  1. //完整代码
  2. //学生结构体定义
  3. struct student
  4. {
  5. //成员列表
  6. string name; //姓名
  7. int age; //年龄
  8. int score; //分数
  9. };
  10. //const使用场景
  11. void printStudent(const student *stu) //加const防止函数体中的误操作
  12. {
  13. //stu->age = 100; //操作失败,因为加了const修饰
  14. cout << "姓名:" << stu->name << " 年龄:" << stu->age << " 分数:" << stu->score << endl;
  15. }
  16. int main() {
  17. student stu = { "张三",18,100 };
  18. printStudent(&stu);
  19. system("pause");
  20. return 0;
  21. }

p70:结构体案例1

案例描述:

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

设计学生和老师的结构体,其中在老师的结构体中,有老师姓名和一个存放5名学生的数组作为成员,学生的成员有姓名,考试分数,创建数组存放三名老师,通过函数给每个老师所带的学生复制,最终打印出老师数据以及老师所带的学生数据。

①通过结构嵌套,如何赋值嵌套数组和主数组中的元素,并访问

②用给字符串student_(abcde)循环赋值

生成随机数的思想

④按照结构一步一步来

  1. #include<iostream>
  2. using namespace std;
  3. #include<string>
  4. #include<ctime>
  5. struct student //创建嵌套结构体(学生)
  6. {
  7. string Sname;
  8. int score;
  9. };
  10. struct teacher //创建老师结构体
  11. {
  12. string tname;
  13. struct student Sarr[5]; //嵌套学生的结构体数组
  14. };
  15. void fuzhi_information(struct teacher Tarr[], int len)
  16. { //通过函数进行赋值
  17. string pname[3] = { "老王","老李","老张" }; //这里自己改装了一下
  18. string hname = "ABCDE";
  19. for (int i = 0; i < len; i++)
  20. {
  21. Tarr[i].tname = "Teacher_";
  22. Tarr[i].tname += pname[i]; //这个是技巧(移动下标)
  23. for (int j = 0; j < 5; j++)
  24. {
  25. Tarr[i].Sarr[j].Sname = "student_";
  26. Tarr[i].Sarr[j].Sname += hname[j];
  27. //随机生成学生的成绩
  28. int random = rand() % 61 + 40;
  29. Tarr[i].Sarr[j].score =random;
  30. }
  31. }
  32. }
  33. void printinformation(struct teacher Tarr[], int len)
  34. {
  35. for (int i = 0; i < len; i++)
  36. { // \t的应用
  37. cout << "\t老师姓名:" << Tarr[i].tname << endl;
  38. for (int j = 0; j < 5; j++)
  39. {
  40. cout << "学生姓名:" << Tarr[i].Sarr[j].Sname <<
  41. " 考试成绩:" << Tarr[i].Sarr[j].score << endl;
  42. }
  43. }
  44. }
  45. int main()
  46. {
  47. //在主函数中定义随机数种子
  48. srand((unsigned int)time(NULL));
  49. //创建老师的结构体数组
  50. struct teacher Tarr[3];
  51. int len = sizeof(Tarr) / sizeof(Tarr[0]);
  52. //通过函数给3位老师信息赋值,并给老师带的学生信息赋值
  53. fuzhi_information(Tarr, len);
  54. printinformation(Tarr, len);
  55. //通过打印所有老师及所带学生的信息
  56. return 0;
  57. }

p71:结构体案例2

案例:设计一个英雄的结构体,包括成员姓名,年龄,性别;创建结构体数组,
数组中存放五个英雄,通过冒泡排序的算法,将数组中的英雄按照年龄进行升序排序
最终打印排序后的结果。

代码部分:

  1. #include<iostream>
  2. using namespace std;
  3. #include<string>
  4. //1创建结构体
  5. struct Hero
  6. {
  7. string name;
  8. int age;
  9. string sex;
  10. };
  11. //2.使用冒泡排序升序
  12. void Heropaopao(struct Hero heroarray[], int len)
  13. {
  14. for (int i = 0; i < len - 1; i++)
  15. {
  16. for (int j = 0; j < len - 1 - i; j++)
  17. {
  18. if (heroarray[j].age > heroarray[j + 1].age)
  19. {
  20. Hero temp = heroarray[j];
  21. heroarray[j] = heroarray[j + 1];
  22. heroarray[j + 1] = temp;
  23. }
  24. }
  25. }
  26. }
  27. int main()
  28. {
  29. //创建结构体数组
  30. struct Hero heroarray[5] =
  31. {
  32. {"刘备",23,"男"},
  33. {"关羽",22,"男"},
  34. {"张飞",20,"男"},
  35. {"赵云",21,"男"},
  36. {"貂蝉",2000,"女"},
  37. };
  38. //排序前输出一次
  39. cout << "使用升序前输出一次" << endl;
  40. int len = sizeof(heroarray) / sizeof(heroarray[0]);
  41. for (int i = 0; i < len; i++)
  42. {
  43. cout << "姓名:" << heroarray[i].name << " "
  44. << "年龄:" << heroarray[i].age << " "
  45. << "性别:" << heroarray[i].sex << endl;
  46. }
  47. //创建冒泡排序函数
  48. Heropaopao(heroarray, len);
  49. //3.排序后再输出一次
  50. cout << " " << endl;//为了更直观分别出两次的区别
  51. cout << "使用升序后输出一次" << endl;
  52. for (int i = 0; i < len; i++)
  53. {
  54. cout << i + 1 << "号英雄:" << endl;
  55. cout << "姓名:" << heroarray[i].name << " "
  56. << "年龄:" << heroarray[i].age << " "
  57. << "性别:" << heroarray[i].sex << endl;
  58. }
  59. }

主要是应用到了冒泡排序

存在三个问题:

① 先有年龄判断大小再交换数组数据,而不是交换年龄

② 用 Hero temp  而不是 int temp 的区别

③?结构体指针传入形参和实参到底怎么应用 (形参实参到底怎么写?  这个问题比较重要)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/924281
推荐阅读
相关标签
  

闽ICP备14008679号