C语言题库第8章 结构体和共同体

合集下载

第8章练习 结构体与共用体

第8章练习     结构体与共用体

第十一章习题结构体与共用体1.以下C语言共用体类型数据的描述中,不正确的是( )A) 共用体变量占的内存大小等于所需内存最大的成员所占的内存B) 共用体类型可以出现在结构体类型定义中C) 在定义共用体变量的同时允许对第一个成员的值进行初始化D) 同一共用体中各成员的首地址不相同2.下列对结构体类型变量定义不正确的是( )A)struct teacher B) struct{ int num; { int num;int age; }teach1; int age; }teach1,teach2;C) struct D) struct teacher{ int num; { int num;int age; }teacher; int age; };struct teacher teach1; struct teacher teach1;3.若有定义:struct teacher{ int num;char name[10];char sex;int age;float score;}teacher1;则变量teacher1所占用的内存字节数是( )A) 5 B)14 C) 19 D) 204.以下程序的运行结果是( )#include <stdio.h>union Utype{ int i; float y; }u[2];void main(){ printf("sizeof(u):%d\n",sizeof(u)); }A)2 B) 4 C) 6 D) 85.设有以下定义语句:struct student{ int num; char name[10]; float score; }wang,zhang;则变量wang所占的内存字节数是( )A) 14 B) 16 C)18 D) 206.设有如下定义语句:union u_type{ int i; double x; float f; };struct str_type{ char str[100]; union u_type u[2]; };则语句“printf("%d",sizeof(struct str_type));”的输出结果是( )A)100 B) 116 C) 120 D) 200第 1 页共2 页7.下面程序的输出结果为( )#include <stdio.h>void main (){ enum Weekday {sun=7, mon=1, tue, wed, thu, fri, sat};enum Weekday day=sat;printf (“%d\n”, day); }A) 7 B) 6 C) 5 D) 48.对枚举类型进行定义,不正确的是( )A) enum b{1,2,3}; B)enum a{A,B,C}; C)enum c{D=3,E,F}; D) enum d{X=0,Y=5,Z=9};9.假定已有如下变量说明和枚举定义:char ch;int j, k;enum day{sun, mon, tue, wed, thu, fri, sat};int a[sat];判断下列语句是否符合语法规则,结果是( )char a; /*语句1*/j+k=j; /*语句2*/if(a[mon]>0) j++; /*语句3*/A)语句2错误,其他正确 B)语句1正确,其他错误C)语句3正确,其他错误 D) 语句1错误,其他正确10.若有以下说明和定义typedef int *INTEGERINTEGER p,*q;以下叙述正确的是( )A) p是int型变量B) p是基类型为int的指针变量C) q是基类型为int的指针变量D) 程序中可用INTEGER代替int类型名11.设有如下定义:typedef int *INTEGER;INTEGER p,*q;则( )是正确的叙述A)p是int型变量 B)q是基类型为int的指针变量C)p是基类型为int的指针变量 D) 程序中可用INTERGER代替int类型名12.若有以下类型说明,叙述正确的是( )typedef struct{ int num;char *name;int score;}STU, *PSTU;A) STU 是变量名 B) PSTU是变量名C) PSTU是指向结构体类型的STU的指针类型名 D) 类型说明语句有错误第 2 页共2 页。

c语言结构体共用体数据类型求大小例题

c语言结构体共用体数据类型求大小例题

c语言结构体共用体数据类型求大小例题(原创版)目录一、C 语言结构体和共用体的概念二、结构体和共用体的大小计算方法三、例题解析四、总结正文一、C 语言结构体和共用体的概念C 语言中,结构体和共用体是两种特殊的数据类型,它们都可以用来描述一个复合数据类型。

结构体和共用体的主要区别在于它们存储数据的方式不同。

结构体是一种复合数据类型,它可以包含多个不同类型的成员变量。

结构体中的成员变量按照定义的顺序排列,并且每个成员变量都有一个唯一的名字。

结构体可以看作是一个数据容器,它可以存储多个相关类型的数据。

共用体是一种特殊的结构体,它的每个成员变量都共享同一段内存空间。

共用体的每个成员变量都有一个基地址,它们之间的关系是连续的。

共用体的大小等于其最大成员变量的大小。

二、结构体和共用体的大小计算方法结构体和共用体的大小计算方法相同,都是按照定义的顺序依次计算每个成员变量的大小,并累加得到总体大小。

需要注意的是,结构体和共用体的大小通常会进行对齐处理,以提高数据访问的效率。

三、例题解析假设有一个结构体如下:```cstruct example {int a;char b;float c;};```首先,我们需要知道每个成员变量的大小。

在 32 位系统下,int 类型占用 4 个字节,char 类型占用 1 个字节,float 类型占用 4 个字节。

因此,结构体 example 的大小为:```size = 4(int a 的大小) + 1(char b 的大小) + 4(float c 的大小)= 9```接下来,我们需要考虑对齐问题。

在 32 位系统下,数据对齐的粒度是 4 个字节。

因此,结构体 example 的大小应该为 4 的倍数。

由于 9 不是 4 的倍数,所以需要进行对齐处理。

将结构体 example 的大小调整为 12,这样每个成员变量都可以从 4 的倍数地址开始存储。

```size = 12```因此,结构体 example 的大小为 12 字节。

C语言结构体与共同体

C语言结构体与共同体

C语言结构体与共同体C语言中结构体和共同体是两种用于组织和管理数据的重要概念。

它们可以帮助程序员更有效地管理和操作数据,提高程序的可读性和可维护性。

一、结构体(Structures)结构体是一种由不同类型的数据成员组成的数据类型,它允许程序员将不同类型的数据组织在一起并使用一个名称来引用它们。

结构体可以包含各种数据类型,例如整数、字符、数组或甚至其他结构体。

结构体的定义通过使用关键字struct来实现。

例如,下面的代码定义了一个名为Person的结构体,其中包含姓名、年龄和性别这三个成员:```cstruct Personchar name[50];int age;char gender[10];};```结构体定义可以在程序的任何地方,通常在函数外部定义,使得它在整个程序中都可见。

结构体的创建和初始化可以使用以下格式:```cstruct Person p1; // 创建名为p1的结构体变量struct Person p2 = {"John", 25, "Male"}; // 创建名为p2的结构体变量并初始化其成员```结构体成员可以通过`.`操作符来访问,例如:```cprintf("Name: %s\n", );```结构体可以作为函数的参数传递,也可以作为函数的返回值。

通过传递结构体作为参数,可以避免传递多个参数,提供了一种有效地传递多个相关数据的方法。

例如,下面的代码演示了一个函数,该函数接受一个名为p的Person结构体作为参数,并打印出其成员的值:```cvoid printPerson(struct Person p)printf("Name: %s\n", );printf("Age: %d\n", p.age);printf("Gender: %s\n", p.gender);```二、共同体(Unions)共同体是一种特殊类型的结构体,它允许不同类型的成员共享同一块内存空间。

《C语言程序设计》第八章 结构体、共同体和枚举

《C语言程序设计》第八章 结构体、共同体和枚举

{ max=stud[ i ].score;temp= i;} p=stud + temp; printf ( “\n The maximum score:\n” ); printf ( “No:%d \nname:%s\nscore:%4.1f\n”,p->num,p->name,
p->score );
}a ;
main() { a.ch[ 0 ]=13;
a.ch[ 1 ]=0;
printf (“%d\n”,a.i );
}
A. 13
B. 14
C. 208
D. 209
8.10 下面对 typedef 的叙述中不正确的是( )。 A.用 typedef 可以定义各种类型名但不能用来定义变量 B.用 typedef 可以增加新类型 C.用 typedef 只是将已存在的类型用一个新的标识符来代表 D.使用 typedef 有利于程序的通用和移植
对后一种举例如下: struct student {┇
}; struct student stud,arr[3],*p; 结构体变量的引用有三种形式:
106
第八章
结构体、共同体和枚举
1. 结构体变量名.成员名 2. (*指针变量名).成员名 3. 指针变量名->成员名 其中圆点(.)称为成员运算符,箭头(->)称为结构 指向运算符,C 语言中,圆点运算符和箭头运算符都是优先 级最高的运算符。 结构体变量的输入和输出,它必须按成员项逐个地输入 或输出,不能将结构体变量作整体地输入或输出。 共用体类型,是指将不同的成员项存放于同一段内存单 元,共用体的大小与其组成成员中字节数最大的那个成员相 同。共用体变量的定义与引用类似于结构体变量的定义与引 用。枚举类型指明这种类型的变量取值只能是指定的若干个 枚举常量之一。每个枚举常量代表一个具体的值。 用 typedef 可定义新的类型名来代替已有的类型名。其方法如下: 1. 先按定义变量的方法写出定义体; 2. 将变量名换成新类型名; 3. 在最前面加上 typedef; 4. 用新类型名去定义变量。

c语言结构体与共同体

c语言结构体与共同体

struct date {int month,day,year;};
struct student { int num; char name[20]; char sex; int age; struct date birthday; char addr[30]; }student1,student2;
struct student { long number; char name[20]; char sex; int age; float score; char addr[30];}; struct student stu[3];
结构体数组的物理含义:
表示实体(或记录)的个数。
结构体数组的初始化
4、要点:
方法一: struct student { int number; char name[20]; char sex; int age; float score; char addr[30]; }student1,student2;
方法二: struct student { int number; char name[20]; char sex; int age; float score; char addr[30]; }; struct student student1,student2;
student1
student2 struct student所占存储空间的 大小为:
各成员变量所占存储单元字节数 之和。sizeof(student)
结构体类型变量的引用
一、原则:通过结构体的成员来引用结构体变量。 二、成员的引用方法为:结构体变量名.成员名 三、要点: 1.结构体变量不能整体输入输出,只能对它的成员进行操作。 如:student1.num; 2.如果成员本身又是一个结构体类型,则要使用若干个成员运算符, 逐级找到最底层的成员。 如:student1.birthday.day 3.成员变量可以象一般的变量一样进行各种运算,只是在运算时要 加上“.”运算符。 4.可以引用成员的地址。

2016C语言习题全集及答案:第八单元结构体和共用体

2016C语言习题全集及答案:第八单元结构体和共用体

第八单元结构体和共用体一、选择题1、说明一个结构体变量时系统分配给它的内存是。

A. 各成员所需要内存量的总和B. 结构体中第一个成员所需内存量C. 成员中占内存量最大者所需的容量D. 结构中最后一个成员所需内存量2、 C 语言结构体类型变量在程序执行期间。

A. 所有成员一直驻留在内存中B. 只有一个成员驻留在内存中C. 部分成员驻留在在内存中D. 没有成员驻留在内存中3、设有以下说明语句struct stu { int a ; float b ; } stutype ;则下面的叙述不正确的是。

A. struct 是结构体类型的关键字B. struct stu 是用户定义的结构体类型C. stutype 是用户定义的结构体类型名D. a 和b 都是结构体成员名4、程序中有下面的说明和定义struct abc { int x;char y;}struct abc s1,s2;则会发生的情况是。

A. 编译出错B. 程序将顺利编译、连接、执行C. 能顺利通过编译、连接、但不能执行D. 能顺利通过编译、但连接出错5、有如下定义struct person { char name[9]; int age;};struct person class[10]={ " Johu", 17,"Paul", 19,"Mary", 18,"Adam",16};根据上述定义,能输出字母M 的语句是。

A. prinft(" %c\n",class[3].name);B. printf(" %c\n",class[3].name[1]);C. prinft(" %c\n",class[2].name[1]);D. printf(" %c\n",class[2].name[0]);6、下面程序的输出是。

C语言程序设计课件源程序及习题答案第8章结构体和共用体及其应用

C语言程序设计课件源程序及习题答案第8章结构体和共用体及其应用

1
Y 调用函数fnGetKey() iKey=fnGetKey();
N iKey==LEFT||iKey==RIGHT
Y 输出left&right
iKey==UPPER||iKey==DOWN N
Y
输出up&down
iKey==ESC N
Y 结束
小结:
1.C最初引入共用体的目的,一是节省存储空间,另外是可以 将一种类型的数据不通过显式类型转换而作为另一种类型数据 使用,如问题8.9的解决方法。
试一试 问题8.5:
修改问题8.2,要求在函数中实现计算、 比较平均分并且显示平均分数较高的学 生信息的功能。
问题8.6:
修改问题8.4,在函数中将N个学生的数据输 入并统计总分和求出最高分的学生并显示。
主函数流程图
想一想
在问题8.3的代码中,如果要求对输入 数据对输入的年、月、日进行合法性校 验,比如年是在1989-2019年之间, 月是在1-12之间,日是1-30之间, 怎么解决?如果进一步要求根据月份而 确定每月的天数,又该怎么办呢
一般的引用形式为:
数组名[下标].成员名
问题8.4:试一试
一个学习小组有N名学生,学生的信息 包含学号、姓名、语文、数学、英语三 门课的成绩,从键盘上输入N名学生的 信息,要求统计总成绩并显示总分最高 的学生信息。
解题步骤
1. 以学生的信息数据项为成员,定义结 构体类型和相应的结构体数组
2. 循环输入每个学生的信息,统计总成 绩,存储在结构体数组中
练一练
尝试编写学生管理系统,定义学生信息 的结构体类型,分别用函数实现数据输 入、数据输出、计算每个人的平均分, 进行排序和成绩插入等操作。

结构体与共同体习题

结构体与共同体习题
A.25 B.30 C.18 D.8
4、若已建立下面的链表结构,指针p,s分别指向图中所示的结点,则不能将所指的结点插入到链表末尾的语句组是( )。
节点总是插入在链表的末尾。链表的头指针作为函数值返回。链表最后一个节点的next域放入NULL,作为链表结束的标志。data为字符型数据域,next为指针域。读入时字符以#表示输入结束(#不存入链表)。请填空。
int y[4];
char z[8];
} MYTYPE;
MYTYPE them;
main()
{ printf("%d\n",sizeof(them));
}
A.32 B.16 C.8 D.24
6.以下函数creatlist用来建立一带头节点的单链表,链表的结构如下图所示,新的
A. s->next=null;p=p->next;p->next=s;
B. p=p->next;s->next=p->next=;p->next=s;
C. p=p->next;s->next=p;p->next=s;
char *aa[]={"AA","BB","CC","DD"};
printf("%s%s%s\n",aa[em1],aa[em2],aa[em3]);
}
D. p=(*p).next;(*s).next=(*p).next;(*p).next=s;
5、下列程序的执行结果为( )。
struct s1
{ char *s;
int i;
struct s1 *sip;

第8章 C语言的结构体和共同体

第8章 C语言的结构体和共同体
6
C语言教学 幻灯片版 第八章 结构体、共用体和枚举类型 语言教学 结构体、
8.1 结构体
• 定义结构体类型的同时定义结构体变量 – 一般形式: 一般形式:
例 struct student struct 结构体名 int num; { { char name[20]; 成员名; 类型标识符 成员名; char sex; 成员名; 类型标识符 成员名; int age; ……………. float score; 变量名表列; }变量名表列; char addr[30]; }stu1,stu2;
7
C语言教学 幻灯片版 第八章 结构体、共用体和枚举类型 语言教学 结构体、
8.1 结构体
• 直接定义结构体变量 – 一般形式: 一般形式:
例 struct struct int num; { { char name[20]; 成员名; 类型标识符 成员名; char sex; 成员名; 类型标识符 成员名; int age; ……………. float score; }变量名表列; 变量名表列; char addr[30]; }stu1,stu2; 用无名结构体直接定义 无名结构体直接定义 变量只能一次 变量只能一次
8.1 结构体
8.1.1
结构体类型声明
结构体是一种构造数据类型 结构体是一种构造数据类型 构造 用途: 不同类型的数据组合成一个整体 的数据组合成一个整体-------自 用途:把不同类型的数据组合成一个整体 自 定义数据类型 定义数据类型 合法标识符 可省:无名结构体 – 结构体类型定义 struct [结构体名 结构体名] 结构体名 { 成员名; 类型标识符 成员名; 成员名; 类型标识符 成员名; struct是关键字, ……………. 是关键字, 不能省略 成员类型可以是 }; ; 基本型或构造型

C语言程序设计实验结构体与共用体

C语言程序设计实验结构体与共用体

实验8:结构体与共用体一、实验目的1.掌握结构体类型变量的定义和使用;2.掌握共用体的概念与使用。

二、实验内容编写程序,实现如下功能:1.定义结构体变量,用它表示考生的学号、姓名(用英文表示)以及语文、数学、外语成绩。

输入两个考生的信息和各门课成绩并比较(按总分进行高低排序;当总分相同时,依次按语、数、外的顺序排序)。

2.设有一个教师与学生通用的表格,数据项包括:姓名、年龄、职业和单位,其中“职业”一项可分为“教师”和“学生”两类;对“单位”一项,教师填入“系部名称”(用字符类型表示),学生填入“班级编号”(用整型量表示)。

编程输入人员数据,再以表格输出。

三、实验结果记录第1题上机调试后的最终代码及上机调试结果(截图):程序代码运行结果1.总分不同2.总分相同的情况2.1总分完全相同2.2总分相同但语文成绩不同2.3总分相同、语文成绩相同但数学成绩不同第2题上机调试后的最终代码及上机调试结果(截图):程序代码运行结果1.正确输入2.错误输入四、实验小结:经过此次实验,我熟悉掌握了结构体的定义和使用,同时也掌握了共用体的使用。

对于程序1,基本思路是通过结构体定义变量,采用if-else语句嵌套,当总分相同且语文数学成绩均相同时就不必再进行一轮的if语句判断,因为此时两考生的英语成绩一定相同。

对于程序2,在结构体中定义了共用体,可对不同职业进行不同单位的划分。

基本思路是用malloc函数进行动态内存分配,确定要输入的样本数量,再进行数据的输入,在单位数据的输入时需要判断输入对象是学生还是老师,此时要用strcmp函数进行比较判断,输入结束后打印表格,用转义字符\t让表格更加美观,最后通过free进行内存释放。

8章 c语言程序设计 结构体,共用体与枚举类型

8章 c语言程序设计 结构体,共用体与枚举类型

当通过指针变量引用结构体成员时,若表达式中含有++,-等运算符时,应根据运算符优先级来确定表达式含义。例: ++ p-> score 相当于++( p-> score),结果使score加1。 (++ p)-> score 则再访问成员score之前,使p加1。 例:struct abc {char a[20]; int *pt; }p; pt是结构体类型中的成员,则表达式*p->pt引用的是pt所 指存储单元; *p->pt++是再引用了pt所指存储单元后,使 指针pt加1;( *p->pt)++使pt所指向的单元的值加1;而 *p ++ ->pt在访问了pt所指存储单元后,p加1。
例:struct std_info {char name[9]; char sex[3]; float score; struct date birthday; }stud,arr[5],*p; p=& stud; (1)若要引用结构体类型变量stud 中score成员项,可写成: stud. score p-> score *(p). score arr[1] .score /*通过结构体变量引用*/ /*通过指针变量引用*/ /*通过指针变量引用*/
2.将一个结构体变量作为一个整体赋给另一具有相同类型的 结构体变量 例:struct {char name[15]; int num; }stud1,stud2={“wangfang”,01}; 执行赋值语句: stud1=stud2; 则stud2中把每个成员的值依次赋给stud1中对应的同名成员。 C不允许把一个结构体变量作为一个整体进行输入和输出。 例: scanf(“%d”,& stud1); printf(“%d”,stud1);都是错误的 结构体变量有多个不同类型的数据项,必须逐个用相应的格 式像普通变量一样输入和输出。 scanf(“%s,%d”, stud1. name ,& stud1.num); 注意name[15]是数组,数组名本身就是地址。

C语言程序设计 Chapter8 结构体与共用体

C语言程序设计 Chapter8 结构体与共用体

struct date_type { int year; 结构体数组 int month; int day; 结构体数组的定义 }; ; struct stud_type { char name[10]; long num; char sex; struct date_type birthday; float score; char address[10]; }s1[3]; struct stud_type s2[5];
struct ym_type { 输入一个职工的工资信息, 例. 输入一个职工的工资信息,整体 int y; 赋值给另一个变量,在屏幕上输出。 赋值给另一个变量,在屏幕上输出。 int m; }; struct salary_type { char num[5]; char name[17]; struct ym_type ym; float salary; float other; float cost; };
#define N 5
char name[11]; int score; }t,s[N]; main() { /*输入基本信息 输入基本信息*/ 输入基本信息 /*选择排序成绩 选择排序成绩*/ 选择排序成绩 /*输出基本信息 输出基本信息*/ 输出基本信息 }
/*选择排序成绩 选择排序成绩*/ 选择排序成绩 for(i=0;i<N-1;i++) { k=i; for(j=i+1;j<N;j++) if(s[k].score<s[j].score) k=j; if(k!=i) { t=s[i]; s[i]=s[k]; s[k]=t; } }
第8章 结构体与共用体
概述
在事务处理中,常需要将一些关系密切但 在事务处理中 常需要将一些关系密切但类型不同的 并为其取一个整体名字, 数据项组织在一起,并为其取一个整体名字,形成一 并为其取一个整体名字 个结构。 语言中,就称其为 个结构。 语言中 就称其为结构体。 C语言中 结构体通常由不同数据类型的数据项(成员)组成 组成 一个结构体可包含若干成员,每个成员具有自己 一个结构体可包含若干成员 每个成员具有自己 的名字及数据类型。 的名字及数据类型。

c语言结构体共用体数据类型求大小例题

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语言:结构体和联合体(共用体)

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

C语⾔:结构体和联合体(共⽤体)
结构体:struct
1、结构体变量的⾸地址能够被其最宽基本类型成员的⼤⼩所整除。

2、结构体每个成员相对于结构体⾸地址的偏移量(offset)都是成员的整数倍。

3、结构体的总⼤⼩为结构体最宽基本类型成员⼤⼩的整数倍。

cpu的字长:
32位的cpu或64位的cpu
32位或64位指的是cpu的字长
字长实际上指得是cpu在访问内存时,⼀次可以读取的长度。

内存对齐(可以设置,⼀般是2的倍数,虽然浪费了空间,但是⽅便了cpu更好更快的取出数据):
char 4个字节
int 4个字节
int 8个字节
double 8个字节
联合体(共⽤体):union
1、所有的属性成员都共同相同的⼀块内存空间,⽽这个空间⼤⼩取⾃最⼤属性成员的⼤⼩。

属性成员在依次存值时,会产⽣覆盖。

2、联合变量的定义和初始化,使⽤第⼀个数据成员做初始化,{}不能省略。

C语言 第八章 结构体

C语言 第八章 结构体

共用体
3)直接定义联合变量 union {
int i;
float f; }num; 说明:(1)共用体变量的所有成员占有同一段内存,所占内存空 间是其成员中字节数最大的成员占有的字节数。
(2)共用体变量中可以定义许多不同类型的成员,但同一时刻只
有一个成员的数据有效。
共用体
4.共用体变量初始化 初始化时,只能对第一个成员的数据类型初始化。 例:union data num={10}; 正确 union data num={10,25.4}; 错误
结构体变量
方法三:定义结构体类型的同时定义结构体变量,省略结构体类型名
struct DATE{ int year; int month; int day;}; struct {
long int number;
char name[8]; int age;
char *sex;
struct DATE birthday; }stu1,stu2;
数据类型
数据类型
成员名1;
成员名2;
//成员表
……
};
结构体类型
2.结构体类型的定义: 说明: (1) struct是关键字,标识一个结构体类型定义的开头 (2)“结构体类型名”是表示该结构体类型的名称的标识符,可
类比int、char
(3)“成员表”是构成结构体类型的成份,由一个或多个成员构
成,每个成员有自己的成员名。各成员数据类型可以不同,既可以
枚举类型
3.枚举变量定义
方式一:类型和变量分开定义 enum WEEKDAY{Sun,Mon,Tue,Wed,Thu,Fri,Sat};//定义枚举类型 enum WEEKDAY w;//定义枚举变量w
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第八章结构体和共同体一、单项选择1. 若有以下定义:struct link{int data;struct link *next;}a,b,c,*p,*q;且变量a和b之间已有如下图所示的链表结构,若指针p指向a,指针q指向c。

则能把c插入到a和b之间形成新的链表的语句是( C )2. 若有以下程序段:int a=1,b=2,c=3;struct dent {int n ; int *m ;} s[3] = {{101,&a},{102,&b},{103,&c}};struct dent *p=s ;则以下表达式中值为2的是( D )。

3. 下面程序的运行结果是( D )。

#iunclude<stdio.h>int main ( ) {struct complx {int x; int y ;}cnum[2]={1,3,2,7} ;printf(“%d\n”,cnum[0].y/cnum[0].x*cnum[1].x) ;return 0;}二、程序设计1. /*学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s 中,请编写函数fun,它的功能是:按分数的高低排列学生的记录,高分在前。

注意:部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序: */#include <stdio.h>#define N 16typedef struct{ char num[10];int s ;}STREC;void fun (STREC a[]){/*********Begin*********//*********End**********/}int main (){FILE *wf,*in;STREC s[N]={{ "GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},{"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87},{"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},{"GA011",66},{"GA017",64},{"GA018",64},{"GA016",72}};int i;fun(s);printf("The data after sorted :\n");for (i=0; i<N; i++)printf("%s %4d\n",s[i].num,s[i].s);printf("\n");/******************************/in=fopen("in001.dat","r");i=0;while(!feof(in)){fscanf(in,"%s %d",s[i].num,&s[i].s);i++;}fun(s);wf=fopen("out.dat","w");for (i=0; i<N; i++)fprintf(wf,"%s %4d\n",s[i].num,s[i].s);fclose(wf);fclose(in);/*****************************/return 0;}【参考代码】int i,j;STREC t;for(i=0;i<N;i++)for(j=0;j<N-1-i;j++)if(a[j].s<a[j+1].s){t=a[j];a[j]=a[j+1];a[j+1]=t;}2. /*某学生的记录由学号、8门课成绩和平均分组成,学号和8门课的成绩已在主函数中给出。

请编写fun函数,它的功能是:求出该学生的平均分放在记录的ave成员中。

请自己定义正确的形参。

例如,若学生的成绩是85.5,76,69.5,85,91,72,64.5,87.5,则他的平均分应当是78.875。

注意:部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序: */#include <stdio.h>#define N 8typedef struct{ char num[10];double s[N];double ave;} STREC;void fun(STREC *p){/************Begin*************//************End**************/}int main(){FILE *wf,*in;STREC s={ "GA005 ",85.5,76,69.5,85,91,72,64.5,87.5};int i;printf("The %s's student data:\n", s.num); /*输出学号*/for(i=0;i<N;i++)printf("%4.1f\n",s.s[i]); /*输出各科成绩*/printf("\nave=%7.3f\n", s.ave); /*输出平均分*//******************************/in=fopen("in24.dat","r");wf=fopen("out24.dat","w");fscanf(in,"%s\n",s.num);for(i=0;i<8;i++)fscanf(in,"%lf\n",&s.s[i]);fun(&s);fprintf(wf,"ave=%7.3f\n", s.ave);fclose(in);fclose(wf);/*****************************/return 0;}【参考代码】int i;p->ave=0.0;for(i=0;i<N;i++)p->ave=p->ave+p->s[i];/*求各门成绩的总和*/p->ave=p->ave/N; /*求平均分*/3. /*N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。

请编写函数fun,它的功能是:求出平均分,由函数值返回。

例如,若学生的成绩是85,76,69,91,72,64,87,则平均分应当是78.625。

注意:部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:*/#include<stdlib.h>#include<stdio.h>#define N 8struct slist{ double s;struct slist *next;};typedef struct slist STREC;double fun(STREC *h){/***********Begin***************//***********End**************/}STREC *creat(double *s) /*创建链表*/{STREC *h,*p,*q;h=p=( STREC*)malloc(sizeof(STREC));p->s=0;while(i<N){q=( STREC*)malloc(sizeof(STREC));q->s=s[i];i++;p->next=q;p=q;}p->next=0;return h;}outlist(STREC *h){STREC *p;p=h->next;printf("head ");do{printf("->%4.1f ",p->s);p=p->next; /*输出各成绩*/}while(p!=NULL);printf("\n\n");}int main(){FILE *wf,*in;double s[N]={85,76,69,85,91,72,64,87},ave;int i;STREC *h;h=creat(s);outlist(h);ave=fun(h);printf("ave=%6.3f\n ",ave);/******************************/in=fopen("in25.dat","r");i=0;while(!feof(in)){fscanf(in,"%d\n",&s[i]);i++;}h=creat(s);outlist(h);ave=fun(h);wf=fopen("out25.dat","w");fprintf(wf,"%6.3f\n",ave);fclose(wf);fclose(in);/*****************************/return 0;}【参考代码】double av=0.0;STREC *p=h->next;/*p直接指向"头节点"的下一个节点,即第一个成绩*/while(p!=NULL){av=av+p->s; /*求总分数*/p=p->next;}return av/N; /*返回平均值*/4. /*已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。

请编写函数fun,该函数的功能是:找出成绩最低的学生记录,通过形参返回主函数(规定只有一个最低分)。

已给出函数的首部,请完成该函数。

注意:部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

相关文档
最新文档