c);printf("输出:\n");printf("%c\n",(*p).b);printf("%d\n",p->c" />
当前位置:文档之家› 结构体共用体与枚举课后习题

结构体共用体与枚举课后习题

结构体共用体与枚举课后习题
结构体共用体与枚举课后习题

1.定义一结构体,成员项包括一个字符型、一个整型。编程实现结构体变量成员项的输入、输出,并通过说明指针引用该变量。

#include

void main()

{

struct a

{

char b;

int c;

}d,*p;

p=&d;

printf("输入:\n");

scanf("%c",&(*p).b);

scanf("%d",&p->c);

printf("输出:\n");

printf("%c\n",(*p).b);

printf("%d\n",p->c);

}

2.建立一结构体,其中包括学生的姓名、性别、年龄和一门课程的成绩。建立的结构体数组通过输入存放全班(最多45人)学生信息,输出考分最高的同学的姓名、性别、年龄和课

程的成绩。

#include

void main()

{

int i,b,n;

float a;

printf("请输入班级的人数:");

scanf("%d",&n);

getchar();

struct person

{

char name[20];

char sex[10];

int year;

float score;

}stu[45];

for(i=0;i

{

printf("请输入第%d个学生的名字、性别、年龄及成绩\n",i+1);

gets(stu[i].name);

gets(stu[i].sex);

scanf("%d",&stu[i].year);

scanf("%f",&stu[i].score);

getchar();

}

for(b=0,a=stu[0].score,i=0;i

if(a

{

a=stu[i].score;

b=i;

}

printf("成绩最优秀的是第%d个学生\n",b+1);

printf("名字:%s 性别:%s 年龄:%d 成绩:%f\n",stu[b].name,stu[b].sex,stu[b].year,stu[b].score);

}

3.已知一个班有45人,本学期有两门课程的成绩,求:

●所有课程中的最高成绩,以及对应的姓名、学号和课程编号。

●课程1、2的平均成绩,并求出两门课程都低于平均成绩的学生姓名和学号。

●对编号1的课程从高分到低分排序(注意其他成员项应保持对应关系)。

说明:要求定义结构体,第一成员项为学生姓名,第二成员项为学号,另外两个成员项为两门课成绩,并要求分别用函数完成。

(本人注:由于人数太多,故改为4人)

#include

#define N 4

struct person

{

char name[20];

long int number;

float score1;

float score2;

};

void shuru(struct person stu[N])

{

int i;

for(i=0;i

{

printf("请输入第%d个学生的名字、学号、成绩1及成绩2\n",i+1);

gets(stu[i].name);

scanf("%ld",&stu[i].number);

scanf("%f",&stu[i].score1);

scanf("%f",&stu[i].score2);

getchar();

}

}

void zuigao(struct person stu[N])

{

int b,i;

float a;

for(b=0,a=stu[0].score1,i=0;i

if(a

{

a=stu[i].score1;

b=i;

}

printf("第一门课程成绩最优秀的是第%d个学生\n",b+1);

printf("名字:%s 学号:%ld 成绩:%f\n",stu[b].name,stu[b].number,stu[b].score1);

printf("\n");

for(b=0,a=stu[0].score2,i=0;i

if(a

{

a=stu[i].score2;

b=i;

}

printf("第二门课程成绩最优秀的是第%d个学生\n",b+1);

printf("名字:%s 学号:%ld 成绩:%f\n",stu[b].name,stu[b].number,stu[b].score2);

printf("\n");

}

void pingjun(struct person stu[N])

{

int i;

float s1,s2,p1,p2;

for(s1=0,s2=0,i=0;i

{

s1+=stu[i].score1;

s2+=stu[i].score2;

}

p1=s1/N;

p2=s2/N;

for(i=0;i

{

if(stu[i].score1

printf("名字:%s 学号:%ld 此学生成绩小于第一门课的平均分\n",stu[i].name,stu[i].number);

if(stu[i].score2

printf("名字:%s 学号:%ld 此学生成绩小于第二门课的平均分\n",stu[i].name,stu[i].number);

}

printf("\n");

}

void paixu(struct person stu[N])

{

int i,j;

struct person t;

for(i=0;i

for(j=0;j

if(stu[j].score1

{t=stu[j];stu[j]=stu[j+1];stu[j+1]=t;}

printf("按第一门课程从高到低排序为:\n");

for(i=0;i

printf("名字:%s 学号:%ld 成绩:%f\n",stu[i].name,stu[i].number,stu[i].score1); }

void main()

{

struct person stu[N];

shuru(stu);

printf("\n");

zuigao(stu);

pingjun(stu);

paixu(stu);

}

4.输入一字符串,用链表形式储存,每个结点的数据域存放一个字符,最后输出链表中的全部字符。

5.设有一个单向链表(设表长大于2),现欲将其倒置排序,试编写一函数实现此功能。

6.已知一无符号的整数占用了4个字节的内存空间,现欲从低位存储地址开始,将其每个字节作为单独的一个ASCII码字符输出,试用共同体实现上述转换。

7.已知一长度为2个字节的整数,现欲将其高位字节与低位字节相互交换后输出,试用共同体类型实现这一功能。

8.请定义枚举类型score,用枚举元素代表成绩的等级,如:90分以上为优(excellent),80—89分之间为良(good),60-79分之间为中(general),60分以下为差(fail),通过键盘输入一个学生的成绩,然后输出该生成绩的等级。

#include

void main()

{

float a;

enum score{fail,general=6,good=8,excellent}a;

printf("请输入该学生的成绩:");

scanf("%f",&a);

switch(b);

{

case excellent:printf("excellent");break;

case good:printf("good");break;

case general:printf("general");break;

case fail:printf("fail");break;

}

}

第10章 结构体、共用体、枚举类

1 声明一个结构体类型的一般形式为: struct 结构体名 {成员表列}; 如:struct student { int num;char name[20];char sex; int age;float score;char addr[30]; }; 2 定义结构体类型变量的方法 (1)先声明结构体类型再定义变量名 例如:struct student student1, student2; | | | 结构体类型名结构体变量名 (2)在声明类型的同时定义变量 这种形式的定义的一般形式为: struct 结构体名 { 成员表列 }变量名表列; (3)直接定义结构体类型变量 其一般形式为: struct { 成员表列 }变量名表列; 即不出现结构体名。 注意: 成员名可以与程序中的变量名相同,二者不代表同一对象。 3 可以引用结构体变量成员的地址,也可以引用结构体变量的地址。 例如: scanf(″%d″,&student1.num); (输入student1.num的值) printf(″%o″,&student1); (输出student1的首地址) 4 结构体数组的初始化 struct student {int num;char name[20]; char sex; int age; float score; char addr[30]; }stu[2]={{10101,″LiLin″,′M′,18,87.5,″103 BeijingRoad″},{10102,″Zhang Fun″,′M′,19,99,″130 Shanghai Road″}};

5 指向结构体变量的指针 #include #include void main() {struct student{long num;char name[20]; char sex; float score;}; struct student stu_1; struct student* p; p=&stu_1; stu_1.num=89101;strcpy(stu_https://www.doczj.com/doc/1a15192863.html,,”LiLin”); stu_1.sex=‘M’;stu_1.score=89.5; printf(″No.:%ld\nname:%s\nsex:%c\nscore:%f\n″,stu-1.num,https://www.doczj.com/doc/1a15192863.html,,stu-1.sex,stu-1.score); printf(″No.:%ld\nname:%s\nsex:%c\nscore:%f\n″,(*p).num,(*p).name,(*p).sex,(*p).score); } 6 以下3种形式等价: 结构体变量.成员名 (*p).成员名 p->成员名 7 用指针处理链表 (1)malloc函数 (2) calloc函数 (3) free函数 其函数原型为void free(void *p); 7.1 typedef struct { int n; struct { int y,m,d; }date; }PERSON; 下面定义结构体数组并赋初值 PERSON x[2]={1,04,10,1,2,04,12,30}; PERSON x[2]={{1,04,10,1},{2,04,12,30}}; PERSON x[2]={1,{04,10,1},2,{04,12,30}}; 7.2 struct person { int id;

结构体练习题

结构体练习题: 第1 题:计算日期的差值 (1)编写一函数,计算两个日期之间的时间差,并将其值返回。 日期以年、月、日表示。 “时间差”以天数表示。 注意考虑日期之间的闰年。 函数的输入参数为日期1和日期2, 函数的返回值为时间差,单位为天数。 (2)编写一程序,在主函数中输入两个日期,调用上述函数计算两个日期之间的时间差,并将结果输出。 为了计算简便,假设用户输入的日期1总是早于日期2。 参考代码: #include struct date { int year; int month; int day; }; int isLeap(int year); int dif(struct date a, struct date b); void main() { struct date a, b; printf("请输入日期1(空格分隔,年月日):\n"); scanf("%d%d%d", &a.year, &a.month, &a.day); printf("请输入日期2(空格分隔,年月日,晚于日期1):\n"); scanf("%d%d%d", &b.year, &b.month, &b.day); printf("相差天数为:"); printf(" %d 天\n", dif(a, b)); } int isLeap(int year) //判断一个年份是否是闰年的函数 { if(year%400==0 || (year%4==0 && year%100!=0)) return 1; else return 0; } int dif(struct date a, struct date b) { int i; long day=0, day1=0, day2=0; int d[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,3 1,31,30,31,30,31}}; // day变量为年份a到年份b前一年的年份总天数 for(i=a.year; i

结构体与共用体小结

结构体与共用体小结 一,结构体得概念与定义 1,结构体得定义 struct 结构体名 { 数据类型成员名1; 数据类型成员名1; 、、、 }; 这里数据类型可以就是复合类型,例如又就是一个结构体类型,即嵌套; 2,结构体变量得定义 struct 结构体名变量名1,变量名2,,,变量名n; 或: struct 结构体名 { 数据类型成员名1; 数据类型成员名1; 、、、 }结构体变量1,结构体变量2;

或: struct { 数据类型成员名1; 数据类型成员名1; 、、、 }结构体变量1,结构体变量2; 三种方式,第三种方式得话,每次要定义这个类型得结构体变量都要重复得写这一段代码; 其实定义了结构体后,struct 结构体名就就是一种新得类型,上述语句就像声明变量一样; 3,结构体变量得引用 只能对结构体变量中得各个成员分别输出,不能对一个结构体变量作为一个整体输出; 嵌套得结构体类型得引用: 结构体变量名、结构体类型成员名、内嵌结构体得成员名; 4,结构体变量得初始化 struct 结构体名变量名= {初始化数据};

或者在定义得时候就初始化: struct 结构体名 { 数据类型成员名1; 数据类型成员名1; 、、、 }变量名= {初始化数据}; 二,结构体数组 1,结构体数组得定义举例struct stu { int stu_nu; char name[20]; float score; }; struct stu student[5]; 或者: struct stu { int stu_nu;

char name[20]; float score; }student[5]; 或者: struct { int stu_nu; char name[20]; float score; }student[5]; 跟定义结构体变量得三种形式就是一样得,只不过这里每次定义得结构体变量就是一个数组;每一个student[i]都就是struct stu类型得; 2,结构体数组得初始化与引用 略; 三,结构体与指针 1,指向结构体得指针得定义,同上,也就是三种形式; struct employees employee1,*p1; 或者: struct employees

结构体与共用体

试卷编号:825 所属语言:C语言 试卷方案:结构体与共用体 试卷总分:90分 共有题型:5种 ━━━━━━━━━━━━━━ 一、填空共5题(共计10分) ━━━━━━━━━━━━━━ 第1题(2.0分)题号:205 结构体是不同数据类型的数据集合,作为数据类型, 必须先说明结构体【1】,再说明结构体变量. 答案: =======(答案1)======= 类型 第2题(2.0分)题号:208 将函数funl 的入口地址赋给指针变量p的语句是【1】. 答案: =======(答案1)======= p=funl; 第3题(2.0分)题号:232 设有以下结构类型说明和变量定义,且sizeof(int)=2,则变量a在内存所占字节数是【1】. struct stud { char num[6]; int s[4]; double ave; } a,*p; 答案: =======(答案1)======= 22

第4题(2.0分)题号:345 若在程序中用到"strlen()"函数时,应在程序开头写上包含命令# include "【1】". 答案: =======(答案1)======= string.h 第5题(2.0分)题号:803 预处理命令行都必须以【1】号开始. 答案: =======(答案1)======= # ━━━━━━━━━━━━━━━━━ 二、单项选择共20题(共计40分) ━━━━━━━━━━━━━━━━━ 第1题(2.0分)题号:464 以下描述中,正确的是()。 A:预处理是指完成宏替换和文件包含中指定的文件的调用 B:预处理指令只能位于C源文件的开始 C:C源程序中凡是行首以#标识的控制行都是预处理指令 D:预处理就是完成C编译程序对C源程序第一遍扫描,为编译词法和语法分析作准备答案:C 第2题(2.0分)题号:472 下列程序运行结果为: #define P 3 #define S(a) P*a*a main() {int ar; ar=S(3+5); printf("\n%d",ar); } A:192 B:29 C:27

结构体共用体与枚举课后习题

1.定义一结构体,成员项包括一个字符型、一个整型。编程实现结构体变量成员项的输入、输出,并通过说明指针引用该变量。 #include void main() { struct a { char b; int c; }d,*p; p=&d; printf("输入:\n"); scanf("%c",&(*p).b); scanf("%d",&p->c); printf("输出:\n"); printf("%c\n",(*p).b); printf("%d\n",p->c); } 2.建立一结构体,其中包括学生的姓名、性别、年龄和一门课程的成绩。建立的结构体数组通过输入存放全班(最多45人)学生信息,输出考分最高的同学的姓名、性别、年龄和课 程的成绩。 #include void main() { int i,b,n; float a; printf("请输入班级的人数:"); scanf("%d",&n); getchar(); struct person { char name[20]; char sex[10]; int year; float score; }stu[45]; for(i=0;i

getchar(); } for(b=0,a=stu[0].score,i=0;i #define N 4 struct person { char name[20]; long int number; float score1; float score2; }; void shuru(struct person stu[N]) { int i; for(i=0;i

结构体练习题

算并输出每个人的学号和平均成绩。 2.已知链表结点结构如下,假设动态链表已经建立,请编写删除给定学号的结点的函 数。(只编写删除子函数即可) 3.编写函数实现动态链表的建立。链表结点结构如下,要求在主函数中将你所建立的链 表输出到屏幕上。 4.有10个学生,每个学生的信息包括学号、姓名、3门课的成绩,从键盘输入10个学 生数据存入结构体数组中,要求输出个人总分最高的学生的信息(包括学号、姓名、3门课成绩、总分)。 5.链表的结点数据类型如下: struct node{ int data; struct node *next; }; 链表的建立和输出函数如下,编写将第i个结点删除的函数,并完善主函数,调试运行整个程序。 struct node *creat() { int x; struct node *h,*s,*r; h=(struct node *)malloc(sizeof(struct node)); r=h; scanf("%d",&x); while(x!=-1) { s=(struct node*)malloc(sizeof(struct node)); s->data=x; r->next=s; r=s; scanf("%d",&x); } r->next=NULL; return h; } void print(struct node *h) //打印函数 { struct node *p; p=h->next; if(p==NULL) printf("list is empty!"); else { while(p!=NULL) { printf("%4d",p->data); p=p->next; } } }

结构体和共用体习题

习题六 1. 从下列四个选项中选择一个正确的填入括号中。 (1)在说明一个结构体变量时系统分配给它的存储空间是(D)。 A该结构体中第一个成员所需存储空间 B该结构体中最后一个成员所需存储空间 C该结构体中占用最大存储空间的成员所需存储空间 D该结构体中所有成员所需存储空间的总和 (2)在说明一个共用体变量时系统分配给它的存储空间是(D )。 A该共用体中第一个成员所需存储空间 B该共用体中最后一个成员所需存储空间 C该共用体中占用最大存储空间的成员所需存储空间 D该共用体中所有成员所需存储空间的总和 (3)共用体类型在任何给定时刻, (B)。 A所有成员一直驻留在内存中 B只有一个成员驻留在内存中 C部分成员驻留在内存中 D没有成员驻留在内存中 (4)以下定义结构体类型的变量st1,其中不正确的是(A ) A typedef stuct student { int num; int age; }STD; STD st1; B struct student { int num,age; }st1; C struct { int num; float age; }st1; D struct student { int num; int age; }; struct student st1; (5)已知职工记录描述为: struct workers {

int no; char name[20]; char sex; struct { int day; int month; int year; }birth; }; struct workers w; 设变量w中的”生日”应是”1993年10月25日”,下列对”生日”的正确赋值方式是(C)。 A day=25; month=10; year=1993; B w.day=25w.month=10; w.year=1993; C w.birth.day=25; w.birth.month=10; w.birth.year=1993; D birth.day=25; birth.month=10; birth.year=1993; (6)设有如下定义: struct sk { int a; float b; }data,*p; 若有p=&data;则对data中的a成员的正确引用是(B)。 A (*p).data.a B (*p).a C p->data.a D p.data.a 2.填空 (1)若有以下说明和定义且数组w和变量k已正确赋值,则对w数组中第k个元素中各成员的正确引用形式是w[k-1].b、w[k-1].c 、w[k-1].d 。 struct aa { int b; char c; double d; }; struct aa w[10]; int k=3; (2)若有以下说明和定义,则对x.b成员的另外两种引用形式是x->b-> 和p.b. 。 struct st { int a; struct st *b; }*p, x;

第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) 20 4.以下程序的运行结果是( ) #include union Utype { int i; float y; }u[2]; void main() { printf("sizeof(u):%d\n",sizeof(u)); } A)2 B) 4 C) 6 D) 8 5.设有以下定义语句: struct student { int num; char name[10]; float score; }wang,zhang; 则变量wang所占的内存字节数是( ) A) 14 B) 16 C)18 D) 20 6.设有如下定义语句: 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 页

(完整word版)C语言程序设计基础-结构体习题

1、把一个学生的信息(包括学号、姓名、性别、住址)放在一个结构体变量中,然后输出这个学生的信息。 #include int main() {struct Student { long int num; char name[20]; char sex; char addr[20]; }a={10101,“Li Lin”,‘M’, “123 Beijing Road”}; printf("NO.:%ld\nname:%s\n sex:%c\naddress:%s\n",a.num,https://www.doczj.com/doc/1a15192863.html,,a.sex,a.addr); return 0; } 2、输入两个学生的学号、姓名和成绩,输出成绩较高学生的学号、姓名和成绩 #include int main() { struct Student { int num; char name[20]; float score; }student1,student2; scanf("%d%s%f",&student1.num,https://www.doczj.com/doc/1a15192863.html,, &student1.score); scanf(“%d%s%f”,&student2.num,https://www.doczj.com/doc/1a15192863.html,, &student2.score); printf("The higher score is:\n"); if (student1.score>student2.score) printf("%d %s %6.2f\n",student1.num,https://www.doczj.com/doc/1a15192863.html,, student1.score); else if (student1.score #include struct Person { char name[20];

实验11结构体、共用体和枚举类型

实验11 结构体、共用体和枚举类型 一、实验目的: 1、掌握结构体类型定义和结构体变量定义、初始化的方法; 2、掌握结构体成员的访问方法,熟悉结构体嵌套定义方法; 3、掌握结构体数组的定义和使用方法,能够用模块化方法设计程序; 4、熟悉共用体类型、枚举类型、typedef的基本用法。 二、实验内容 1、下列程序的功能是:先定义结构体Book,再定义两个变量book1、book2,其中一个初始化,另一个从键盘输入数据,最后输出book1、book2的值。程序运行结果如下: 请根据题意和注释填写下列程序所缺代码,并回答相关问题: #include //定义结构体Book,成员有:书名(title),字符数组,长度为100; //作者(authors),字符数组,长度为30;ISBN,字符数组,长度为20; //页数(pages),整型;价格(price),单精度浮点数。 /*代码段_1*/ int main() { //定义两个Book型变量book1、book2,其中book1用我们本学期所使用教材的数据初始化/*代码段_2*/ //从键盘输入我们本学期所使用实验指导书的数据给book2 /*代码段_3*/ printf("请输入实验指导书的信息:书名、作者、ISBN、页数、作者:\n"); /*代码段_4*/ printf("\n教材、实验书信息如下:\n"); /*代码段_5*/

return 0; } 问题: (1)如何定义结构体类型? (2)怎样定义结构体变量,并初始化? (3)怎样输入、输出结构体变量各成员的值? 2、请按下列要求编程: (1)先定义一个结构体Date,它包含三个成员:年(year,int)、月(month,int)、日(day,int); (2)再定义一个结构体,它包含三个成员:姓名(name,char[10])、性别(sex,char类型,’m’为男,’f’为女)、出生时间(birthday,Date类型)、身份证号(ID,char[19])、电子邮箱(email,char[60]),并用typedef将该结构体命名为Person类型; (3)然后定义一个Person类型的变量me,通过键盘输入自己的信息,然后输出me的各成员值。 程序执行如下图所示: (提示:由于输入内容有字符串、字符、整数等,建议在scanf()中的格式控制符用空格隔开,例如scanf("%s %c %d %d %d %s %s",https://www.doczj.com/doc/1a15192863.html,,…);) 3、学生有三门课程:A、B、C,3名学生的成绩如下表所示: 姓名 A B C 平均分 张三78 84 67 李四88 90 95 王五66 79 80 请先定义一个结构体Student,其成员包括:name(姓名)、A、B、C、aver(平均分),再定义一个Student类型的数组stud[3]来存放学生资料。现欲先输入

结构体与共用体相关题目练习

结构体与共用体 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.设有以下结构类型说明和变量定义,则变量a在内存所占字节数是【】。 struct stud { char num[6]; int s[4]; double ave; } a,*p; 5.程序中有下面的说明和定义 struct abc { int x;char y;} struct abc s1,s2; 则会发生的情况是 A)编译出错B)程序将顺利编译、连接、执行 C)能顺利通过编译、连接、但不能执行 D)能顺利通过编译、但连接出错 6.有如下定义 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]);7.下面程序的输出是 A)0 B)1 C)3 D)6 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);} 8.下列程序的输出结果是 A)5 B)6 C)7 D)8 struct abc { int a, b, c; }; main() { struct abc s[2]={{1,2,3},{4,5,6}}; int t; t=s[0].a+s[1].b; printf("%d \n",t);} 9.有以下程序 struct stu { int num;char name[10];int age;}; void fun(struct stu *p) { printf("%s\n" ,(*p).name); } main() { struct stu students[3]={{9801,"Zhang",20} ,{9802,"Wang", 19} , {9803,"Zhao",18} }; fun(students+2);} 输出结果是 A)Zhang B)Zhao C)Wang D)18 10.设有如下定义: struct sk {int a ;float b ;}data ,*p ; 若有p=&data ;,则对data中的a域的正确引用是 A)(*p).data.a B)(*p).a C)p->data.a D)p.data.a 11.下面程序的输出结果为

第十一章结构体与共用体

第^一章结构体与共用体教学内容 (1) 结构体的定义与结构体变量; (2) 结构体数组; (3) 结构体指针; ⑷链表; (5) 共用体; (6) 枚举类型; 基本要求 掌握结构体的定义方法及其作用;重点掌握链表及其应用了解共用体的概念及其应用

一、概述 、引入原由 我们前面讲过数组,数组类型中的各个元素的类型是相同的,在日常应用中,仅仅有这些数据类型是不够的。有时需要将不同类型的数据组合成一个有机的整体,以便于引用。这些组合在一个整体中的数据是互相联系的。例如:学生的信息(姓名、性别、年龄、成绩、学号)。那么如何实现这种结构呢?采用的是结构体。 女口:struct student { int num; char n ame[20]; char sex; int age; float score; }; 、结构体类型的一般形式 struct 结构体名 {成员表列}; 成员表列:类型名成员名 女口:struct student {int nu m;char sex;}; 二、结构体类型变量的定义、引用、初始化 、定义方法 1、先声明类型再定义变量名 struct stude nt {int nu m;char sex;}; struct stude nt stu1,stu2; 2、在声明类型的同时定义变量 struct stude nt {int nu m;char sex;} stu1,stu2; 3、直接定义结构体类型变量(不给出结构体名) struct {int nu m;char sex;} stu1,stu2; 4、说明: 1 )类型与变量不同(变量:分配空间,可以赋值、存储、运算) 2)成员与普通变量地位相当,域名可以单独使用 3)成员也可以是一个结构体变量 如: struct date

C语言结构体习题及答案

C语言结构体习题及答 案 集团企业公司编码:(LL3698-KKI1269-TM2483-LUI12689-ITT289-

第9章结构体 1.定义以下结构体类型 struct s { int a; char b; float f; }; 则语句printf("%d",sizeof(struct s))的输出结果为【】。 A) 3 B) 7 C) 6 D) 4 2.当定义一个结构体变量时,系统为它分配的内存空间是【】A)结构中一个成员所需的内存容量 B)结构中第一个成员所需的内存容量 C)结构体中占内存容量最大者所需的容量 D)结构中各成员所需内存容量之和 3.定义以下结构体类型 struct s { int x; float f; }a[3]; 语句printf("%d",sizeof(a))的输出结果为【】 A) 4 B) 12 C) 18 D) 6

7.定义以下结构体类型 struct student { char name[10]; int score[50]; float average; }stud1; 则stud1占用内存的字节数是【】。 A) 64 B) 114 C) 228 D) 7 9、设有一结构体类型变量定义如下: struct date { int year; int month; int day; }; struct worklist { char name[20]; char sex; struct date birthday; } person; 若对结构体变量person的出生年份进行赋值时,下面正确的赋值语句是。。。。

结构体、共用体、枚举

最终排名 Time Limit: 1000MS Memory limit: 65536K 题目描述 第四届山东理工大学ACM网络编程擂台赛比赛完后需要产生一个最终排名,排名按照题数多少来决定。但是有太多的队伍参与,手动计算排名已经不能满足比赛的需求。现在有一份名单记录各个队伍的ID和做出的题目数,需要你写一个程序,产生最终的排名。 为了简化题目,这里的排名规则为:做出题目数量多的队伍排在前面,如果题数相等,保持输入时的相对顺序不要改变。 输入 第一行包含一个正整数T( 1≤T≤15),表示有T组测试数据。每组数据第一行有一个正整数N(1< N≤10000),表示队伍数量。接下来N 行包含两个整数,1≤ID≤10^7, 0≤M≤100。ID为队伍的编号,M为做出的题数。 输出 每组数据输出包含N行,第i行有两个整数,ID和M表示排在第i位的队伍的ID和做出的题数。 示例输入 1 8 1 2 16 3 11 2 20 3 3 5 26 4 7 1 22 4 示例输出 3 5 26 4 22 4

16 3 20 3 1 2 11 2 7 1

#include void main() { struct team { int ID; int M; }t[10000],T; int N,n,i,j,k,time=0; scanf("%d",&N); while(time!=N) { scanf("%d",&n); for(i=0;i

第9章结构体类型与共用体类型习题及答案

第九章结构体类型与公用体类型习题及其答案9-3编写程序,使用结构体类型,输出一年十二个月的英文名称及相应天数。 解:#include "stdio.h" struct date { char month[10] ; int daynumber ; } main() { int i ; date a[12] ={{"January",31},{"February",29},{"March",31},{"Apri al",30},{"May",31},{"June",30},{"july",31},{"August",31}, {"September",30},{"October",31},{"November",30},{"Decembe r",31}} ; for(i=0;i<12;i++); printf("%d 月:%s %d\n",i+1,a[i].month,a[i].daynumber) ; } 思考:如何对结构体变量进行初始化?对结构体变量的引用为何要体现为分量(或成员)的引用? 9-4 编写程序求空间任一点到原点的距离,点用结构体描述。并请考虑求空间中任意两点的距离的程序。 解:#include "stdio.h" #include "math.h" struct point { float x ; float y ; float z ; } void main()

{ double d1,d2,d ; point p1,p2 ; printf("请输入第一个点的坐标:"); scanf("%f,%f,%f",&p1.x,&p1.y,&p1.z); printf("请输入第二个点的坐标:"); scanf("%f,%f,%f",&p2.x,&p2.y,&p2.z); d1=sqrt(p1.x*p1.x+p1.y*p1.y+p1.z*p1.z); d2=sqrt(p2.x*p2.x+p2.y*p2.y+p2.z*p2.z); d=sqrt((p2.x-p1.x)*(p2.x-p1.x)+(p2.y-p1.y)*(p2.y-p1.y)+(p 2.z-p1.z)*(p2.z-p1.z)); printf("第一个点到原点的距离:%f\n",d1); printf("第二个点到原点的距离:%f\n",d2); printf("两点间的距离:%f\n",d); } 9-5 编写输入、输出10个朋友数据的通讯录程序,每个朋友数据包括、地址、邮编、、传呼、手机等数据。 解:#include "stdio.h" struct AddressBook { char name[10] ; char address[30] ; char mailnumber[7] ; char telphone[12] ; char byphone[16] ; char movephone[1] ; } void main() { int i ; AddressBook fd[10] ; for(i=0;i<10;i++) {

结构体习题

结构体习题 49、以下程序运行结果是______。 #include typedefstruct student{ char name[10]; longsno; float score; }STU; main() { STU a={"Zhangsan",2001,95},b={"Shangxian",2002,90}, c={"Anhua",2003,95},d,*p=&d; d=a; if(strcmp(https://www.doczj.com/doc/1a15192863.html,,https://www.doczj.com/doc/1a15192863.html,)>0) d=b; if(strcmp(https://www.doczj.com/doc/1a15192863.html,,https://www.doczj.com/doc/1a15192863.html,)>0) d=c; printf("%ld %s\n",d.sno,p->name); } 标准答案为:2002 Shangxian 1. 填空题 人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入结构体数组std中,且编号唯一。函数fun的功能是:找出指定编号人员的数据,作为函数值返回,由主函数输出,若指定编号不存在,返回数据中的编号为空串。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! #include #include #define N 8 typedefstruct { charnum[10]; intyear,month,day ; }STU; /**********found**********/ STU fun(STU *std, char *num) { int i; STU a={"",9999,99,99}; for (i=0; i

c语言结构体与共用体之间的区别

https://www.doczj.com/doc/1a15192863.html,/2005/03/25/12365.html 所谓共用体类型是指将不同的数据项组织成一个整体,它们在内存中占用同一段存储单元。其定义形式为: union 共用体名 {成员表列}; 7.5.1 共用体的定义 union data { int a ; float b ; d o u b l e c ; c h a r d ; } obj; 该形式定义了一个共用体数据类型union data ,定义了共用体数据类型变量o b j。共用体 数据类型与结构体在形式上非常相似,但其表示的含义及存储是完全不同的。先让我们看一个小例子。 [例7 - 8 ] union data /*共用体* / { int a; float b; double c; char d; } m m ; struct stud /*结构体* / { int a; float b; double c; char d; } ; m a i n ( ) { struct stud student printf("%d,%d",sizeof(struct stud),sizeof(union data)); } 程序的输出说明结构体类型所占的内存空间为其各成员所占存储空间之和。而形同结构体的

共用体类型实际占用存储空间为其最长的成员所占的存储空间。详细说明如图7 - 6所示。 对共用体的成员的引用与结构体成员的引用相同。但由于共用体各成员共用同一段内存 空间,使用时,根据需要使用其中的某一个成员。从图中特别说明了共用体的特点,方便程序设计人员在同一内存区对不同数据类型的交替使用,增加灵活性,节省内存。 7.5.2 共用体变量的引用 可以引用共用体变量的成员,其用法与结构体完全相同。若定义共用体类型为: union data /*共用体* / { int a; float b; double c; char d; } m m ; 其成员引用为:m m . a , m m . b , m m . c , m m . d 但是要注意的是,不能同时引用四个成员,在某一时刻,只能使用其中之一的成员。 [例7-9] 对共用体变量的使用。 m a i n ( ) { union data { int a; float b; double c; char d; } m m ; m m . a = 6 ; printf("%d\n",mm.a); m m . c = 6 7 . 2 ; p r i n t f ( " % 5 . 1 l f \ n " , m m . c ) ; m m . d = ' W ' ; m m . b = 3 4 . 2 ; p r i n t f ( " % 5 . 1 f , % c \ n " , m m . b , m m . d ) ; }

相关主题
文本预览
相关文档 最新文档