第14章结构体共用体和用户自定义类型-
C语言全国计算机二级等级考试教程第一二章(章节带习题)
2.2 标识符、常量和变量
2.2.3 符号常量
在C语言中,可以用一个符号名来代表一个常量,称为符号常
量。但是这个符号名必须在程序中用(#define)进行特别的“
指定"。 例2.2 计算圆面积和周长,此程序中将如何教大家使用符号常量。
#include “stdio.h” /*包含头文件*/
#define PI 3.14159 /*定义符号常量,符号常量名为PI,用PI来代表3.14159*/
main()
/*主函数,程序的入口*/
{double r,s,l;
/*声明部分,定义了3实型个变量*/
r
r=5.0;
/*给变量r赋值*/
函 s=PI*r*r;
数 体
l=2*PI*r;
/*计算圆的面积*/ /*计算圆的周长*/
s
printf(“s=%f,l=%f\n”,s,l/)*;分别圆的面积和周长*/
/*给变量b赋值*/
数 体
area=a*b;
/*将a*b的结果赋值给变量area*/
printf(“a=%f,b=%f,area=%f\n”,a,b,area/)*;分别输出矩形的两条边长和面积*/
1.2
}
3.6
a=1.200000,b=3.600000,area=4.320000
4.32
注意:
1. C程序由函数组成,一个程序必须有一个且只能有一个主函数(main),C程
a
b
1.5000002.500000 2.5000003.500000
a b
内存空间
2.在程序中,声明变量就是在计算机内存中申请了某个内存单元。对变量 进行赋值,实质上就是把数据存入该变量所代表的存储单元中。
2级C语言第14章 结构体共用体和用户定义类型
例 struct student { int num; char name[20]; char sex; } stu1[2]={{112,“Wang Lin”,„M‟},{19, “Li Jia”, „W‟};
struct 形式三: { 类型标识符 成员名; 类型标识符 成员名; ……………. 不管那种赋值,不允许跳过前面的成员给后 }结构体变量={初始数据}; 面的成员赋值,但可以只给前面的成员赋值
例 ,后面未赋值的数值数据按0处理,字符数据 struct { int num; 按‘\0‟,字符串数据按空串处理。 char name[20]; char sex; int age; char addr[30]; }stu1={112,“Wang Lin”,„M‟,19, “200 Beijing Road”};
二、 结构体变量的定义
1. 先定义结构体类型,再定义结构体变量 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }; struct student stu1,stu2; STU stu1,stu2; #define STU struct student STU { int num; char name[20]; char sex; int age; float score; char addr[30]; };
2. 定义结构体类型的同时定义结构体变量
struct student struct
{ int num;
{ int num; 用无名结构体直接定义 char name[20]; char name[20]; 变量只能一次 char sex; char sex; int age; int age; float score; float score; char addr[30]; char addr[30]; }stu1,stu2; } stu1,stu2;
C语言程序设计 - 结构体和共用体-样本教案
用以下实例来分析:
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语言教程之结构体共用体与位运算
C语言教程之结构体共用体与位运算C语言是一种功能强大的编程语言,它提供了许多用于处理复杂数据类型的特性。
其中,结构体、共用体和位运算是三个重要的特性,可以帮助开发者更高效地处理数据。
本教程将介绍C语言中的结构体、共用体和位运算,并给出一些实例和使用场景。
1. 结构体(Structures)结构体是C语言中一种用户自定义的数据类型,可以将不同类型的数据组合在一起,形成一个新的复合数据类型。
结构体通过关键字"struct"来定义,可以在其中定义多个成员变量,并且可以根据需要为每个成员变量指定不同的数据类型。
例如,我们可以定义一个结构体来表示一个学生的信息:```struct studentchar name[20];int age;float grade;};```上面的代码定义了一个名为`student`的结构体,包含了三个成员变量:`name`,`age`和`grade`,分别表示学生的姓名、年龄和成绩。
使用结构体时,可以通过`.`操作符来访问结构体的成员变量,就像访问一个普通的变量一样。
例如,我们可以通过以下方式给结构体的成员变量赋值:```struct student stu1;strcpy(, "John");stu1.age = 18;stu1.grade = 90.5;```2. 共用体(Unions)共用体是C语言中一种特殊的数据类型,它和结构体类似,也可以包含多个成员变量,不同之处在于,共用体的成员变量共享同一块内存空间。
即,共用体的所有成员变量在内存中的起始地址是相同的,它们共同占用一段连续的内存空间。
共用体的定义方式与结构体类似,只是将关键字"struct"换成了"union"。
例如,我们可以定义一个共用体来表示一个变量的多种不同数据类型的解释:```union dataint i;float f;char str[20];};```上面的代码定义了一个名为`data`的共用体,包含了三个成员变量:`i`,`f`和`str`,分别表示整数、浮点数和字符数组。
简述结构体类型和共用体类型的定义方式。
简述结构体类型和共用体类型的定义方式
结构体类型和共用体类型都是C 语言中的复合数据类型,它们可以将多个不同类型的变量组合在一起,形成一个新的数据类型,方便程序设计和数据处理。
结构体类型的定义方式如下:
struct 结构体名{
数据类型1 成员变量名1;
数据类型2 成员变量名2;
...
};
其中,结构体名为自定义的结构体类型名称,成员变量名和数据类型分别指定结构体中的每个成员变量。
结构体中的成员变量可以是任何C 语言中的数据类型,包括基本数据类型、数组、指针、结构体等。
共用体类型的定义方式如下:
union 共用体名{
数据类型1 成员变量名1;
数据类型2 成员变量名2;
...
};
共用体与结构体类似,也是由多个成员变量组成的数据类型。
不同的是,共用体中的所有成员变量共享同一块内存空间,即它们在内存中的起始地址相同,占用的总内存大小等于最大成员变量的内存大小。
因此,共用体中不同的成员变量可以存储不同的数据类型,但同一时刻只能访问其中的一个成员变量。
需要注意的是,在定义结构体类型和共用体类型时,只是定义了一个新的数据类型,并没有创建该类型的变量。
如果要使用结构体类型或共用体类型,需要先定义一个该类型的变量,然后才能对其进行操作。
c语言 union和typedef
c语言union和typedef摘要:1.概述2.共用体(union)a.定义b.成员变量c.存储方式d.实例3.类型定义(typedef)a.定义b.类型别名c.实例4.共用体与类型定义的区别5.总结正文:1.概述C 语言是一种广泛应用的编程语言,其具有丰富的数据类型和灵活的结构体。
在C 语言中,共用体(union)和类型定义(typedef)是两种重要的数据类型与结构方式。
本文将对这两种方式进行详细的介绍和解析。
2.共用体(union)2.1 定义共用体是一种特殊的结构体,它的成员变量共享同一块内存空间。
这意味着,在共用体中,所有成员变量的地址都是相同的。
共用体使用关键字“union”定义。
2.2 成员变量共用体的成员变量可以是不同类型的,但它们必须具有相同的大小。
成员变量的类型可以是整型、浮点型或者其他自定义类型。
2.3 存储方式共用体的成员变量在内存中的存储方式是连续的。
这意味着,如果一个共用体有两个成员变量,一个是整型,一个是浮点型,那么这两个变量在内存中是连续存储的。
2.4 实例下面是一个共用体的实例:```c#include <stdio.h>union MyUnion {int intVar;float floatVar;};int main() {union MyUnion myUnion;myUnion.intVar = 10;myUnion.floatVar = 20.5;printf("intVar: %d, floatVar: %f", myUnion.intVar, myUnion.floatVar);return 0;}```3.类型定义(typedef)3.1 定义类型定义是一种为现有类型定义新的名称的方式。
类型定义使用关键字“typedef”定义。
3.2 类型别名类型定义允许为现有类型创建一个新的名称,这个新名称被称为类型别名。
类型别名可以提高代码的可读性和简洁性。
全国计算机等级考试《二级c语言程序设计》复习全书【核心讲义+历年真题详解]74p
全国计算机等级考试《二级C语言程序设计》复习全书【核心讲义+历年真题详解]最新资料,WORD格式,可编辑修改!目录第一部分备考指南......................................................第1章考试概述....................................................第2章复习技巧.................................................... 第二部分核心讲义......................................................【公共基础知识】....................................................第1章数据结构与算法..........................................第2章程序设计基础............................................第3章软件工程基础............................................第4章数据库设计基础..........................................【C语言程序设计】..................................................第1章程序设计基本概念........................................第2章C程序设计的初步知识....................................第3章顺序结构................................................第4章选择结构................................................第5章循环结构................................................第6章字符型数据..............................................第7章函数..................................................第8章地址和指针..............................................第9章数组..................................................第10章字符串.................................................第11章对函数的进一步讨论.....................................第12章C语言中用户标识符的作用域和存储类 .....................第13章编译预处理和动态存储分配...............................第14章结构体、共用体和用户定义类型...........................第15章位运算.................................................第16章文件................................................. 第三部分历年真题及详解................................................全国计算机等级考试《二级C语言程序设计》真题及详解(一)............全国计算机等级考试《二级C语言程序设计》真题及详解(二)............全国计算机等级考试《二级C语言程序设计》真题及详解(三)............全国计算机等级考试《二级C语言程序设计》真题及详解(四)............全国计算机等级考试《二级C语言程序设计》真题及详解(五)............全国计算机等级考试《二级C语言程序设计》真题及详解(六)............ 第四部分模拟试题及讲解................................................全国计算机等级考试《二级C语言程序设计》模拟试题及详解(一)........全国计算机等级考试《二级C语言程序设计》模拟试题及详解(二)........第一部分备考指南第1章考试概述一、考试简介全国计算机等级考试(National Computer Rank Examination,简称NCRE),是经原国家教育委员会(现教育部)批准,由教育部考试中心主办,面向社会,用于考查应试人员计算机应用知识与技能的全国性计算机水平考试体系。
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.定义结构体类型变量说明结构变量有以下三种方法。
全国计算机等级考试二级C语言题型分析
《全国计算机等级考试二级C语言》资格考试题型分析二级C考试分笔试和机试两部分,两部分总分均为100分,两部分考试均需60分以上才能合格发放证书。
若其中一科(笔试或机试)通过,另一科可在下一次考试中补考,若补考合格发放证书。
若二科均在85分以上,在合格证书上将加印“优秀”字样,若二科均在70分以上,在合格证书上将加印“良好”字样。
(一)笔试笔试内容分两部分。
公共基础知识考核内容:30分;C语言基础知识考核内容:70分。
题型分析如下:1、单向选择题40道题,共70分。
分值分布如下:其中(1)-(10)、(21)-(40)小题,每題2分,(11)-(20)小题,每题1分。
考核内容分布如下:(1)-(10)小题为公共基础知识考核内容,共计20分;(11)-(40)小题为C语言知识考核内容,共计50分。
2、填空题15个空,每空2分,共30分。
考核内容分布如下:(1)-(5)空为公共基础知识考核内容,共计10分;(6)-(15)空为C语言知识考核内容,共计20分。
(二)机试机试三道题:程序填空题,30分;程序修改题,30分;程序设计题,40分。
1、程序填空题通常会给出一段源代码,设计三个空需要你来填写。
每空10分。
例如:#include#include#define M 5#define N 20void fun(char (*ss)[N]){ int i, j, k=0, n, m, len;for(i=0; i{ len=strlen(ss[i]);if(i==0) n=len;if(len>n) {/**********found**********/n=len; ___1___=i;}}for(i=0; iif (i!=k){ m=n;len=strlen(ss[i]);/**********found**********/for(j=___2___; j>=0; j--)ss[i][m--]=ss[i][j];for(j=0; j/**********found**********/___3___='*';}}main(){ char ss[M][N]={"shanghai","guangzhou","beijing","tianjing","cchongqing"};int i;printf("\nThe original strings are :\n");for(i=0; iprintf("\n");fun(ss);printf("\nThe result:\n");for(i=0; i}2、程序修改题通常会给出一段源代码,设计2-3个错误需要你来修改。
共用体(共9张PPT)
共用体类型对于我们做一般情况下的编程,并不是很常用。
枚举类型变量的定义和使用
➢ 定义形式:
enum 枚举类型名{枚举常量1,枚举常量2,……,枚举常量n};
➢ 定义方式: SINGLE f;
/*等价于float f;; */
例如:
typedef int INTEGER;
用已定义的枚举类型去定义变量: 共用体的概念及其变量的引用方式
【例7-3】构建最多可以拥有250个字符的字符串类型。
typedef char string[250];
string s;
/*等价于char s[250];*/
strcpy(s, "C Language");
【例7-4】把字符指针定义为字符串类型
typedef char* string;
string s1,s2;
union fourbyte 枚举类型变量的取值范围只能是其所枚举的各个常量,枚举变量的比较相当于比较它们所隐含的整数值,枚举类型变量的值是对应枚举常
量所代表整数值。
{ 枚举类型变量的定义和使用
typedef char* string;
long n; 对于上种方式也可省略枚举类型名:
再用这个类型定义一个变量n:
/*等价于char *s1,s2;*/
s1= "C Language";
s2=s1;
这样一来就使得自定义类型string更像C++和Java语言里 的字符串类型,变量s则更像Java里的字符串对象引用变量。
➢ 共用体所有成员的存储单元共用同一个存储单元,内存 长度是其最长的成员的长度,起作用的成员是最后一次 存放的成员。
主要是为了照顾有其他编程语言背景的人对C语言的使用。
全国计算机二级c语言学习指南课件与历年真题精讲精析 第14章
二级C语言程序设计 学习指南与历年真题精讲精析
第14章 结构体、共用体和用户定义 类型
C语言中可由用户构造的两种数据类型:
1、结构体(struct)
2、共用体(union)
14.1 用typedef说明一种新类型名 1、C语言允许用typedef说明一种新类型名: typedef 类型名 标识符; 2、“类型名”必须是在此语句之前已有定义的类型标 识符,“标识符”是一个用户定义标识符,用作新的 类型名。typedef语句的作用仅仅是用“标识符”来
struct dent*s=&s[0]
则以下表达式中值为2的是_____。 (&s[0])->m s[0].m
B)*(p++)->m
C)(*p).m
*(&s[0])->m
s[0].m
*s[0].m
*&a
a
√
D)*((++p)->m)
*((&s[1])->m)
*s[1].m
*&b
五、函数之间结构体变量的数据传递 1、向函数传递结构体变量的成员 结构体变量中的每个成员可以是简单变量、数组或指针变量 等,作为成员变量,它们可以参与所属类型允许的任何操作。 2、向函数传递结构体变量 结构体变量作实参时,传递给函数对应形参的是它的值,函
}std,pers[3],* pstd; name sex birthday year month day sc[0] sc[1] sc[2] sc[3]
方法2:在说明一个无名结构体类型的同时,直接进行定义: 如:struct { char name[12]; char sex; struct date birthday; float sc[4];
结构体、共用体、枚举类型、typedef的区别
值 2,此时引用 jh.i 不能取值,已经被 jh.f 覆盖了. (3)共用体变量的地址和它各成员的地址都是同一地址. (4)不能对共用体赋值或引用共用体的变量名取值,也不能在定义共用体变量
时对它初始化. (5)不能把共用体变量作函数参数,也不能使函数返回共用体变量,但可以使
引用: p = cd; 为枚举型变量 p 赋值 cd,p 的值就是成员表列中 cd 的值. 可以理解为 p = 2;,但是 2 是整型常量,要先强制类型转换,写成 p = (enum
jh)2;. 枚举型变量可以用作判断比较,if(p > (enum jh)1)或 if(p > bc).
-------------------------------------------------------------------------------------------------typedef
(2)直接定义结构体类型变量.方法为声明类型的同时定义变量,并且不写结构 体名 jh,这种方法用于只定义 1 次变量,而且每用这种方法定义 1 个变量,虽然都 为无名结构体类型,但不属于同一类型.
引用结构体类型变量: 结构体变量名.成员名
例:
struct jh{int ห้องสมุดไป่ตู้;char b;}a; a.b = 'z';
enum jh{ab=1,bc=2,cd=3,de=4}; 或
enum jh{de=4,ab,bc,cd}; 其中(de=4,ab,bc,cd)就是把最后一个 de 作为 0 放在最前面,然后改变值为最 后一位的值,第二开始就是从 1 算起了.
c语言结构体共用体数据类型求大小例题
c语言结构体共用体数据类型求大小例题C语言中的结构体和共用体是非常重要的数据类型,它们能够帮助程序员更好地组织和管理数据。
在本文中,我将为你详细介绍C语言中结构体和共用体的特点、用法及例题。
一、结构体的定义和特点1. 结构体是什么?在C语言中,结构体是一种用户自定义的数据类型,它可以包含不同类型的数据,用于表示和管理复杂的数据结构。
结构体的定义以关键字struct开头,后面跟着结构体的名称和大括号内包含的成员变量列表。
2. 结构体的特点结构体的成员变量可以是不同的数据类型,包括基本数据类型、指针类型和其他结构体类型。
这使得结构体非常适合用于表示复杂的数据结构,如学生信息、员工信息等。
二、共用体的定义和特点1. 共用体是什么?共用体也是C语言中的一种用户自定义数据类型,它与结构体类似,不同的是共用体的成员变量共享同一块内存空间。
这意味着共用体的所有成员变量使用同一块内存,修改一个成员变量会影响其他成员变量。
2. 共用体的特点共用体的成员变量共享同一块内存空间,因此共用体非常节省内存。
但也正是由于这种特点,使用共用体需要特别小心,避免出现数据混淆和错误。
三、结构体和共用体的例题为了更好地理解结构体和共用体的用法,我们来看一个例题:如何计算结构体和共用体的大小?```c#include <stdio.h>// 定义一个结构体struct Student {char name[20];int age;float score;};// 定义一个共用体union Data {int num;char str[20];};int main() {// 计算结构体的大小printf("Size of struct Student: %lu bytes\n", sizeof(struct Student));// 计算共用体的大小printf("Size of union Data: %lu bytes\n", sizeof(union Data));return 0;}```在这个例题中,我们定义了一个学生结构体和一个数据共用体,并在主函数中分别计算了它们的大小。
共用体的定义和使用
共用体的定义和使用共用体是一种在 C 语言中存在的数据类型,它允许不同的变量共享相同的内存空间。
这种数据类型通常用于设计一些体积小、数据类型相对简单、且数量较多的数据结构。
在本文中,我们将探讨共用体的定义和使用。
一、共用体的定义共用体的定义与结构体类似,可以使用关键字 union 来定义一个共用体类型。
其中,定义共用体的语法如下:```union union_name {member1;member2;member3;...};```在共用体定义中,member1、member2、member3 等为共用体的成员(通常称为共用体变量),它们共享相同的内存空间。
因此,共用体的大小等于最大成员的大小。
二、共用体的使用共用体的使用通常是通过以下两种方式实现的:1. 访问共用体的成员与结构体类似,可以使用点运算符(.)或箭头运算符(->)来访问共用体的成员。
不同之处在于,不同的成员可以共享相同的内存空间。
因此,改变一个成员的值,可能会影响其他成员的值。
例如:```#include <stdio.h>#include <string.h>union Data {int i;float f;char str[20];};int main( ) {union Data data;data.i = 10;printf( "data.i : %d\n", data.i);data.f = 25.0;printf( "data.f : %f\n", data.f);strcpy( data.str, "C Programming");printf( "data.str : %s\n", data.str);return 0;}```在上述代码中,我们定义了一个共用体 Data,它有三个成员:i、f 和str。
结构体
C语言:结构体、共用体、枚举、类型重定义、位运算、预处理C语言除了提供象int,long,float,double、和char这样的基本数据类型之外,还支持数组、Struct、Union、和Enum数据类型。
结构体类型(struct)我们一个数组包含多个成员(元素),每个成员具有相同的数据类型。
一个结构体也能包含多个成员,但每个成员的数据类型可以不同。
例如:(a) struct Student { char Name[10], char Sex, int Age ;float Height; }(b) struct Student S1;这里,(a)定义了struct类型Student,而(b)定义了S1是Student类型的变量。
Student类型包含四个成员:Name,Sex,Age,Height,它们的数据类型分别是字符数组、字符型、整型、和浮点型。
以下是另一例子:struct DATE { int YEAR; int MONTH, int DAY ;}struct DATE d1,d2;注意,struct类型是泛指,而Student和DATE是两个特定的结构体类型。
当定义一结构体类型时,你要指定它的结构体类型名,当定义变量时,要同时写上关键字struct和结构体类型名。
定义结构体类型:我们struct 结构体类型名 { 成员1;成员2;…;成员n; }每一个成员可以是基本类型的变量、数组或指针变量,也可以是其他结构体或共用体类型的变量、数组或指针。
成员虽然不能是本结构体类型的变量,但可以是本结构体类型的指针变量。
定义结构体类型的变量:struct 结构体类型名变量名1,变量名2,…定义结构体变量时也可初始化,如:struct Student S1,S2={ “Zhang San”, ‟M‟, 19, 1.76 },S3;引用结构体类型的变量:(1)引用其成员:结构体变量名。
成员如 strcpy(,”Li Si”); S1.Sex=‟F‟; S1.Age=18; S1.Height=1.72;[0]=‟L‟; [1]=‟i‟; [2]=‟u‟; [3]=‟\0‟;S2.Height = S1.Height + 0.01 ;(1)引用整体就用变量的名字。
结构体、共用体户定义类型
结构体、共用体户定义类型————————————————————————————————作者:————————————————————————————————日期:用typedef说明一种新类型名选择题1)设有如下说明:typedef struct ST{long a;int b;char c[2];}NEW;则下列叙述中正确的是———c———a)以上的说明形式非法b)ST是一个结构体类型c)NEW是一个结构体类型d)NEW是一个结构体变量2)设有以下语句:typedef struct s{int g;char h;}T;则下面叙述中正确的是———b———a)可用S定义结构体变量b)可以用T定义结构体变量c)S是struct类型的变量d)T是struct S类型的变量结构体类型选择题1)有以下程序#include <stdio.h>struct st{int x,y;}data[2]={1,10,2,20};main(){struct st *p=data;printf(“%d,”,p->y);printf(“%d\n”,(++p)->x);}程序运行结果是____c_____a)10,1 b)20,1 c)10,2 d)20,22)有以下程序#include <stdio.h>main(){struct STU{char name[9]; char sex; double score[2];};struct STU a={“Zhao”,’m’,85.0,90.0},b={“Qian”,’f’,95.0,92.0}; b=a;printf(“%s,%c,%2.0f,%2.0f\n”,,b.sex,b.score[0],b.score[1]); }程序运行的结果是____D_____a)Qian,f,95,92 b)Qian,m,85,90 c)Zhao,f,95,92 d)Zhao,m,85,903) 将定已建立以下链表结构,且指针p 和q 已指向如图所示的结点:则以下选项中科将q 所指结点从链表中删除并释放该结点的语句是_____d____a) (*p).next=(*q).next;free(p); b)p=q->next; free(q);c) p=1; free(q); d) p->next=q->next;free(q);4)以下结构体类型说明和变量定义中正确的是____a____a) typedef struct b)struct REC;{int n; char c;}REC; {int n; char c; };REC t1,t2; REC t1,t2;c)typedef struct REC; d) struct{int n=0; char c=’A ’; }t1,t2; {int n; char c; }REC;REC t1,t2;5)有以下程序#include <stdio.h>#include <string.h>typedef struct {char name[9]; char sex ; float score[2]; }STU;void f(STU a){STU b={“Zhao ”,’m ’,85.0,90.0}; int i;strcpy(,);a.sex=b.sex;for(i=0;i<2;i++) a.score[i]=b.score[i];}main(){STU c={“Qian ”,’f ’,95.0,92.0};f(c); printf(“%s,%c,%2.0f,%2.0f\n ”,,c.sex,c.score[0],c.score[1]);}程序的运行结果是_____a____a)Qian,f,95,92 b)Qian,m,85,90 c)Zhao,f,95,92 d)Zhao,m,85,906)有以下程序#include <stdio.h>struct tt{int x; struct tt *y; }*p;struct tt a[4]={20,a+1,15,a+2,30,a+3,17,a};main(){int i;p=a;for(i=1;i<=2;i++) {printf(“%d,”,p->x); p=p->y;}}程序的运行结果是____d_____ ab cdatnex p q heada) 20,30, b) 30,17 c)15,30, d)20,15,7)有以下程序#include <stdio.h>#include <string.h>typedef struct { char name[9]; char sex; float score[2]; }STU;STU f(STU a){STU b={“Zhao”,’m’,85.0,90.0};int i;strcpy(,);a.sex=b.sex;for(i=0;i<2;i++) a.score[i]=b.score[i];return a;}main(){STU c={“Qian”,’f’,95.0,92.0},d;d=f(c); printf(“%s,%c,%2.0f,%2.0f\n”,,d.sex,d.score[0],d.score[1]); }程序的运行结果是_____c___a)Qian,f,95,92 b)Qian,m,85,90 c)Zhao,m,85,90 d)Zhao,f,95,928) 有以下程序typedef stuct {int b,p;}A;void f(A c) /*c是结构变量名*/{int j;c.b+=1;c.p+=2;}main(){int i;A a={1,2};f(a);printf(“%d,%d\n”,a.b,a.p);}程序运行后的结果是____d____a)2,3 b)2,4 c)1,4 d)1,29)有以下程序struct S {int n;int a[20];};void f(int *a,int n){int i;for(i=0;i<n-1;i++) a[i]+=i;}main(){int i;struct S s={10,{2,3,1,6,8,7,5,4,10,9}};f(s.a,s.n);for(i=0;i<s.n;i++) printf(“%d,”,s.a[i]);}程序运行后的输出结果是______a____a) 2,4,3,9,12,12,11,18,9, b)3,4,2,7,9,8,6,5,11,10,c)2,3,1,6,8,7,5,4,10,9, d)1,2,3,6,8,7,6,5,10,9,10) 有以下程序段typedef struct NODE{int num;struct NODE *next;}OLD;以下叙述中正确的是——————ca)以上的说明形式非法b) NODE 是一个结构体类型c) OLD是一个结构体类型d)OLD是一个结构体变量11)有以下程序:#include <string.h>struct STU{int num;float TotalScore;};void f(struct STU p){ struct STU s[2]={{20041,703},{20045,537}};p.num=s[1].num;p.TotalScore=s[1].TotalScore;}main(){struct STU s[2]={{20041,703},{20045,537}};f(s[0]);printf(“%d %3.0f\n”,s[0].num,s[0].TotalScore);}程序运行后的输出结果是____d___a) 20045 537 b)20044 550 c)20042 580 d)20041 70312) 有以下程序#include <string.h>struct STU{char name[10];int num;};void f(char *name,int num){struct STU s[2]={{“SunDan”,20044},{“Penghua”,20045}}; num=s[0].num;strcpy(name,s[0].name);}main(){struct STU s[2]={{“YangSan”,20041},{“LiSiGuo”,20042}},*p; p=&s[1];f(p->name,p->num);printf(“%s %d\n”,p->name,p->num);程序运行后的输出结果是___a____a) SunDan 20042 b)SunDan 20044 c)LiSiGuo 20042 d)YangSan 2004113) 有以下程序:struct STU{char name[10];int num;float TotalScore;};void f(struct STU *p){struct STU s[2]={{“SunDan”,20044,550},{“Penghua”,20045,537}},*q=s;++p;++q;*p=*q;}main(){struct STU s[3]={{“YangSan”,20041,703},{“LiSiGuo”,20042,580}};f(s);printf(“%s %d %3.0f\n”,s[1].name,s[1].num,s[1].TotalScore);}程序运行后的输出结果____b____a)SunDan 20044 580 b)Penghua 20045 537c)LiSiGuo 20042 580 d)SunDan 20041 703填空题1)以下程序运行后的输出结果是_____5_____struct NODE{int num; struct NODE *next; }main(){struct NODE s[3]={{1,’\0’},{2,’\0’},{3,’\0’}},*p,*q,*r;int sum=0;s[0].next=s+1;s[1].next=s+2;s[2].next=s;p=s;q=p->next;r=q->next;sum+=q->next->num;sum+=r->next->num;printf(“%d\n”,sum);}2)以下程序运行后的输出结果是______13431___struct NODE{int k;struct NODE *link;main(){struct NODE m[5],*p=m,*1=m+4;int i=0;while(p!=q){p->k=++i;p++;q->k=i++;q--;}q->k=i;for(i=0;i<5;i++)printf(“%d”,m[i].k);printf(“\n”);}3)以下程序中函数fun的功能是:统计person所指结构体数组中所有性别(sex)为M的记录的个数,存入变量n中,并作为函数值返回。
结构体与共用体及用户定义类型
结构体与共用体及用户定义类型一、选择题:(1)有以下程序段typedef struct NODE{ int num; struct NODE *next;} OLD;以下叙述中正确的是A)以上的说明形式非法B)NODE是一个结构体类型C)OLD是一个结构体类型D)OLD是一个结构体变量(2)有以下程序# include <string.h>struct STU{ int num;float TotalScore; };void f(struct STU p){ struct STU s[2]={{20044,550},{20045,537}};p.num = s[1].num; p.TotalScore = s[1].TotalScore; }main(){ struct STU s[2]={{20041,703},{20042,580}};f(s[0]);printf("%d %3.0f\n", s[0].num, s[0].TotalScore);}程序运行后的输出结果是A)20045 537B)20044 550C)20042 580D)20041 703(3)有以下程序# include <string.h>struct STU{ char name[10];int num; };void f(char *name, int num){ struct STU s[2]={{"SunDan",20044},{"Penghua",20045}}; num = s[0].num;strcpy(name, s[0].name);}main(){ struct STU s[2]={{"YangSan",20041},{"LiSiGuo",20042}},*p;p=&s[1]; f(p->name, p->num);printf("%s %d\n", p->name, p->num);}程序运行后的输出结果是A)SunDan 20042B)SunDan 20044C)LiSiGuo 20042D)YangSan 20041(4)有以下程序struct STU{ char name[10]; int num; float TotalScore; };void f(struct STU *p){ struct STU s[2]={{"SunDan",20044,550},{"Penghua",20045,537}}, *q=s; ++p ; ++q; *p=*q;}main(){ struct STU s[3]={{"YangSan",20041,703},{"LiSiGuo",20042,580}};f(s);printf("%s %d %3.0f\n", s[1].name, s[1].num, s[1].TotalScore); }程序运行后的输出结果是A)SunDan 20044 550B)Penghua 20045 537C)LiSiGuo 20042 580D)SunDan 20041 703(5)若有以下说明和定义union dt{int a; char b; double c;}data;以下叙述中错误的是A)data的每个成员起始地址都相同B)变量data所占内存字节数与成员c所占字节数相等C)程序段:data.a=5;printf("%f\n",data.c);输出结果为5.000000D)data可以作为函数的实参(6)设有如下说明typedef struct ST{long a;int b;char c[2];} NEW;则下面叙述中正确的是A)以上的说明形式非法B)ST是一个结构体类型C)NEW是一个结构体类型D)NEW是一个结构体变量(7)有以下结构体说明和变量定义,如图所示,指针pqr分别指向此链表中三个连续结点。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2020/2/6
14.2.6 结构体指针变量 1.结构变量的指针 一个指针变量当用来指向一个结构变量时,称之
为结构指针变量。结构指针变量中的值是所指 向的结构变量的首地址。有了结构指针,就可 通过结构指针来访问结构变量或结构变量成员 ,这与通过数组指针来访问数组或数组元素是 相同的。 结构指针变量说明的一般形式为: struct 结构名 *结构指针变量名 结构指针变量也必须要先赋值后才能使用。赋值 是把结构变量的首地址赋予该指针变量,不能 把结构名赋予该指针变量。
类型说明符 成员名; 结构体成员名表中可以含有多个同类型的成 员名,它们之间用逗号分隔。例如: struct student { int math score, ;english score, sum;}; 结构体中的成员名可以和程序中的其它变量 同名;不同结构体中的成员也可以同名。
2020/2/6
2020/2/6
boy1.number = 1461; printf("input name:"); scanf("%s", ); printf("input age:"); scanf("%d", &boy1.age); boy1.sex='m'; boy1.grade='5'; boy2=boy1; return 0; }
2020/2/6
Hale Waihona Puke 相同类型的结构体变量之间还可以进行整体 引用赋值,例如: struct {char name[10]; int num; } per1, per2={“WUTING”, 23};
执行赋值语句:per1=per2;后,per2中每个 成员变量的值都赋给了per1中对应的同名成员 。这种赋值方式很简洁,但必须保证赋值号两 边的结构体变量类型相同。
2020/2/6
14.2.3 结构体类型的变量的引用 表示结构变量成员的一般形式是: 结构变量名.成员名
例如: boy1. number 即boy1的学号 boy2. name 即boy2的名字
结构变量的成员,与相同类型的普通变量并 无区别,可以像普通变量一样参与各种运算, 这根据其类型决定。例如: boy1.number = ;
char sex;
char grade;
char address[101];
} boy1, boy2;
2020/2/6
3.直接说明结构变量。即在结构变量定义中省 去了结构类型名,而直接给出结构变量。一般 形式为:
struct {成员表列 } 变量名表列; 例如以上结构中把student省略, struct student {
2020/2/6
链表有一个头结点,表示链表中的第一个元素, 它的指针指向第二个结点。第二个结点的指针 指向第三个结点,如此往复,直到最后一个元 素,这就是链表的尾结点,它的指针存放的是 空值(NULL指针)。
1.静态链表 静态链表的节点是在程序中事先定义好的,不是
在运行时动态分配的,故称静态链表。例如以 下静态链表的创建和输出。
typedef int INTEGER 这以后就可用INTEGER来代替int作整型变 量的类型说明了。例如: INTEGER a,b; 它等效于: int a,b;
2020/2/6
用typedef定义数组类型、指针类型、结构类 型将带来很大的方便,不仅使程序书写简洁, 而且增强了可读性。例如:
typedef char NAME[20]; 表示NAME是字符数组类型,数组长度为20 。然后可用NAME 说明变量,如: NAME a1,a2,s1,s2; 完全等效于:
2020/2/6
程序运行时输入: input name:zhang<回车> input age:12<回车>
2020/2/6
和其他类型变量一样,对结构变量可以在定 义时进行初始化赋值。 #include "stdio.h" int main(void){ struct Student { int number; char name[31]; short age; char sex; char grade; } boy2, boy1 = {1461, "zhang", 12, 'm', '5'}; boy2=boy1; return 0;}
};
2020/2/6
其中struct是关键字,是结构体类型的标志 。“结构体标识名”和“结构成员名”都是用 户定义的标识符。其中“结构体标识名”是可 选项,在说明中可以不出现。成员表列由若干 个成员组成,由一对大括号括起来,每个成员 都是该结构的一个组成部分。对每个成员也必 须作类型声明,其形式如下:
第14章 结构体、共用体和用户自定义类型
本章重点 ➢14.1 用typedef说明一种新类型名 ➢14.2 结构体类型 ➢14.3 共用体
2020/2/6
14.1 用typedef说明一种新类型名 C语言允许用户自己定义类型说明符,也就
是说允许由用户为数据类型取“别名”。类型 定义符typedef即可用来完成此功能,它可以C 语言的基本数据类型取“别名”,也可以为用 户自定义的结构类型取“别名”。例如,
2020/2/6
14.2.4 结构体类型变量的赋值和初始化 结构变量的赋值就是给各结构成员赋值。可用输
入语句或赋值语句来完成。例如: #include "stdio.h" int main(void){ struct Student {int number;
char name[31]; short age; char sex; char grade; } boy1, boy2;
14.2 结构体类型
C语言的基本数据类型有整型,实型,字符 型等,在实际问题中,把一个对象抽象成数据 来表示时,往往需要一组不同基本数据类型的 组合。
2020/2/6
14.2.1 结构体类型的说明 结构体类型说明的一般形式是: struct 结构体标识名
{ 类型名1 结构成员名表1; 类型名2 结构成员名表2; … 类型名n 结构成员名表n;
2020/2/6
以上说明中,birthday成员的类型struct date是一个 已经说明过的结构体类型。若事先没有说明这一类型 ,则以上结构体类型说明可改写成如下:
struct student { char name[10];
char sex; struct { int year; int month; int day; } birthday; float score[5]; };
2020/2/6
14.2.2 结构体类型的变量的定义
定义结构类型变量由以下四种方法:
1.先定义结构,再说明结构变量。例如:
struct student
{ int number; char name[31];
short age;
char sex;
char grade;
char address[101];
Student body1,body2;
2020/2/6
typedef定义的一般形式为: typedef 原类型名 新类型名
有时也可用宏定义(#define)来代替 typedef的功能,但是宏定义是由预处理完成的 ,而typedef则是在编译时完成的,它并不只是 作简单的字符替换。
2020/2/6
2020/2/6
2.结构数组的指针 设pt指向的结构变量 pt->number pt指向的结构变量的成员的
number的值 pt->number++ pt指向的结构变量的成员的
number的值,使用后加1 ++pt->number pt指向的结构变量的成员的
number先加1,再使用
2020/2/6
char a1[20],a2[20],s1[20],s2[20]
2020/2/6
typedef struct stu { char name[20]; int age;
char sex; } Student;
定义Student表示struct stu的结构类型,然 后可用Student来说明结构变量:
在定义结构体数组时,对其作初始化赋值, 可不指定数组的长度,此时数组长度等于赋值 项数。由于数组中的每个元素都是一个结构体 ,所以通常将其成员的值依次放在一对大括号 中,以便区分各个元素。例如: struct bookcard { char num[5];
float money; } bk[3]= { {“NO.1”, 32.5}, {“NO.2”, 40.0}, {“NO.3”, 65.5} };
2020/2/6
2.动态链表的创建和删除 动态链表的创建是指在程序执行时,建立起
一个一个节点,并将它们连接成一串,形成一 个链表。
动态链表不再是用时,应及时的删除,以释 放动态链表占用的内存。
2020/2/6
14.3 共用体
共用体的类型说明和变量的定义方式与结构 体的类型说明和变量定义方式完全相同,不同 的是共用体变量中的所有成员占有同一个存储 空间。 14.3.1 共用体类型的说明和变量定义 1.共用体类型说明 共用体类型说明的一般形式为:
2020/2/6
14.2.7 链表 使用数组存放数据,必须事先定义好数组的长度。
但数组元素的插入和删除会引起大量数据的移动,从 而使简单的数据处理变得非常低效。为了能有效地解 决这些问题,一种称为"链表"的结构类型得到了广泛的 应用。
链表是一种动态数据结构,它的特点是用一组任意 的存储单元(可以是连续的,也可以是不连续的)存放数 据元素。链表中每一个元素称为"结点",每一个结点都 是由数据域和指针域组成的。每个结点中的指针域, 包含一个指针,指向下一个结点;也可以多个指针指 (如双向链表)。