第9章结构体类型与共用体类型习题及答案(可编辑修改word版)
C语言数据结构-第9章 结构体共用体与枚举
![C语言数据结构-第9章 结构体共用体与枚举](https://img.taocdn.com/s3/m/56188b6d71fe910ef02df865.png)
"Shang Hai","13901000003"}}; int i; for(i=0;i<3;i++) { printf("%s,%d,%s,%s,",stud[i].name,stud[i].age,stud[i].sex,stud[i].xh); printf("%d,%d,%d,",stud[i].birthday.year,stud[i].birthday.month, stud[i].birthday.day); printf("%s,%s,%s\n",stud[i].nation,stud[i].address,stud[i].tel); } }
成员运算符“.”的优先级最高,在表达式中的结构体变量成员不 需要加括号。例如:
wang.age++;
相当于
(wang.age)++;
注意
13
结构体变量的成员名可以相同,但必须处在不同的层次。 例如:
sturct student { int no;
char name[20]; struct { int no; char classname[20]; }class; struct { int no; char groupname[20]; }group; }wang;
定义结构体类型名的同时定义结构体数组,例如:
struct student{…} stud[50];
C语言 第九章 结构体数据类型期末测试习题与答案
![C语言 第九章 结构体数据类型期末测试习题与答案](https://img.taocdn.com/s3/m/162d4574af45b307e871979f.png)
程序运行后的输出结果是( )。
A.SunDan 20044
B.YangSan 20041
C.SunDan 20042
D.LiSiGuo 20042
参考答案:D
3、以下程序运行的结果是_( )。
#nclude”stdio.h
main()
{
struct date
{
int year , month , day ;
D.struct color
{ int red;
int green;
int blue;
} c l;
参考答案:B
7、有以下程序:
struct stu
{
char[10];
float score[3];
};
main( )
{
struct stu s[3]={{"20021",90,95,85},
{"20022",95,80,75},
} today ;
printf(“%d\n”,sizeof(struct date));
}
A.10
B.6
C.8
D.12
参考答案:D
4、设有如下说明
typedef struct ST
{
long a;
int b;
char c[2];
} NEW;
则下面叙述中正确的是______。
A.ST是一个结构体类型
B.NEW是一个结构体类型
A.typedef struct
{ int red;
int green;
int blue;
} COLOR;
COLOR cl;
B.struct color cl
C语言(结构体与共用体)习题与答案
![C语言(结构体与共用体)习题与答案](https://img.taocdn.com/s3/m/1d8a8fdf1eb91a37f0115c79.png)
{ for ( ; *s==*t; s++, t++ )
if (!*s) return 0 ;
return (*t-*s) ;
}
B.int strcmp2(char *s,char *t)
{ for ( ; *s++=*t++; )
if (!*s) return 0 ;
1、指针的含义是()。
A.名
B.一个标志
C.地址
D.值
正确答案:C
2、若已定义a为int型变量,则下面的语句中正确的是()。
A.int *p=*a;
B.int *p=&a;
C.int *p=a;
D.int p=&a;
正确答案:B
3、若有定义:int x,*p;则以下正确的赋值表达式是()。
A.*p=&x
sub(10,5,&a);
sub(7,a,&b);
sub(a,b,&c);
printf("%4d,%4d,%4d\n",a,b,c);
}
A.5,-2,-7
B.5,2,3
C.-5,-12,7
D.-5,-12,-7
正确答案:D
11、以下程序运行的结果是()。
#include<stdio.h>
void main()
D.char *s="china";等价于char *s; s="china" ;
正确答案:D
15、函数strcmp(char *s,char *t)功能是()。
第9章结构体类型与共用体类型习题及答案
![第9章结构体类型与共用体类型习题及答案](https://img.taocdn.com/s3/m/d3b144a25fbfc77da269b1c0.png)
第九章结构体类型与公用体类型习题及其答案9-3编写程序,使用结构体类型,输出一年十二个月的英文名称及相应天数。
解:#include "stdio.h"struct date{char month[10];int daynumber;}main(){int i ;date a[12]={{n January u,31},{“February”,29}, {“March”,31}, {” Aprial”,30}, {”May“,31},{“June",30}, {“july”,31},{” August”,31},「'September”,30} ,{“October”,31},{"November",30},{"December",31}};for(i=0;i<12;i++);printf(u%d 月:%s %d\n",i+l,a[i].month,a[i].daynumber);}思考:如何对结构体变量进行初始化?对结构体变量的引用为何要体现为分量(或成员)的引用?9-4编写程序求空间任一点到原点的距离,点用结构体描述。
并请考虑求空间中任意两点的距离的程序。
解:#include "stdio.h"#include "math.h'1struct point{float x ;float y;float z;}void main()double dl,d2,d;point pl,p2 ;printfC请输入第一个点的坐标:“);scanf(”%f,%f,%f",&pl.x,&pl.y,&pl.z);printf(u W输入第二个点的坐标:”);scanf(”%f,%f,%f”,&p2.x,&p2.y,&p2.z);d 1 =sqrt(p l.x*p l.x+p l.y*p l.y+p l.z*p l.z);d2=sqrt(p2.x*p2.x+p2.y*p2.y+p2.z*p2.z);d=sqrt((p2.x-p l.x)*(p2.x-p l.x)+(p2.y-p 1 .y)*(p2.y-p l.y)+(p2.z-pl.z)*(p2.z-pl.z));printfC第一个点到原点的距离:%f\n”,dl);printf(“第二个点到原点的距离:%f\n”,d2);printfC俩点间的距离:%f\n”,d);}9-5编写输入、输出10个朋友数据的通讯录程序,每个朋友数据包括姓名、地址、邮编、电话、传呼、手机等数据。
实验9 结构体、共用体与枚举类型答案
![实验9 结构体、共用体与枚举类型答案](https://img.taocdn.com/s3/m/98571f911a37f111f1855b66.png)
率。 其次,结构体指针作为函数参数:可以在函数中通过该指针引用结 构体,当在函数中修改了结构体的成员变量后,指针所指向的结构体本 身也被改变了。而当结构体变量作为函数参数;在函数中可通过变量直 接使用结构体,但是,如果在函数中修改了结构体的成员变量后,结构 体本身并未发生变化,只是副本被改变。
} } average = s/5 ; printf("平均成绩:%.2f\n",average); }
4、5位职工的月收入如下表所示: 部门 月收入 工号 姓名 (char (float (int num) (char name) department) salary) 技术科 010002 张援朝 6800 生产科 020006 李明瑞 2600 检验科 030018 王国庆 4800 后勤部 040026 刘小兵 3700 经营科 050068 吴 伟 1900 试编程求这5位职工的平均月收入,并输出月收入小于3000元的职 工的部门、工号、姓名与月收入等信息。源程序以ex9_8.c命名,保存 在自己的文件夹内。
保存在自己的文件夹内。
解: #include <stdio.h> struct bookinfo { char isbn[20]; char title[50]; char author[20]; char publisher[50]; char pubdate[30]; float price; }book[5] = {{"7115177810","Java实用教程","李钟 尉","人民邮电出版社","2008年5月",32.00}, {"7113101015","汇编语言程序设计","白小明","中国铁 道出版社","2009年8月",35.00}, {"7302108535","C语言程序设计","谭浩强","清华大学 出版社","2005年7月",26.00}, {"7301123713","网络工程实用教程","汪新民","北京大 学出版社","2008年2月",34.00}, {"7111283812","软件工程概论","郑人杰","机械工业出 版社","2010年3月",28.00}}; main() { int i; float average, s=0; for(i=0; i<5; i++) { s += book[i].price; if(book[i].price<30.00) { printf("书号:%s ",book[i].isbn); printf("书名:%s ",book[i].title);
C语言各章节单元测试题及答案——结构体与共用体
![C语言各章节单元测试题及答案——结构体与共用体](https://img.taocdn.com/s3/m/05eaef43ad51f01dc381f122.png)
第9章结构体与共用体9.1典型考试题剖析9.1.1选择题【例1】若指针p已经正确定义,要使p指向两个连续的整型动态存储单元,不正确的语句是。
A) p=2*(int *)malloc(sizeof(int)); B) p=(int*)malloc(2*sizeof(int));C) p=(int *)malloc(2*2); D) p=(int*)calloc(2,sizeof(int));✧考点:动态存储分配函数。
✧分析:根据动态存储分配函数malloc和calloc的函数原型可以知道,calloc函数的调用形式为:void * calloc(unsigned n,unsigned size);表示在动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配域起始地址的指针,因此答案D是正确的。
malloc函数的调用形式为:void * malloc(unsigned int size);表示是在内存的动态存储区分配一个长度为size的连续空间,并返回一个指向分配域起始地址的指针,答案B和C中malloc的参数分别为:2*(sizeof(int))和2*2,都是整型数,因此调用形式正确。
答案A中(int *)malloc(sizeof(int))的返回值为一个地址值,将地址的值乘以2是没有意义的。
✧答案:A【例2】若有以下说明和定义:struct test{ int m1; char m2; float m3;union uu{ char u1[5]; int u2[2]; }ua;}myaa;则sizeof(struct test)的值是。
A) 12 B) 16 C) 14 D) 9✧考点:结构体类型和共用体类型所占内存的字节数。
✧分析:sizeof(struct test)的功能是求结构体类型test所占用的内存字节数。
它应该等于结构体每个成员所占的字节数之和。
m1为int型,占2字节,m2为char型,占1字节,m3为float型,占4字节,接下来是一个共用体类型uu,共用体所占的字节数应该等于成员中最长者所占的字节数,u1占5字节,u2占4字节,那么该共用体类型应该占用5字节,所以2+1+4+5=12。
结构体与共用体
![结构体与共用体](https://img.taocdn.com/s3/m/9b15ff2a783e0912a2162a8f.png)
4、共用体类型的变量如何赋初值,含义是什么?
不能对共用体变量名赋值,也不能在定义共用体变量时初始化。但可以用一个共用体变量为 另一个变量赋值
例:union
{ int i;
char ch;
double f;
}a={1,’a’,1.5}; ()
a=1;
()
m=a;
()
例:float x; union { int i; char ch; double f; }a,b; a.i=1; a.ch=‘a’; a.f=1.5; b=a; () x=a.f; ()
二. 枚举类型的应用
• 1.枚举类型变量的定义 ◆先定义枚举类型,再定义枚举类型变量
enum week{sun,mon,tue,wed,thu,fri,
sat};
enum week weekday,workday; ◆定义枚举类型的同时定义枚举变量 enum color {red,blue,green,black}a,b,c;
共用体类型的关键字
union 联合类型名 { 数据类型 成员名1 数据类型 成员名2
...........
数据类型 成员名n };
例:
union utype {
char ch; int i; float f; };
2、如何定义共用体类型的变量
(1)先定义类型,再定义变量,例如: union data /*共用体类型定义*/ { int i;
◆直接定义枚举变量 enum {male,female}sex1,sex2;
枚举类型变量的特点
例 enum DAY {
MON=1, TUE, WED, THU, FRI, SAT, SUN };
(1) 枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号,隔开。
C语言第9章结构体、共用体、枚举
![C语言第9章结构体、共用体、枚举](https://img.taocdn.com/s3/m/441e45e783c4bb4cf6ecd180.png)
结构体变量.成员
struct date { int year;
int month; int day;
“.”是成员运算符, 优先级最高
printf("%d,%d,%d",birth);
printf("%d,%d,%d",birth.year,
}; struct date birth;
birth.month,birth.day);
scanf("%f",&student2.score[2])7; 8
student2
结构变量的整体赋值 student3 = student2;
02 Zhang Zi Liang 88 78
student3
02 Zhang Zi Liang 88 78
湖南工业大学计算机与通信学院
例9-1学生的基本信息包括学号、姓名、3门成绩、平均分、总分。输入一 个学生的前3项基本信息,计算平均分和总分并输出。
湖南工业大学计算机与通信学院
9.1 问题的提出
又如,在学生信息管理系统中填 加个属性:是否是中共党员,如 果不是属性的值为0(int),如
果是属性的值为入党的时间 (char)。在某一时间,属性只有 一种值,而且数据类型不同,这 种情况用什么数据类型描述呢?
对于这种应用,C语言引入了共用体类型。
共用体是一种同一存储区域由不同类型变量共享的数据 类型,它提供—种方法能在同一存储区中操作不同类型 的数据,也就是说共用体采用的是覆盖存储技术,准许 不同类型数据互相覆盖。
基本数据类型并不能方便地解决所有问题
❖ 复合数据类型是基本数据类型迭代派生而来
典型的代表就是“结构”,数组、指针也可算作此类
C语言程序设计 实验九 结构体和共用体 答案 西北民大 电气院
![C语言程序设计 实验九 结构体和共用体 答案 西北民大 电气院](https://img.taocdn.com/s3/m/3836582f0722192e4536f62f.png)
实验九结构体和共用体一,实验目的:1,掌握结构体类型变量的定义和使用.2,掌握结构体类型数组的概念和应用.3,掌握共用体的概念和使用.4,了解链表的概念,初步学会对链表进行操作.二,实验准备:1,复习结构体的概念和定义方法.2,复习共用体的概念和定义方法.3,源程序.三,实验步骤及内容:程序改错typedef union { lo ng x[2];int y[4];char z[8];} MYTYPE;typedef union them;main(){ printf("%d",sizeof(them));}修改后的程序:typedef union { lo ng x[2];int y[4];char z[8];} MYTYPE;MYTYPE them;main(){ printf("%d",sizeof(them));}程序填空以下程序建立了一个带有头结点的单向链表,结点中的数据可由键盘输入,当输入数据为-1时,表示输入结束(链表头结点的data与不放数据,表空的条件是ph―>next==NULL).#include _<stdio.h>_____struct list {int data ;struct list *next ;};_ struct list *creatlist(){ struct list *p, *q, *ph;int a ;ph=(struct list *)malloc(sizeof(struct list));p=q=ph;printf("input an integer number,enter -1 to end :\n");scanf("%d",&a);while (a!=-1){ p=(struct list *)malloc(sizeof(struct list));p->data=a;q->next=p;ph->next=p;scanf("%d",&a);}p->next ="\0";return(ph);}main(){struct list *head;head=creatlist();}3,有5个学生,每个学生的数据包括学号,姓名,三门课成绩,从键盘输入5个学生数据,要求打印出三门课总平均成绩,以及最高分的学生的数据(包括学号,姓名,三门课成绩,平均成绩).要求:用一个input函数输入5个学生数据;用一个average函数求总平均分;用max函数找出最高分学生数据;总平均分和最高分的学生的数据都在主函数中输出.(习题9.5)源程序:#include<stdio.h>#define N 5struct student{char num[6];char name[8];float score[3];float avr;}stu[N];int i,j,maxi;float sum,max,average;void main(){printf("请输入学生信息:\n");for(i=0;i<5;i++){printf("no.:");scanf("%s",stu[i].num);printf("name:");scanf("%s",stu[i].name);for(j=0;j<3;j++){printf("score %d:",j+1);scanf("%d",&stu[i].score[j]);}printf("\n");}average=0;max=0;for(i=0;i<5;i++){sum=0;for(j=0;j<3;j++)sum+=stu[i].score[j];stu[i].avr=sum/3;average+=stu[i].avr;if (sum>max){max=sum;maxi=i;}}average/=N;printf("no. name score1 score2 core3 average\n"); for(i=0;i<N;i++){printf("%5s%10s",stu[i].num,stu[i].name);for(j=0;j<3;j++)printf("%9.2f",stu[i].score[i]);printf("8.2%f\n",stu[i].avr);}printf("average=%5.2f\n",average);printf("highestscore :student %s,%s.\n",stu[maxi].num,stu[maxi].name);printf("hisscore :%6d,%6d,%6d,average: %5.2f\n",stu[maxi].score[0], stu[maxi].score[1],stu[maxi].score[2],stu[maxi].avr);getch();}4,输入和运行以下程序:unio n data{int i[2];float a;long b;char c[4];};main(){unio n data u;scanf("%d,%d",&u.i[0],&u.i[1]);printf("i[0]=%d,i[1]=%d\na=%f\nb=%ld\nc[0]=%c,c[1]=%c,c[2]=%c,c[3]=%c\n",u.i[0],u.i[1],u.a,u.b,u.c[0],u.c[1],u.c[2],u.c[3]);}输入两个整数10000,20000给u.i[0]和u.i[1].分析运行结果.运行结果:分析:定义了共用体变量data.u,将10000,20000分别赋给u.i[0],u.i[1],分别用%d,%c,%f,输出这两个数,得到的结果然后将scanf语句改成:scanf("%ld",&u.b);输入60000给b.分析运行结果.源程序:unio n data{int i[2];float a;long b;char c[4];};main(){unio n data u;scanf("%ld",&u.b);printf("i[0]=%d,i[1]=%d\na=%f\nb=%ld\nc[0]=%c,c[1]=%c,c[2]=% c,c[3]=%c\n",u.i[0],u.i[1],u.a,u.b,u.c[0],u.c[1],u.c[2],u.c[3]);getch();运行结果:分析:原来的程序:结构体中的数组i被赋值10000和20000,并且也没有超过32767的范围;但其他的变量没有初始值;改后的程序:只有b的值是被赋值的;四,实验报告:1,根据下列程序段回答问题:struct data{int i;char ch;float f;}a;uno in data{int i;char ch;float f;}b;试问结构体变量a和共用体变量b所占用的字节数各是多少解答:结构体变量a是七个字节,共用体变量b是七个字节2,源程序.3,错误原因及其修改记录.4,实验结果记录.5,实验体会.。
习题参考答案第9章结构体与共用体.docx
![习题参考答案第9章结构体与共用体.docx](https://img.taocdn.com/s3/m/74893943e55c3b3567ec102de2bd960590c6d9a1.png)
第9章结构体与共用体(参考答案)二. 填空题1.if(a&OxlO==OxlO)2.s=(high&OxffffOOOO) I (low&OxOOOOffff)3.04.30 4【说明】此题考查的是结构体类型变量分配的空间,结构体变量a所需的空间是各成员之和,成员num占6个字节,成员s是数组,占16个字节,成员ave占8个字节。
结构体指针变量p 在内存所占字节数是4个字节,用于存放相同类型的地址。
5.80【说明】共用体类型STU定义的数组分配的是一块连续的存储空间,其长度为数组长度X共用体最大成员空间=5X 16.6.No:1001N ame: WangzhenBirthday: 1990/12/9*三. 编程题1、定义一个结构体变量(包括年、月、日),计算该日在本年中是第几天。
【程序分析:】以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
【程序源代码:】#include <stdio.h>struct(int day;int month;int year;}date;int main()( intdays[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; 〃每月的天数从下标为1 开始int sumdays=O,leap;printf(u\nplease input year,month,day\n n);scanf("%d,%d,%d",&date.year,& date.month,& date.day);〃计算正常年份month月以前的天数for(int i= 1 ;i<date.month;i++)"5(^林第2章数据类型、运算符与表达式sumdays+=days[i];sumdays+=date.day; 〃再加上当月的天数if(date.year%400==0ll(date.year%4==0&&date.year%100!=0))/* 判断是不是闰年*/leap=l;elseleap=O;if(leap== 1 &&date.month>2)/*如果是闰年且月份大于2,总天数应该加一天*/ sumdays++;printf("It is the %dth day.",sumdays);}2、针对【例9.11】做修改,对任意班级学生的基本信息和成绩进行管理,学生的基本信息包括: 学号、姓名、3门课的成绩,要求编写用户函数分别实现学生基本信息输入、总成绩计算、最高分学生的查找、学生信息排序(按学生总成绩从高到低)、输出最高分学生的信息,输出所有学生的信息功能。
第9章 结构体、共用体和枚举类型
![第9章 结构体、共用体和枚举类型](https://img.taocdn.com/s3/m/7c048147336c1eb91a375d79.png)
9.1 结构体类型与结构体变量 9.2 结构体数组 9.3 向函数传递结构体型数据 9.4 链表 9.5 共用体 9.6 枚举类型 9.7 用户自定义类型
9.1 结构体类型与结构体变量
• 结构体类型的定义
–概述:
• 建立单链表的主要步骤为:
– 生成只含有头结点的空链表; – 然后读取数据信息,生成新结点,将数据存放于新结点中, 插入新结点到单链表中 – 重复第二步,直到输入结束。 根据新结点插入到链表的位置的不同,建立链表的方式, 分为在表尾插入的方法和在表头插入的方法。 •表尾插入: 例9.6 •表头插入: 例9.7
• 共用体变量的定义
–用已定义的共用体类型去定义共用体变量 –定义共用体类型的同时定义变量: –定义无名共用体类型的同时定义变量:
• 共用体变量的引用
–引用方式:共用体变量名.成员名 共用体变量名. 共用体变量名 –说明: 对于共用体变量,只能引用它的成员,而不能引用整个 共用体变量。若共用体的成员是构造类型的,则需要逐级引 用至最低级的成员。 –能通过定义指向共用体的指针变量来引用共用体变量。
在实际应用中,一组相关的数据可能是不同类型的。C语 言提供了包含不同类型成员的类型来定义这样的数据,这 种类型就是结构体类型 结构体类型。 结构体类型
– 定义形式:
struct 结构体名 类型名1 成员名1 {类型名1 成员名1; 类型名2 成员名2 类型名2 成员名2; …… 类型名n 成员名n 类型名n 成员名n; };
• 举例
例9.11 上一页
9.6 枚举类型
• 枚举类型的定义–定义来自式:enum 枚举类型名{枚举常量1,枚举常量2,……,枚举常量n}; •
C语言结构体习题及答案知识讲解
![C语言结构体习题及答案知识讲解](https://img.taocdn.com/s3/m/078b58fb02768e9950e7380b.png)
{
printf("%c,%d\n",kw[3].Key[0], kw[3].ID);
}
A) i,3B) n,3C)f,4D)l,4
7.定义以下结构体类型
structstudent
{
char name[10];
int score[50];
float average;
}stud1;
则stud1占用内存的字节数是【 】。
} x[4]={{2008,10,1, "guangzhou"}, {2009,12,25, "Tianjin"}};
语句
printf("%s,%d,%d,%d",x[0].name,x[1].birthday.year);的输出结果为【】。
A)guangzhou,2009B)guangzhou,2008
C)printf("%s\n",class[3].name);
D)printf("%s\n",class[0].name);
10.定义以下结构体数组
struct date
{ int year;
int month;
int day; };
struct s
{ struct date birthday;
char name[20];
struct c
{ int x;
int y;
}s[2]={1,3,2,7};
语句printf("%d",s[0].x*s[1].x)的输出结果为【】
A) 14B)6C)2D) 21
5.运行下列程序段,输出结果是【】
struct country
9 结构体与共用体 答案
![9 结构体与共用体 答案](https://img.taocdn.com/s3/m/176a947c83c4bb4cf6ecd111.png)
9 结构体与共用体一、选择填空9.1 答案:C分析:在本题的说明中定义了一个名为wc的结构,它由两个成员组成:整型变量a和指针变量b。
在定义的同时说明了一个指向这一结构类型的指针变量p。
数组x0和x1都是含有两个整型元素的一维数组,并赋有初值。
x为一结构型数组,共有两个元素,每一个元素都具有struct wc型的结构(含有两个成员),并赋有初值。
执行p=x;语句后,p指向这一结构数组的首地址。
由于p指向了x数组的首地址,也就是x[0]的地址,所以答案A中的*p->b等价于*(x[0].b),其值为11(注意:运算符->优先于*);答案B中的p->a即是x[0].a,其值为100;答案C中的++p->a是找到p->a(其值为100),再将此值自增1,取增加1以后的值,故为101;答案D是先将指针p增1,指向x数组的第二个元素x[1],即(p++)->a在此等价于x[1].a,其值为300。
9.2 答案:D分析:本题中的初始数据的构成情况与上题相同。
如前所述,答案A的值为11;答案B的值与上题的答案D相同,为300;答案C是先取内容,后自增1,等价于*p->b, p++,故其值也为11;而答案D是p先自增1,指向x[1],后取值,等价于++p, *p->b,所以其值为31。
9.3 答案:D分析:关键字typedef是利用已定义的类型标识符来定义新的类型标识符。
它并不产生新的数据类型。
其一般形式为:typedef 类型名标识符;题中的long int就是一个已存在的类型名,而新定义的类型名BIGGY就代表着long int 这个类型标识符。
9.4 答案:D分析:由于本题中定义了一个名为st的结构,它由两个成员组成:一个是整型变量n;一个是指向自身结构的指针变量next。
接着又定义了具有这一类型的一维数组a和指针变量p。
a数组含有3个元素并赋有初值。
p指向a数组的第一个元素。
C语言-第9章 结构体与共用体
![C语言-第9章 结构体与共用体](https://img.taocdn.com/s3/m/05cc542caf45b307e87197b4.png)
第9章结构体与共用体一、单项选择题1. 若有以下说明语句:struct student{ int num;char name[ ];float score;}stu;则下面的叙述不正确的是: ( )A) struct是结构体类型的关键字B) struct student 是用户定义的结构体类型C) num, score都是结构体成员名D) stu是用户定义的结构体类型名2. 若有以下说明语句:struct date{ int year;int month;int day;}brithday;则下面的叙述不正确的是_____.A) struct是声明结构体类型时用的关键字B) struct date 是用户定义的结构体类型名C) brithday是用户定义的结构体类型名D) year,day 都是结构体成员名3. 已知:(设整型2字节,字符型1字节,浮点型4字节)struct{ int i;char c;float a;}test;则sizeof(test)的值是。
A) 4 B) 5 C) 6 D) 74. 以下对结构变量stul中成员age的非法引用是。
struct student{ int age;int num;}stu1,*p;p=&stu1;A) stu1.age B) student.age C) p->age D) (*p).age5. 有如下定义struct person{char name[9]; int age;};struct person class[10]={“Tom”,17,“John”,19,“Susan”,18,“Adam”,16,};根据上述定义,能输出字母A的语句是A) printf(“%c\n”,class[3].name); B) printf(“%c\n”,class[3].name[0]);C) print f(“%c\n”,class[3].name[1]); D) printf(“%c\n”,class[2].name[3]);6. 存放100个学生的数据、包括学号、姓名、成绩。
c语言9结构体与共用体
![c语言9结构体与共用体](https://img.taocdn.com/s3/m/d1758649dcccda38376baf1ffc4ffe473368fdd1.png)
c语言9结构体与共用体九、结构体与共用体(一) 选择题1、C语言结构体类型变量在程序执行期间_________。
A.所有成员一直驻留在内存中B.只有一个成员驻留在内存中C.部分成员驻留在内存中D.没有成员驻留在内存中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);}A.0 B.1 C.3 D.63、设有如下定义:struct sk{int n;float x;}data ,*p;若要使p指向data中的n域,正确的赋值语句是_________。
A.p=&data.nB.*p=data.n;C.p=(struct sk *)&data.nD.p=(struct sk *)data.n4、以下对结构体变量stu1中成员age的非法引用是_________。
struct student{int age;int num;}stu1,*p;p=&stu1A.stu1.ageB.student.ageC.p->ageD.(*p).age5、下面对typedef的叙述中不正确的是_________。
A.用typedef可以定义各种类型名,但不能用来定义变量B.用typedef可以增加新类型C.用typedef只是将已存在的类型用一个新的标识符来代表D.使用typedef有利于程序的通用和移植6、以下scanf函数调用语句中对结构体变量成员的不正确引用是_________。
struct pupil{char name[20];int age;int sex;}pup[5],*p;p=pup;A.scanf("%s",pup[0].name);B.scanf("%d",&pup[0].age);C.scanf("%d",&(p->sex));D.scanf("%d",p->age);7、若有以下说明和定义union dt{int a;char b;double c;}data;以下叙述中错误的是_________。
C语言程序设计 结构体与共用体
![C语言程序设计 结构体与共用体](https://img.taocdn.com/s3/m/d089270b6c85ec3a87c2c5ba.png)
一、选择题1、定义结构类型时,下列叙述正确的是()A、系统会按成员大小分配每个空间B、系统会按最大成员大小分配空间C、系统不会分配空间D、以上说法均不正确2、已知结构类型变量x的初始化值为{“20”,30,40,35.5},请问合适的结构定义是()A、 Struct s{int no;int x,y,z};B、 Struct s{char no[2];int x,y,z};C、 Struct s{int no;float x,y,z};D、Struct s{char no[2];float x,y,z};3、若程序中有定义struct abc{int x;char y;};abc s1,s2;则会发生的情况是()A、编译时会有错误B、链接时会有错误C、运行时会有错误D、程序没有错误4、已知学生记录描述为struct student{int no;char name[20];char set;struct{int year;int month;int day;}birth;};struct student s;设变量s中的“生日”应是“1984年11月11日”,下列对生日的正确赋值方式是( ).A)year=1984; B)birth.year=1984;month=11; birth.month=11;day=11; birth.day=11;C)s.year=1984; D)s.birth.year=1984;s.month=11; s.birth.month=11;s.day=11; s.birth.day=11;5、当说明一个结构体变量时系统分配给它的内存是( ).A)各成员所需内存量的总和 B)结构中第一个成员所需内存量C)成员中占内存量最大者所需的容量 D)结构中最后一个成员所需内存量6、以下对结构体类型变量的定义中不正确的是( ).A)#define STUDENT struct student B)struct studentSTUDENT {int num;{int num; float age;float age; }std1;}std1;C)struct D)struct{int num; int num;float age; float age;}std1; }student;struct student std1;7、设有以下说明语句struct stu{int a;float b;}stutype;则下面的叙述不正确的是( ).A)struct是结构体类型的关键字B)struct stu是用户定义的结构体类型C)stutype是用户定义的结构体类型名D)a和b都是结构体成员名8、C语言结构体类型变量在程序执行期间( )..A)所有成员一直驻留在内存中B)只有一个成员驻留在内存中C)部分成员驻留在内存中D)没有成员驻留在内存中9、在16位IBM-PC机上使用C语言,若有如下定义:struct data{int i;char ch;double f;}b;则结构变量b占用内存的字节数是( ).A)1 B)2 C)3 D)410、以下程序的运行结果是( ).#include “stdio.h”main(){struct data{int year,month,day;}today;printf(“%d\n”,sizeof(struct data));}A)6 B)8 C)10 D)1211、若有以下定义和语句;struct student{int age;int num ;};struct student stu [3]={{1001,20 },{1002,19},{1003,21}};main(){struct student *p;p=stu;…..}则以下不正确的引用是( )。
9 结构体与共用体
![9 结构体与共用体](https://img.taocdn.com/s3/m/44912294eff9aef8951e063d.png)
struct person
{ char name[20];
int age;
char sex;
} a={"li ning", 20, 'm'}, *p=&a;
则对字符串 li ning 的引用方式可以是
(A)(*p).name
(B)
9.7 若有以下的说明,则表达式
(多项选择)。
(C)
(B)p->a
9.2 若有以下说明和语句,则表达式
(C)++p->a
(D)(p++)->a
中的值为 31。
ห้องสมุดไป่ตู้
struct wc
{int a;
int *b;
} *p;
int x0[ ]={11,12},x1[ ]={31,32};
stratic struct wc x[2]={100,x0,300,x1};
{ USER sp[N],temp;
getdata(sp);
getsort(sp);
outdata(sp);
}
getdata(USER *sp)
{ int i;
printf("Enter %d name & phone number:\n",N);
for(i=0;i<N;i++)
{ gets(sp[i].name);
2
if(max<min)return MinMaxErr; if(max>100)return Great100; if(min<0)return Lesson;
(3) ; } 9.9 已知 head 指向单链表的第一个结点,以下程序调用函数 print()输出这一单向链表, 请在程序中填空。 #INCLUDE<STDIO.H> #include<stdlib.h> struct stud { int info; struct stud *next; }; void print(struct stud *head) { struct stud *p;
C语言程序设计实例教程第2版习题答案作者李红第9章结构体和共用体.doc
![C语言程序设计实例教程第2版习题答案作者李红第9章结构体和共用体.doc](https://img.taocdn.com/s3/m/57944116a1c7aa00b42acbc1.png)
9.4课后习题9.4.1项目练习一.练习目的1.进一步巩固结构体类型和共用体类型的定义与引川2.进一步复习链表的建立过程3.进一步巩固枚举类型的定义与枚举元索的引用方法二.练习内容1.用结构体变量表示平面上的一个点(横坐标和纵坐标),输入两个点,求两点Z间的距离。
#include "stdio.h"include "math.h"struct pin{float x;float y;}a,b;main(){printfC*请输入a点的横纵坐标:“);scanf("%f%f"/&a.x,&a.y);printfC'Xn");printf("请输入b点的横纵坐标scanf(,,%f%f"/&b.x,&b.y);printf("\n n);printff"输出a、b 两点之间的距离是:%f",sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)));getch();}2.16个同学围成一-圈,从笫1个人开始按1、2、3的顺序报号,凡报到3者退出圈子。
找出最后昭在圈子中的人原来的序号。
ttinclude "stdio.h"#include "stdlib.h"#define LEN sizeof(struct game)struct game{int num;struct game *next;};struct game *creat(){ struct game *head,*p;head=p=(struct game *) malloc(LEN);p->num=l;int i=2;while(i<=16){ p・>next=(struct game *) malloc(LEN);p->next-:>nu m=i;i++;p=p->n ext; }p->next=head; return(head);} struct game *delete(struct game *head) { struct game*pl=head,*p2=head,*x; int k=l;while(pl->next!=pl) {if(k==3) {x=pl; pl=pl->next;p2・>n ext=pl; free(x); x=NULL; k=0;} else {P2=pl; pl=pl->next;}pl->next=NULL;return(pl);}void print(struct game *head){ struct game *p;p=head;while(p!=NULL) {printf("%d\t",p->num);p=p->n ext;}printfCAn");}main(){ struct game *pt,*p;pt=creat();p=delete(pt);print(p);free(p);getch();}3.建立一个链表,每个结点包含的成员为:职工号、工资。
C语言结构体习题及答案
![C语言结构体习题及答案](https://img.taocdn.com/s3/m/8ee0124133687e21af45a9b3.png)
第9章结构体1.定义以下结构体类型struct s{int a;char b;float f;};则语句printf("%d",sizeof(struct s))的输出结果为【】。
A) 3 B) 7 C) 6 D) 42.当定义一个结构体变量时,系统为它分配的内存空间是【】A)结构中一个成员所需的内存容量B)结构中第一个成员所需的内存容量C)结构体中占内存容量最大者所需的容量D)结构中各成员所需内存容量之和3.定义以下结构体类型struct s{ int x;float f;}a[3];语句printf("%d",sizeof(a))的输出结果为【】A) 4 B) 12 C) 18 D) 64.定义以下结构体数组struct c{ int x;int y;}s[2]={1,3,2,7};语句printf("%d",s[0].x*s[1].x)的输出结果为【】A) 14 B) 6 C) 2 D) 215.运行下列程序段,输出结果是【】struct country{ int num;char name[10];}x[5]={1,"China",2,"USA",3,"France",4, "England",5, "Spanish"};struct country *p;p=x+2;printf("%d,%c",p->num,(*p).name[2]);A) 3,a B) 4,g C) 2,U D) 5,S6.下面程序的运行结果是【】。
struct KeyWord{char Key[20];int ID;}kw[]={"void",1,"char",2,"int",3,"float",4,"double",5};main(){printf("%c,%d\n",kw[3].Key[0], kw[3].ID);}A) i,3 B) n,3 C) f,4 D) l,47.定义以下结构体类型struct student{char name[10];int score[50];float average;}stud1;则stud1占用内存的字节数是【】。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第九章结构体类型与公用体类型习题及其答案9-3 编写程序,使用结构体类型,输出一年十二个月的英文名称及相应天数。
解:#include "stdio.h"struct date{char month[10] ;int daynumber ;}main(){int i ;date a[12]={{"January",31},{"February",29},{"March",31},{"Aprial",30}, {"May",31},{"June",30},{"july",31},{"August",31},{"September",30} ,{"October",31},{"November",30},{"December",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)+(p2.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++){printf("请输入第%d个朋友的信息:\n",i+1);printf("姓名:");scanf("%s",&fd[i].name) ;printf(" 地址:");scanf("%s",&fd[i].address) ;printf(" 邮编:");scanf("%s",&fd[i].mailnumber) ;printf(" 电话:");scanf("%s",&fd[i].telphone) ;printf(" 传呼:");scanf("%s",&fd[i].byphone) ;printf(" 手机:");scanf("%s",&fd[i].movephone) ;}for(i=0;i<10;i++){printf("\n第%d个朋友的信息:\姓名:%s\n 地址:%s\n 邮编:%s\n 电话:%s\n 传呼:%s\n 手机:%s\n",i+1,fd[i].name,fd[i].address,fd[i].mailnumber,fd[i].telphone,f d[i].byphone,fd[i].movephone) ;}}思考:结构体类型变量的分量可以是各种基本数据类型(整型、实型、字符型等)或数组类型,是否可以是另一结构体类型?9-6用一个数组存放图书信息,每本图书包含书名、作者、出版年月、出版社、借出数目、库存数目等信息。
编写程序输入若干本图书的信息,按出版年月排序后输出。
解:#include "stdio.h"#include "string.h"struct Book{char booktitle[30] ;char author[10] ;char publishday[10] ;char publishunit[22] ;char lendno[16] ;char stockno[11] ;}#define N 100 //假设图书数量不超过110册main(){int i,j,k,n;Book ts[N] ,t;printf("请输入欲处理的图书数量:");scanf("%d",&n);for(i=0;i<n;i++){printf("请输入第%d本书的信息:\n",i+1);printf(" 书名:");scanf("%s",&ts[i].booktitle) ;printf(" 作者:");scanf("%s",&ts[i].author) ;printf(" 出版年月:");scanf("%s",&ts[i].publishday) ;printf(" 出版社:");scanf("%s",&ts[i].publishunit) ;printf(" 借出数:");scanf("%s",&ts[i].lendno) ;printf(" 库存数:");scanf("%s",&ts[i].stockno) ;}for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(strcmp(ts[k].publishday,ts[j].publishday)<0) k=j ;{t=ts[i],ts[i]=ts[j];ts[j]=t;}}printf("\n排序后的图书信息:");for(i=0;i<n;i++){printf("\n书名:%s, 作者:%s, 出版年月:%s, 出版社:%s, 借出数:%s, 库存数:%s\n",ts[i].booktitle,ts[i].author,ts[i].publishday,ts[i].publishunit,ts[i].lendno,ts[i].stockno) ;}}思考:在此程序中,ts[N]是一个什么类型的数组?每个数组的元素大约需占多少字节内存?为什么?9-7建立一张人员登记表,表中包括人员的姓名、性别、年龄、婚否,如为已婚,还包括爱人的姓名、年龄。
将此表输出,假定人数不超过50人。
解:#include "stdio.h"#include "string.h"struct registerable{char name[10] ;char sex ;int age;char marry ;char wifename[10];int wifeage ;}#define N 50void main(){int i,n;struct registerable ts[N] ;printf("请输入欲录入人员数量:") ;scanf("%d",&n);for(i=0;i<n;i++){printf("请输入第%d个人的信息:\n",i+1);printf("姓名:") ;scanf("%s",ts[i].name);printf(" 性别:") ;scanf("%s",ts[i].sex);printf(" 年龄:") ;scanf("%s",ts[i].age);printf("婚否(y/n):") ;scanf("%s",ts[i].marry);if(ts[i].marry=='y'||ts[i].marry=='Y'){printf(" 妻子姓名:");scanf("%s",&ts[i].wifename);printf(" 妻子年龄:");scanf("%s",&ts[i].wifeage);}else{ts[i].wifename=" " ;ts[i].wifeage=0 ;}}printf("\n通信录信息表:");printf("\n 姓名性别年龄婚否妻子姓名妻子年龄\n") ;for(i=0;i<n;i++){printf("%8s %c %d %c %8s%d\n",ts[i].name,ts[i].sex,ts[i].age,ts[i].marry,ts[i].wifename,ts[i].wife age);}}思考:结构体类型变量的分量与其对应类型的一般变量的区别是什么?在使用中有何不同?9-8定义一函数output(),输出学生的成绩数组。