结构体与共用体习题
- 格式:doc
- 大小:23.50 KB
- 文档页数:3
共⽤体类型,结构体类型⽬录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 含义:由不同类型数据组成的组合型数据结构成为结构体。
实验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占一行每个学生的学号、姓名、三科成绩占一行,空格分开。
结构体练习题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) 为了建立如图所示的存储结构(即每个结点含两个域,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名学生的信息并输出。