第9章 编译预处理、结构体和共用体

合集下载

c语言程序设计知识点总结

c语言程序设计知识点总结

《C语言程序设计》教学基本知识点第一章C语言基本知识1。

C源程序的框架尽管各个C源程序的功能千变万化,但框架是不变的,主要有:编译预处理、主函数()、函数n()等,主函数的位置不一定在最前面,可以在程序的中部或后面,主函数的名字固定为main。

2.C语言源程序的书写规则:(1)C源程序是由一个主函数和若干个其它函数组成的。

(2)函数名后必须有小括号,函数体放在大括号内。

(3)C程序必须用小写字母书写。

(4)每句的末尾加分号.(5)可以一行多句。

(6)可以一句多行。

(7)可以在程序的任何位置加注释。

3.语句种类语句是程序的基本成分,程序的执行就是通过一条条语句的执行而得以实现的,根据表现形式及功能的不同,C语言的基本语句可以分为五大类.(1)流程控制语句流程控制语句的功能是控制程序的走向,程序的流程有三种基本结构:顺序结构、分支结构和循环结构,任何复杂的程序都可以由这三种基本结构复合而成。

其中后两种结构要用特定的流程控制语句实现。

(2)表达式语句表达式语句的形式是:表达式;,即表达式后跟一分号“;”,分号是语句结束符,是一个语句必不可少的成分.表达式和表达式语句的区别在于表达式代表的是一个数值,而表达式语句则代表一种动作。

最常见的表达式语句是赋值语句。

(3)函数调用语句函数调用语句实际上也是一种表达式语句,形式为:在一次函数调用的小括号后面加上一个分号。

(4)空语句空语句的形式就是一个分号,它不代表任何动作,常常作为一个意义转折点使用。

(5)复合语句复合语句从形式上看是多个语句的组合,但在语法意义上它只相当于一个语句,在任何单一语句存在的地方都可以是复合语句。

注意复合语句中最后一个语句末尾的分号不能少。

复合语句右大括号后面没有分号.4。

运算符用来表示数据各种操作的符号称为运算符。

运算符实际上代表了一种类型数据的运算规则。

不同的运算符具有不同的运算规则,其操作的数据类型必须符合该运算符的要求,运算结果的数据类型也是固定的。

《C语言程序设计》教案

《C语言程序设计》教案
输入表列-地址列表:变量的地址或字符数组的首地址
(2)格式控制字符、格式控制项与printf类似,表3-3,4。一般使用更加简单形式.
注意: 数据读入结束情况:遇空格、TAB、回车;遇非法输入;指定宽度结束。
四、其它输入/输出函数
1、putchar函数 一般形式:putchar(字符表达式);
注意:C语言算术表达式的书写形式-数学表达式的书写形式区别:(1)-(4).
3、(算术)运算符的优先级与结合性(P.233附录IV)
先按运算符的“优先级别”高低次序执行;优先级别相同,则按规定的“结合方向”处理。为了清晰起见可用圆括号“()”强制.
例1:表达式a-b*c等价于a-(b*c)。 例2:a-b+c,到底是(a-b)+c还是a—(b+c)?(b先与a运算还是先与c参与运算?) 例3:分析x=y=z=3+5
3、实型数据的舍入误差。例2-3A。
四、字符型数据
1、字符常量表示.直接表示/转义表示(特殊的转义字符,一般字符也可以转义表示).
特殊转义字符对显示/打印的控制作用
2、字符变量-1个字节,char关键词。
3、字符数据的存储-ASCII码/二进制存储-C语言可以将字符看做很短的整数处理。
例2—7A,例2—8A可以看出字符数据的具有整数特性。
(2)格式控制字符d、o、x/X、u、c、s、f、e/E、g/G构成控制项的各种常见形式。表3-1,3—2。
注意:不要死记硬背,要总结规律.一般形式:%±m n h/l格式字符
2、scanf函数(格式输入函数)
(1)格式:scanf(格式控制字符串,输入表列-地址列表)
格式控制字符串:含义与printf类似
重点

C语言中的结构体和共用体(联合体)

C语言中的结构体和共用体(联合体)

C语言中的结构体和共用体(联合体)/c-pointer-array/在C 语言中,结构体(struct)是一个或多个变量的集合,这些变量可能为不同的类型,为了处理的方便而将这些变量组织在一个名字之下。

由于结构体将一组相关变量看作一个单元而不是各自独立的实体,因此结构体有助于组织复杂的数据,特别是在大型的程序中。

共用体(union),也称为联合体,是用于(在不同时刻)保存不同类型和长度的变量,它提供了一种方式,以在单块存储区中管理不同类型的数据。

今天,我们来介绍一下C 语言中结构体和共用体的相关概念和使用。

结构体 / struct结构体的定义声明一个结构体类型的一般形式为:struct 结构体名 {成员列表};其中,成员列表中对各成员都应进行类型声明,即:类型名成员名;例如,我们需要在程序中记录一个学生(student)的数据,包括学号(num)、姓名(name)、性别(sex)、年龄(age)、成绩(score)、地址(addr)等,如下图所示:如果要表示图中的数据结构,但C 语言并没有提供这种现成的数据类型,因此我们需要用定义一种结构体类型来表示。

truct student {int num;char name[20];char sex;int age;float score;char addr[30];};上述定义了一个新的结构体类型 struct student(注意,struct 是声明结构体类型时所必须使用的关键及,不能省略),它向编译系统声明,这是一个“结构体类型”,它包括 num、name、sex、age、score、addr 等不同类型的数据项。

应当说,这里的 struct student 是一个类型名,它与系统提供的标准类型(如 int、char、float、double 等)具有同样的作用,都可以用来定义变量的类型。

结构体变量前面只是声明了一个结构体类型,它相当于一个模型,但其中并无具体的数据,编译系统对其也不分配实际的内存单元。

C语言各章节单元测试题及答案——结构体与共用体

C语言各章节单元测试题及答案——结构体与共用体

第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。

结构体与共用体

结构体与共用体

4、共用体类型的变量如何赋初值,含义是什么?
不能对共用体变量名赋值,也不能在定义共用体变量时初始化。但可以用一个共用体变量为 另一个变量赋值
例:union
{ int i;
char ch;
double f;
}a={1,’a’,1.5}; ()
a=1;
()
m=a;
()
例:float x; union { int i; char ch; double f; }a,b; a.i=1; a.ch=‘a’; a.f=1.5; b=a; () x=a.f; ()
二. 枚举类型的应用
• 1.枚举类型变量的定义 ◆先定义枚举类型,再定义枚举类型变量
enum week{sun,mon,tue,wed,thu,fri,
sat};
enum week weekday,workday; ◆定义枚举类型的同时定义枚举变量 enum color {red,blue,green,black}a,b,c;
共用体类型的关键字
union 联合类型名 { 数据类型 成员名1 数据类型 成员名2
...........
数据类型 成员名n };
例:
union utype {
char ch; int i; float f; };
2、如何定义共用体类型的变量
(1)先定义类型,再定义变量,例如: union data /*共用体类型定义*/ { int i;
◆直接定义枚举变量 enum {male,female}sex1,sex2;
枚举类型变量的特点
例 enum DAY {
MON=1, TUE, WED, THU, FRI, SAT, SUN };
(1) 枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号,隔开。

C语言程序设计教案 第九章 编译预处理

C语言程序设计教案  第九章 编译预处理

第九章编译预处理课题:第九章编译预处理教学目的:1、了解预处理的概念及特点2、掌握有参宏与无参宏的定义及使用,领会文件包含的使用及效果教学重点:教学难点:掌握宏的使用,文件包含有参宏与无参宏的使用步骤一复习引导ANSI C标准规定可以在C源程序中加入一些“预处理命令”,以改进程序设计环境,提高编程效率。

这些预处理命令是由ANSI C统一规定的,但它不是C语言本身的组成部分,不能直接对它们进行编译。

必须在对程序进行通常的编译之前,先对程序中这些特殊的命令进行“预处理”,即根据预处理命令对程序作相应的处理。

经过预处理后程序不再包括预处理命令了,最后再由编译程序对预处理后的源程序进行通常的编译处理,得到可供执行的目标代码。

步骤二讲授新课C语言与其他高级语言的一个重要区别是可以使用预处理命令和具有预处理的功能。

C 提供的预处理功能主要有以下三种:宏定义、文件包含、条件编译。

分别用宏定义命令、文件包含命令、条件编译命令来实现。

为了与一般C语句相区别,这些命令以符号“ #” 开头。

§9.1宏定义宏:代表一个字符串的标识符。

宏名:被定义为“宏”的标识符。

宏代换(展开):在编译预处理时,对程序中所有出现的“宏名”,用宏定义中的字符串去代换的过程。

一、不带参数的宏定义一般形式:#define 标识符字符串#define PI 3.1415926main(){ float l, s, r, v;printf( “input radius:” );scanf( “%f”, &r );l = 2.0*PI*r;s = PI*r*r;v = 3.0/4*PI*r*r*r;printf(“%10.4f,%10.4f,%10.4\n”, l, s, v);}例如:由键盘输入y值,求表达式:3(y2+3y)+ 4(y2+3y)+ y(y2+3y)#define M (y*y+3*y)main(){ int s, y;printf( “Input a number :”); scanf (“%d”,&y);s=3*M+4*M+y*M; p rintf(“s=%d\n”,s);}先宏展开:s=3*(y*y+3*y) +4*( y*y+3*y) + y*(y*y+3*y)再与源程序合并说明:⑴宏名一般用大写表示,以便与变量名区分。

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程序设计第二版谭浩强课后答案

c程序设计第二版谭浩强课后答案C程序设计第二版是谭浩强教授编写的一本广泛使用的计算机程序设计教材,它以C语言为基础,深入浅出地介绍了程序设计的基本概念、语法规则和编程技巧。

这本书的课后习题对于加深理解C语言的知识点非常有帮助。

以下是部分课后习题的答案,供参考:第一章程序设计和C语言概述1. 问题一:简述程序设计的基本步骤。

- 答案:程序设计的基本步骤包括需求分析、设计、编码、测试和维护。

2. 问题二:C语言的主要特点是什么?- 答案:C语言的主要特点包括简洁高效、结构化、可移植性、丰富的运算符、灵活的数据类型和内存管理能力。

第二章 C语言程序的结构1. 问题一:C语言程序的基本结构是什么?- 答案:C语言程序的基本结构包括预处理指令、函数定义和主函数。

2. 问题二:什么是函数?C语言中函数的定义规则是什么?- 答案:函数是一段具有特定功能的代码块,可以被重复调用。

C 语言中函数的定义规则包括返回类型、函数名和参数列表。

第三章数据类型、运算符和表达式1. 问题一:C语言中的基本数据类型有哪些?- 答案:C语言中的基本数据类型包括整型(int)、字符型(char)、浮点型(float和double)。

2. 问题二:算术运算符有哪些?它们的优先级是怎样的?- 答案:算术运算符包括加(+)、减(-)、乘(*)、除(/)和模(%)。

它们的优先级从高到低依次是乘除、模、加减。

第四章控制语句1. 问题一:C语言中的条件语句有哪些?- 答案:C语言中的条件语句包括if语句、if...else语句和switch语句。

2. 问题二:循环语句有哪些?它们的基本结构是什么?- 答案:C语言中的循环语句包括while循环、do...while循环和for循环。

它们的基本结构是初始化、条件判断和迭代。

第五章数组1. 问题一:什么是数组?数组的声明方式有哪些?- 答案:数组是相同数据类型元素的集合。

数组的声明方式包括在函数内部声明和全局声明。

C语言程序设计 第3版 第9章 编译预处理

C语言程序设计 第3版 第9章 编译预处理
int s; s=sum(5); printf("s%d\n",s); }
#include "test2.c" static int sum(int n) {
int i,s=0; for(i=1;i<=n;i++)
s=s+fact(i); return s; }
static int fact(int n) {
C语言程序设计
第9章 编译预处理
第1讲:编译预处理基本形式
提纲
1.宏定义 2.文件包含 3.条件编译
1.宏定义
不带参数宏定义 带参数宏定义
格式:
#define 标识符 字符串
功能:
指定标识符代替一个较复杂的字符串。
注意说明:
(1)宏名一般习惯用大写字母,例如宏名PI。 (2)宏名用做代替一个字符串,不作语法检查。 (3)宏定义无需在末尾加“;” (4)宏定义的有效范围为#undef命令终止。 (5)在进行宏定义时,可以引用已定义的宏名。
char web[50]; int i=0; gets(web); while(web[i]!='\0') {
#if(R==1) if(web[i]>='A'&&web[i]<='Z') {web[i]=web[i]+32; i++;}
#else if(web[i]>='a'&&web[i]<='z') {web[i]=web[i]-32; i++;}
形式3:
#ifndef 标识符 程序段1
#else 程序段2

第9章 结构体、共用体和枚举类型

第9章 结构体、共用体和枚举类型
第9章 结构体、共用体和枚举类型
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}; •

C语言学习入门笔记之结构体与共用体

C语言学习入门笔记之结构体与共用体

结构体与共用体笔记定义结构体C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体(structre)。

在其他一些高级语言中称为“记录”.定义后的结构体类型和系统提供的标准类型(如int, char, float, double 等)具有相似的作用,都可以用来定义变量,只不过int等类型是系统已声明的,而结构体类型是由用户根据需要在程序中指定的。

定义一个结构体类型的一般形式为:struct 结构体名{ 成员表列};注意:1.结构体类型的名字是由一个关键字struct和结构体名组合而成的(例如struct Student) ,结构体名是由用户指定的,又称“结构体标记”,以区别于其他结构体类型。

上面的结构体声明中Student就是结构体名(结构体标记)。

2.花括号内是该结构体所包括的子项,称为结构体的成员。

“成员表列"(member list)也称为“域表”(field list),成员表列由若干个成员组成,每一个成员是结构体中的一个域。

对每个成员也必须作类型说明,其形式为:类型说明符成员名;成员名的命名应符合标识符的书写规定。

例如:struct stu{int num;char name[20];char sex;float score;};3.一个结构体的成员可以属于另一个结构体类型(嵌套)。

例如:struct Date //声明一个结构体类型struct Date{ int month;//月int day;//日int year;//年}struct Student//声明一个结构体类型struct Student{ int num;char name[20];char sex;int age;struct Date birthday;//成员birthday属于struct Date 类型char addr[30];};结构体类型变量1.定义结构体类型变量说明结构变量有以下三种方法。

第9章_用户建立的数据类型

第9章_用户建立的数据类型

第九章 结构体与共用体一、 教案头: 教学内容第九章 结构体与共用体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结构体与共用体

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语言程序设计 16-枚举、预处理等汇总

C语言程序设计  16-枚举、预处理等汇总
带参的宏定义在分析程序之前先进行宏展开, S(a+b,c+d)展开时用a+b代替x,用c+d代替y, 展开的结果为:a+b*c+d
24
带参的宏定义使用举例
#define S(x,y) x*y main() { int a=3,b=4,c=5,d=6;
printf("a*b=%d\n", S (aa*b, b ) ) ; printf("a+b*c+d=%d\n" , S(a((+ab+)b*()c,(+cd+)d))));; }
enum weekday day; (2) enum weekday {Sun,Mon,Tue} day; (3) enum {Sun,Mon,Tue} day;
12
三、枚举型变量的使用
1)可对枚举变量赋值,但只能把枚举元素名赋给 枚举变量,不能把枚举元素值直接赋给枚举变量。 如: enum weekday {Sun,Mon, Tue, Wed, Thu,
10
一、枚举类型的定义
• 枚举元素的值也可在定义时重指定。例如: enum weekday {Sun=7,Mon=1, Tue, Wed, Thu,
Fri, Sat} ; 对于没有指定值的元素,按顺序加1,故: Tue是2,Wed是3,…,Sat是6。
11
二、枚举型变量的定义 枚举型变量的定义也有三种方式,如: (1) enum weekday { Sun,Mon,Tue };
3)可用枚举变量进行判断或比较操作。 enum flag {true,false} my_flag; … if (my_flag == true)

C语言程序设计实例教程第2版习题答案作者李红第9章结构体和共用体.doc

C语言程序设计实例教程第2版习题答案作者李红第9章结构体和共用体.doc

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

讲课提纲
讲课内容
课后作业
上机实验
定义结构变量后,该变量包含的所有成员 就会被分配相应大小的存储空间。
时钟 退出
第9章 编译预处理、结构体和共用体
9.3.2 定义结构体变量
目标要求
在定义结构体的同时也可以定义结构变量 例如:
struct data { char name[20]; short age; char address[80]; float wage; }data1,data2; 在定义结构体的同时定义了两个结构变量data1和 data2。
时钟
退出
第9章 编译预处理、结构体和共用体
9.2.1
目标要求
宏定义
注意事项 在使用宏进行程序设计时,必须注意以下 问题:
同一个宏名不能重复定义,并且定义中的3部分 必须以空格隔开。 为了便于区别“宏名”与“变量名”,“宏名” 一般习惯用大写字母,这是一种约定俗成的做 法。 如果“宏体”较长,不能写在一行内,可以使 用“\”来表示宏体的换行。 宏替换只能替换简单的函数,此处的简单性包 括形式上的简单(即语句较少,无复杂流程控 制),也包括实现过程的简单,如不能包含递 归过程等。
时钟 退出
讲课提纲
讲课内容
课后作业
上机实验
第9章 编译预处理、结构体和共用体
9.3.4 结构变量成员的访问
目标要求
讲课提纲
讲课内容
对结构体变量进行定义和初始化后, 就可对其中的成员进行引用。C语言规 定对结构体变量的成员进行赋值、引 用、输出时不能整体进行,因为它的 各个成员之间是相互独立的,要引用 其成员,可以使用两种运算符:
课后作业
上机实验
时钟
退出
第9章 编译预处理、结构体和共用体
9.2.1
目标要求
宏定义
讲课提纲
宏定义的格式 宏定义有两种形式:带参数的宏和不带参 数的宏。
不带参数的宏。 基本格式: #define 宏名 宏体 带参数的宏。 基本格式: #define 宏名(参数1,参数2......) 宏体
时钟 退出
时钟 退出
第9章 编译预处理、结构体和共用体
9.3.3 结构变量初始化
目标要求
讲课提纲
对于结构体的定义是很灵活的,总结结构定 义的几种形式如下: 省略“结构体名”。
struct { int num; char name[20]; int age; float score; }a[3];
时钟 退出
讲课内容
时钟 退出
第9章 编译预处理、结构体和共用体
9.3.2 定义结构体变量
目标要求
讲课提纲
讲课内容
课后作业
上机实验
结构数组 仿照基本数据类型的用法,在定义结构体后, 具有相同数据类型的结构变量也可以组成 结构数组。 结构数组的格式: struct 结构名 结构数组名[元素个数]; 例如: struct data man[3]; 其中man[3]由man[0]、man[1]、man[2]组 成,每个元素都是以data为结构类型的结构 变量。
讲课内容
课后作业
上机实验
时钟
退出
第9章 编译预处理、结构体和共用体
9.3.3 结构变量初始化
目标要求
结构体初始化的另一种方法。
struct person { int num; char name[20]; int age; float score; }a[3]={001,“zhanqian”,17,86.5,002,“lijuan” ,17,92,003,“chenyong”,18,91.5};
讲课提纲
讲课内容
课后作业
上机实验
时钟
退出
第9章 编译预处理、结构体和共用体
9.3.2 定义结构体变量
目标要求
结构变量的定义格式
struct 结构名 结构变量名[={初值表}]; 例如: struct data data1,data2; 其中: struct:结构体的标识符。 data:结构体名称。 data1,data2:两个具体的结构体变量。
时钟 退出
讲课提纲
讲课内容
课后作业
上机实验
第9章 编译预处理、结构体和共用体
9.2.2
目标要求
文件包含与条件编译
文件包含
文件包含主要有以下两种格式: #include<文件名>:使用这种格式时,系统将 到存放C语言库函数头文件所在的目录中查找要 包含的文件。 #include “文件名”:使用这种格式时,系统先 到用户保存C程序文件的当前目录中寻找要包含 的文件,如果找不到,再到存放C语言库函数头 文件所在的目录中查找要包含的文件。 例如:若在某程序文件中含有如下命令: #include<File.C>
《 C语言程序设计》
第9讲
第9章 编译预处理、结构体和共用体
目标要求
目标要求
讲课提纲
掌握有关编译预处理的知识。 掌握对简单的结构体的运用。 了解有关共用体的知识。
讲课内容
课后作业
上机实验
时钟
退出
第9章 编译预处理、结构体和共用体
讲课提纲
目标要求
讲课提纲
讲课内容
编译预处理 结构体 共用体 小结 课后作业
点运算符“.”。 指针运算符“->”。
课后作业
上机实验
时钟
退出
第9章 编译预处理、结构体和共用体
9.3.4 结构变量成员的访问
目标要求
讲课提纲
讲课内容
课后作业
上机实验
使用点运算符“.”访问结构变量成员。 对于结构变量,要通过成员运算符“.”逐个访问其成员,且 访问的格式为: 结构变量.成员。 点运算符在所有的运算符中优先级最高,如果成员本身又是 一个结构体类型,则可以用若干个点运算符一级一级地找到 最低一级的成员,这里有点顺藤摸瓜的感觉。在实际的运用 中,我们通常对最底层成员的进行赋值、存取以及运算。对 于【例9-4】中的结构变量还可以使用以下方式进行初始化: a[0].num=001; a[0].name[]=“zhanqian”; a[0].age=17; a[0].score=86.5;
时钟 退出
第9章 编译预处理、结构体和共用体
9.3.3 结构变量初始化
目标要求
讲课提纲
讲课内容
课后作业
上机实验
结构变量可以在定义的同时进行初始化,即 使用一对大括弧包围的初值表对结构变量的 每个成员赋值,其用法和数组类似。 例如: struct data wang={“wangwei”,20,“建设 路”,2234.5}; 初始化后,将字符串“wangwei”赋给结构变 量wang成员name;将整数20赋给结构变量 wang成员age;将字符串“建设路”赋给结 构变量wang成员address;将实数2234.5赋 给结构变量wang成员wage。
第9章 编译预处理、结构体和共用体
课后作业
上机实验
第9章 编译预处理、结构体和共用体
9.3.3 结构变量初始化
目ห้องสมุดไป่ตู้要求
先说明结构体类型,再单独进行变量的定义。
struct person { int num; char name[20]; int age; float score; }; struct person a[3];
讲课提纲
时钟 退出
讲课提纲
讲课内容
课后作业
上机实验
第9章 编译预处理、结构体和共用体
9.3.1
目标要求
结构体的定义
讲课提纲
结构体的定义格式 在结构体的定义中包含了各个数据成员的基 本信息,它的一般形式为:
struct 结构体名 { 数据类型1 成员名1; 数据类型2 成员名2; ...... 数据类型n 成员名n; };
时钟 退出
讲课提纲
讲课内容
课后作业
上机实验
第9章 编译预处理、结构体和共用体
9.2.1
目标要求
宏定义
注意事项
宏替换只是用宏名来代替1个字符串,并不对字符串的内 容进行检查,因此也不存在类型的区别,即是说程序编 译时不会作任何语法上的检查。 在定义宏的过程中,“宏体”可以是前面已经定义过的 “宏名”,这样能够实现宏的层层置换。 对程序中双引号里面的字符串,即使内容与宏名相同, 也不进行替换。如1个程序中有以下定义和语句: #define MAX 10 printf(“The MAX is:%d”,m); 其中加黑的“MAX”不会被替换成“10”,因为此处的 “MAX”在输出语句的引号之内,是要原样输出的。 宏替换不像函数调用要占运行时间,它只占编译时间。 注意:宏定义也不占用内存空间。
时钟 退出
讲课内容
课后作业
上机实验
第9章 编译预处理、结构体和共用体
9.3.1 结构体的定义
目标要求
用法说明 关于结构体的定义作如下说明:
“struct”为结构体类型定义的关键字,结构体名 是此结构体的类型标识。 结构体名(例如data)也是一种标识符,因此其 定义规则和变量名、数组名以及函数名相同。 结构体中的各成员必须用大括弧括起来组成结构 体的成员列表,结构体内的成员可以是一般数据 类型(字符型、实型、整型等);也可以是复杂 的数据类型(如数组等);还可以是结构体类型。
时钟 退出
第9章 编译预处理、结构体和共用体
9.3.4 结构变量成员的访问
目标要求
讲课提纲
讲课内容
课后作业
使用指针运算符“->”访问结构变量的成员。 使用指针不但可以访问普通变量和数组,使用指针 来访问结构变量更能体现出简洁、高效的特点。 取地址运算。 使用“&”运算符取出一个结构变量的地址。 例如: struct data wang,*pd,man[3]; /*定义 结构变量,指向结构的指针和结构数组*/ pd=&wang; /*将指针指向结构变量*/ pd=man; /*将指针指向结构数组*/
相关文档
最新文档