欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

C语言程序设计(第8章建立数据类型)

时间:2023-04-29
C语言程序设计(第8章 建立数据类型) 一、定义和使用结构体变量 1、自己建立结构体类型 C语言允许用户自己建立由不同类型类型数据组成的组合型的数据结构,它称为结构体 numbernamesexagescoreaddr10010luxinanM1987.5Beijing如果程序中要用该表格所表示的数据结构,可以在程序中自己建立一个结构体类型

struct Student{int number;//学号为整型char name[20];//姓名为字符串char sex;//性别为字符型int age;//年龄为整型float score;//成绩为实型char addr[30];//地址为字符串}

上面程序指定了一个结构体类型struct Student(struct是声明结构体类型时必须使用的关键字,不能省略),声明一个结构体类型的一般形式为:

struct 结构体{成员表列};

花括号内是该结构体所包括的子项,称为结构体的成员,上述的number,name,sex等都是成员。对各成员都应进行类型声明,即

类型名 成员名;

成员可以属于另一个结构体类型,例如:

struct Date{//声明一个结构体类型struct Dateint month;//月int day;//日int year//年}struct Student{int num;char name[20];char sex;int age;struct Date birthday;//成员birthday属于struct Date类型char addr[30];}

2、定义结构体类型变量 (1)先声明结构体类型,再定义该类型变量

struct Student student1,student2;结构体类型名 两个结构体变量名

这种形式和定义其他类型的变量形式(如, int a,b;)是相似的。上面定义了student1和student2为struct Student类型的变量,这样student1 和 student2 就具有struct Student类型的结构。

(2)在声明类型的同时定义变量 例如:

struct Student{int num;char name[20];char sex;int age;float score;char addr[30];} student1,student2;

它的作用与第一种方法相同,但是定义struct Student 类型的同时定义两个struct Student 类型的变量student1 和 student2,这种定义方法的一般形式为

struct 结构体名{成员表列}变量名表列;

(3)不指定类型名而直接定义结构体类型变量

其一般形式为

struct{成员表列}变量表列;

3、结构体变量的初始化和引用

在定义结构体变量时,可以对它初始化,即赋予初始值。然后可以引用这个变量,例如输出它的成员的值。

例题1:把一个学生的信息(包括学号、姓名、性别、住址)放在一个结构体变量中,然后输出这个学生的信息。

#include int main(){ struct Student{ long int num; char name[20]; char sex; char addr[20]; } a={10101,"Lu",'M',"Beijing"}; printf("NO.:%1dnname:%snsex:%cnaddr:%sn",a.num,a.name,a.sex,a.addr); return 0;}运行结果:NO.:10101name:Lusex:Maddr:Beijing

(1)C99标准允许对某一成员初始化,如:

struct Student b={.name="Zhang san"};

".name"隐含代表结构体变量b的成员b.name。其他未被指定初始化的数值型成员被系统初始化为0,字符型成员被系统初始化为’’,指针型成员被系统初始化为NULL。

(2)可以引用结构体变量中的成员的值,引用方式为

结构体变量名.成员名在程序中可以对变量的成员赋值,例如:student1.num=10010;

(3)如果成员本身又属一个结构体类型,则要用若干个成员运算符,一级一级地找到低的一级的成员。只能对最低级的成员进行赋值或存取以及运算。如果在结构体struct Student类型的成员中包含另一个结构体struct date类型的成员birthday,则引用成员的方法为

student1.num//结构体变量student1中的成员numstudent1.birthday.mounth//结构体变量student1中的成员birthday中的成员month

不能用student1.birthday来访问student1变量中的成员birthday,因为birthday本身是一个结构体成员。

(4)对结构体变量的成员可以像普通变量一样进行各种运算(根据其类型决定可以进行的运算)。例如

student2.score=student1.score;//赋值运算sum=student1.score+student2.score;//加法运算student1.age++;//自加运算

(5)同类的结构体变量可以互相赋值,如:

student1=student2;

(6)可以引用结构体变量成员的地址,也可以引用结构体变量的地址。例如:

scanf("%d",&student1.score);//输入student1.score的值printf("%o",&student1);//输出结构体变量student1的起始地址

例题2:输入两个学生的学号、姓名和成绩,输出成绩较高的学生的学号、姓名和成绩。

#include int main(){ struct Student{ int num; char name[20]; float score; }student1,student2; scanf("%d%s%f",&student1.num,&student1.name,&student1.score); scanf("%d%s%f",&student2.num,&student2.name,&student2.score); printf("The higher score is:n"); if(student1.score>student2.score){ printf("%d %s %6.2f",student1.num,student1.name,student1.score); } else if(student2.score>student1.score){ printf("%d %s %6.2f",student2.num,student2.name,student2.score); } else{ printf("%d %s %6.2f",student1.num,student1.name,student1.score); printf("%d %s %6.2f",student2.num,student2.name,student2.score); } return 0;}运行结果:输入: 01 zhangsan 89.102 lisi 90输出:2 lisi 90.00

二、使用结构体数组 例题3:有三个候选人,每个选民只能投票选一人,要求编一个统计选票的程序,先后输入候选人的名字,最后输出各人得票结果。

#include #include struct Person{ char name[20]; int count;}leader[3]={"zhangsan",0,"lisi",0,"wangwu",0};int main(){ int i,j; char leader_name[20]; for(i=1;i<=10;i++){ scanf("%s",leader_name); for(j=0;j<3;j++){ if(strcmp(leader_name,leader[j].name)==0) leader[j].count++; //strcmp在c语言中的意思是string compare的缩写,用于比较两个字符串并根据比较结果返回整数,基本形式为strcmp(str1,str2),若【str1=str2】,则返回零,若【str1 } } printf("nResult:n"); for(i=0;i<3;i++){ printf("%5s:%dn",leader[i].name,leader[i].count); } return 0;}运行结果:输入:zhangsanlisiwangwuwangwuzhangsanlisilisilisizhangsanzhangsan 输出:Result:zhangsan:4 lisi:4wangwu:2

(1)定义结构体数组的一般形式:

1.struct 结构体名{成员表列} 数组名[数组长度];2.先声明一个结构体类型(如 struct Person),然后再用此类型定义结构体数组:结构体类型数组名[数组长度];如:struct Person leader[3];

(2)对结构体数组初始化的形式是在定义数组的后面加上:

={初值表列};struct Person leader[3]={"zhangsan",0,"lisi",0,"wangwu",0};

例题4:有n个学生的信息(包括学号、姓名、成绩),要求按照成绩的高低顺序输出各学生的信息

#include struct Student{ int num; char name[20]; float score;};int main(){ struct Student stu[5]={{1001,"zhangsan",87.5},{1002,"lisi",97.3},{1003,"wangwu",78.4},{1004,"zhaoliu",98.3},{1005,"liuqi",69.5}}; struct Student temp; const int n=5; int i,j,k; printf("The order is:n"); for(i=0;istu[k].score) k=j; } temp=stu[k];stu[k]=stu[i];stu[i]=temp; } for(i=0;i

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。