C语言----自定义类型(高阶篇三十)

 

  typedef自定义类型

    格式:

      typedef  新类型名

    如:

 

      typedef  int  INTEGER;

 

      typedef  float  REAL;

    定义之后就可以用新的类型定义变量:

      INTEGER  i;

 

 

    typedef还有更复杂的用法,比如用它去定义一个数组名,再用这个数组名去定义变量:

      typedef  int  ARR[100];

      ARR  a,b,c;

    这个定义相当于int a[100],b[100],c[100];

 

    实际上,typedef的定义不像想象中这么简单,下面就归纳下它的定义方法:

      (1)先按定义变量的方法写出定义体(如:int  i)

 

      (2)将变量名换成新类型名(如:将i换成COUNT)

 

      (3)在前面加typedef(如:typedef  int  COUNT)

      (4)然后可以用新类型名去定义变量。

    

    再以定义上述的数组类型为例来说明:

      (1)先按定义数组变量形式书写:int n[100];

      (2)将变量名n换成自己指定的类型名:int ARR[100];

      (3)在前面加上typedef,得到typedef int ARR[100];

      (4)用来定义变量ARR a;

 

    注意:

      ※typedef只能定义各种类型,但它不能定义变量。

 

    ※C语言没有字符串类型,可以用typedef自己定义一个字符串类型:

      typedef  char  STRING[100];

      STRING Str;

      Str就是个字符串,比使用char  Str[100];来定义字符串要直观的多。

  结构与自定义类型

    第一种:定义结构,同时定义一个结构变量stu,当然也可以同时给它的成员进行初始化。注意这个结构定义时没有结构类型名,因此这个结构只定义了一次变量stu,就再也不起作用了。因为你不知道再用什么方式引用它。

      struct

      {

        ...

      }stu;

 

    第二种:定义结构时顺便定义一些变量或同类型数组。

      struct student

      {

        ...

      }stu, stuarray[5];

      这种变量定义可分解为:

        struct student stu,stuarray[5];

      省掉中间的花括号,就是它的定义形式。

 

    同样,使用typedef可以将结构后面定义的变量提升成类型:

      typedef struct student

      {

        char name[9];

        int age;

      }STU,STUARRAY[5];

    参照typedef的定义逻辑,以后用STU  stu就相当于struct student stu;用STUARRAY stuarray就相当于struct student stuarray[5]。

 

    程序1

      用typedef定义结构类型

// 30-1用typedef定义结构类型.c。


#include <stdio.h>

//自定义结构类型 STU STUARRY
typedef    struct student
{
    char name[9];
    int age;
}STU,STUARRY[3];     //定义了两个类型


main()
{
    STU stu;
    STUARRY stuarry;  //三个元素的组成的结构数组

    scanf("%s%d",stu.name,&stu.age);
    printf("姓名:%s 年龄:%d\n\n\n", stu.name, stu.age);


    scanf("%s%d",stuarry[0].name,&stuarry[0].age);
    scanf("%s%d", stuarry[1].name, &stuarry[1].age);
    scanf("%s%d", stuarry[2].name, &stuarry[2].age);

    printf("数组元素0的姓名%s 年龄%d\n",stuarry[0].name,stuarry[0].age);
    printf("数组元素1的姓名%s 年龄%d\n", stuarry[1].name, stuarry[1].age);
    printf("数组元素2的姓名%s 年龄%d\n", stuarry[2].name, stuarry[2].age);

}

  练习

    将“结构与自定义类型”小节定义的STU和STUARRAY两种类型用到实处(比如从5个学生中找出成绩最好的学生)。

// 30-2用typedef定义结构类型并应用.c


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

//定义学生结构
typedef struct student 
{
    char name[10];
    int age;
    float grade;
}STU[5];


main()
{
    STU stu;   //定义5个元素的结构数组
    float maxgrade = 0;   //成绩最好的学生中间变量
    int max;   //最好学生的下标
    srand((unsigned)time(NULL));   //随件函数

    for (int i = 0; i < 5; i++)
    {
        itoa(i, stu[i].name, 10);  // 将 i 整型转换成字符串类型
        strcat(stu[i].name, "stu"); // 赋值学生名字
        stu[i].age = rand() % 3 +15;  //学生年龄 15 到 17之间
        stu[i].grade = rand()/(double)(RAND_MAX/20)+80;  //学生成绩 80 - 100 分浮点数
    }


    for (int i = 0; i < 5; i++)
    {
        printf("姓名:%s 年龄:%d 成绩:%.1f\n",stu[i].name,stu[i].age,stu[i].grade);  //输出生成值

        if (maxgrade < stu[i].grade)   //作比较
        {
            maxgrade = stu[i].grade; //分数比较
            max = i;    //赋值分数高的同学下标
        }
    }
    printf("\n\n\n成绩最好的学生姓名:%s 年龄:%d 成绩:%.1f\n", stu[max].name, stu[max].age, stu[max].grade);
}

 

posted @ 2021-11-05 09:36  httpcc  阅读(337)  评论(0编辑  收藏  举报