C语言各章节单元测试题及答案——结构体与共用体

合集下载

C语言(结构体与共用体)习题与答案

C语言(结构体与共用体)习题与答案
A.int strcmp4(char *s,char *t)
{ 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)功能是()。

结构体与公用体 习题十及参考答案

结构体与公用体 习题十及参考答案
习题十 1、 单选题 1、下面的四个运算符中,优先级最低的是( )。 A)( ) B). C)-> D)++ 2、已知: struct {int i; char c; float a; }test; 则sizeof(test)的值是( )。 A)4 B)5 C)6 D)7 3、选择出错误的函数定义( )。 A)struct tree funa(s) B)int *funb(s) C)struct tree *func(s) D)int *fund(s) Struct tree s[ ]; char s[ ]; char **s; char *s[10][ ]; { … {… {… {… } } } } 4、以下对C语言中联合类型数据的正确叙述是( )。 A) 一旦定义了一个联合变量后,即可引用该变量或该变量中的任 意成员 B) 一个联合变量中可以同时存放其所有成员 C) 一个联合变量中不能同时存放其所有成员 D) 联合类型数据可以出现在结构类体型定义中,但结构体类型数 据不能出现在联合类型定义中 5、已知函数原型为: struct tree *f(int x1,int x2,struct tree x3,struct tree *x4) 其中tree为已定义过的结构,且有下列变量定义: struct tree pt,*p;int i; 请选择正确的的函数调用语句( )。 A)&pt=f(10,&i,pt,p); B)p=f(i++,(int *)p,pt,&pt); C)p=f(i+1,&(i+2),*p,p); D)f(i+1,&i,p,p);
住址、入学成绩)的信息。请在输入10名教师和学生的信息后, 按姓名进行排序,最后按排序后的顺序进行输出,对于教师要输 出姓名、单位、住址和职称,对学生要输出姓名、班级、住址和 入学成绩。请编程实现。

结构体和共用体 参考答案

结构体和共用体 参考答案

实验八构造体及其应用班级:**:**:成绩:一.实验目的1、掌握构造体数据类型的定义和使用。

2、掌握构造体数组的定义和使用。

3、掌握链表的根本概念,熟练掌握单链表的创立、插入、删除和遍历操作。

二.使用的设备和仪器:计算机+Windows *P +Visual C++6.0三.实验内容及要求1、定义一个描述时间的构造体类型Time〔包括时、分、秒〕,然后定义一个该构造体类型的变量,按24小时制输入时间信息,然后按12小时制输出〔区分AM和PM〕。

例如,输入的时间是22:10:30;输出:PM 10:10:30。

2、定义描述学生信息〔**、**、成绩〕的构造体数组。

1〕定义输入学生信息的函数Input;2〕定义输出学生信息的函数Output;3〕定义按**进展查找的函数Search,假设找到,则输出该学生的信息;如果没找到,则输出"该学生不存在〞。

3、建立一个由3个学生〔包括**、**、成绩〕组成的静态链表,然后,输出该链表中各结点的数据。

4、动态建立一个学生信息〔包括**、**、成绩〕的链表,**输入-1时表示完毕,然后输出该链表中各结点的数据。

选作题:5、在第2题的根底上修改函数Search,假设找到,则返回该学生的信息;否则,返回一个内容为空的构造变量。

6、有N个候选人,每个选民只能投一票,要求编写一个模拟10个选民进展投票的程序,先后输入被选人的名字,最后按照选票由高到低输出投票结果。

7、在第3题的根底上,定义一个链表查找函数,对所输入的**进展查找,如果找到,则输出该学生的信息;如果没找到,则输出"该学生不存在〞。

四.实验步骤1、程序代码:*include<stdio.h>struct Time{int h,m,s;};void Input(Time *pt);void Output12(Time t);void main(){Time t;Input(&t);Output12(t);}void Input(Time *pt){printf("Input hour:minute:second:");scanf("%d:%d:%d",&pt->h,&pt->m,&pt->s);}void Output12(Time t){printf("The Time is:");if(t.h<12)printf("AM %d:%d:%d\n",t.h,t.m,t.s);elseprintf("PM %d:%d:%d\n",t.h-12,t.m,t.s);}运行结果:2、程序代码:*include<stdio.h>*include<string.h>*define N 3struct Student{char num[10];char name[10];double score;};void Input(Student *p){int i;for(i=0;i<N;i++)scanf("%s%s%lf",(p+i)->num,(p+i)->name,&(p+i)->score ); }void Output(Student *p){int i;for(i=0;i<N;i++)printf("num=%s name=%s score=%lf\n",(p+i)->num,(p+i)->name,(p+i)->score );}void Search(Student *p,char *nm){for(int i=0;i<N;i++){if(strcmp((p+i)->num,nm)==0){printf("num=%s name=%s score=%lf\n",(p+i)->num,(p+i)->name,(p+i)->score );break;}}if(i==N)printf("该学生不存在!\n");}void main(){Student stu[N];printf("请输入%d个学生的信息〔**、**、成绩〕:\n",N);Input(stu);printf("学生的信息为:\n");Output(stu);char nm[10];printf("请输入要查找的学生的**:");scanf("%s",nm);printf("查找结果:\n");Search(stu,nm);}运行结果:3、程序代码:*include<stdio.h>*define N 3struct student{char num[10];char name[10];double score;student *ne*t;};void main(){student stu1={"001","zhangsan",89},stu2={"002","lisi",99},stu3={"004","wangwu",70};student *head,*p;head=&stu1;stu1.ne*t=&stu2;stu2.ne*t=&stu3;stu3.ne*t=NULL;p=head;while(p!=NULL){printf("num:%s,name:%s,socre:%.2lf\n",p->num,p->name,p->score);p=p->ne*t;}}运行结果:4、程序代码:*include<stdio.h>*include<malloc.h>*include<string.h>*define N 3struct student{char num[10];char name[10];double score;student *ne*t;};void main(){student *head,*p,*s;head=NULL;printf("请输入学生信息,包括**和**〔**输入-1,表示完毕〕:\n");s=(student*)malloc(sizeof(student));scanf("%s%s%d",s->num,s->name,&s->score);s->ne*t=NULL;while(strcmp(s->num,"-1")!=0){if(head==NULL)head=s;elsep->ne*t=s;p=s;s=(student*)malloc(sizeof(student));scanf("%s%s%d",s->num,s->name,&s->score);s->ne*t=NULL;}p=head;while(p!=NULL){printf("%s,%s,%d\n",p->num,p->name,p->score);p=p->ne*t;}free(s);}运行结果:选做题:5、程序代码:*include<stdio.h>*include<string.h>*define N 3struct Student{char num[10];char name[10];double score;};void Input(Student *p){int i;for(i=0;i<N;i++)scanf("%s%s%lf",(p+i)->num,(p+i)->name,&(p+i)->score );}void Output(Student *p){int i;for(i=0;i<N;i++)printf("num=%s name=%s score=%lf\n",(p+i)->num,(p+i)->name,(p+i)->score ); }Student Search(Student *p,char *nm){Student ept_stu={",",0};for(int i=0;i<N;i++){if(strcmp((p+i)->num,nm)==0)return *(p+i);}return ept_stu;}void main(){Student stu[N];printf("请输入%d个学生的信息〔**、**、成绩〕:\n",N);Input(stu);printf("学生的信息为:\n");Output(stu);char nm[10];printf("请输入要查找的学生的**:");scanf("%s",nm);printf("查找结果:\n");Student t=Search(stu,nm);printf("num=%s name=%s score=%lf\n",t.num,,t.score); }运行结果:6、程序代码:*include<stdio.h>*include<string.h>*define N 3struct person{char name[20];int count;};void main(){person leader[N]={"HJT",0,"W",0,"*JP",0};char lname[20];person t;int i,j;printf("候选人为:\n");for(i=0;i<N;i++)printf("%s ",leader[i].name );printf("\n请开场投票:\n");for(i=1;i<=10;i++){scanf("%s",lname);for(j=0;j<N;j++){if(strcmp(lname,leader[j].name )==0)leader[j].count ++;}}for(i=0;i<N-1;i++)for(j=i+1;j<N;j++){if(leader[j].count>leader[j].count){t=leader[j]; leader[j]=leader[i]; leader[i]=t;}}printf("最后的投票结果为:\n");for(i=0;i<N;i++){printf("%s:%d\n",leader[i].name ,leader[i].count );}}运行结果:7、程序代码:*include<stdio.h>*include<string.h>struct Student{int num;char name[20];double score;Student *ne*t;};void PrintList(Student *head);void Search(Student *head);void main(){Student s1={1001,"Lily",100};Student s2={1002,"Lucy",90};Student s3={1003,"Ada",70};Student *head;head=&s1; s1.ne*t =&s2; s2.ne*t =&s3; s3.ne*t =NULL;PrintList(head);Search(head);}void PrintList(Student *head){printf("The List are:\n");Student *p=head;while(p!=NULL){printf("num=%d name=%s score=%lf\n",p->num ,p->name ,p->score );p=p->ne*t ;}}void Search(Student *head){char nm[20];printf("请输入要查找的**:");scanf("%s",nm);Student *p=head;while(p!=NULL){if(strcmp(p->name,nm)==0)break;p=p->ne*t ;}if(p!=NULL)printf("查找的结果为:num=%d name=%s score=%lf\n",p->num ,p->name ,p->score );elseprintf("该学生不存在!\n");}运行结果:五、实验总结。

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

第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个朋友数据的通讯录程序,每个朋友数据包括姓名、地址、邮编、电话、传呼、手机等数据。

C语言各章节单元测试题及答案——结构体与共用体

C语言各章节单元测试题及答案——结构体与共用体

第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。

第十章结构体与共用体

第十章结构体与共用体

试题汇编之:结构体与共用体一.选择题1.共用体定义为“union data{char ch;int x;}a;”下列语句正确的是。

A:a.ch=‟x‟;a=10; B:a a=‟x‟,10;C:a.x=10;a.ch=‟x‟; D:a=‟x‟;2.共用体定义为“union data{char ch;int x;}a;”下列语句不正确的是。

A:a={…x‟,10}; B:a.x=10;a.x++;C:a.ch=‟x‟;a.ch++; D:a.x=10;a.ch=‟x‟;3.对于:struct node{double x;char c;}*p;下列哪个赋值是错的。

A:p->x=2B:p.x=2.0 C.p->c=2 D.(*p).c=‟a‟4.对于以下结构定义:struct{int len;char *str;}*p;(*p)->str++中的++加在。

A:指针str上B:指针p上. C.str所指的内容上 D:表达式语法有错5.对如下定义:struct{char a1;int a2;}xx; union{char a1;int a2;int a3;}yy;如果sizeof(xx)的值为3,则sizeof(yy)的值应为:A:2 B:4 C:5 D:定义有错6.以下结构体变量定义语句中错误的是。

A.struct staffer{ long int code; float salary;} one;B.struct staffer{ long int code; float salary;} staffer one;C.typedef struct { long int code ; float salary;} STAFFER;D.struct { long int code; float salary; }one;-7.形如上题中定义的结构体变量,下列对此变量的输入形式中正确的是。

C语言 选择题库第10章 结构体与共用体

C语言 选择题库第10章 结构体与共用体

第10章结构体与共用体1.以下叙述中错误的是()。

A) 可以通过typedef增加新的类型B) 可以用typedef将已存在的类型用一个新的名字来代表C) 用typedef定义新的类型名后,原有类型名仍有效D) 用typedef可以为各种类型起别名,但不能为变量起别名参考答案:A【解析】关键字typedef的作用只是将C语言中的已有的数据类型作了置换,并不是增加新的类型,所以A)错误。

2.以下关于typedef的叙述错误的是A) 用typedef可以增加新类型B) typedef只是将已存在的类型用一个新的名字来代表C) 用typedef可以为各种类型说明一个新名,但不能用来为变量说明一个新名D) 用typedef为类型说明一个新名,通常可以增加程序的可读性参考答案:A【解析】typedef并不是增加了新类型,而是用一个新名字替代已存在的类型,不能为变量说明一个新名,使用typedef可以增强移植性。

所以A选项错误。

3.若有以下语句typedef struct S{ int g; char h; } T;以下叙述中正确的是A) 可用S定义结构体变量B) 可用T定义结构体变量C) S是struct 类型的变量D) T是struct S类型的变量参考答案:B【解析】本题考查typedef重新声明一种结构体类型,那么T为结构体类型,而不是结构体变量,所以B选项正确。

4.设有以下语句typedef struct TT{ char c; int a[4]; } CIN;则下面叙述中正确的是A) CIN是struct TT类型的变量B) TT是struct类型的变量C) 可以用TT定义结构体变量D) 可以用CIN定义结构体变量参考答案:D【解析】本题考查typedef重新声明一种结构体类型,其中CIN为结构体类型名,而不是结构体变量,所以D 选项正确。

5.以下叙述中错误的是A) 可以用typedef将已存在的类型用一个新的名字来代表B) 可以通过typedef增加新的类型C) 用typedef定义新的类型名后,原有类型名仍有效D) 用typedef可以为各种类型起别名,但不能为变量起别名参考答案:B【解析】本题考查typedef的用法,typedef并不是增加一种新的类型,而是对已存在的类型用一个新的名字来代表,所以B选项错误。

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. 循环输入每个学生的信息,统计总成 绩,存储在结构体数组中
练一练
尝试编写学生管理系统,定义学生信息 的结构体类型,分别用函数实现数据输 入、数据输出、计算每个人的平均分, 进行排序和成绩插入等操作。

C语言程序设计 实验九 结构体和共用体 答案 西北民大 电气院

C语言程序设计 实验九 结构体和共用体 答案 西北民大 电气院

实验九结构体和共用体一,实验目的: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

第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门课的成绩,要求编写用户函数分别实现学生基本信息输入、总成绩计算、最高分学生的查找、学生信息排序(按学生总成绩从高到低)、输出最高分学生的信息,输出所有学生的信息功能。

结构体,共用体,链表相关试题

结构体,共用体,链表相关试题

十.结构体和共用体(1)下列程序中fun()函数的功能是:构成一个如图所示的带头结点的单向链表,在结点的数据域中放入了具有两个字符的字符串。

disp()函数的功能是显示输出该单链表中所有结点中的字符串。

请填空完成(06.4)disp()函数。

#includetypedef struct node /*链表结点结构*/{ char sub[3];struct node *next;}Node;Node fun(char s) /*建立链表*/{ …… }void disp(Node *h){ Node *p;p=h− >next;while( 【】){printf("%s\n",P− >sub);p= 【】; }}main( ){ Node *hd;hd=fun( ); disp(hd); printf("\n");}(2)设有以下语句:typedef struct TT{char c,int a[4];}CIN;则下面叙述中正确的是(06.9)。

A)可以用TT定义结构体变量B)TT是struct类型的变量C)可以用CIN定义结构体变量D)CIN是struct TT类型的变量(3)有以下结构体说明、变量定义和赋值语句: struct STD{char name[10];int age;char sex;}s[5],*ps;ps=&s[0];则以下scanf函数调用语句中错误引用结构体变量成员的是(06.9)。

A)scanf(%s",s[0].name); B)scanf(%d",&s[0].age); C)scanf(%c",&(ps->sex)); D)scanf(%d",ps->age);(4) 若有以下定义和语句printf("%d\n",sum);}(7)有下列程序:struct S{int n;int a[20];};void f (struct S *p){int i,j,t;for(i=0;i<p->n-1;i+ +)for(j=i+1;j<p->n;j+ +)if(p->a[i]>p->a[j]){t=p->a[i];p->a[i]=p->a [j];p->a[j]=t;}}main( ){ int i; struct S s={10,{2,3,l,6,8,7,5,4,10,9}};f(&s);for(i=0;i<s.n;i+ +) printf("%d,",s.a[i]);}程序运行后的输出结果是(07.4 )。

9 结构体与共用体 答案

9 结构体与共用体 答案

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章 结构体与共用体

第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结构体与共用体

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;以下叙述中错误的是_________。

第8单元 结构体与共用体

第8单元   结构体与共用体

第8单元结构体与共用体一、单项选择题1. 在C语言中,当定义一个结构体类型,并用其定义某变量后,系统分配给该变量的内存大小是。

A. 各成员所需要内存空间的总和B. 第一个成员所占内存空间C. 成员中所有成员空间最大者D. 成员中所有成员空间最小者2. 以下对结构体变量成员引用非法的是。

struct student{ int age; int num; }stu1,*p;A. stu1.numB. student.ageC. p->numD.(*p).age;3.下面程序的运行结果是。

main(){ struct abcd{ int m ;int n ; }cm[2]={1,2,3,7 };printf(“%d\n”,cm[0].n/cm[0].m*cm[1].m); }A. 0B. 1C. 3D. 64. 若要利用下面的程序段对指针变量p指向一个存储整型变量的存储单元,则下面正确的选项是。

int *p ; p= malloc(sizeof(int));A. intB. int *C. (* int)D. (int *)5.若有下面的定义和语句,执行完后正确的语句是。

union data{ int i; char c ; float f ; } a ;int n;A. a=5B. a={2,‘a’,1.2 }C. printf(“%d”,a);D. n=a;6.在C语言中,若有如下的定义,则共用体变量m所占内存的字节是。

union student{ int a ; char b ; float c; } m ;A.1B. 2C. 8D. 117.在C语言中,若有如下的定义,当进行如下赋值后,m的结果是。

union student{ int a ; char b ; float c; } m ;m.a=3; m.b=‘z’; m.c=3.7A. 3B. ‘z’C. 3.7D. 3+‘z’+3.78.设有如下定义,若使p1指向dt中的m域,正确的语句是。

C语言-第06讲-结构-答案.docx

C语言-第06讲-结构-答案.docx

第6讲结构体和共同体6.6强化练习6.6.1选择题[6-1] A)各成员所需内存量的总和[6-2JC) 一个共用体变量中不能同时存放其所有成员[6-3] C) stutype是用户定义的结构类型名[6-4] A)所有成员一直驻留在内存中[6-5] C) a不可以作为函数参数[6-6] D) ++[6-7] D) 7简析:按16位机[6-8] A) 4[6-9] D) int *fund( s )char *s[10][];{•••}[6-10] C) 10[6-11] C) p=f( i+l,&( i+2), *p, p);[6-12] D) s.birth.year= 1984;s.birth.month= 11;s. birth, day =11;[6-13] D) struct{ int num;float age;}student;struct student std 1;[6-14] D) 11简析:按16位机[6-15] B) ( *p ).a[6-16] D) printff "%c\n M, class[2].name[0]);[6-17] D) p=&stu.age[6-18] D) scan# "%d", p->age );[6-19] D) *ptr->il[6-20] B) p=( struct sk* )&data.n;[6-21 ] D) *p.age[6-22] D) *(++p)->m[6-23] C) (*p).sex[6-24] D) ++p・>n[6-25] D) (*++p).num[6-26] B) student.age[6-27] D) ++ptr->il[6-28] D) (int*)简析:动态分配存储空间函数,在头文件stdlib.h 中,void *malloc( size_t, size );分配size字节的内存。

c语言分章节试题及答案

c语言分章节试题及答案

c语言分章节试题及答案1. 变量声明- 题目:在C语言中,以下哪个选项是正确的变量声明方式?A. int a = 0;B. int a = 0.0;C. int a = "hello";D. int a = 0, b = 0;- 答案:A和D。

2. 数据类型- 题目:以下哪个选项不是C语言中的基本数据类型?A. intB. floatC. charD. string- 答案:D。

3. 运算符优先级- 题目:在C语言中,以下哪个运算符的优先级最高?A. 乘法B. 加法C. 赋值D. 条件运算符- 答案:A。

4. 函数定义- 题目:以下哪个是正确的C语言函数定义?A. int myFunction(int a, int b) { return a + b; }B. int myFunction(int a, int b) { return a - b; }C. int myFunction(int a, int b) { return a * b; }D. All of the above- 答案:D。

5. 数组初始化- 题目:以下哪个是正确的C语言数组初始化方式?A. int arr[5] = {1, 2, 3, 4, 5};B. int arr[5] = {1, 2, 3};C. int arr[5] = {1, 2, 3, 4};D. int arr[5] = {1, 2, 3, 4, 5, 6};- 答案:A。

6. 指针- 题目:以下哪个选项正确地声明了一个指向整数的指针?A. int *ptr;B. int ptr[];C. int *ptr = 0;D. int ptr = 0;- 答案:A和C。

7. 字符串操作- 题目:以下哪个函数用于比较两个字符串是否相等?A. strcat()B. strcmp()C. strcpy()D. strlen()- 答案:B。

8. 条件语句- 题目:以下哪个是C语言中正确的if语句?A. if (x > 10)x = 20;B. if (x > 10)x = 20C. if (x > 10)x = 20;else x = 10;D. All of the above- 答案:A。

C语言程序设计实例教程第2版习题答案作者李红第9章结构体和共用体.doc

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语言第十一章结构体与共用体、枚举类型

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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档