结构体共用体与枚举课后习题
结构体与共用体相关题目练习
结构体与共用体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)6main(){ 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)8struct 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)1810.设有如下定义: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.a11.下面程序的输出结果为int dt[4]={10 ,20 ,30 ,40} ;struct st aa[4]={50,&dt[0],60,&dt[1],70,&dt[2],80,&dt[3] } ;main(){ p=aa ;printf("%d\n" , ++p->x );printf("%d\n" ,(++p)->x);printf("%d\n" , ++( *p->y));}A)10 B)50 C)51 D)6020 60 60 7020 21 21 3112.为了建立如图所示的存储结构(即每个结点含两个域, data 是数据域,next是指向结点的指针域,)请填空。
结构体公用体枚举类型习题
是对C语言中共用体类型数据的正确叙述: C 是对 语言中共用体类型数据的正确叙述: 语言中共用体类型数据的正确叙述 A)一旦定义了一个共用体变量后,即可引用该变量或该变 )一旦定义了一个共用体变量后, 量中的任意成员; 量中的任意成员; B)一个共用体变量中可以同时存放其所有成员; )一个共用体变量中可以同时存放其所有成员; C)一个共用体变量中不能同时存放其所有成员; )一个共用体变量中不能同时存放其所有成员; D)共用体类型数据可以出现在结构体类型定义中,但结构 )共用体类型数据可以出现在结构体类型定义中, 体类型数据不能出现在共用体类型定义中。 体类型数据不能出现在共用体类型定义中。
5.根据下面的定义,能打印出字母M的语句是 。 D 根据下面的定义,能打印出字母 的语句是 struct person{ char name[9]; int age; }; struct person c[10]={"John",17,"Paul",19,"Mary",18,"Adam",1 6}; A)printf("%c\n",c[3].name); ) B)printf("%c\n",c[3].name[1]); ) C)printf("%c\n",c[2].name[1]); ) D)printf("%c\n",c[2].name[0]); )
B
10.变量 所占内存字节数是 C 变量a所占内存字节数是 变量 A) 4 B) 5 C) 6 ) ) ) union u{ char st[4]; int i; long l;}; struct A{ int c; union u;}a;
D) 8 )
C语言数据结构-第9章 结构体共用体与枚举
"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语言(结构体与共用体)习题与答案
{ 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-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个朋友数据的通讯录程序,每个朋友数据包括姓名、地址、邮编、电话、传呼、手机等数据。
学习情境七结构体、共用体与枚举习题
学习情境七结构体、共用体与枚举习题一、选择题1.若有如下说明,则的叙述是正确的(已知int类型占两个字节)。
struct st{ int a;int b[2];}a;A.结构体变量a与结构体成员a同名,定义是非法的B.程序只在执行到该定义时才为结构体st分配存储单元C.程序运行时为结构体st分配6个字节的存储单元D.类型名struct st可以通过extern关键字提前引用(即引用在前,说明在后)2.设有以下说明语句:struct ex{ int x ;float y;char z ;} example;则下面的叙述中不正确的是。
A.struct是结构体类型的关键字B.example是结构体类型名C.x,y,z都是结构体成员名D.struct ex是结构体类型3.若有以下结构体定义:struct example{ int x;int y;}v2;则是正确的引用或定义。
A.example.x=10 B.example v2.x=10;C.struct v2; v2.x=10; D.struct example v2={10};4.已知:struct{ int i ;char c;float a;} ex;则sizeof(ex)的值是。
A.4B.5C.6D.75.下面程序的运行结果是main(){struct sample{int x;int y;}a[2]={1,2,3,4};printf(“%d\n”,a[0].x+a[0].y*a[1].y);}A.7B.9C.13D.166.已知:union{ int i ;float a;char c ;} ex;则sizeof(ex)的值是。
A.4B.5C.6D.77.有如下定义struct person{char name[9]; int age;};struct person class[10]={“Johu”, 17,“Paul”, 19“Mary”,18,“Adam”, 16,};根据上述定义,能输出字母M的语句是。
第8章结构型联合型和枚举型习题(C语言程序设计)
本文由ミ尒尒贡献 ppt文档可能在WAP端浏览体验不佳。
建议您优先选择TXT,或下载源文件到本机查看。
第8章 结构体联合体枚举 习题 一单项选择题. 一单项选择题 1. 设有以下定义语句,下列叙述中不正确的是( 设有以下定义语句,下列叙述中不正确的是( struct ex { int x; float y ;char z ;}example; ) A. struct是结构型的保留字 是结构型的保留字 B. example是结构型名 是结构型名 C. x,y,z是结构型成员名 是结构型成员名 D. ex是结构型名 是结构型名 一单项选择题.2 一单项选择题 2 以下定义结构型变量s的语句中不正确的是( 以下定义结构型变量 的语句中不正确的是( 的语句中不正确的是 A.#define ABC struct abc ABC {double a; char b[10]; }s; C. struct S {double a; char b[10]; }; B. struct abc {double a; char b[10]; }s; D. struct abc {double a; char b[10]; }abc; struct abc s; ) 一单项选择题.3 一单项选择题 若有定义语句: 若有定义语句: struct a {int a1; int a2;}a3; 以下赋值语句不正确的是( 以下赋值语句不正确的是( A. a.a1=4; C. a3={4,5} ) B. a2=4 D. a3.a2=5 一单项选择题. 一单项选择题 4. 定义如下结构型变量和结构型指针 struct sk { int a;float b}data,*p; 若指针p已经通过 指向结构型变量data,则引用 若指针 已经通过p=&data;指向结构型变量 已经通过 指向结构型变量 则引用 data中a成员的正确方式是: 成员的正确方式是: 中 成员的正确方式是 data p a A. (*p).data.a &data B. (*p).a C. p->data.a 结构体变量名 成员名 b 结构体变量名.成员名 D. p.data.a 指针变量) (*指针变量).成员 指针变量 成员 指针变量->成员 指针变量 成员 一单项选择题.5 一单项选择题 若要说明一个类型名STP 若要说明一个类型名STP , 使定义语句“ 等价于“ 使定义语句“STP s;”等价于“char *s; ” 等价于 以下选项中正确的是( 以下选项中正确的是( ) 类型重定义: 类型重定义: typedef 原类型名 新名; 新名; A.typedef STP B.typedef * char C. typedef STP D. typedef char char *s; STP; * char ; * STP; 一单项选择题.6 一单项选择题 某结构型变量定义如下, 某结构型变量定义如下,对该结构型变量中成员的 引用形式正确的是( 引用形式正确的是( ) struct abc{int s; char ch;}a1,*p; p=&a1; A. a1->s B. p->ch C. p.ch D. *p.s 一单项选择题. 一单项选择题 8. 若有下面的说明和定义: 若有下面的说明和定义: struct test m3 m1 { int m1; char m2; m2 float m3; ua union uu { char u1[c]; u1[5] int u2[2]; u2[2] }ua; }myaa; 的值是: 则sizeof(struct test)的值是: 的值是 二、填空题 2 设struct student {int no; int char name[12]; float score[3]; }s1,*p=&s1; s1,*p=&s1; 赋值1001的方法是( 的方法是( 用指针变量p给s1的成员 赋值 指针变量 给 的成员no赋值 的方法是 ) p->no=1001 (*p).no=1001 二、填空题 6 设有下列数据定义语句, 设有下列数据定义语句,则表 达式++p >b的值是 ++p- 的值是 达式++p->b的值是 p struct AB { int a; ab float b; }ab[2]={{4,3},{2,1}},*p=ab; ab[2]={{4,3},{2,1}},*p=ab; ={{4,3},{2,1}},*p ab[2] 4 ab[1] 3.0 4.0 2 ab[1] 1.0 ++p->b ++p++ p->b 二、填空题 5 ? 设有类型说明: ? enum color {red,yellow=4,white,black}; ? 则执行语句printf(“%d”,white);的结果是 二、填空题7 填空题 ? 设有定义语句: ? enum{B1,B2=10;B3,B4}x=B3; ? 则++x==B4的值是 三、写出程序运行结果1. 写出程序运行结果 struct st {int x; int *y;}*p; int dt[4]={10,20,30,40}; struct st aa[4]={50,&dt[0],60,&dt[1],70,&dt[1],80,&dt[3]}; main() { p=aa; printf(“%d”,++p->x); printf(“%d”,(++p)->x); printf(“%d”,++(*p->y)); 三、写出程序运行结果2. 写出程序运行结果 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) 实验11. 实验 三、实验练习 struct x{ int a; char *b;}*p; char y0[]=“Li”, y1[]=“Wang”; stuct x xw[]={{1,y0},{4,y1}}; main() p p=xw; printf(“%c”, ++*p->b); printf(“%d”,++p->a); printf(“%d”,++p->a); printf(“%d”,(++p)->a); printf(“%c\n”,*(p++)->b); } y0[3] L i xw[2] \0 1 y0 4 y1 y1[5] W a n g \01。
实验9 结构体、共用体与枚举类型答案
率。 其次,结构体指针作为函数参数:可以在函数中通过该指针引用结 构体,当在函数中修改了结构体的成员变量后,指针所指向的结构体本 身也被改变了。而当结构体变量作为函数参数;在函数中可通过变量直 接使用结构体,但是,如果在函数中修改了结构体的成员变量后,结构 体本身并未发生变化,只是副本被改变。
} } 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);
结构体共用体与枚举课后习题
结构体共用体与枚举课后习题1.定义一结构体,成员项包括一个字符型、一个整型。
编程实现结构体变量成员项的输入、输出,并通过说明指针引用该变量。
#includevoid main(){struct a{char b;int c;}d,*p;p=&dprintf("输入:\n");scanf("%c",&(*p).b);scanf("%d",&p->c);printf("输出:\n");printf("%c\n",(*p).b);printf("%d\n",p->c);}2.建立一结构体,其中包括学生的姓名、性别、年龄和一门课程的成绩。
建立的结构体数组通过输入存放全班(最多45人)学生信息,输出考分最高的同学的姓名、性别、年龄和课程的成绩。
#includevoid 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<n;i++)< p="">{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<n;i++)< p="">if(a<stu[i].score)< p="">{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人,本学期有两门课程的成绩,求:●所有课程中的最高成绩,以及对应的姓名、学号和课程编号。
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#结构体、枚举类型及例题解析
C#结构体、枚举类型及例题解析结构体 ~struct定义:结构体⼀般定义在Main函数上⾯,位于Class下⾯,作为⼀个类;⼀般情况Struct定义在Main函数前⾯,Main函数⾥⾯的地⽅都可以使⽤,参数前⾯加上public代表公⽤变量。
格式:struct +结构体的名称{public int+变量名;public double+变量名;public string+变量名;}以上就是定义⼀个结构体的格式,⾥⾯包含许多种数据类型,如整形int,字符串string,带⼩数点decimal等;⽤法:(1)在Main函数外⾯定义了⼀个student类型的结构体,在Main主函数中使⽤:(2)然后为⾥⾯的每个元素赋值,结构体名+点+结构体⾥⾯变量名称=值。
(3)赋值之后完成之后进⾏打印。
枚举类型~Enum....{E}定义:枚举元素的默认基础类型为int。
默认情况下,第⼀个枚举数的值为0,后⾯每个枚举数的值依次递增1。
⽤法:枚举也可以指定数据类型,⼀般不指定。
在定义枚举类型时,可以选择基类型,但可以使⽤的基类型仅限于long、int、short和byte。
例题:1、定义⼀个结构体,存放关于车辆的⼏个信息将所有车的信息都放⼊集合中车型号价格(W)轴距(mm)油耗(L/100km)宝马320Li 38 2920 6.9宝马520Li 43 3108 7.2宝马730Li 89 3210 6.3奥迪A4L35TFSI 31 2869 6.2奥迪A6L30TFSI 43 3012 7.6奥迪A8L45TFSI 89 3122 8.1奔驰C200L 35 2920 6.1奔驰E260L 48 3014 6.7奔驰S320L 93 3165 8结构体:struct car{public string xinghao;public double jia;public double zhou;public double you;}ArrayList al = new ArrayList();car car1 = new car();car car2 = new car();car car3 = new car();car car4 = new car();car car5 = new car();car car6 = new car();car car7 = new car();car car8 = new car();car car9 = new car();car1.xinghao = "宝马320Li";car1.jia = 38;car1.zhou = 2920;car1.you = 6.9;al.Add(car1);car2.xinghao = "宝马520Li";car2.jia = 43;car2.zhou = 3108;car2.you = 7.2;al.Add(car2);car3.xinghao = "宝马730Li";car3.jia = 89;car3.zhou = 3210;car3.you = 6.3;al.Add(car3);car4.xinghao = "奥迪A4L35TFSI";car4.jia = 31;car4.zhou =2869;car4.you = 6.2;al.Add(car4);car5.xinghao = "奥迪A6L30TFSI";car5.jia = 43;car5.zhou = 3012;car5.you = 7.6;al.Add(car5);car6.xinghao = "奥迪A8L45TFSI";car6.jia = 89;car6.zhou = 3122;car6.you = 8.1;al.Add(car6);car7.xinghao = "奔驰C200L";car7.jia = 35;car7.zhou = 2920;car7.you = 6.1;al.Add(car7);car8.xinghao = "奔驰E260L";car8.jia = 48;car8.zhou = 3014;car8.you = 6.7;al.Add(car8);car9.xinghao = "奔驰S320L";car9.jia = 93;car9.zhou = 3165;car9.you = 8;al.Add(car9);1、现在想买⼀辆价格在50万以内的车,请给出车的型号以及价格 #regionfor (int i = 0; i < al.Count; i++){car c = (car)al[i];if (c.jia < 50){Console.WriteLine("型号:{0},价格{1}",c.xinghao,c.jia);}Console.ReadLine();#endregion2、买得起豪车,可是很关⼼油耗,给查⼀下油耗最低的三辆车的型号以及油耗情况#regionfor (int i = 0; i < al.Count; i++){for (int j = i; j < al.Count - 1; j++){car a = (car)al[i];car b = (car)al[j+1];if (a.you > b.you){object zhong = al[i];al[i] = al[j + 1];al[j + 1] = zhong;}}}for (int i = 0; i < 3; i++){car c = (car)al[i];Console.WriteLine("油耗最低的第{0}辆车的型号是{1},油耗为{2}",i+1,c.xinghao,c.you);}Console.ReadLine();#endregion3、买了车之后后座会经常坐⼈,所有我现在想要轴距⼤⼀些的车,前三名即可。
习题参考答案第9章结构体与共用体.docx
第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门课的成绩,要求编写用户函数分别实现学生基本信息输入、总成绩计算、最高分学生的查找、学生信息排序(按学生总成绩从高到低)、输出最高分学生的信息,输出所有学生的信息功能。
第7章结构体、联合体和枚举类型 1
第7章结构体、联合体和枚举类型第 7 章(42) 有以下程序#include "stdio.h"struct s{ int x,y;} data[2]={10,100,20,200};main (){ struct s *p=data;printf("%d\n",++(p->x));}程序运行后的输出结果是【B 】A) 10 B)11C) 20 D)21 (44) 以下程序的输出结果是#include "stdio.h"struct HAR{ int x, y; struct HAR *p;} h[2];main(){ h[0],x=1;h[0];y=2;h[1],x=3;h[1];y=4;h[0],p=&h[1],p=h;p rintf(“%d %d \n”,(h[0],p)->x,(h[1],p)->y);}A) 12 B) 23 C) 14 D) 32(43) 以下程序的输出结果是#include "stdio.h"amovep(int p, int (a)[3],int n){ int i, j;for( i=0;i<;i++)for(j=0;j<n;j++){ *p=a[i][j];p++; }}main(){ int *p,a[3][3]={{1,3,5},{2,4,6}};p=(int *)malloc(100);amovep(p,a,3);printf(“%d %d \n”,p[2],p[5]);free(p);}A) 56B) 25 C) 34 D) 程序错误(36) 设有以下说明语句struct ex{ int x ; float y; char z ;} example;则下面的叙述中不正确的是A) struct结构体类型的关键字B) example是结构体类型名C) x,y,z都是结构体成员名D) struct ex是结构体类型(37) 以下只有在使用时才为该类型变量分配内存的存储类说明是A) auto和 static B) auto和 registerC) register和 static D) extern和 register(30) 有以下程序#inc1ude <stdio.h>main(){ printf("%d\n", NULL); }程序运行后的输出结果是A) 0B) 1 C) -1 D) NULL没定义,出错(33) 以下选项中不能正确把c1定义成结构体变量的是A) typedef struct B) struct color cl{ int red; { int red;int green; int gree n;int blue; int blue;} COLOR; };COLOR cl;C) struct color D) struct{ int red; { int red;int green; int green;int blue; int blue;} c l; } c l ;(44) 有以下程序struct STU{ char num[10]; float score[3]; };main(){ struct stu s[3]={{“20021”,90,95,85},{“20022”,95,80,75},{“20023”,100,95,90}},*p=s;int i; float sum=0;for(i=0;i<3,i++)sum=sum+p->score[i];printf(“%6.2f\n”,sum);}程序运行后的输出结果是A) 260.00 B) 270.00C) 280.00 D) 285.00(45) 设有如下定义:struck 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;(46) 有以下程序#include <stdlib.h>struct NODE{ int num; struct NODE *next; };main(){ struct NODE *p,*Q,*R;p=(struct NODE*)malloc(sizeof(struct NODE));q=(struct NODE*)malloc(sizeof(struct NODE));r=(struct NODE*)malloc(sizeof(struct NODE));p->num=10; q->num=20; r->num=30;p->next=q;q->next=r;printf(“%d\n”,p->num+q->next->num);}程序运行后的输出结果是A) 10 B) 20 C) 30 D) 40(47) 若有以下说明和定义typedef int *INTEGER;INTEGER p,*q;以下叙述正确的是A) P是int型变量B) p是基类型为int的指针变量C) q是基类型为int的指针变量D) 程序中可用INTEGER代替int类型名(49) 有以下程序#include <stdlib.h>main(){ char *p,*q;p=(char*)malloc(sizeof(char)*20); q=p;scanf(“%s%s”,p,q); printf(“%s%s\n”,p,q);}若从键盘输入:abc def<回车>,则输出结果是:A) def def B) abc def C) abc d D) d d(49) 若以下定义:struct link{ int data;struck link *next;}a,b,c,*p,*q;且变量a和b之间已有如下图所示的链表结构:a bdata next data next┌──┬──┐┌──┬──┐│ 5 │┼──→│ 9 │ \0 │└──┴──┘└──┴──┘↑pcdata next┌──┬──┐│ 7 ││└──┴──┘↑q指针p指向变量a,q指向变量c。
结构体与共用体习题
第十一章 结构体与共用体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 nextB.对结构进行存取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名学生的学号、姓名、四项成绩及平均分放在一个结构体数组中,学生的学号、姓名和四项成绩由键盘输入,然后计算出平均分放在结构提对应的域中。
结构体和共用体习题
结构体和共用体习题习题六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)。
结构体、共同体和枚举类型
结构体、共同体和枚举类型一、选择题1、使用共同体的目的是()A、将一组数据作为一个整体,以便于其中的成员共享同一存储空间B、将一组具有相同数据类型的数据作为一个整体,以便于其中的成员共享同一存储空间C、将某种类型数据的所有可能出现的选择作为一个整体,以便程序中使用D、将一组具有相同数据类型的数据作为一个整体,以便程序中使用2、以下关枚举的叙述正确的是()。
A、在定义枚举类型时枚举常对应的序号只能由系统生成B、在定义枚举类型时不可同时定义枚举类型变量C、枚举变量的值可以进行比较D、枚举元素的值可以是字符或字符串3、下列结构体定义不正确的是()。
A、struct abc{ int a,b,c; } stru[10];B、struct abc[10]{ int a,b,c; };C、struct abc{ int a,b[10],c; } stru;D、struct abc{ int a,b,c; } stru;4、若有定义enum week{sun,mon,tue,wed,thu,fri,sat} day1,day2=wed;则下列对变量操作不正确的是()。
A、cin>>day1;B、day1=day2;C、day2= =day1;D、cout<<day2;5、下列对枚举类型定义正确的是()。
A、enum e={sun,mon,tue,wed};B、enum e={“sun”,”mon”,”tue”,”wed”};C、enum e{sun=7,mon,tue,wed};D、enum e{“sun”,”mon”,”tue”,”wed”};6、若有定义struct student{ int num;char name[20];}stu;则下列语句正确的是()。
A、student.num=1;B、stu.num=2;C、cout<<stu;D、cin>>stu;7、以下程序的输出结果为()。
C语言程序设计实例教程第2版习题答案作者李红第9章结构体和共用体.doc
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语言第十一章结构体与共用体、枚举类型结构体和共用体及枚举类型复习题1. 如下说明语句,则下面叙述不正确的是( )。
struct stu {int a ; float b ;} stutype ;A)struct是结构体类型的关键字B)struct stu是用户定义的结构体类型C)stutype是用户定义的结构体类型名D)a和b都是结构体成员名2. 以下对结构类型变量的定义中不正确的是( )。
A)#define STUDENT struct student B)struct student STUDENT {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;3.若有以下说明,能正确引用"Li Ming"的方式是()。
struct student{int name;int num;}stu1[2]={{ "Ma Hong",18},{"Li Ming",17}}; struct stu *p=stu1;A)stu1[1].name B)p->nameC)/doc/1611839622.html, D)(*p++).name4.以下程序的运行结果是()。
{int n;float x;}*p;void main(){struct st arr[5]={{10,5.6},{12,7.1},{14,6.7},{16,6.2},{18,6.9}}; p=arr; printf("%d\n",++p->n);p++; printf("%d,%.2f\n",p->n,p->x);}A)12 B)1112,7.10 10,5.60C)11 D)1212,7.10 14,6.705. 在16位PC机中,若有定义:struct data { int i ; char ch; double f; } b ; 则结构变量b占用内存的字节数是( )。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.定义一结构体,成员项包括一个字符型、一个整型。
编程实现结构体变量成员项的输入、输出,并通过说明指针引用该变量。
#include<stdio.h>
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<stdio.h>
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<n;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<n;i++)
if(a<stu[i].score)
{
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<stdio.h>
#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<N;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<N;i++)
if(a<stu[i].score1)
{
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<N;i++)
if(a<stu[i].score2)
{
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<N;i++)
{
s1+=stu[i].score1;
s2+=stu[i].score2;
}
p1=s1/N;
p2=s2/N;
for(i=0;i<N;i++)
{
if(stu[i].score1<p1)
printf("名字:%s 学号:%ld 此学生成绩小于第一门课的平均分\n",stu[i].name,stu[i].number);
if(stu[i].score2<p2)
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<N-1;i++)
for(j=0;j<N-1-i;j++)
if(stu[j].score1<stu[j+1].score1)
{t=stu[j];stu[j]=stu[j+1];stu[j+1]=t;}
printf("按第一门课程从高到低排序为:\n");
for(i=0;i<N;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<stdio.h>
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;
}
}。