zoukankan      html  css  js  c++  java
  • C++程序设计之结构体,共用体,枚举和typedef

    【1】结构体的基本功

      注意结构体里面可以有很多东西,可以结构体里面包含结构体

    #include<iostream>
    using namespace std;
    struct Date
    {
            int month;
            int day;
            int year;
    };
    
    struct Student
    {
            int num;
            char name[20];
            char sex;
            Date birthday;
            float score;
    }student1,student2= {1002,"wangli",'f',5,23,1982,89.5};
    
    int main()
    {
            student1 = student2;
            cout<<student1.num<<endl;
            cout<<student1.name<<endl;
            cout<<student1.sex<<endl;
            cout<<student1.birthday.month<<endl;
            cout <<student1.birthday.year<<endl;
            cout<<student1.score<<endl;
            return 0;
    }
    View Code

    【2】结构体数组的应用

    例7.2 对候选人得票的统计程序。设有3个候选人,
    最终只能有1人当选为领导。今有10个人参加投
    票,从键盘先后输入这10个人所投的候选人的名
    字,要求最后输出这3个候选人的得票结果。

    #include<iostream>
    #include<string.h>
    using namespace std;
    struct Person
    {
            char name[20];
            int count;
    };
    int main()
    {
            Person leader[3] = {"li",0,"zhang",0,"fun",0};
            int i,j;
            char leader_name[20];
            for(i = 0;i<10;i++)
            {
                    cin>>leader_name;
                    for(j=0;j<3;j++)
                    {
                            if(strcmp(leader_name,leader[j].name)==0)
                                    leader[j].count++;
                    }
                    cout<<endl;
            }
            for(i=0;i<3;i++)
            {
                    cout<<leader[i].name<<":"<<leader[i].count<<endl;
            }
            return 0;
    }
    View Code

    用7.1.7 动态分配和撤销内存的运算符new delete

    #include<iostream>
    #include<string>
    using namespace std;
    
    struct Student
    {
            string name;
            int num;
            char sex;
    };
    
    int main()
    {
            Student *p;
            p = new Student;//用new开辟一个存放Student型的数据空间
            p->name = "wang Fun";
            p->num = 10123;
            p->sex = 'm';
    
            cout<<p->name<<endl<<p->num<<endl<<p->sex<<endl;
            delete p;//撤销该空间
            return 0;
    }
    View Code

    【3】共用体的几个特点:

      (1) 使用共用体变量的目的是希望用同一个内存段  
      存放几种不同类型的数据。但请注意: 在每一瞬
      时只能存放其中一种,而不是同时存放几种。
      (2) 能够访问的是共用体变量中最后一次被赋值的
      成员,在对一个新的成员赋值后原有的成员就失去
      作用。
      (3) 共用体变量的地址和它的各成员的地址都是同  
      一地址。
      (4) 不能对共用体变量名赋值;不能企图引用变量
      名来得到一个值;不能在定义共用体变量时对它初
      始化;不能用共用体变量名作为函数参数。

      例7.7 设有若干个人员的数据,其中有学生和教师。
      学生的数据中包括: 姓名、号码、性别、职业、
      年级。教师的数据包括: 姓名、号码、性别、职
      业、职务。可以看出,学生和教师所包含的数据是
      不同的。现要求把它们放在同一表格中,见图7.13

    #include<iostream>
    #include<string>
    #include<iomanip>
    using namespace std;
    
    struct
    {
            int num;
            char name[10];
            char sex;
            char job;
            union P
            {
                    int grade;
                    char position[10];
            }category;
    
    }person[2];
    
    int main()
    {
            int i;
            for(i=0;i<2;i++)
            {
                    cin>> person[i].num>>person[i].name>>person[i].sex>>person[i].job;
                    if(person[i].job == 's')
                            {
                                    cin>>person[i].category.grade;
                            }
                    else
                            {
                                    cin>>person[i].category.position;
                            }
            }
    
            cout<<endl<<"NO. name sex job grade/person"<<endl;
    
    
            for(i =0;i<2;i++)
            {
                    if(person[i].job == 's')
                    {
                    cout<< person[i].num<<setw(6)<<person[i].name<<"  "<<person[i].sex<<"  "<<person[i].job<<setw(10)<<person[i].category.grade<<endl;
    
                    }
     else
                    {
                    cout<<person[i].num<<setw(6)<<person[i].name<<"  "<<person[i].sex<<"  "<<person[i].job<<setw(10)<<person[i].category.position<<endl;
                    }
            }
    
    
            return 0;
    }
                                                                                                                                          
    View Code

    【4】typedef的使用规则

      (1) typedef
      typedef可以声明各种类型名,但不能用来定义
      typedef变量。用typedef可以声明数组类型、字符串类型,
      使用比较方便。
      (2) 用typedef只是对已经存在的类型增加一个类型
      名,而没有创造新的类型。
      (3) 当在不同源文件中用到同一类型数据(尤其是  
      像数组、指针、结构体、共用体等类型数据)时,
      常用typedef声明一些数据类型,把它们单独放在一
      个头文件中,然后在需要用到它们的文件中用#
      include命令把它们包含进来,以提高编程效率。
      (4) 使用typedef有利于程序的通用与移植。有时程
      序会依赖于硬件特性,用typedef便于移植



  • 相关阅读:
    hdu 5224 Tom and paper 水题
    2015 UESTC 搜索专题N题 韩爷的梦 hash
    2015 UESTC 搜索专题M题 Palindromic String 马拉车算法
    2015 UESTC 搜索专题K题 秋实大哥の恋爱物语 kmp
    2015 UESTC 搜索专题J题 全都是秋实大哥 kmp
    2015 UESTC 搜索专题F题 Eight Puzzle 爆搜
    2015 UESTC 搜索专题E题 吴队长征婚 爆搜
    2015 UESTC 搜索专题D题 基爷的中位数 二分
    2015 UESTC 搜索专题C题 基爷与加法等式 爆搜DFS
    2015 UESTC 搜索专题B题 邱老师降临小行星 记忆化搜索
  • 原文地址:https://www.cnblogs.com/fengdashen/p/3885417.html
Copyright © 2011-2022 走看看