结构体与共同体文件测验
- 格式:pdf
- 大小:355.26 KB
- 文档页数:3
《程序设计语言 C1》随机题目做作业时间:2013-5-13 8:30:00至2013-6-12 8:30:001. 下列程序的执行结果是_________。
#includeunion un{ int i;char c[21;};void main(){ union un x;x.c[0]=10:x.c[1]=1:printf("\n%d",x.i);}(3分)2. C语言结构体类型变量在程序执行期间(3分)A、B、C、D、A、所有成员一直驻留在内存中B、只有一个成员驻留在内存中C、部分成员驻留在内存中D、没有成员驻留在内存中3. 在16位IBM-PC机上使用C语言,若有如下定义struct data{int i;char ch;double f;}b;则结构变量b占用内存的字节数是(3分)A、B、C、D、A、1B、2C、8D、114. 设有以下说明语句typedef struct{ int n;char ch[8];}PER;则下面叙述中正确的是(3分)A、B、C、D、A、PER 是结构体变量名B、 PER是结构体类型名C、 typedef struct 是结构体类型D、struct 是结构体类型名5. 若有以下结构体定义,则________是正确的引用或定义。
struct example{ int x;int y;}v1;(3分)A、B、C、D、A、example.x=10B、example v2.x=10C、struct v2;v2.x=lOD、struct example v2={10};6. 有以下程序# includestruct STU{ int num;float TotalScore; };void f(struct STU p){ struct STU s[2]={{20044,550},{20045,537}};p.num = s[1].num; p.TotalScore = s[1].TotalScore;}main(){ struct STU s[2]={{20041,703},{20042,580}};f(s[0]);printf("%d %3.0(3分)A、B、C、D、A、20045 537B、20044 550C、20042 580D、20041 7037. 以下选项中不能正确把cl定义成结构体变量的是A.typedef structB.struct color cl{ int red; { int red;int green; int green;int blue; int blue;} COLOR; };COLOR cl;C.struct colorD.struct{ int red; { int red;int green; int green;int blue;(3分)8. 若有以下说明和定义union dt{int a;char b;double c;}data;以下叙述中错误的是_____。
第八章结构体和共同体一、单项选择1. 若有以下定义:struct link{int data;struct link *next;}a,b,c,*p,*q;且变量a和b之间已有如下图所示的链表结构,若指针p指向a,指针q指向c。
则能把c插入到a和b之间形成新的链表的语句是( C )2. 若有以下程序段:int a=1,b=2,c=3;struct dent {int n ; int *m ;} s[3] = {{101,&a},{102,&b},{103,&c}};struct dent *p=s ;则以下表达式中值为2的是( D )。
3. 下面程序的运行结果是( D )。
#iunclude<stdio.h>int main ( ) {struct complx {int x; int y ;}cnum[2]={1,3,2,7} ;printf(“%d\n”,cnum[0].y/cnum[0].x*cnum[1].x) ;return 0;}二、程序设计1. /*学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s 中,请编写函数fun,它的功能是:按分数的高低排列学生的记录,高分在前。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序: */#include <stdio.h>#define N 16typedef struct{ char num[10];int s ;}STREC;void fun (STREC a[]){/*********Begin*********//*********End**********/}int main (){FILE *wf,*in;STREC s[N]={{ "GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},{"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87},{"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},{"GA011",66},{"GA017",64},{"GA018",64},{"GA016",72}};int i;fun(s);printf("The data after sorted :\n");for (i=0; i<N; i++)printf("%s %4d\n",s[i].num,s[i].s);printf("\n");/******************************/in=fopen("in001.dat","r");i=0;while(!feof(in)){fscanf(in,"%s %d",s[i].num,&s[i].s);i++;}fun(s);wf=fopen("out.dat","w");for (i=0; i<N; i++)fprintf(wf,"%s %4d\n",s[i].num,s[i].s);fclose(wf);fclose(in);/*****************************/return 0;}【参考代码】int i,j;STREC t;for(i=0;i<N;i++)for(j=0;j<N-1-i;j++)if(a[j].s<a[j+1].s){t=a[j];a[j]=a[j+1];a[j+1]=t;}2. /*某学生的记录由学号、8门课成绩和平均分组成,学号和8门课的成绩已在主函数中给出。
国家二级C语言机试(结构体、共同体、位运算及文件操作)模拟试卷12(题后含答案及解析)题型有:1. 选择题选择题1.关于typedef的叙述中错误的是( )。
A.用typedef可以为各种类型起别名,但不能为变量起别名B.可以通过typedef增加新的类型C.用typedef定义新的类型名后,原有类型名仍有效D.可以用typedef将已存在的类型用一个新的名字来代表正确答案:B解析:C语言允许用typedef说明一种新类型名或为现有类型起个别名,而不是创建新类型,说明新类型名的语句一般形式为:typedef类型名标识符;在此,“类型名”必须是在此语句之前已有定义的类型标识符。
标识符是一个用户定义标识符,用作新的类型名。
typedef语句的作用仅仅是用“标识符”来代表已存在的“类型名”,并未产生新的数据类型,原有类型名依然有效。
知识模块:结构体及文件操作2.正确的结构体类型说明和变量定义是( )。
A.typedef struct f{int n;char c;}STR;STR t1,t2;B.struct STR;{int n;char C;};STR t1,t2;C.typedef stmct STR;{int n=0;char c=‘A’;}t1,t2;D.struct{int n;char c;}STR;STR t1,t2;正确答案:A解析:定义结构体类型的一般形式为:struct结构体名{成员列表};struct 结构体名后不能加“:”号。
但定义完之后要在句末加分号,所以选项B、C有误,选项D中定义无名称的结构体类型同时定义结构体变量形式应为“stmct t1,t2;”。
选项A为用户自定义类型,其为正确的定义形式。
知识模块:结构体及文件操作3.若typedef int*T;T a[5];则与a的定义相同的是( )。
A.int*a[5];B.int(*a)[5]C.int,*a;D.int a[5];正确答案:A解析:typedef的主要功能是为存在的类型指定一个新的别名,后面的代码中可以利用该新定义的别名定义变量,题目定义了整型指针类型T,而后利用T 定义了整型指针数组a,含有5个元素,选项A中定义了整型指针数组a,选项B定义了一个指向一维数组的指针a,选项C定义指针变量,而选项D为定义整型数组最常用的形式,数组a中可以存放5个数据元素。
国家二级C语言机试(结构体、共同体、位运算及文件操作)模拟试卷13 (总分50, 做题时间90分钟)1. 选择题1.下列说法正确的是( )。
SSS_SINGLE_SELA 使用typedef可以定义新的数据类型B 使用struct可以定义新的数据类型C 使用typedef可以对现有类型起别名,但不能定义数据类型D 使用new关键字可以定义新的数据类型分值: 2答案:C解析:C语言中只能通过struct关键字定义新的结构体,使用typedef对现有类型起别名,但不能定义新的数据类型,所以答案C正确。
2.以下说法正确的是( )。
SSS_SINGLE_SELA typedef和struct可以联合使用来定义新数据类型B typedef只能单独使用C struct只能单独使用D 以上说法都不正确分值: 2答案:D解析:typedef和struct可以联合使用来定义新的结构体,但不能定义新的数据类型。
所以A,B,C选项的说法均不正确。
答案选D项。
3.若typedef char T[3];T*a;上述定义中a的类型与下面选项中完全相同的是( )。
SSS_SINGLE_SELA char(*A)[3];B char*a;C char a[3];D char*a[3];分值: 2答案:D解析:C语言允许用typed说明一种新类型名。
题目中利用typedef定义了字符数组类型T,而后定义了该类型的指针a,因此a为指针数组。
4.关于typedef的叙述中正确的是( )。
SSS_SINGLE_SELA 在使用typedef改变原类型的名称后,只能使用新的类型名B 使用typedef说明新类型名时,后面不能加分号C 在程序中,允许用typedef来说明一种新的类型名D 使用typedef说明新类型名时,其格式是:typedef新类型名原类型名分值: 2答案:C解析:C语言允许用typedef说明一种新类型名。
typedef语句的作用仅仅是用“标识符”来代表已存在的“类型名”,并未产生新的数据类型,原有类型名依然有效。
C语⾔程序设计结构体与共⽤体⼀、选择题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;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;则结构变量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;…..}则以下不正确的引⽤是( )。
国家二级C语言(结构体和共用体、文件)机试模拟试卷2(总分:52.00,做题时间:90分钟)一、选择题(总题数:26,分数:52.00)1.若有语句typedef struet S{int g;char h;}T;,则下列叙述中正确的是( )。
(分数:2.00)A.可用S定义结构体变量B.可用T定义结构体变量√C.S是struct类型的变量D.T是struet S类型的变量解析:解析:本题考查typedef重新声明一种结构体类型。
那么T为结构体类型,而不是结构体变量,所以B选项正确。
2.设有语句typedef struet TT{char c;int a[4];}CIN;,则下列叙述中正确的是( )。
(分数:2.00)A.CIN是struet TT类型的变量B.,IT是struct类型的变量C.可以用TT定义结构体变量D.可以用CIN定义结构体变量√解析:解析:本题考查typedef重新声明一种结构体类型。
其中CIN为结构体类型名,而不是结构体变量,所以D选项正确。
3.下列叙述中错误的是( )。
(分数:2.00)A.可以用typedef将已存在的类型用一个新的名字来代表B.可以通过typedef增加新的类型√C.用typedef定义新的类型名后,原有类型名仍有效D.用typedef可以为各种类型起别名,但不能为变量起别名解析:解析:本题考查typedef的用法。
typedef并不是增加一种新的类型,而是对已存在的类型用一个新的名字来代表,所以B选项错误。
4.有以下程序:#include<stdio.h>main(){struet STU{char name[9];char sex:double score[2];};struct STU a={"Zhao",'m',85.0,90.0},b={"Qian",'f',95.0,92.0};b=a;printf("%s,%c,%2.0f,%2.0f\n",b.name,b.sex,b.score[0],b.score[1]);}程序的运行结果是( )。
第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。
实验2:有关结构与共同体的程序设计一、实验目的1.掌握结构体类型和结构体变量的定义、引用方法;2.掌握结构体类型数组和结构体类型指针的概念和应用;3.掌握共用体的概念和使用;4.能用结构体类型解决实际问题。
二、实验要求1.了解结构体类型和简单数据类型、结构体类型和共用体类型的区别;2.复习结构体变量、结构体指针与结构体数组的相关理论课程;3.完成各项实验任务及问题讨论。
三、实验内容1.输入和运行下面的程序,并分析输出结果。
①#include <stdio.h>main(){ union EXAMPLE{ struct{ int x,y;}in;int a,b;}e;e.a=1;e.b=2;e.in.x=e.a*e.b;e.in.y=e.a+e.b;printf(“%d,%d\n”,e.in.x,e.in.y);}输出结果:4,8解答:对于共用体e,有三个成员in,a,b,它们在内存中的覆盖关系如下图:即e.a,e.b,e.in.x占相同的内存单元,执行e.a=1;e.b=2;后e.a,e.b,e.in.x的值为2,执行e.in.x=e.a*e.b;后e.a,e.b,e.in.x的值为2*2=4,执行e.in.y=e.a+e.b;e.in.y=4+4=8。
main(){ union{ int i[2];long k;char c[4];}r,*s=&r;s->i[0]=0x39;s->i[1]=0x38;printf(“%c\n”,s->c[0]);}输出结果:9解答:对于共用体r,有三个成员i,k,c,它们在内存中的覆盖关系如下图:i[0]ki[1]执行s->i[0]=0x39;s->i[1]=0x38;赋值语句后,内存中存储的数据值如上图所示。
2.完善程序①下面程序的功能是输入学生的姓名和成绩,然后输出。
#include <stdio.h>struct studinf{ char name[20];/* 学生姓名*/int score;/* 学生成绩*/} stu, *p;void main ( ){ p=&stu;printf("Enter name:");gets(p->name);printf("Enter score: ");scanf("%d",&(*p).score);printf("Output: %s, %d\n",,stu.score);}目标:掌握结构体成员引用的三种等价表达方式。
1、做2008春C07“上机套题”;(思考:改错题中有什么值得参考的和借鉴的?)2、选做题(数制变换2009春C01编程题):由2009秋C02改错题设想上机编程题程序功能:十进制数转换为以数组形式表示的十六、八、二进制数形式的字符串编程要求:1、编写函数void dtov(char s[],unsigned num, int type)。
函数功能是将输入一个无符号十进制数num 和数制值type。
函数返回以数组形式表示的十六、八、二进制数形式的字符串s[]。
2、编写main函数。
函数功能是声明字符数组p[10],键盘输入无符号十进制数m 和数制值type,并作为实参,调用函数dtov,输出相应的数制的字符串数组p到屏幕及文件myf2.out中。
最后将考生本人的准考证号输出到文件myf2.out中。
测试数据:3、选做题(闰年题):由2009秋C01改错题设想上机编程题程序功能:输入两个正确日期且年份在1900-9999范围内,计算并输出两个日期之间间隔的天数。
例如:2008-8-1和2009-8-1之间间隔的天数为365。
提示:能被4整除并且不能被100整除的年份是闰年,能被400整除的年份也是闰年,其他年份则是平年。
编程要求:1、选定义结构体:struct d { int y,m,d; };2、编写函数int days( struct d d1, struct d d2)。
函数声明二维数组int mon[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30, 31,31,30,31,30,31}};和函数返回值long td。
3、编写main函数。
函数功能是输入第一个日期、第二个日期后,调用函数days,输出相应第一个日期与第二个日期之间间隔的天数到屏幕及文件myf2.out中。
最后将考生本人的准考证号输出到文件myf2.out中。
实验十一结构体(struct)与共用体(union)实验目的理解并掌握使用不同数据类型的变量组合成一个数据的组合体-结构体与共用体的定义与引用;正确使用结构体数组、结构体与函数及指向结构体的指针。
要点提示1.结构体定义的一般格式为:struct 结构体类型名{数据类型成员名1;数据类型成员名2;……数据类型成员名n;};2.结构体变量的说明struct 结构体类型名结构体变量名;3.引用结构体成员结构体变量名.成员名共用体与结构体有相似的使用形式实验内容●结构体的定义与引用●结构体与函数●结构体数组●指向结构体的指针●共用体的定义与引用实验步骤读懂并输入程序,完成填空后输出结果1.建立学习成绩单结构,并建立一个同学王林(wanglin)的记录。
#include <stdio.h>main(){struct grade /* 定义结构体类型*/{int number;char name;int math;int english;};struct 【】wanglin; /* 说明结构体变量*/printf("Please input the number, name, math, english:\n");scanf("%d,%d,%d",&【】,& wanglin. name,【】& wanglin.english);printf("wanglin 'grade is: %d/%d/%d\n", wanglin. number, , wanglin.math, wanglin.english);}程序执行过程与结果:Please input the number, name, math, english::26,A, 85,90wanglin ' grade is:#include <stdio.h>main(){struct grade /* 定义结构体类型*/{int number;char name;int math;int english;};struct grade wanglin; /* 说明结构体变量*/printf("Please input the number, name, math, english:\n");scanf("%d,%c,%d,%d",&wanglin. number,& wanglin. name,& wanglin. math,& wanglin.english);printf("wanglin 'grade is: %d/%c/%d/%d\n", wanglin. number, , wanglin.math, wanglin.english);}Please input the number, name, math, english:26,A,85,90wanglin 'grade is: 26/A/85/90Press any key to continue请再建立一个刘芳(liufang)的成绩记录, 比较一下。
实验九结构体和共用体一,实验目的: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,实验体会.。
1、变量a所占的内存字节数是________。
(假设整型i n t为4字节)struct stu{ char name[20];long int n;int score[4];} a ;A) 28 B) 30C) 32 D) 46C2、下列程序的输出结果是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);}B3、有如下定义struct person{ char name[9]; int age;};struct person calss[4]={ "Johu",17,"Paul",19,"Mary",18,"Adam",16,};根据以上定义,能输出字母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]);D4、以下程序的输出是________。
struct st{int x;int *y;} *p;int dt[4]={10,20,30,40};struct st aa[4]={50,&dt[0],60,&dt[0],60,&dt[0],60,dt[0],};main(){ p=aa;printf("%d\n",++(p->x));}A) 10 B) 11C) 51 D) 60C6、以下程序的输出结果是________。
实验九参考程序实验9-1/*****************************************************************实验9.1**(1)为某商店的商品设计合适的结构体(PRODUCT)。
每一种商品包含编号(number)、* 名称(name)、价格(price)、折扣(discount)4项信息,根据表9-1,为这些信息选择合适的数据类型。
*(2)建立2个函数,以实现对商品的操作。
input函数实现商品的输入;* display函数显示商品信息。
要求这2个函数都以商品的结构体(PRODUCT)指针为参数。
*(3)在主函数中为商品键盘定义一个结构体变量(keyboard),利用input函数实现键盘信息的输入;* 定义一个结构体数组(elec_device[3]),利用input函数实现冰箱、空调、电视信息的输入;* 最后利用display函数显示4种商品的信息。
** 表9-1**编号名称价格折扣*1010 键盘89.50 0.85*1021 冰箱1024.00 0.95*1022 空调2058.50 0.90*1023 电视3001.88 0.95*****************************************************************/#include <stdio.h>typedef struct _PRODUCT{int iNumber;char strName[32];float fPrice;float fDiscount;}PRODUCT,*PPRODUCT;void input(PRODUCT *pProduct);void display(PPRODUCT pProduct);void main(){int i;PRODUCT kyeboard;PRODUCT elec_device[3];input(&kyeboard);for(i=0;i<3;i++){input(&elec_device[i]);}display(&kyeboard);for(i=0;i<3;i++){display(&elec_device[i]);}}/******************************************************************函数名称:input()**参数:PRODUCT *pProduct -PRODUCT结构体指针,用来存放输入数据***返回值:无*说明:*该函数用来完成PRODUCT结构体数据的输入。
结构体与共用体测试一、选择题1.已知学生记录描述为struct student{int no;char name[20];char sex;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;2.根据下面的定义,能打印出字母M的语句是( )struct person{char name[9];int age;};struct person class[10]={"John",17,"Paul",19,"Mary"18,"adam",16};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]);3. 若已有以下结构体定义和初始化,则值为2的表达式是( )。
struct cmplx{int x ;int y; } c[]={1,2,3,4};A. c[0].yB. yC. c.y[0]D. c.y[1]4.若有以下说明和语句,则下面表达式中的值为1002的是( ) struct student{int age; int num;};struct student stu[3]={{1001,20},{1002,19},{1003,21}}; struct student *p;p=stu;A.(p++)->numB.(++p)->ageC.(*p).numD.(*p).age5.设有以下语句:struct st{int n; struct st *next;};struct st a[3]={5,&a[1],7,&a[2],9,'\0'};*p;p=&a[0];则以下表达式的值为6的是( )A.p++->nB.p->n++C.(*p).n++D.++p->n6.设有以下说明和定义语句,则下面表达式中值为3的是( ) struct s{int il; struct s *12;};struct s a[3]={1,&a[1],2,&a[2],3,&a[0]},*ptrptr=&a[1];A.ptr->il++B.ptr++->ilC.*ptr->ilD.++ptr->il7.若有以下定义语句union data{int l; char c; float f;}a;int n;则以下语句正确的是( )A.a=5;B.a={2,'a',1,2};C.printf("%d\n",a.c);D.n=a;8.以下程序的运行结果是:( )#include<stdio.h>union pw{int i;char ch[2];}a;main(){a.ch[0]=13;a.ch[1]=0;printf("%d\n",a.i);}A.13B.14C.208D.2099. 设有如下程序段,则vu.a 的值为( )。
结构体共用体与枚举课后习题1.定义一结构体,成员项包括一个字符型、一个整型。
编程实现结构体变量成员项的输入、输出,并通过说明指针引用该变量。
#includevoidmain(){tructa{charb;intc;}d,某p;p=&d;printf(\输入:\\n\canf(\canf(\printf(\输出:\\n\printf(\printf(\}2.建立一结构体,其中包括学生的姓名、性别、年龄和一门课程的成绩。
建立的结构体数组通过输入存放全班(最多45人)学生信息,输出考分最高的同学的姓名、性别、年龄和课程的成绩。
#includevoidmain(){inti,b,n;floata;printf(\请输入班级的人数:\canf(\getchar();tructperon{charname[20];chare某[10];intyear;floatcore;}tu[45];for(i=0;igetchar();}for(b=0,a=tu[0].core,i=0;i3.已知一个班有45人,本学期有两门课程的成绩,求:说明:要求定义结构体,第一成员项为学生姓名,第二成员项为学号,另外两个成员项为两门课成绩,并要求分别用函数完成。
(本人注:由于人数太多,故改为4人)#include#defineN4tructperon{charname[20];longintnumber;floatcore 1;floatcore2;};voidhuru(tructperontu[N]){inti;for(i=0;ivoidzuigao(tructperontu[N]){intb,i;floata;for(b=0,a=tu[0].core1,i=0;ivoidpingjun(tructperontu[N]){inti;float1,2,p1,p2;for(1=0,2=0,i=0;ivoidpai某u(tructperontu[N]){inti,j;tructperont;for(i=0;ivoidmain(){tructperontu[N];huru(tu);printf(\zuigao(tu);pingj un(tu);pai某u(tu);}4.输入一字符串,用链表形式储存,每个结点的数据域存放一个字符,最后输出链表中的全部字符。
实验10 结构体和共用体1.实验目的掌握结构体类型变量的定义和使用;掌握结构体类型数组的概念和使用;掌握链表的概念,初步学会对链表进行操作;掌握共用体的概念与使用。
2.实验内容编程序,然后上机调试运行。
(1).有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入10个学生数据,要求打印出3门课总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课的成绩、平均分数)。
(习题11.5)要求用input函数输入10个学生数据;用average函数求总平均分;用max函数找出最高分的学生数据;总平均分和最高分学生的数据都在主函数中输出。
(2).13个人围成一圈,从第1个人开始顺序报号1、2、3。
凡报到“3”者退出圈子,找出最后留在圈子中的人原来的序号。
(习题11.9)本题要求用链表实现。
(3).建立一个链表,每个结点包括:学号、姓名、性别、年龄。
输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。
(习题11.11)(4).输入和运行以下程序union data{int i[2];float a;long b;char c[4];}u;main ( ){scanf("%d,%d",&u.i[0],&u.i[1]);printf(i[0]=%d,i[1]=%da=%fb=%1dc[0]=%c,c[1]=%c,c[2]=%c,c[3]=%c,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[l],分析运行结果。
然后将scanf语句改为:scanf("%ld",&u.b);输入60000给b,分析运行结果。