c语言第9章结构体
C语言数据结构-第9章 结构体共用体与枚举
![C语言数据结构-第9章 结构体共用体与枚举](https://img.taocdn.com/s3/m/56188b6d71fe910ef02df865.png)
"Shang Hai","13901000003"}}; int i; for(i=0;i<3;i++) { printf("%s,%d,%s,%s,",stud[i].name,stud[i].age,stud[i].sex,stud[i].xh); printf("%d,%d,%d,",stud[i].birthday.year,stud[i].birthday.month, stud[i].birthday.day); printf("%s,%s,%s\n",stud[i].nation,stud[i].address,stud[i].tel); } }
成员运算符“.”的优先级最高,在表达式中的结构体变量成员不 需要加括号。例如:
wang.age++;
相当于
(wang.age)++;
注意
13
结构体变量的成员名可以相同,但必须处在不同的层次。 例如:
sturct student { int no;
char name[20]; struct { int no; char classname[20]; }class; struct { int no; char groupname[20]; }group; }wang;
定义结构体类型名的同时定义结构体数组,例如:
struct student{…} stud[50];
C语言 第九章 结构体数据类型期末测试习题与答案
![C语言 第九章 结构体数据类型期末测试习题与答案](https://img.taocdn.com/s3/m/162d4574af45b307e871979f.png)
程序运行后的输出结果是( )。
A.SunDan 20044
B.YangSan 20041
C.SunDan 20042
D.LiSiGuo 20042
参考答案:D
3、以下程序运行的结果是_( )。
#nclude”stdio.h
main()
{
struct date
{
int year , month , day ;
D.struct color
{ int red;
int green;
int blue;
} c l;
参考答案:B
7、有以下程序:
struct stu
{
char[10];
float score[3];
};
main( )
{
struct stu s[3]={{"20021",90,95,85},
{"20022",95,80,75},
} today ;
printf(“%d\n”,sizeof(struct date));
}
A.10
B.6
C.8
D.12
参考答案:D
4、设有如下说明
typedef struct ST
{
long a;
int b;
char c[2];
} NEW;
则下面叙述中正确的是______。
A.ST是一个结构体类型
B.NEW是一个结构体类型
A.typedef struct
{ int red;
int green;
int blue;
} COLOR;
COLOR cl;
B.struct color cl
C语言程序设计 第9章 文件
![C语言程序设计 第9章 文件](https://img.taocdn.com/s3/m/6f0e1843dcccda38376baf1ffc4ffe473368fd01.png)
9.3 文件的顺序读写
❖ 【例9.4】fputs函数和fgets函数的使用。
9.3 文件的顺序读写
❖ 9.3.3 fprintf函数和fscanf函数 ❖ fprintf与fscanf函数为格式读写函数,与printf、scanf类似,fprintf与
fscanf用于从文件中读取指定格式的数据和把指定格式的数据写入文件,这 是按数据格式要求进行文件的输入/输出。其一般形式为: ❖ fscanf(fp,format,args); ❖ fprintf(fp,format,args); ❖ 其中,fp为文件指针,format为格式控制字符串,args为输入或输出的地 址列表。 ❖ 例如,若文件指针fp已指向一个已打开的文件文本,a、b分别为整型变量 ,则以下语句从fp所指向的文件中读入两个整数放入变量a和b中。 ❖ fscanf(fp,”%d%d”,&a,&b); ❖ 又如,若文件指针fp已指向一个已打开的文件文本,x、y分别为整型变量 ,则以下语句将x、y中的数据按%d的格式输出到fp所指向的文件中。 ❖ fprintf(fp,"%d%d",&a,&b);
本章小结
❖ 本章主要介绍了以下内容。 ❖ (1)文件的概念 ❖ 介绍了文件及文件指针的基本概念,以及文件的打开与关闭
函数fopen、fclose等。 ❖ (2)文件的顺序读写 ❖ 主要介绍了从文件中输出字符、字符串,以及将字符、字符
串写入文件的函数。 ❖ (3)随机文件的读写及错误检测 ❖ 主要介绍了随机文件读写的应用,以及文件的出错检测。
❖ 在实际读写文件中,人们常常希望能直接读到某一数据 项而不是按物理位置顺序逐个读下来。这种可以任意指 定读写位置的操作称为文件的随机读写。可以想象,只 要能移动位置指针到所需要的地方,实现文件的定位, 就能实现随机读写。
C语言-结构体定义的几种方式
![C语言-结构体定义的几种方式](https://img.taocdn.com/s3/m/5a3980d8b8f3f90f76c66137ee06eff9aef84917.png)
C语⾔-结构体定义的⼏种⽅式若struct后⾯接的是名字,则其为该结构体的名称。
第⼀种是最基本的结构体定义,其定义了⼀个结构体A。
struct A //第⼀种{int a;};第⼆种则是在定义了⼀个结构体B的同时定义了⼀个结构体B的变量m。
struct B //第⼆种{int b;}m;第三种结构体定义没有给出该结构体的名称,但是定义了⼀个该结构体的变量n,也就是说,若是想要在别处定义该结构体的变量是不⾏的,只有变量n这种在定义结构体的同时定义变量才⾏。
struct//第三种{int c;}n;第四种结构体定义在第⼀种结构定义的基础上加了关键字typedef,此时我们将struct D{int d}看成是⼀个数据类型,但是因为并没有给出别名,直接⽤D定义变量是不⾏的。
如D test;,不能直接这样定义变量test。
但struct D test;可⾏。
typedef struct D //第四种{int d;};第五种结构体定义在第四种结构体定义的基础上加上了别名x,此时像在第四种结构体定义中说得那样,此时的结构体E有别名x,故可以⽤x定义E的结构体变量。
⽤E不能直接定义,需要在前⾯加struct,如struct E test;。
typedef struct E //第五种{int e;}x;第六种结构体定义在第五种的基础上减去了结构体名,但是若是直接使⽤y来定义该结构体类型的变量也是可以的。
如y test;。
(常⽤)typedef struct//第六种{int f;}y;。
C语言各章节单元测试题及答案——结构体与共用体
![C语言各章节单元测试题及答案——结构体与共用体](https://img.taocdn.com/s3/m/05eaef43ad51f01dc381f122.png)
第9章结构体与共用体9.1典型考试题剖析9.1.1选择题【例1】若指针p已经正确定义,要使p指向两个连续的整型动态存储单元,不正确的语句是。
A) p=2*(int *)malloc(sizeof(int)); B) p=(int*)malloc(2*sizeof(int));C) p=(int *)malloc(2*2); D) p=(int*)calloc(2,sizeof(int));✧考点:动态存储分配函数。
✧分析:根据动态存储分配函数malloc和calloc的函数原型可以知道,calloc函数的调用形式为:void * calloc(unsigned n,unsigned size);表示在动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配域起始地址的指针,因此答案D是正确的。
malloc函数的调用形式为:void * malloc(unsigned int size);表示是在内存的动态存储区分配一个长度为size的连续空间,并返回一个指向分配域起始地址的指针,答案B和C中malloc的参数分别为:2*(sizeof(int))和2*2,都是整型数,因此调用形式正确。
答案A中(int *)malloc(sizeof(int))的返回值为一个地址值,将地址的值乘以2是没有意义的。
✧答案:A【例2】若有以下说明和定义:struct test{ int m1; char m2; float m3;union uu{ char u1[5]; int u2[2]; }ua;}myaa;则sizeof(struct test)的值是。
A) 12 B) 16 C) 14 D) 9✧考点:结构体类型和共用体类型所占内存的字节数。
✧分析:sizeof(struct test)的功能是求结构体类型test所占用的内存字节数。
它应该等于结构体每个成员所占的字节数之和。
m1为int型,占2字节,m2为char型,占1字节,m3为float型,占4字节,接下来是一个共用体类型uu,共用体所占的字节数应该等于成员中最长者所占的字节数,u1占5字节,u2占4字节,那么该共用体类型应该占用5字节,所以2+1+4+5=12。
C语言程序设计-杨路明第9章课件
![C语言程序设计-杨路明第9章课件](https://img.taocdn.com/s3/m/6e488dfc3c1ec5da50e270e8.png)
9.3.3 结构体数组的使用
(3) 不能把结构体数组元素作为一个整体直接进行输入或输出,只能以单个成 员对象进行输入输出。例如:
/*学号*/
char name[20]; /*姓名*/
char sex;
/*性别*/
int age;
/*年龄*/
float score;
/*C成绩*/
char addr[40];
};
注:‘;’不能省
结构体类型定义描述结构 的组织形式,不分配内存
9.1 结构体类型的定义
例如,考虑10门课程成绩, 加上总成绩与平均成绩,可作如下定义:
struct是关键字,不能省略
struct
[结构体类型名] {
成员说明列表: ……….
}
成员类型可以是 基本型或构造型
9.1 结构体类型的定义
实例:定义结构体类型,描述下列数据 (1) 学生情况: 包含学生的学号、 姓名、 性别、 年龄、C语言课程成绩,地址:
struct student
{ int num;
输出stud变量,应该使用如下方式:
应该如何输出stud变量?
printf(″%s,%s,%ld\n″,,stud.addr,stud.num); 输入stud变量的各成员值,则用:
scanf(″%s%s%ld″,,stud.addr,&stud.num);
9.3 结构体类型数组
9.4.2 指向结构体数组元素的指针
C语言第9章结构体、共用体、枚举
![C语言第9章结构体、共用体、枚举](https://img.taocdn.com/s3/m/441e45e783c4bb4cf6ecd180.png)
结构体变量.成员
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语言引入了共用体类型。
共用体是一种同一存储区域由不同类型变量共享的数据 类型,它提供—种方法能在同一存储区中操作不同类型 的数据,也就是说共用体采用的是覆盖存储技术,准许 不同类型数据互相覆盖。
基本数据类型并不能方便地解决所有问题
❖ 复合数据类型是基本数据类型迭代派生而来
典型的代表就是“结构”,数组、指针也可算作此类
第9章 结构体、共用体和枚举类型
![第9章 结构体、共用体和枚举类型](https://img.taocdn.com/s3/m/7c048147336c1eb91a375d79.png)
9.1 结构体类型与结构体变量 9.2 结构体数组 9.3 向函数传递结构体型数据 9.4 链表 9.5 共用体 9.6 枚举类型 9.7 用户自定义类型
9.1 结构体类型与结构体变量
• 结构体类型的定义
–概述:
• 建立单链表的主要步骤为:
– 生成只含有头结点的空链表; – 然后读取数据信息,生成新结点,将数据存放于新结点中, 插入新结点到单链表中 – 重复第二步,直到输入结束。 根据新结点插入到链表的位置的不同,建立链表的方式, 分为在表尾插入的方法和在表头插入的方法。 •表尾插入: 例9.6 •表头插入: 例9.7
• 共用体变量的定义
–用已定义的共用体类型去定义共用体变量 –定义共用体类型的同时定义变量: –定义无名共用体类型的同时定义变量:
• 共用体变量的引用
–引用方式:共用体变量名.成员名 共用体变量名. 共用体变量名 –说明: 对于共用体变量,只能引用它的成员,而不能引用整个 共用体变量。若共用体的成员是构造类型的,则需要逐级引 用至最低级的成员。 –能通过定义指向共用体的指针变量来引用共用体变量。
在实际应用中,一组相关的数据可能是不同类型的。C语 言提供了包含不同类型成员的类型来定义这样的数据,这 种类型就是结构体类型 结构体类型。 结构体类型
– 定义形式:
struct 结构体名 类型名1 成员名1 {类型名1 成员名1; 类型名2 成员名2 类型名2 成员名2; …… 类型名n 成员名n 类型名n 成员名n; };
• 举例
例9.11 上一页
9.6 枚举类型
• 枚举类型的定义–定义来自式:enum 枚举类型名{枚举常量1,枚举常量2,……,枚举常量n}; •
第9章_用户建立的数据类型
![第9章_用户建立的数据类型](https://img.taocdn.com/s3/m/9005c26c7e21af45b307a842.png)
第九章 结构体与共用体一、 教案头: 教学内容第九章 结构体与共用体2 学时认知目标(应知)技能目标(应会): 了解结构体的意义和基本概念 : 能够正确定义和引用结构体变量 : 能够采用指针引用结构体变量 : 能够通过指针引用结构体数组 : 使用结构体变量作函数参数 : 使用结构体指针作函数参数 : 掌握共用体的结构和特点 : 掌握枚举的结构和特点 :typedef 定义类型的意义 : 引用结构体变量成员,引用结构体数组元素的成员 : 结构体指针变量与其所指变量的关系 : 结构体指针变量作函数参数 : 通过指针引用结构体数组 : 通过指针操作字符串 : 掌握共用体变量的定义和引用 : 了解在程序中枚举的应用 : 读程序能够理解typedef 定义的类型 情感目标(理解)教学目标(重点难点)教学目标 : 培养学生自主探究学习、求真务实的品德 : 培养学生细致钻研的学风 : 培养学生努力拓展思维;理论与实际相结合的思维习惯 : 指向结构体的指针 : 结构体数组成员的引用 : 结构体变量作函数参数 : 共用体的存储特性 : 链表的结构特点和操作处理 内容概述 Ø 教材章节: 9.1 结构体类型和结构体变量 9.2 结构体数组 9.3 结构体指针 9.4 用指针处理链表 9.5 共用体类型 9.6 枚举类型 9.7 用typedef命名类型 Ø 教授内容: l 本章讲解了什么是结构体类型,以及如何使用结构类型变量、结构体数组、结构体指针,什么是共用体,它和结构体的异同,以及共用体变量的引用 l 本章还讲解了枚举类型、以及如何使用typedef命名类型 能力训练及任务案例 任务9-1: 结构体变量初始化 任务9-2:结构体数组举例 任务9-3: 指向结构体变量的指针变量示例 任务9-4: 指向结构体数组元素的指针的应用 任务9-5: 结构体变量作函数的参数示例 任务9-6: 指向结构体的指针作函数参数示例任务9-7: 建立静态链表示例 任务9-8:建立动态链表示例 任务9-9: 单链表的输出 任务9-10:共用体示例任务9-11:枚举类型示例 任务9-12:学生信息表(单链表)的基本操作参考资料C 程序设计教程,谭浩强 著,清华大学出版社,2007.07C 程序设计教程学习辅导,谭浩强 编著,清华大学出版社,2007.10 网络学堂:考试系统:无忧网络考试系统 http://10.1.89.100/webexam二、 教学设计 1.专业英语词汇 英文词汇中文名structure 结构member 成员tag 标记function 函数Enumerate 枚举 Define 定义 Union 联合(共用体) create 创建Insert 插入delete 删除Modify / update 修改 2.教学方法 引入结构体概念后采用项目拓展、实例分析引导,递进驱动。
C语言上机练习9
![C语言上机练习9](https://img.taocdn.com/s3/m/587022c8d5bbfd0a795673c7.png)
上机报告9 结构体一、上机内容:1)观察以下程序:#include <stdio.h>#define FORMAT "%d\n%s\n%f\n%f\n%f\n"struct student{ int num;char name[20];float score[3]; }stu={12345, "LiLi",67.5, 89, 78.6};void main(){void print(struct student *); //形参类型指向结构体的指针变量print( &stu );} //实参为stu的起始地址void print(struct student *p) //形参为指向结构体的指针变量{printf(FORMA T,p->num,p->name,p->score[0],p->score[1],p->score[2]) ;//用指针变量调用各成员的值}1、修改程序,单独定义student结构。
struct student{ int num;char name[20];float score[3]; };请定义一个名为st的变量。
定义时不对变量赋初值。
编写一个函数,用来给结构变量赋值。
struct student st;scan(struct student *p){(*p).num=12345;(*p).score[0]=67.5;(*p).score[1]=89.0;(*p).score[2]=78.6;strcpy((*p).name,"LiLi");}2、不定义结构变量,定义一个结构指针,在内存中开辟一个空间,用来存储一个student结构体类型的数据,并以把数据{12345, "LiLi",67.5, 89, 78.6}按结构体的存储格式存储到开辟的内存空间中。
C语言各章节知识点总结
![C语言各章节知识点总结](https://img.taocdn.com/s3/m/a9f71bb69f3143323968011ca300a6c30c22f197.png)
C语言各章节知识点总结C语言是一种通用的高级编程语言,广泛应用于计算机软件开发。
下面是C语言各章节的知识点总结:第一章:C语言简介-C语言起源和发展-C语言的特点和优势-C语言的应用领域-C语言的编译和执行过程-编写第一个C语言程序第二章:C语言基础-C语言的基本数据类型-变量和常量-运算符和表达式- 控制语句(if语句、switch语句、for循环、while循环)-输入和输出-函数的定义和调用第三章:C语言数组-数组的定义和初始化-一维数组和多维数组-数组的应用(排序、查找、统计)- 字符串处理函数(strlen、strcpy、strcat)-字符串的输入和输出第四章:C语言指针-指针的概念和作用-指针变量和指针的运算-指针和数组的关系-指针作为函数参数-动态内存分配第五章:C语言函数高级特性-递归函数-函数指针和回调函数-变量的作用域和存储类别-预处理指令-多文件程序设计第六章:C语言结构体和共用体-结构体的定义和初始化-结构体的嵌套和数组-共用体的定义和应用-枚举类型的定义和使用- typedef的使用第七章:C语言文件处理-文件的概念和分类-文件的打开和关闭-文件的读取和写入-文件的定位和修改-错误处理和异常处理第八章:C语言位运算和位字段-位运算的概念和操作-位掩码和位移操作-位字段的定义和使用-位字段的对齐和优化-位操作的应用第九章:C语言高级编程技术-内存管理和动态内存分配-系统调用和库函数的使用-异常处理和错误处理-多线程编程和进程间通信-嵌入式系统开发技术总结:C语言是一门基础且强大的编程语言,掌握C语言的各章节知识点对于学习和使用C语言是非常重要的。
掌握C语言基础知识可以编写简单的程序,掌握指针和数组等知识可以处理更加复杂的数据结构和算法,掌握高级特性可以编写更加高效和模块化的程序。
通过学习C语言,可以为后续学习其他编程语言打下坚实的基础。
c语言程序设计双色版答案
![c语言程序设计双色版答案](https://img.taocdn.com/s3/m/612d3c314b7302768e9951e79b89680202d86b47.png)
c语言程序设计双色版答案C语言程序设计是计算机科学与技术专业的基础课程之一,通过学习该课程,学生可以掌握C语言的基本语法和编程技巧。
本文将针对C语言程序设计的双色版答案进行详细的讲解。
以下是各章节的答案内容:第一章:C语言概述与开发环境1. C语言是一种通用的高级程序设计语言,具有良好的可移植性和高效性。
2. 开发环境包括编译器、集成开发环境(IDE)等,可以根据个人习惯选择适合自己的开发环境。
第二章:C语言基本语法和数据类型1. C语言的基本语法包括标识符、关键字、运算符、表达式、语句和注释等。
2. 数据类型分为基本数据类型(整型、浮点型、字符型)和派生数据类型(数组、结构体、枚举、指针)。
第三章:C语言运算符和表达式1. 运算符包括算术运算符、关系运算符、逻辑运算符、赋值运算符等。
2. 表达式是由运算符、操作数和运算符优先级组合而成的。
第四章:C语言流程控制1. 流程控制分为顺序结构、选择结构和循环结构。
2. 选择结构包括if语句、switch语句,循环结构包括while循环、do-while循环和for循环。
第五章:C语言函数1. 函数是一段完成特定任务的独立代码块,可以重复使用。
2. 函数的定义包括函数名、参数、返回值类型和函数体。
第六章:C语言数组1. 数组是一组相同类型的元素集合,可以通过下标访问元素。
2. 数组可以是一维数组或多维数组,使用二维数组可以表示矩阵等数据结构。
第七章:C语言指针1. 指针是保存内存地址的变量,可以用于操作内存中的数据。
2. 指针的操作包括取地址操作、指针运算、指针与数组的关系等。
第八章:C语言字符和字符串处理1. 字符是编程语言中的基本单元,可以用于表示文本和符号等。
2. 字符串是字符的数组,可以用于表示文本、姓名等较长的数据。
第九章:C语言结构体与共用体1. 结构体是将不同类型的数据组合在一起形成一个新的数据类型。
2. 共用体是一种特殊的数据类型,不同成员共享同一块内存地址。
第9章C语言
![第9章C语言](https://img.taocdn.com/s3/m/a78c05fe941ea76e58fa047e.png)
9.2.1 文件的打开
在C语言中,打开文件是由fopen()函数实现的,函数原型 如下: FILE *fopen( char *filename, char *mode ) 其中,filename和mode分别是所要打开文件的文件名和将要 对其操作的模式;函数的返回值是一个文件类型指针,指向 被打开文件的文件缓冲区(结构体变量)的起始地址。如果 文件打开失败,则函数返回值是一个NULL指针。 为了对已打开的文件进行操作,应该立即把fopen()函数 的返回值赋给一个文件类型指针变量,若没有立即把返回值 赋给一个文件类型指针,而进行其它操作,可能导致此函数 的返回值丢失,而无法对所打开的文件进行操作。 如果需要对磁盘文件file1.txt,进行读写操作,可用如下 方式打开这个文件:
9.3.1 输入和输出一个字符
(a)命令窗口中输入的命令 (b)读出的文件中的内容 图9-3 例9.1的执行结果
9.3.1 输入和输出一个字符
其中,“C Language!”是文件file1.txt中的内容。 需要注意的是,该程序是将打开文件中的字符,逐一 的取出并显示出来。直到遇到文件的结束标志,结束 读出操作。 可以通过该程序打开任意的文本文件,只要把所要打 开的文件名作为命令的参数即可。
9.1 文件概述
9.1.1 文件的基本概念 9.1.2 缓冲文件系统和非缓冲文件系统 9.1.3 文件类型指针
9.1.1 文件的基本概念
所谓文件是指记录在外部介质上的数据的集合。数据是 以文件的形式存放在外部介质上的。操作系统都是以文 件为单位对数据进行管理的,如果系统要从外部存储设 备上寻找需要的数据,系统首先找到该部分数据属于的 文件,根据文件名找到所指定的文件,然后从文件中读 出数据。如果要向外部存储设备上存储数据,也需要把 待存储的数据建立成文件,再以文件的形式向外输出。
(完整版)C语言程序设计第四版第九章答案谭浩强
![(完整版)C语言程序设计第四版第九章答案谭浩强](https://img.taocdn.com/s3/m/468b1fd5b84ae45c3a358c52.png)
The shortest way to do many things is
average=0; max=0; maxi=0; for(i=0;i<3;i++) {sum=0; for(j=0;j<3;j++)
sum+=stu[i].score[j]; stu[i].avr=sum/3.0; average+=stu[i].avr; if(sum>max) {max=sum; maxi=I; } } average/=N; printf(“NO. name score1 score2 score3 average\n”); for(I=0;I<N;I++) {printf(“%5s%10s”,stu[i].num, stu[i].name); for(j=0;j<3;j++) printf(“%9d”,stu[i].score[j]); printf(“%8.2f\n”,stu[i].avr); } printf(“average=%6.2f\n”,average); printf(“The highest score is:%s,score total:%d.”stu[maxi].name,max); } 9.6 编写一个函数 new,对 n 个字符开辟连续的存储空间,此函数应返回一个指针,指向字 符串开始的空间。New(n)表示分配 n 个字节的内存空间。 解:new 函数如下: #define NULL 0 #define NEWSIZE 1000 char newbuf[NEWSIZE]; char *newp=newbuf; char *new(int n) {if (newp+n<=newbuf+ NEWSIZE)
c语言9结构体与共用体
![c语言9结构体与共用体](https://img.taocdn.com/s3/m/d1758649dcccda38376baf1ffc4ffe473368fdd1.png)
c语言9结构体与共用体九、结构体与共用体(一) 选择题1、C语言结构体类型变量在程序执行期间_________。
A.所有成员一直驻留在内存中B.只有一个成员驻留在内存中C.部分成员驻留在内存中D.没有成员驻留在内存中2、下面程序的运行结果是_________。
main(){struct cmplx{ int x;int y;}cnum[2]={1,3,2,7};printf("%d\n",cnum[0].y/cnum[0].x*cnum[1].x);}A.0 B.1 C.3 D.63、设有如下定义:struct sk{int n;float x;}data ,*p;若要使p指向data中的n域,正确的赋值语句是_________。
A.p=&data.nB.*p=data.n;C.p=(struct sk *)&data.nD.p=(struct sk *)data.n4、以下对结构体变量stu1中成员age的非法引用是_________。
struct student{int age;int num;}stu1,*p;p=&stu1A.stu1.ageB.student.ageC.p->ageD.(*p).age5、下面对typedef的叙述中不正确的是_________。
A.用typedef可以定义各种类型名,但不能用来定义变量B.用typedef可以增加新类型C.用typedef只是将已存在的类型用一个新的标识符来代表D.使用typedef有利于程序的通用和移植6、以下scanf函数调用语句中对结构体变量成员的不正确引用是_________。
struct pupil{char name[20];int age;int sex;}pup[5],*p;p=pup;A.scanf("%s",pup[0].name);B.scanf("%d",&pup[0].age);C.scanf("%d",&(p->sex));D.scanf("%d",p->age);7、若有以下说明和定义union dt{int a;char b;double c;}data;以下叙述中错误的是_________。
C语言 结构体
![C语言 结构体](https://img.taocdn.com/s3/m/42de99e0964bcf84b8d57b8e.png)
}
第六页,编辑于星期三:五点 四十五分。
9.1.2 结构的概念与定义
结构与数组比较:
使用结构来表示学生信息: •都是构造类型,是多个变量
struct student{
的集合
int num;
/* 学号 */
•数组成员类型相同,结构成
char name[10];
/* 姓名 */ 员类型不同
int computer, english, math; /* 三门课程成绩 */
第二十二页,编辑于星期三:五点 四十五分。
9.2.2 结构数组操作
结构数组的初始化
struct student students[50] = { { 101,"zhang", 76, 85, 78 }, {102, "wang", 83,
92, 86} };
students[0] 101 Zhang 76 85 78
struct student{
int num;
/* 学号 */
char name[10];
/* 姓名 */
int computer, english, math; /* 三门课程成绩 */
double average;
/* 个人平均成绩 */
};
struct student s1,s2;
第十二页,编辑于星期三:五点 四十五分。
int main(void)
{ int course, i, n, num, pos, score;
struct student students[50]; /* 定义结构数组 */ … /* 输入n个学生信息 */
在我们的实际生活中,一个较大的实体可能由多个成 员构成,而这些成员中有些又有可能是由一些更小的 成员构成。
C语言程序设计实例教程第2版习题答案作者李红第9章结构体和共用体.doc
![C语言程序设计实例教程第2版习题答案作者李红第9章结构体和共用体.doc](https://img.taocdn.com/s3/m/57944116a1c7aa00b42acbc1.png)
9.4课后习题9.4.1项目练习一.练习目的1.进一步巩固结构体类型和共用体类型的定义与引川2.进一步复习链表的建立过程3.进一步巩固枚举类型的定义与枚举元索的引用方法二.练习内容1.用结构体变量表示平面上的一个点(横坐标和纵坐标),输入两个点,求两点Z间的距离。
#include "stdio.h"include "math.h"struct pin{float x;float y;}a,b;main(){printfC*请输入a点的横纵坐标:“);scanf("%f%f"/&a.x,&a.y);printfC'Xn");printf("请输入b点的横纵坐标scanf(,,%f%f"/&b.x,&b.y);printf("\n n);printff"输出a、b 两点之间的距离是:%f",sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)));getch();}2.16个同学围成一-圈,从笫1个人开始按1、2、3的顺序报号,凡报到3者退出圈子。
找出最后昭在圈子中的人原来的序号。
ttinclude "stdio.h"#include "stdlib.h"#define LEN sizeof(struct game)struct game{int num;struct game *next;};struct game *creat(){ struct game *head,*p;head=p=(struct game *) malloc(LEN);p->num=l;int i=2;while(i<=16){ p・>next=(struct game *) malloc(LEN);p->next-:>nu m=i;i++;p=p->n ext; }p->next=head; return(head);} struct game *delete(struct game *head) { struct game*pl=head,*p2=head,*x; int k=l;while(pl->next!=pl) {if(k==3) {x=pl; pl=pl->next;p2・>n ext=pl; free(x); x=NULL; k=0;} else {P2=pl; pl=pl->next;}pl->next=NULL;return(pl);}void print(struct game *head){ struct game *p;p=head;while(p!=NULL) {printf("%d\t",p->num);p=p->n ext;}printfCAn");}main(){ struct game *pt,*p;pt=creat();p=delete(pt);print(p);free(p);getch();}3.建立一个链表,每个结点包含的成员为:职工号、工资。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
问题:若结构体是嵌套定义的,空间如何计算?
struct date
{ int year; int month;
stu1所占空间大小为多少?
int day;
};
struct ST { int ID;
30
char Name[10];
char Sex[4];
struct date TimeOfEnter;
int Score_1; int Score_2;
struct ST { int ID;
char Name[10]; char Sex[4]; int TimeOfEnter; int Score_1; int Score_2; int Score_3; int Score_4; }stu1, stu2;
struct 结构体名 {
成员表列; } 变量名表列;
10
9.1 结构体数据类型
以下程序运行的结果是: #include<stdio.h> main( ) { struct date
{ int year,month,day; } today;
sizeof运算用来 求得一个变量 或数据类型在 内存中占内存 空间的字节数。
printf(“%d\n”,sizeof(struct date));
struct ST stu1, stu2;
数据类型
变量名
一旦定义了结构体类型的变量stu1,stu2,它们就具有了 struct ST类型结构,系统为每个变量分配相应的内存,内
存的大小由声明的结构体决定,即结构体中所有成员 占用内存的总和。
6
9.1 结构体数据类型
struct ST { int ID;
C语言的数据类型
基本类型
整型 实型 (浮点型) 字符型 枚举类型
数据类型
构造类型
数组类型 结构体类型 共用体类型
指针类型
1
第9章 结构体、共用体与枚举
❖9.1 结构体 ❖9.2 共用体
构造数据类型
❖9.3 枚举类型
❖ 9.4用户定义类型
2
9.1 结构体
一、问题的提出 经常会碰到一些表格,例如下面的学生成绩管理表格。
8
9.1 结构体数据类型 (形式三)直接定义结构体变量
struct { int year; int month; int day; } birthday;
struct {
成员表列 } 变量名表列;
用无名结构体直接定义 变量只能一次
9
9.1 结构体数据类型
说明:结构体类型与结构体变量概念不同
– 结构体类型: 不分配内存 – 结构体变量: 分配内存 – 结构体类型: 不能赋值、存取、运算; – 结构体变量: 可以赋值、存取、运算;
struct ST { int ID;
char Name[10]; char Sex[4]; struct date TimeOfEnter; int Score_1; int Score_2; int Score_3; int Score_4; }stu1, stu2;
12
9.1 结构体数据类型
1、对结构体成员的引用方法: 结构体变量名 . 成员名 成员运算符 优先级: 1 结合性:从左向右
如:=“张三” gets(stu1. Name); scanf(“%d%c%d%d”, &stu1.ID, &stu1.Sex, &stu1.Score_1, &stu1.Score_2);
学号 姓名 性别 入学时间 计算机原理 C语言 编译原理 操作系统
1 张三 男 2003
95
98
85
78
2 李四 女 2003
92
90
91
86
••••••
3
9.1 结构体数据类型
二、结构体的声明
结构体——是一个或多个可以是相同数据类型、也可以是
不相同的数据类型的变量集合在一个名称下,便于应用的数据
类型。结构体声明的格式如下:
关键字
struct 结构体名
新的数据 类型名
构成结构体 的成员
{
成员表列
}; ;声明结束,不能省略
4
9.1 结构体数据类型
例如对于前面的学生成绩管理例子中,
可以声明如下结构体:
struct ST
ID
{ int ID; char Name[10]; char Sex[4]; int TimeOfEnter; int Score_1; int Score_2; int Score_3;
Name
Sex
TimeOfEnter
Score_1 Score_2 Score_3 Score_4
int Score_4;
};
…..
…
2字节 10字节 4字节 2字节 8字节
5
9.1 结构体数据类型
注意:此时只是声明了一种新的数据类型,这种数据类型就是 Struct ST,此时并不为其分配空间。
三、定义结构体变量 (形式一) 先声明结构体类型再定义结构体变量
char Name[10]; char Sex[4]; int TimeOfEnter; int Score_1; int Score_2; int Score_3; int Score_4; }; struct ST stu1, stu2;
stu1所占空间大小为多少?
26
7
9.1 结构体数据类型 (形式二)在声明结构体类 Score_4;
}stu1, stu2;
13
9.1 结构体数据类型 四、结构体变量的引用
C语言规定,不能将一个结构体变量作为一个 整体进行输入、输出。
即不可以: printf(“%d%s%d”, stu1); 只能对结构体变量中的成员分别进行引用。
14
9.1 结构体数据类型
stu1.Score_1++;
15
9.1 结构体数据类型 2、结构体嵌套时成员的引用方法:
当结构体成员又属于一个结构体类型,即结构 体嵌套,访问需一级一级到最低级成员。
16
9.1 结构体数据类型
习题:
struct date
struct worker
{ int month;
{ char name[20];
}
6
sizeof(变量名)或sizeof(类型标识符)
11
9.1 结构体数据类型
结构体可嵌套,即结构体成员也可以是结构体。
若表格的形式如下:
入学时间 学号 姓名 性别
年月日
计算机原理
C语言
编译原理
操作系统
则结构体形式如下: struct date {
int year; int month; int day; };