结构体与共用体习题

合集下载

共用体类型,结构体类型

共用体类型,结构体类型

共⽤体类型,结构体类型⽬录1.1 含义:⽤同⼀段内存存放不同类型的变量,也就是使⽤覆盖技术,后⼀个数据覆盖前⾯的数据,使⼏个不同的变量共享同⼀段内存的结构成为共⽤体。

往往在数据处理中,有时需要对同⼀段内存空间安排不同的⽤途,这时⽤共⽤体类型⽐较⽅便。

1.2 形式union Data{int i;char ch;float f;}a,b,c;1.3 引⽤共⽤体变量的⽅式如a.f;1.4 共⽤体类型的数据特点(1).共⽤体与结构体⾮常相似,结构体变量所占内存长度等于各个成员占内存长度的和,每个成员分别占有⾃⼰的内存,⽽共⽤体变量所占内存长度等关于最长的成员的长度。

(2).同⼀段内存可以存放⼏种不同类型的成员,但每⼀瞬间只能存放其中⼀个成员。

(3).可以对共⽤体变量初始化,但初始化表中只能有⼀个常量,union Data a = {16}。

(4).共⽤体变量中起作⽤的是最后⼀次被赋值的成员变量。

(5)共⽤体变量的地址和它的各个成员的地址都是同⼀地址。

(6)不能对共⽤体变量名赋值,也不能企图引⽤变量名来得到⼀个值,如a = 1 不对。

(7)可以使⽤共⽤体变量的指针做函数参数。

(8)共⽤体类型可以出现在结构体类型定义中,也可以定义共⽤体数组,繁反之也可以。

举⼀个简单的例⼦如下:1 #include<stdio.h>2struct3 {4int num;5char name[10];6char sex;7char job;8 union9 {10int clas;//成员班级11char posion[10];//成员职务12 }category; //成员共⽤体变量13 }person[2]; //定义结构体数组,有两个元素14int main()15 {16int i;17for (int i = 0; i < 2; i++)18 {19 printf("输⼊两个成员的数据信息:");20 scanf_s("%d %s %c %c",&person[i].num,&person[i].name,&person[i].sex,&person[i].job);21if (person[i].job == 's')22 scanf_s("%d",&person[i].category.posion);23else if (person[i].job == 't')24 scanf_s("%s", &person[i].category.posion);25else26 printf("输⼊有误");27 }28 printf("\n");29 printf("详细信息如下:");30for (int i = 0; i < 2; i++)31 {32if (person[i].job == 's')33 printf("%-6d,%-6s%,%-6c,%-6d\n", person[i].num, person[i].name, person[i].sex, person[i].job, person[i].category.clas); 34else35 printf("%-6d,%-6s%,%-6c,%-6d\n", person[i].num, person[i].name, person[i].sex, person[i].job, person[i].category.posion);36 }37return0;38 }View Code 含义:由不同类型数据组成的组合型数据结构成为结构体。

C程序设计(第四版)第7章结构体与共用体

C程序设计(第四版)第7章结构体与共用体

7.1.1
结构体类型的定义
结构体在说明和使用之前,必须先由用 户自己定义。结构体定义的一般形式如下: struct 结构体名 { 成员类型说明符 成员项1; 成员类型说明符 成员项2; …… 成员类型说明符 成员项n; };
其中: 1、struct是C语言中定义结构体的关键字。 2、成员类型说明符是说明每个成员项的数 据类型,可以是基本数据类型,也可以是数组 类型,还可以是另一个已定义的结构体类型。 3、成员名可以和程序中的变量名相同,两 者不代表同一对象。 4、要注意,在结构体定义中的右括号后应 该有分号。
7.1.6
指向结构体的指针
一个结构体类型的数据在内存中都占据一定 的存储空间,我们可以定义一个指针来指向该 结构体类型的数据,该指针变量称为指向结构 体的指针,简称之为结构体指针。我们可以通 过结构体指针来访问结构体类型的数据,如结 构体变量、结构体数组。指向结构体的指针变 量说明形式如下: struct 结构体类型名 *结构体指针变量名;
main() { struct student stu1; struct student *p; p=&stu1; stu1.num=50201001; gets(); stu1.score=89.5;
printf(“No:%ld\nName:%s\nScore:%4.1f\n”,stu1 .num,,stu1.score); printf(“No:%ld\nName:%s\nScore:%4.1f\n”,(*p). num,(*p).name,(*p).score);
3、结构体数组应用举例 【例7-2】现有三个候选人(每个候选人的ID 号分别是1、2、3),选举人投票进行选举, 编写程序统计出每个候选人的得票结果。 程序如下: #define NUM 30 #include <stdio.h> struct elector { int id; char name[20]; int count;

《C语言程序设计》(第2版)苏小红-13章 12

《C语言程序设计》(第2版)苏小红-13章 12
作用
2021/7/31
40/60
struct sample {
short i; char ch; float f; };
union sample {
short i; char ch; float f; };
2021/7/31
共用体
【例12.8】
printf("%d\n", sizeof(struct sample));
Before function call:1999/04/23 After function call:2000/05/22
指针作函数形参 实参必须为地址值
2021/7/31
33/60
struct date
{
int year; int month;
结构体变量
int day; };
作函数返回值
struct date Func(struct date p)
2021/7/31
【例12.3】利用 结构体数组计 算每个学生的 平均分
25/60
结构体指针的定义和初始化
如何定义指向结构体变量的指针?
pt STUDENT stu1; STUDENT *pt; pt = &stu1;
等价于
STUDENT *pt = &stu1;
stu1 成员1 成员2 成员3 成员4
i ch
f
8个字节
printf("%d\n", sizeof(union sample));
0x0037b00
cfih
4个字节 41/60
共用体
sizeof(union number)取决于占空间最多的那个成员 变量
同一内存单元在每一瞬时只能存放其中一种类型的成员 起作用的成员是最后一次存放的成员,不能作为函数参数 不能进行比较操作,只能对第一个成员初始化

实验9-1 结构体与共用体

实验9-1 结构体与共用体

实验9-1 结构体和共用体(1)1【实验目的】掌握结构体类型变量的定义和使用掌握结构体类型数组的概念和应用了解链表的概念和操作方法【实验要求】掌握结构体类型变量的定义和使用了解链表的概念和操作方法【实验环境】(1) Microsoft XP操作系统(2) Microsoft VC++ 6.0【实验内容】1、第几天/acmhome/problemdetail.do?&method=showdetail&id=1071描述:给定一个日期,输出这个日期是该年的第几天。

输入输入数据有多组,每组占一行,数据格式为YYYY-MM-DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。

输出:对于每组输入数据,输出一行,表示该日期是该年的第几天。

样例输入:2000-01-01样例输出:12、学生成绩/JudgeOnline/problem.php?id=1518题目描述现有有N个学生的数据记录,每个记录包括学号、姓名、三科成绩。

编写一个函数input,用来输入一个学生的数据记录。

编写一个函数print,打印一个学生的数据记录。

在主函数调用这两个函数,读取N条记录输入,再按要求输出。

N<100输入:学生数量N占一行每个学生的学号、姓名、三科成绩占一行,空格分开。

输出:每个学生的学号、姓名、三科成绩占一行,逗号分开。

样例输入2a100 zhblue 70 80 90b200 newsclan 90 85 75样例输出a100,zhblue,70,80,90b200,newsclan,90,85,753、平均分和最高分/JudgeOnline/problem.php?id=1519题目描述有N个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入N个学生的数据,要求打印出3门课的总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩)输入:学生数量N占一行每个学生的学号、姓名、三科成绩占一行,空格分开。

C语言11结构体与共用体

C语言11结构体与共用体

struct [结构体名]
{
类类结述…型 型结构…不标 标构体…分识 识的类…配符 符组型…内织定.存成 成形义员员式描名名;;
};2020/5/11
struct student { char name[20];
unsigned int nuloat score[3]; }; 3
} 2020/5/11 stu;
7
• 结构体变量的初始化
struct 结构体名
{ 类型标识符 成员名;
struc类t 型stu标de识nt符 成员名; { in…t n…u…m;……. }; char name[20]; strucctha结r 构sex体; 名 结构体变量={初始数据};
int age; strucctha结r a构dd体r[名30]; }{;stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Road”}; struc类t 型stu标de识nt符stu成1=员{11名2,;“Wang Lin”,‘M’,19, “200 Beijing Road”};
类型标识符 成员名;
……………. } 结构体变量={初始数据};
2020/5/11
8
• 结构体数组的定义和内存分配
形式一:
形式二:
struct student
struct student
{ int num;
{ int num;
char name[20];
char name[20];
char sex;
stu[1]
main()
age
{ struct student *p;
num
for(p=stu; p<stu+3; p++)

第8章 结构体0424

第8章 结构体0424
类型标识符 成员名; };
示例: struct AList { char name[20]; char tel[12]; char gendar; int age; char e_mail[40]; char addr[30]; };
/*姓名*/ /*电话*/
/*性别*/ /*年龄*/ /*电子邮件*/ /*地址*/
printf(“输入标志:’T’为教师,’S’为学生!”);
scanf(“%c”, &Member[i]. flag);
if( Member[i]. flag==‘S’)
gets(Member[i]. Unit.Depa);
else gets(Member[i]. Unit. Course);
}
for( i=0; i<30; i++ ) {
puts(Member[i]. Unit.Depa);
else
puts(Member[i]. Unit. Course);
}
8.6 枚举类型
如果一个变量只有几种可能的值,可以定 义为枚举类型。
“枚举”是指将变量的值一一列举出来, 变量的值只限于列举出来的值的范围。
声明枚举类型用enum开头。 引入枚举类型的目的是为了方便编程人员
#include <stdlib.h>
#include < stdio.h >
struct stud
/*定义结构体数据类型*/
{
long no;
/*学号*/
char name[20];
/*姓名*/
char gendar;
/*性别*/
int age;
/*年龄*/
float score;

结构体练习题

结构体练习题

结构体练习题1.设有如下说明语句:struct ex{ int x;float y; char z;} example;则下面的叙述中不正确的是________。

A)struct 是结构体类型的关键字B)example是结构体类型名C)x、y、z都是结构体成员名D)struct ex是结构体类型正确答案:B(知识点:结构体类型及结构体变量的定义)试题分析:example是结构体类型的变量名。

2.设有如下定义:struct ss{ char name[10];int age;char sex;}std[3],*p=std;下面各输入语句中错误的是________。

A)scanf("%d",&(*p).age); B)scanf("%s",&);C)scanf("%c",&std[0].sex); D)scanf("%c",&(p->sex));正确答案:B(知识点:结构体数组、指向结构体数组的指针、结构体变量的引用)3.设有如下定义:struct sk{ int a;float b;}data;int *p;若要使p指向data中的a域,正确的赋值语句是________。

A)p=&a B)p=data.a; C)p=&data.a D)*p=data.a正确答案:C(知识点:结构体成员地址的引用、指向结构体成员的指针)4.以下选项中不能正确把c1定义成结构体变量的是________。

A)typedef struct B)struct color c1{int red; {int red;int green; int green;int blue;}COLOR int blue;};COLOR c1;C)struct color D)struct{int red; {int n;int green; int green;int blue;}c1; int blue;}c1;正确答案:B(知识点:结构体变量的定义、自定义变量)5.有以下程序:struct s{int x,y;}data[2]={10,100,20,200};main(){struct s *p=data;printf("%d\n ",++(p->x));}程序运行后的输出结果是________。

结构体与共用体

结构体与共用体

一、结构体(structure)
C语言允许用户自己指定这样一种数据结构,即将不同类型的数据组合成一个有机的整体以便于引用。

二、共用体
使几个不同的变量共占同一段内存的结构。

三、枚举类型
1、如果一个变量只有几种可能的值,可以用此方法定义。

2、声明枚举类型用enum开头。

3、说明:(1)在C编译中,对枚举元素按常量处理;
(2)C语言编译按定义时的顺序使它们的值为0,1,2…,也可以改变枚举元素的值,在定义时由程序员指定;
(3)枚举值可以用来作判断比较;
(4)一个整数不能直接赋给一个枚举元素,只有进行强制类型转换才能赋值:workday=(enum weekday)2;
四、用typedef定义类型。

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

第十一章 结构体与共用体
1、 填空
(1) 为了建立如图所示的存储结构(即每个结点含两个域,data 是数据域,next 是指向结点的指针域),请填空。

Struct link
{char data;
;
}node;
(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);}
2、 选择
(1) 根据以下定义,能输出字母M 的语句是
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,};
(2) 对整个结构能够进行的操作是 。

A. 对结构进行赋值
data next
B.对结构进行存取
C.对结构进行运算
D.对结构进行&操作
(3)不是结构类型的特点的选项为。

A.结构体变量可以有不同类型的成员
B.结构体中的成员都占有存储空间
C.结构体变量既可以做函数参数,又可以从函数中返回
D.结构体变量的成员既可以读又可以写
3、判断
(1)能在一个存储区内处理不同的类型的数据叫结构。

()
(2)在编译时对结构类型不分配空间,只能对变量分配空间。

()
(3)结构一旦定义,系统就给它分配所需的内存单元。

()
4、程序设计
(1)设有以下结构类型说明:
struct stud
{char num[5],name[10];
int s[4];
double ave;
}
请编写:
<1>readrec把30名学生的学号、姓名、四项成绩及平均分放在一个结构体数组中,学生的学号、姓名和四项成绩由键盘输入,然后计算出平均分放在结构提对应的域中。

<2>函数writerec输出30名学生的记录。

<3>main函数调用readrec函数和writerec函数,实现全部程序功能。

(2)编写一个C程序,要求定义一个有关日期的结构体类型变量(包括年、月、日),从键盘为该变量中的各成员输入数据,然后再将输入的日期显示输出。

(3)建立50名学生信息结构,每个学生的信息包括:学号、姓名、出生年月日及平均成绩,要求从键盘上输入50名学生的信息,然后按一行显示一名学生的信息的方式显示50名学生的信息。

(4)建立10名学生的结构,其中包括学生的姓名、性别、学号及五门课的成绩。

编一个程序输入10名学生的信息并输出。

相关文档
最新文档