【c语言程序设计】结构体

合集下载

C语言程序设计(李圣良)章 (7)

C语言程序设计(李圣良)章 (7)

一般形式如下:
struct
{
成员列表;
}变量名列表;
例如,可以直接定义结构体变量st1、st2:
struct
{
char id[9];
/* 学号 */
char name[10];
/* 姓名 */
char sex;
/* 性别 */
int age;
/* 年龄 */
float score;
/* 成绩 */
}st1,st2;
型变量x和y表示点的x坐标和y坐标。
# include <stdio.h>
# include <math.h>
struct point
/* 点 */
{ float x;
/* x坐标 */
float y; /* y坐标 */
};
main()
第7nt p1;
float l;
采用定义变量的方式来定义数据成员。
第7单元 结构体和共用体 (4) 结构体类型定义必须以分号结束。 例如,根据图7-1的分析可以设计结构体类型如下:
struct student
{
char id[9];
char name[10];
char sex;
int age;
float score;
};
/* 学号 */ /* 姓名 */
\n",tomor.year,tomor.month,tomor.day); }
第7单元 结构体和共用体 图7-3 例7-1程序运行结果
第7单元 结构体和共用体 3. 结构体变量的初始化 在结构体变量定义的同时可以为其整体赋初值,方法与数
组的初始化相似,将各个数据成员的值按声明类型时的顺序依 次排列,使用逗号间隔,全部放在大括号中,整体赋值给变量。 例如:

台州学院C语言程序设计课件——结构体

台州学院C语言程序设计课件——结构体

例: struct Grade_Info { int score; struct Grade_Info *next; }; typedef struct Grade_Info NODE; NODE;
2、线性链表的基本操作 基本操作有:创建、插入、删除、输出和销毁等 基本操作有:创建、插入、删除、输出和销毁等。 链表的创建操作 含义:从无到有地建立起一个链表, 含义:从无到有地建立起一个链表,即往空链表中依次 插入若干结点,并保持结点之间的前驱和后继关系。 插入若干结点,并保持结点之间的前驱和后继关系。 基本思想:首先创建一个头节点,让头指针head和尾指 基本思想:首先创建一个头节点,让头指针head和尾指 tail都指向该节点 并设置该节点的指针域为NULL( 都指向该节点, 针tail都指向该节点,并设置该节点的指针域为NULL(链尾 标志);然后为实际数据创建一个节点,用指针pnew指向它 );然后为实际数据创建一个节点 指向它, 标志);然后为实际数据创建一个节点,用指针pnew指向它, 并将实际数据放在该节点的数据域,其指针域置为NULL; 并将实际数据放在该节点的数据域,其指针域置为NULL;最 后将该节点插入到tail所指向节点的后面 同时使tail指向 所指向节点的后面, 后将该节点插入到tail所指向节点的后面,同时使tail指向 pnew所指向的节点 pnew所指向的节点。 所指向的节点。
以分号; 以分号;结尾
//学号 //学号 //姓名 //姓名 //性别 //性别 //年龄 //年龄 //班级 //班级 //成绩 //成绩
例 2: struct Date { int year; //年 //年 int month; //月 //月 int day; //日 //日 };
2、结构体变量的定义和引用 结构体变量的定义 间接定义法:先定义结构类型,再定义结构变量 间接定义法:先定义结构类型,

[C语言程序设计10+11]结构体p28-文件-编译预处理

[C语言程序设计10+11]结构体p28-文件-编译预处理
6
方法一:
方法二:
struct student { int number; char name[20]; char sex; int age; float score; char addr[30]; }student1,student2;
struct student { int number; char name[20]; char sex; int age; float score; char addr[30]; }; struct student student1,student2;
例如: union date { int i; char ch; float f;}a,b,c;
29
共用体的存储特点
1.同一块内存可以存放不同类型的 数据,但在某一时刻只能存放其中 的一种; 2.共用体变量中起作用的成员是最 后一次存放的成员; 3.共用体变量的地址和它的成员的 地址是同一个地址; 4.共用体变量不能整体被赋值,也 不能给共用体变量赋初值; 5.不能把共用体变量作为函数的参 数进行传递,但可以使用指向共用 体变量的指针作为函数的参数; 6.结构体类型和共用体类型可以嵌 套使用.
8
结构体变量的存储特点
如: struct student { int number; char name[5]; char sex; int age; float score; char addr[10]; }student1,student2;
student1.number [0] ... [4] student1.sex student1.age student1.score student1.addr[0] ... student1.addr[9] student2.number [0] ... [4] student2.sex ...

C语言程序设计 - 结构体和共用体-样本教案

C语言程序设计 - 结构体和共用体-样本教案
2)通过结构指针引用结构成员变量时,++和--运算对结果的影响:
用以下实例来分析:
struct
{int a;
int *s;
}*p;
第一组引用:对成员变量a的引用
++p->a++(p->a)
说明:成员变量a自增加1.
(++p)->a
说明:指针p先移动一个单位,然后引用对应的成员变量a.
注意: p每移动一个单位要移动多少字节?
格式一:先说明结构类型,再单独进行结构变量定义.
例:
struct student
{ char name[12];
char sex;
sturct date birthday;
float sc[4];
};
struct student std,pers[3],*pstd;
说明:这个例子定义了三个结构类型名为student的结构变量:
这种结构类型变量定义的方式与不省略"结构名"的方式相比,不同之处在于:这种格式定义结构变量以后无法再定义此结构类型的其它结构变量,而带有"结构名"的格式则可以.
格式三:使用typedef说明一个结构类型名,再用新类型名定义结构变量.
例:
typedefstruct
{ char name[12];
char sex;
{"Wang wu" , "F",1983, 3, 3,93,83,73,63}
};
有时结构数组长度可以省略,而由初值个数来暗示.
(4)结构变量成员的引用和操作:
1)对结构变量成员的引用和操作:

c语言第10章 结构体

c语言第10章 结构体
第10章 结构体 章
李晓勇
lxyonghn@ 信息与电子工程学院
内容
结构体类型定义
结构体变量的定义 结构体变量的引用 结构体变量的初始化 结构数组 结构体和指针 结构体与函数 链表
C语言程序设计 - c语言第8章 结构体 语言第8
2
一, 结构体类型定义 结构体是一种构造数据类型 结构体是一种构造数据类型 用途:把不同类型的数据组合成一个整体-------自定义数据 用途:把不同类型的数据组合成一个整体 自定义数据 类型 结构体类型定义 struct [结构体名 结构体名] 结构体名 { 成员名; 类型标识符 成员名; 类型标识符 成员名; 成员名; ……………. }; ;
num 间接定义法 struct student { int num; char name[20]; char sex; int age; }; struct student stu[2]; 25B name sex age num name sex age stu[1] stu[0]
C语言程序设计 - c语言第8章 结构体 语言第8
C语言程序设计 - c语言第8章 结构体 语言第8
13
六, 结构体和指针
指向结构体变量的指针
定义形式: 结构体指针名; 定义形式:struct 结构体名 *结构体指针名 结构体指针名
例 struct student *p; 使用结构体指针变量引用成员形式 struct (*结构体指针名 成员名 结构体指针名).成员名 结构体指针名->成员名 结构体变量名.成员名 结构体指针名 student 结构体指针名 p成员名 结构体变量名 成员名 num { int num; name char name[20]; stu sex char sex; 例 int n; struct student stu1; int *p=&n; int age; age struct student *p=&stu1; *p=10; }; n=10 stu1.num=101; (*p).num=101 struct student stu ,*p=&stu; p->num=101

C语言第9章结构体、共用体、枚举

C语言第9章结构体、共用体、枚举

结构体变量.成员
struct date { int year;
int month; int day;
“.”是成员运算符, 优先级最高
printf("%d,%d,%d",birth);
printf("%d,%d,%d",birth.year,
}; struct date birth;
birth.month,birth.day);
scanf("%f",&student2.score[2])7; 8
student2
结构变量的整体赋值 student3 = student2;
02 Zhang Zi Liang 88 78
student3
02 Zhang Zi Liang 88 78
湖南工业大学计算机与通信学院
例9-1学生的基本信息包括学号、姓名、3门成绩、平均分、总分。输入一 个学生的前3项基本信息,计算平均分和总分并输出。
湖南工业大学计算机与通信学院
9.1 问题的提出
又如,在学生信息管理系统中填 加个属性:是否是中共党员,如 果不是属性的值为0(int),如
果是属性的值为入党的时间 (char)。在某一时间,属性只有 一种值,而且数据类型不同,这 种情况用什么数据类型描述呢?
对于这种应用,C语言引入了共用体类型。
共用体是一种同一存储区域由不同类型变量共享的数据 类型,它提供—种方法能在同一存储区中操作不同类型 的数据,也就是说共用体采用的是覆盖存储技术,准许 不同类型数据互相覆盖。
基本数据类型并不能方便地解决所有问题
❖ 复合数据类型是基本数据类型迭代派生而来
典型的代表就是“结构”,数组、指针也可算作此类

C语言_实验九、结构体程序设计

C语言_实验九、结构体程序设计

实验九、结构体程序设计一、实验目的1.掌握结构、结构数组、结构指针的定义及使用;2.掌握简单的链表的定义及使用;3.掌握共用体和枚举类型的定义及使用;4.掌握文件的简单的定义、打开、写、关闭等操作。

二、实验内容1.[题目内容]某考点建立一个考生人员情况登记表、表格内容如下:1)根据上表正确定义该表格内容要求的数据类型。

2)分别输入各成员项数据,并打印输出(为简便,假设有3个考生)编程序,然后上机调试运行程序。

2.[题目内容]某单位进行选举,有5位候选人:zhang、wang、li、zhao、liu。

编写一个统计每人得票数的程序。

要求每个人的信息使用一个结构体表示,5个人的信息使用结构体数组。

3.[题目内容]设张三20岁、李四22岁、王平23岁,编程输出3人中年龄最小者的姓名和年龄。

4.[题目内容]定义一个学生成绩结构体类型,包含“学号”、“姓名”、“性别”、“年龄”、“班级”、“英语”、“数学”、“物理”、“总分”、“名次”等信息。

编写6个函数分别用于:(1)使用结构体数组,输入全班10名学生的上述信息;(2)计算每一个学生的总分、平均分;(3)计算每一门课程的平均分;(4)查找成绩有不及格的学生信息;(5)按学生成绩总分降序排序;(6)输出全班学生的学号、总分及名次。

5.[题目内容]利用上一题的结构类型,创建包含10个结点的无序链表。

编写5个函数分别实现下述功能(参考前面第三部分内容):(1)显示链表;(2)添加结点;(3)删除结点;(4)计算每位学生的总分;(5)按英语成绩排序。

三、课后作业(写实验报告)1.学生成绩管理:有5个学生,每个学生的数据包括学号、班级、姓名、三门课成绩。

从键盘输入5个学生数据,要求打印出每个学生三门课的平均成绩,以及每门课程平均分、最高分学生数据(包括学号、班级、姓名、三门课成绩,平均分)。

(1)定义学生结构体。

(2)用一个函数实现5个学生数据的输入,用另一个函数负责求每个学生三门课程的平均成绩,再用一个函数求出平均分最高的学生并输出该学生的数据。

c语言结构体知识点总结

c语言结构体知识点总结

c语言结构体知识点总结一、C语言结构体知识点总结1、什么是结构体结构体是一种自定义的类型,由多种类型的数据组成,即一种数据类型可以由多种数据类型组成,这样便可以用于描述各种复杂的数据结构。

2、结构体语法结构体的声明语句:struct 结构体名{数据类型1 成员1;数据类型2 成员2;数据类型n 成员n;};3、结构体指针结构体指针是一种指向结构体的指针,用于存储结构体地址,即把结构体的地址存储在指针变量中,可以用来访问结构体中的成员变量。

结构体指针的声明语句:struct 结构体名 *指针名;其中,“*”号前面的“struct 结构名”的主要作用是指定指针指向的数据类型,也就是说它指定了指针使用的结构体类型,而“*”表明它是一个指针变量。

4、结构体成员的访问当我们定义完一个结构体后,如果要访问结构体的成员,也就是获取结构体中成员变量的值,可以使用如下语句:将结构体变量名作为结构体,将成员变量名作为结构体中成员变量的访问方式。

比如:结构体名.成员名5、结构体数组在C语言中,也可以定义结构体数组,即一个由结构体组成的数组,结构体数组的声明语句如下:struct 结构体名数组名[数组大小];6、结构体内嵌结构体C语言支持在结构体中定义其他结构体,比如可以定义在一个结构体中定义另外一个结构体;也可以定义一个指向另外一个结构体的指针,即一个结构体可以包含多个结构体。

7、结构体的大小结构体大小指结构体中非空成员的总字节数,其大小由结构体中最大字节数成员决定,有些编译器会对字节进行对齐,即把结构体大小调整为4或8的倍数,从而提升C语言程序的运行效率。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第一章CH9 结构体9.1 选择题
1.若有以下说明语句:
struct student
{ int num;
char name[ ];
float score;
}stu;
则下面的叙述不正确的是: ( D )
A. struct是结构体类型的关键字
B. struct student 是用户定义的结构体类型
C. num, score都是结构体成员名
D. stu是用户定义的结构体类型名
2.若有以下说明语句:
struct date
{ int year;
int month;
int day;
}brithday;
则下面的叙述不正确的是__C___.
A) struct是声明结构体类型时用的关键字
B) struct date 是用户定义的结构体类型名
C) brithday是用户定义的结构体类型名
D) year,day 都是结构体成员名
3.以下对结构变量stul中成员age的非法引用是B
struct student
{ int age;
int num;
}stu1,*p;
p=&stu1;
A) stu1.age B) student.age C) p->age D) (*p).age
4.设有以下说明语句:
typedef struct stu
{ int a;
float b;
} stutype;
则下面叙述中错误的是(D)。

A、struct是结构类型的关键字
B、struct stu是用户定义的结构类型
C、a和b都是结构成员名
D、stutype是用户定义的结构体变量名
5.设有以下定义,值为5的枚举常量是()。

enum week{sun,mon=4,tue,wed,thu,fri,sat} w;
A tue
B sat
C fri
D thu
6.设有如下定义:
struct sk
{int a;float b;}data,*p;
若有p=&data;,则对data中的a域的正确引用是(B)。

A)(*p).data.a B)(*p).a C)p->data.a D)p.data.a
7.根据以下定义,能输出字母M的语句是(D)。

A、printf(“%c\n”,class[3].name)
B、printf(“%c\n”,class[3].name[1]);
C、printf(“%c\n”,class[2].name[1])
D、printf(“%c\n”,class[2].name[0]);
struct person{char name[9];int age;};
struct person class[10]={“John”,17,”Paul”,19,”Mary”,18,”Adam”,16,};
8.以下程序的输出结果是(D)。

A、0
B、1
C、3
D、6
#include<stdio.h>
void main()
{
struct emplx{int x;int y;}enum[2]={1,3,2,7};
printf(“%d\n”,enum[0].y/enum[0].x*enum[1].x);
}
9.若有以下说明及语句,则值为6的表达式是(D)。

A、p++->n
B、p->n++
C、(*p).n++
D、++p->n
struct st{int n;struct st *next;};
struct st a[3],*p;
a[0].n=5;a[0].next=&a[1];a[1].n=7;a[1].next=&a[2];
a[2].n=9;a[2].next=’\0’;p=&a[0];
10.已知字符0的ASCII码的十进制的值是48,且数组的第0个元素在低位,以下程序的输出结果是(B)。

A、39
B、9
C、38
D、8
void main()
{
union{int i[2];long k;char c[4];}r,*s=&r;
s->i[0]=0x39;s->i[1]=0x38;
printf(“%x\n”,s->c[0]);
}
11.以下程序输出的结果是(C)。

A、32
B、16
C、8
D、24 typedef union{long x[2];int y[4];char z[8];}MYTYPE;
MYTYPE them;
void main()
{
printf(“%d\n”,sizeof(them));
}
12.设有以下语句
typedef struct S
{ int g; char h;} T;
则下面叙述中正确的是(B)。

A) 可用S定义结构体变量
B)可以用T定义结构体变量
C)S是struct类型的变量
D)T是struct S类型的变量
13.有以下说明和定义语句
struct student
{ int age; char num[8];};
struct student stu[3]={{20,"200401"},{21,"200402"},{10\9,"200403"}}; struct student *p=stu;
以下选项中引用结构体变量成员的表达式错误的是(D)。

A) (p++)->num B) p->num
C) (*p).num D) stu[3].age
9.2 读程序
1.有如下程序
#include<stdio.h>
struct st
{ int x;
int y;
} a[2]={5, 7, 2, 9} ;
main()
{
printf("%d\n",a[0].y*a [1].x);
运行结果是:
14
首先是定义结构体st,st中共有两个整型成员x,y。

然后定义一个st类型的数组a,a的长度为2,即数组中含有两个st类型的元素,分别是a[0]和a[1]. 对a进行初始化,此题是按照储存顺序进行初始化,即将5赋给a[0]中的x(即a[0].x=5); 将7赋给a[0]中的y(即a[0].y=7); 将2赋给a[1]中的x(即a[1].x=2); 将9赋给a[1]中的y(即a[1].y=9);
执行main函数,输出表达式a[0].y*a [1].x的值,即7*2的值
5 a[0].x a[0]
7 a[0].y
2 a[1].x a[1]
9a[1].y
2.有如下程序
#include<stdio.h>
main( )
{struct stu
{int num;
char a[5];
float score;
}m={1234,”wang”,89.5};
printf(“%d,%s,%f”,m.num,m.a,m.score);
}
运行结果是:
1234,wang,89.5
3.有如下程序
#include<stdio.h>
struct cmplx
{ int x;
int y;
} cnum[2]={1, 3, 2, 7};
main( )
{
printf(“%d\n”, cnum[0].y * cnum[1].x );
}
运行结果是:6
与第一题解法同
4.有如下程序
#include <stdio.h>
struct abc
{ int a, b, c; };
main()
{ struct abc s[2]={{1,2,3},{4,5,6}}; int t;
t=s[0].a+s[1].b;
printf("%d \n",t);
}
运行结果是:6。

相关文档
最新文档