第七章 结构体和共用体

第七章 结构体和共用体
第七章 结构体和共用体

第十章结构体和共用体一、选择题

1.说明一个结构体变量时系统分配给它的内存是(A)。

A)各成员所需内存总和。

B)结构中第一个成员所需的内存量

C)成员中占内存量最大者所需的容量

D)结构中最后一个成员所需内存量

2.以下对结构体类型变量的定义中不正确的是(D)。

A) #define STUDENT struct student

STUDENT

{ int num;

float age;

} std1;

B) struct student

{ int num;

float age;

} std1;

C) struct

{ int num;

float age;

}std1;

D) struct

{ int num;

float age;

} student;

struct student std1;

3.设有以下说明语句

struct stu

{ int a;

float b;

} stutype;

则下面的叙述不正确的是(C)。

A)struct是结构体类型的关键字

B)s truct stu是用户定义的结构体类型

C)s tutype是用户定义的结构体类型名

D)a和b都是结构体成员名

4.C语言结构体类型变量在程序执行期间(A)

A)所有成员一直驻留在内存中

B)只有一个成员驻留在内存中

C)部分成员驻留在内存中

D)没有成员驻留在内存中

5.以下程序运行结果是(A)。

#include “stdio.h”

main()

{ struct date

{ int year, month, day;

} today;

printf(“%d\n”,sizeof(struct date));

A) 6 B)8 C)10 D)12

6.下面程序的运行结果是(D)

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)6

7.以下scanf函数调用语句中对结构体变量成员的不正确引用是(D)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);

8.设有如下的定义:

struct sk

{ int n;

float x;

} data, * p;

若要使p指向data中的n域,正确的赋值语句是(C)。

A)p=&data.n;

B)*p=data.n;

C)p=(struct sk *)&data.n

D)p=(struct sk*) data.n;

9.若有以下说明语句

struct student

int num;

} std, *p;

p=&std;

则以下对结构体变量std中成员age的引用方式不正确的是(D)。

A)std.age B)p->age C) (*p).age D)*p.age

10.以下程序的输出结果是(C)。

Struct stu

{ int x;

int *y;

} * p;

int dt[4]={10,20,30,40};

struct stu a[4]={ 50, &dt[0], 60, &dt[1],

70, &dt[2],80, &dt[3]

};

main()

{ p=a;

printf(“%d,”,++p->x);

printf(“%d,”, (++p)->x);

printf(“%d\n”, ++(*p->y));

}

A) 10,20,20 B)50,60,21

C) 51,60,21 D)60,70,31

11.以下程序的功能是:读入一行字符,按输入时的逆序建立一个链接式的结点序列,即先输入的位于链表尾,然后在按输入的相反的顺序输出,并释放全部结点。请选择正确的内容填空。

#include “stdio.h”

#define genode(type) 【1】malloc(sizeof(type))

main()

{ struct node

{ char info;

struct node *link;

} * top, * p;

char c;

top=NULL;

while ((c=gechar()) 【2】)

{

p=getnode(struct node);

p->info=c;

p->link=top;

top=p;

}

{

【3】;

top=top->link;

putchar(p->info);

free(p);

}

}

12.若要利用下面的程序片段使指针变量p指向一个存储整型变量的存储单元,则【】中应填入的内容是(D)。

int * p;

p=【】malloc(sizeof(int));

A)int B) int* C) (* int ) D) (int *)

13.当说明一个共用体变量时系统分配给它的内存是(C)。

A)各成员所需内存的总和

B)结构中第一个成员所需的容量

C)成员中占内存量最大者所需的容量

D)结构中最后一个成员所需内存量

14.以下程序的运行结果是(B)

#include “stdio.h”

main()

{ union {

long a;

int b;

char c;

} m;

printf(“%d\n”,sizeof(m));

}

A) 2 B) 4 C) 6 D) 8

15.以下程序运行的结果是(A)。

#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)13 B)14 C)208 D)209

16.使用typedef定义一个新类型的正确步骤是()。

A)2,4,1,3 B)1,3,2,4 C)2,1,4,3 D)4,2,3,1

1.把变量名换成新类型名

2.按定义变量的方法写出定义体

3.用新类型名定义变量

4.在最前面加上关键字typedef

17.以下程序运行的结果是()。

Typedef union { long a[2];

int b[4];

char c[8];

}TY;

TY our;

main()

{ printf(“%d\n”,sizeof(our));

}

A)32 B) 16 C) 8 D) 24

二、编程题

1.有5个学生,每个学生的数据包括(学号,3门课成绩,平均成绩),要求先输入每个学生的前两项信息,求出平均成绩,再输出每个学生的所有信息。

2.写一函数,把字符串a中第m个字符开始的所有字符复制成字符串b。

3.建立一个链表,读入一个数,如果在链表中,将此值删除,否则将此值插入。

第11章 结构体与共用体

第十一章结构体与共用体 结构体变量引用规则: (1)不能将一个结构体变量作为一个整体进行输入和输出;只能对结构体变量中的各个成员分别进行输入和输出。“.”是成员(分量)运算符,它在所有的运算符中优先级最高。 (2)若成员本身又属于一个结构体类型,则要用若干个成员运算符,一级一级地找到最低的一级的成员。只能对最低级的成员进行赋值或存取以及运算。 (3)对结构体变量的成员可以像普通变量一样进行各种运算(根据其类型决定可以进行的运算)。 (4)可以引用结构体变量成员的地址,也可以引用结构体变量的地址。 —>是指向运算符,优先级为第一级。 结构体变量所占的内存长度是各成员所占内存长度之和。每个成员分别占有其自己的内存单元。 共用体变量所占的内存长度等于最长的成员的长度。 只先有定义了共用体变量才能引用它,而且不能引用共用体变量,而只能引用共用体变量中的成员。 将一个变量定义为结构体类型:不仅要求指定变量为结构体类型,而且要求指定为某一特定结构体类型。 类型与变量的区别: 定义时先定义结构体类型,然后定义变量。类型不分配空间,变量分配空间。 可以采取以下3种方法定义结构体类型变量: (1)先声明结构体类型再定义变量名 例如:struct student student1, student2; | | | 结构体类型名结构体变量名 (2)在声明类型的同时定义变量;这种形式的定义的一般形式为: struct 结构体名 { 成员表列 }变量名表列; (3) 直接定义结构体类型变量 其一般形式为: struct { 成员表列 }变量名表列; 即不出现结构体名。 引用结构体变量中成员的方式为 结构体变量名.成员名

C语言程序设计(第7章结构体与共用体)3

C语言程序设计(第7章结构体与共用体)3 7.3 结构体指针的定义和引用 指针变量非常灵活方便,可以指向任一类型的变量,若定义指针变量指向结构体类型变量,则可以通过指针来引用结构体类型变量。 7.3.1 指向结构体类型变量的使用 首先让我们定义结构体: struct stu { char name[20]; long number; float score[4]; } ; 再定义指向结构体类型变量的指针变量: struct stu *p1, *p2 ; 定义指针变量p 1、p 2,分别指向结构体类型变量。引用形式为:指针变量→成员; [例7-2] 对指向结构体类型变量的正确使用。输入一个结构体类型变量的成员,并输出。 #include /*使用malloc( ) 需要*/ struct data /*定义结构体*/ { int day,month,year; }; struct stu /*定义结构体*/ { char name[20]; long num; struct data birthday; /* 嵌套的结构体类型成员*/ } ;

main() /*定义main( ) 函数*/ { struct stu *student; /* 定义结构体类型指针*/ student=malloc(sizeof(struct stu)); /* 为指针变量分配安全的地址* / printf("Input name,number,year,month,day:\n"); scanf("%s",student->name); /* 输入学生姓名、学号、出生年月日*/ scanf("%ld", &student->num); scanf("%d %d %d", &student->birthday.year,&student->birthday.month,&student->birthday.day); printf("\nOutput name,number,year,month,day\n" ); /*打印输出各成员项的值*/ printf("%20s%10ld%10d//%d//%d\n",student->name,student->num,student->birthda y.year,student->birthday.month,student->birthday.day); } 程序中使用结构体类型指针引用结构体变量的成员,需要通过C提供的函数malloc( )来为指针分配安全的地址。函数sizeof( )返回值是计算给定数据类型所占内存的字节数。指针所指各成员形式为: student->name student->num student->birthday.year student->birthday.month student->birthday.day 运行程序: Input name,number,year,month,day: Wangjian 34 1987 5 23 Wangjian 34 1987//5//23 7.3.2 指向结构体类型数组的指针的使用 定义一个结构体类型数组,其数组名是数组的首地址,这一点前面的课程介绍得很清楚。定义结构体类型的指针,既可以指向数组的元素,也可以指向数组,在使用时要加以区分。 [例7-3] 在例7 - 2中定义了结构体类型,根据此类型再定义结构体数组及指向结构体

第十一章结构体的试题

(1)()是关于C语言数据类型的正确叙述。 A) 枚举类型不是基本类型 B) 变量使用前应定义相应的数据类型 C) 不允许使用空类型 D) 数组不是构造类型 (2) 下列()对结构类型变量定义是错误的。 A) struct teacher { int num; int age; }; struct teacher teach1; B) struct { int num; int age; } teach1, teach2; C) struct { int num; int age; } teacher; struct teacher teach1; D) struct teacher { int num; int age; } teach1; (3) 若有定义: char ch; int j,k; enum day {sun, mon, tue, wed, thu, fri, sat}; int a[sat]; 则()对下列语句是否符合语法规则的判断是正确的。 sun=0; /*语句1*/ j=mon+tue; /*语句2*/ if (a[mon]>0) j++; /*语句3*/ A) 语句1、2、3均正确 B) 语句2正确,语句1和语句3错误 C) 语句1错误,语句2和语句3正确 D) 语句1、2、3均错误 (4) 若有定义: struct teacher { int num; char sex;

int age; } teacher1; 则下面叙述错误的是()。 A) teacher1是结构类型名 B) struct teacher是用户定义的结构类型 C) num、sex、age都是结构变量teacher1的成员 D) struct是结构类型的关键字 (5) 下列程序段运行后,表达式()的值为3。 struct point { int x; int y; } *p; struct point a[3]={1,2,3,4,5,6}; p=a; A) p[1].x B) *(p+2) C) p[3].x D) p[2].x (6) 若有定义: typedef int NUM[100]; NUM n; 则()语句是正确的。 A) n[0]=2; B) NUM=2; C) NUM=n; D) n=2; (7) 若有定义int a=1,b=2,t=3; struct data { char a; float b[3]; long c; }d1; 则变量d1的长度是()。 A) 4 B) 17 C) 12 D) 15 (8) 若有定义 struct teacher { int num;

第七章结构体

第七章结构体 一、选择题 1、设有以下说明语句: srruct ex { int x ; int y ; int z ; }example ; 由以下叙述中不正确的是。 A.struct是结构体类型的关键字B.example是结构体类型名 C.x, y, z都是结构体成员名D.struct ex 是结构体类型 2、若有以下结构体定义,则是正确的引用或定义。 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 }; 3、已知:struct { int i ; char c ; float a ; } ex; 则sizeof( ex )的值是。 A.4 B.5 C.6 D.7 4、以下程序的运行结果是。 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.7 B.9 C.13 D.16 5、若有如下定义,则对data中a成员的正确引用是。 struct sk { int a ; float b ; } data, *p = &data ;

A.(*p).data.a B.(*p).a C.p->data.a D.p.data.a 二、编程题 1、利用两个结构体变量求解复数的积:(5 + 3i)*(2 + 6i)

第8章练习 结构体与共用体

第十一章习题结构体与共用体 1.以下C语言共用体类型数据的描述中,不正确的是( ) A) 共用体变量占的内存大小等于所需内存最大的成员所占的内存 B) 共用体类型可以出现在结构体类型定义中 C) 在定义共用体变量的同时允许对第一个成员的值进行初始化 D) 同一共用体中各成员的首地址不相同 2.下列对结构体类型变量定义不正确的是( ) A)struct teacher B) struct { int num; { int num; int age; }teach1; int age; }teach1,teach2; C) struct D) struct teacher { int num; { int num; int age; }teacher; int age; }; struct teacher teach1; struct teacher teach1; 3.若有定义: struct teacher { int num; char name[10]; char sex; int age; float score;}teacher1; 则变量teacher1所占用的内存字节数是( ) A) 5 B)14 C) 19 D) 20 4.以下程序的运行结果是( ) #include union Utype { int i; float y; }u[2]; void main() { printf("sizeof(u):%d\n",sizeof(u)); } A)2 B) 4 C) 6 D) 8 5.设有以下定义语句: struct student { int num; char name[10]; float score; }wang,zhang; 则变量wang所占的内存字节数是( ) A) 14 B) 16 C)18 D) 20 6.设有如下定义语句: union u_type { int i; double x; float f; }; struct str_type { char str[100]; union u_type u[2]; }; 则语句“printf("%d",sizeof(struct str_type));”的输出结果是( ) A)100 B) 116 C) 120 D) 200 第 1 页共2 页

第十一章结构体与共用体

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

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

第8章 结构体与共用体

一、程序改错 1、 /*下列给定程序中,函数fun的功能是:对N名学生的学习成绩,按从高到低的顺序找出前m(m<=10)名学生,并将这些学生数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。 试题程序:*/ #include #include #include #include #define N 10 typedef struct ss { char num[10]; int s; } STU; STU *fun(STU a[], int m) { STU b[N],*t; int i, j,k; /**********ERROR**********/ *t=calloc(m,sizeof(STU)); 【参考答案】 t=calloc(m,sizeof(STU)); for(i=0;i

for(k=0;kb[j].s) j=i; /**********ERROR**********/ t[k].num=b[j].num; 【参考答案】t[k]=b[j]; t[k].s=b[j].s; b[j].s=0; } return t; } outresult(STU a[],FILE *pf) { int i; for(i=0;i

第14章习题参考答案

第1章 一、简答题 1.关于Linux的版本有两种不同的称呼: 一种是内核版本,一种是发行版本。 2.简述Linux操作系统的特点 3.系统调用、库函数的区别和练习 从用户角度观察,系统调用和库函数都以C函数形式出现,提供给用户一种功能实现的接口,需要用户输入指定的参数,调用结束得到指定的返回值。 从实现者角度观察,库函数是在系统调用上层的函数,库函数一般指程序员可以使用的通用函数。 系统调用由两部分组成: (1)核心函数:是实现系统调用功能的代码,作为操作系统的核心驻留在内存中,是一种共享代码。运行在核心态。 (2)接口函数:是提供给应用程序的API,以库函数的形式存在于Linux的lib.a中,该库中存放了所有系统调用的接口函数的目标代码,用汇编语言书写。其主要功能是把系统调用号,入口参数地址传给相应的核心函数,并使用户态下运行的应用程序陷入核心态。 4.完成如下命令 (1)新建用户tom 和用户组student #useradd tom #passwd tom #groupadd student (2)新建文件file #touch file (3)将文件file 改名为test,然后将test拷贝到/home #mv file test #cp test /home (4)将/home/test文件的拥有着修改为tom,将文件所属组该为student #chown tom:student /home/test 第2章 一、填空题 1.Vi的三中工作模式:插入模式、命令模式、末行模式。 2.Gcc生成可执行文件的四个步骤:预处理、编译、汇编、链接。 3.Makefile 用来描述程序或工程中各个文件之间的相互联系 4.make。命令用来及时makefile文件中的命令 5.库分为静态库和共享库。 二、简答题 1.静态库和共享库的区别 (1)静态库的代码在编译时就已连接到开发人员开发的应用程序中。 (2)共享库只是在程序开始运行时才载入,在编译时,只是简单地指定需要使用的库函数。

教材课后题答案-第7章

习题7 一 单选题 1.设有如下定义,则表达式sizeof(y)的值是【 】。 struct data {long *ln; char c; struct data *last,*next; }y; A.7 B.9 C.13 D.17 【答案】C 【解析】指针变量在内存中占用4个字节,所以sizeof(y)的值是4+1+4+4=13 2.设有以下程序段,则表达式的值不为100的是【 】。 struct st {int a;int *b;}; void main() {int m1[]={10,100},m2[]={100,200}; struct st *p,x[]={99,m1,100,m2}; p=x; ... } A.*(++p->b) B.(++p)->a C.++p->a D.(++p)->b 【答案】D 【解析】根据题意,p 指向x 数组,x[0]的b 成员指向m1数组,x[1]的b 成员指向m2数组,如图7-1所示。选项A 中p->b 指向m1[0],通过“++”运算p->b 指向m1[1],所以选项A 的表达式的值为100。选项B 中++p 使p 指向x[1],x[1]的a 成员的值是100。选项C 中p 指向x[0],x[0]的a 成员做“++”运算,结果为100。选项D 中++p 使p 指向x[1],x[1]的b 成员的值是指针,所以选择选项D 。 m1m2p 图7-1 3.设有以下定义,且如图7-2所示,指针head 和p 指向链表的第一个结点,指针q 指向新的结点,则不能把新结点插入在第一个结点之前的语句是【 】。

head p q 图7-2 struct node {int a; struct node *next; }*head,*p,*q; A.head=q,q->next=p; B.head=q,q->next=head; C.q->next=head,head=q; D.head=q,head->next=p; 【答案】B 4.设有如下结构体说明和变量定义,且如图7-3所示,指针p指向变量one,指针q指向变量two,则不能将结点two接到结点one之后的语句是【】。 p 图7- 3 struct node {int n; struct node *next; }one,two,*p=&one,*q=&two; A.p.next=&two; B.(*p).next=q; C.one.next=q; D.p->next=&two; 【答案】A 【解析】p是指向结构体的指针,因此选项D是规范的引用方式。 5.设有以下定义,且如图7-4所示建立了链表,指针p、q分别指向相邻的两个结点,下列语句中【】不能将p所指向的结点删除。 head...... 图7- 4 struct node {int a; struct node *link; }*head,*p,*q; A.q->link=p->link; B.p=p->link,q->link=p; C.(*p).link=(*q).link; D.p=(*p).link,(*q).link=p; 【答案】C 6.以下选项中,能正确地将x定义为结构体变量的是【】。

第七章 结构体

第七章结构体 一. 单项选择题 1.设有定义 Struct{int x; int y;}d[2]={{1,3},{2,7}}; 则printf(“%d\n”,d[0].y/d[0].x*d[1].x);的输出是() A.0 B.1 C.3 D.6 2.根据下面的定义,能打印出字母M的语句是() struct person {char name[9];int age;}; struct person c[10] = {{“John”,17 },{“Paul”,19 },{“Mary”,18 },{“Adam”,16 }}; A.printf (“%c”,c[3].name); B.printf (“%c”,c[3].name[1] ); C.printf(“%c”,c[2].name[1]); D.printf(“%c”,c[2].name[0] ); 3. 设有如下定义,则对data 中的a 成员的正确引用是() struct sk{int a;float b;} data,*p=& data; A. (*p).data.a B. (*p).a C. p->data.a D. p.data.a 二. 填空题: 1. 设有定义“struct {int a;float b;char c;}abc,*p_abc=&abc;”,则对结构体成员a 的引用方法可以是abc_________a 和p_abc___________a. 2. 若有以下说明和定义语句,假设int类型占内存2个字节,则结构体变量w 在内存中所占的字节数是__________. struct st { int v[3];char w[5];double ave;}w; 3.阅读下列程序,写出程序的运行结果。 main () { struct student { char name[10]; float k1; float k2; } a[2]={ {“zhang”,100,70} ,{“wang”,70,80 } },* p=a; int i; printf(“\nname:%s total=%f”,p ->name,p ->k1+p -> k2); printf(“\nname:%s total=%f”,a[l].name,a[1].k1+a[l].k2); }

十一章 结构体与共用体

结构体与共用体 一、选择题: 1.已知赋值语句wang.year=2004;则wang的变量类型是() A. 字符或文件 B. 整型或实型 C. 共用或结构 D. 实型或指针 2.Turbo C中,以下类型数据在存储器中占的字节数为 ( ) struct test { int x; float y; char z; } ; A. 2 B. 3 C. 6 D. 7 3.以下语句中,成员data的正确引用方式为( ) struct node { int data; char name[10]; }stree; struct node *p=&stree; A. p.data B. p->data C. (*p)->data D. stree->data 4、当执行以下程序段时,输出的结果是。()struct data { char a; int b; float c; }; printf(“%d”, sizeof(struct data)); A. 1 B. 2 C. 4 D. 7 5.下面程序段的运行结果是。 struct stu { int num; char name[10]; float scrose ; }; printf(“%d\n”, sizeof (struct stu )); (A)14 (B)12 (C)16 (D)3 6. 若有定义: typedef char* string; #define str char * int a=4; struct { int x, *y; }z={10, &a}, *p=&z; 则下列不等价的是: A. string name, sign; 与 str name, sign; B. *p->y++ 与 *(p->y++) C. ++*p->y 与 ++(*p->y) D. ++p->x与++(p->x) ()

第七章 结构体和共用体

第十章结构体和共用体一、选择题 1.说明一个结构体变量时系统分配给它的内存是(A)。 A)各成员所需内存总和。 B)结构中第一个成员所需的内存量 C)成员中占内存量最大者所需的容量 D)结构中最后一个成员所需内存量 2.以下对结构体类型变量的定义中不正确的是(D)。 A) #define STUDENT struct student STUDENT { int num; float age; } std1; B) struct student { int num; float age; } std1; C) struct { int num; float age; }std1; D) struct { int num; float age; } student; struct student std1; 3.设有以下说明语句 struct stu { int a; float b; } stutype; 则下面的叙述不正确的是(C)。 A)struct是结构体类型的关键字 B)s truct stu是用户定义的结构体类型 C)s tutype是用户定义的结构体类型名 D)a和b都是结构体成员名 4.C语言结构体类型变量在程序执行期间(A) A)所有成员一直驻留在内存中 B)只有一个成员驻留在内存中 C)部分成员驻留在内存中 D)没有成员驻留在内存中

5.以下程序运行结果是(A)。 #include “stdio.h” main() { struct date { int year, month, day; } today; printf(“%d\n”,sizeof(struct date)); A) 6 B)8 C)10 D)12 6.下面程序的运行结果是(D) 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)6 7.以下scanf函数调用语句中对结构体变量成员的不正确引用是(D)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); 8.设有如下的定义: struct sk { int n; float x; } data, * p; 若要使p指向data中的n域,正确的赋值语句是(C)。 A)p=&data.n; B)*p=data.n; C)p=(struct sk *)&data.n D)p=(struct sk*) data.n; 9.若有以下说明语句 struct student

C语言题库第8章 结构体和共同体

第八章结构体和共同体 一、单项选择 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 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 #define N 16 typedef 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

C语言 第七章 结构体期末测试习题与答案

一、选择题 1、一个C语言程序的执行是从()。 A.第一个语句开始,直到最后一个语句结束 B.第一个函数开始,直到最后一个函数结束 C.main函数的第一条语句开始,直到main函数最后一条语句结束 D.main函数开始,直到最后一个函数结束 正确答案:C 2、变量定以后,系统将为变量分配存储空间,double类型的静态变量()。 A.将在编译时分配4个字节的存储空间 B.将在编译时分配8个字节的存储空间 C.将在程序执行时分配4个字节的存储空间 D.将在程序执行时分配8个字节的存储空间 正确答案:B 3、设int x=8, y;执行y=x++;后,变量x、y的值分别是()。 A.8,8 B.8,9 C.9,8 D.9,9 正确答案:C 4、对于整数n=378,表达式n%10和n/10的值分别是()。 A.3,8 B.8,3 C.37,8 D.8,37 正确答案:D 5、与p!=0等价的表达式是()。

A.p B.p==1 C.p=1 D.!p=0 正确答案:A 6、已定义:int a[5];则数组a可引用的元素有()。 A.a[1]~a[5] B.a[0]~a[5] C.a[1]~a[4] D.a[0]~a[4] 正确答案:D 7、已知char str[20],str1[10]="China", str2[10]="Russia" ;将str1和 str2 中存放的字符串交换的正确操作是()。 A.str=str1 ; str1=str2 ; str2=str; B.str1= str1+str2 ; str2= str1-str2; str1= str1-str2; C.strcat(str1,str2) ; str2= str1-str2; str1= str1-str2; D.strcpy(str,str1) ; strcpy(str1,str2) ; strcpy(str2,str) ; 正确答案:D 8、若有语句:int a [4],*p=a; ,下面均代表地址的一组选项是()。 A.a,p,a[0] B.a,p,++p C.&a,*p,p[0] D.*a,p++,&a[0] 正确答案:B 9、若有以下定义语句,则以下错误的引用是()。 struct student{ int num,age;}; struct student stu[3]={{101,20},{102,19},{103,18}},*p=stu;

第11章 结构

第11 章结构与联合 一、单选题 1 下列关于结构的说法错误的是: A:结构是由用户自定义的一种数据类型 B:结构中可设定若干个不同数据类型的成员 C:结构中成员的数据类型可以是另一个已定义的结构D:在定义结构时,可以为成员设置默认值 答案:D 2 以下关于结构体的叙述中,错误的是: A:结构体是一种可由用户构造的数据类型 B:结构体中的成员可以具有不同的数据类型 C:结构体中的成员不可以与结构体变量同名 D:结构体中的成员可以是指向自身结构的指针类型 答案:C 3 以下结构体类型说明和变量定义中,正确的是:A:struct SS { char flag; float x; } struct SS a,b; B:struct { char flag; float x; }SS; SS a,b; C:struct ss { char flag; float x; }; D:typedef { char flag; float x; }SS; SS a,b; 答案:C 4 以下对结构体类型变量st的定义中,不正确的是:A:struct { char c; int a; }st; B:struct { char c; int a; }TT;

struct TT st; C:typedef struct { char c; int a; }TT; TT st D:#define TT struct TT { char c; int a; }st; 答案:B 5 设有以下说明语句: struct stu { int a; float b; }stutype; 则下面的叙述不正确的是: A:struct是结构体类型的关键字 B:struct stu是用户定义的结构体类型名 C:stutype是用户定义的结构体类型名 D:a和b都是结构体成员名 答案:C 6 在16位IBM-PC机上使用C语言时,若有如下定义:struct data { int i; char ch; double f; }b; 则结构变量b占用内存的字节数是: A:1 B:2 C:8 D: 11 答案:D 7 以下程序的运行结果是: #include "stdio.h" main( ) { struct date { int year; int month; int day: }today; printf("%d\n",sizeof(struct date) );

C语言程序设计(第7章结构体与共用体)2

C语言程序设计(第7章结构体与共用体)2 7.2 结构体数组的定义和引用 单个的结构体类型变量在解决实际问题时作用不大,一般是以结构体类型数组的形式出现。结构体类型数组的定义形式为: struct stu /*定义学生结构体类型*/ { char name[20]; /*学生姓名*/ char sex; /*性别*/ long num; /*学号*/ float score[3]; /*三科考试成绩*/ }; struct stu stud[20]; /* 定义结构体类型数组stud ,*/ / *该数组有2 0个结构体类型元素* / 其数组元素各成员的引用形式为: stud[0].name 、stud[0].sex、stud[0].score[i]; stud[1].name、stud[1].sex、stud[1].score[i]; . . . . . . stud[19].name、stud[19].sex、stud[19].score[i]; [例7-1] 设某组有4 个人,填写如下的登记表,除姓名、学号外,还有三科成绩,编程实现对表格的计算,求解出每个人的三科平均成绩,求出四个学生的单科平均,并按平均成绩由高分到低分输出。 NumberNameEnglishMathemrPhysicsAverage 1Liping789876. 2Wanglin669086. 3Jiangbo897076. 4Yangming9010067.

题目要求的问题多,采用模块化编程方式,将问题进行分解如下: 1) 结构体类型数组的输入。 2) 求解各学生的三科平均成绩。 3) 按学生的平均成绩排序。 4) 按表格要求输出。 5) 求解组内学生单科平均成绩并输出。 6) 定义m a i n ( )函数,调用各子程序。 第一步,根据具体情况定义结构体类型。 struct stu { char name[20]; /*姓名* / long number; /*学号* / float score[4]; /* 数组依此存放English、Mathema、Physics,及Average*/ } ; 由于该结构体类型会提供给每个子程序使用,是共用的,所以将其定义为外部的结构体类型,放在程序的最前面。 第二步,定义结构体类型数组的输入模块。 void input(arr,n) /*输入结构体类型数组arr 的n个元素*/ struct stu arr[]; int n; { int i,j; char temp[30]; for (i=0;i { printf("\ninput name,number,English,mathema,physic\n"); /*打印提示信息* / gets(arr[i].name); /* 输入姓名*/ gets(temp); /* 输入学号*/ arr[i].number = atol(temp);

第八章 文 件

第八章文件 一、单项选择题 1.C语言中,文件由(A)。 A.字符(字节)序列组成B.记录组成 C.数据行组成D.数据块组成 2.若文件型指针fp中指向某文件的末尾,则函数feof(fp)的返回值是(C)。 A.0 B.-1 C.非零值D.NULL 3. 下列语句将输出(B) #include printf(“%d %d %d”, NULL,’\0’,EOF); A. 0 0 1 B. 0 0 –1 C. NULL EOF D. 1 0 EOF 4.下列语句中,将fp定义为文件型指针的是(B)。 A.FILE fp; B.FILE *fp;C.file fp; D.file *fp; 5. 定义FILE *fp; 则文件指针fp指向的是(D)。 A. 文件在磁盘上的读写位置 B. 文件在缓冲区上的读写位置 C. 整个磁盘文件 D. 文件类型结构体 6. 缓冲文件系统的缓冲区位于(C )。 A. 磁盘缓冲区中 B. 磁盘文件中 C. 内存数据区中 D. 程序中 7. 以“只读”方式打开文本文件a:\aa.dat,下列语句中哪一个是正确的( D)。 A、fp=fopen(”a:\aa.dat”,”ab”); B、fp=fopen(”a:\aa.dat”,”a”); C、fp=fopen(”a:\aa.dat”,”wb”); D、fp=fopen(”a:\aa.dat”,”r”); 8. 以“追加”方式打开文本文件a:\aa.dat,下列语句中哪一个是正确的( B)。 A、fp=fopen(”a:\aa.dat”,”ab”); B、fp=fopen(”a:\aa.dat”,”a”); C、fp=fopen(”a:\aa.dat”,”r+”); D、fp=fopen(”a:\aa.dat”,”w”); 9. 如果二进制文件a.dat已存在,现要求写入全新的数据,应以什么方式打开(A)。 A. “w” B. “wb” C. “w+” D. “wb+” 10. 为读写建立一个新的文本文件a:\aa.dat,下列语句中哪一个是正确的( B)。 A、fp=fopen(”a:\aa.dat”,”ab”); B、fp=fopen(”a:\aa.dat”,”w+”); C、fp=fopen(”a:\aa.dat”,”wb”); D、fp=fopen(”a:\aa.dat”,”rb+”); 11.以读写方式打开一个已有的二进制文件filel,并且定义FILE *fp,下面fopen函数正确 的调用方式是(B )。 A.fp=fopen (“file1”, ”r”) B.fp=fopen (“file1”, ”rb+”) C.fp=fopen (“file1”, ”rb”) D.fp=fopen (“file1”, ”w b+”) 12.标准库函数fputs (p1,p2)的功能是(C)。 A.从p1指向的文件中读一个字符串存入p2指向的内存 B.从p2指向的文件中读一个字符串存入p1指向的内存 C.从p1指向的内存中读一个字符串写到p2指向的文件中 D.从p2指向的内存中读一个字符串写到p1指向的文件中

第11章 结构体

单项选择题 1101. 当说明一个结构体变量时系统分配给它的内存是( )。 A. 各成员所需内存量的总和 B. 结构中第一个成员所需内存量 C. 成员中占内存量最大者所需的容量 D. 结构中最后一个成员所需内存量 1002. 设有以下说明语句 struct uu { int n; char ch[8]; } PER; 则下面叙述中正确的是( )。 A. uu 是结构体标识名 B. PER 是结构体标识名 C. struct uu是结构体标识名 D. struct 是结构体标识名 1003. 已知有如下定义: struct a{char x; double y;}data,*t; 若有t=&data,则对data中的成员的正确引用是( )。 A. (*t).x B. (*t).data.x C. t->data.x D. t.data.x 1004. 设有如下定义: struct sk { int a; float b; } data; int *p; 若要使P指向data中的b域,正确的赋值语句是( )。 A. p=&data.b; B. p=&b; C. p=data.b; D. *p=data.b; 1005. 已知学生记录描述为: struct student { int no; char name[20],sex; struct { int year,month,day;

} birth; }; struct student s; 设变量s中的“生日”是“1984年11月12日”,对“birth”正确赋值的程序段是( )。 A. s.birth.year=1984;s.birth.month=11;s.birth.day=12; B. birth.year=1984;birth.month=11;birth.day=12; C. s.year=1984;s.month=11;s.day=12; D. year=1984;month=11;day=12; 1006. 有如下定义 struct person{char name[9];int age;}; struct person class[10]={"John",17,"paul",19,"Mary",18,"Adam",16,}; 根据上述定义,能输出字母M的语句是( )。 A. printf("%c\n",class[3].name[1]); B. printf("%c\n",class[3].name); C. printf("%c\n",class[2].name[1]); D. printf("%c\n",class[2].name[0]); 1007. 若程序中有以下的说明和定义: struct abc { int x;char y; } struct abc s1,s2; 则会发生的情况是( )。 A. 编译出错 B. 程序将顺序编译、连接、执行 C. 能顺序通过编译、连接、但不能执行 D. 能顺序通过编译、但连接出错 1008. 有以下程序段 struct st { int x; int *y;}*pt; int a[]={1,2};b[]={3,4}; struct st c[2]={10,a,20,b}; pt=c; 以下选项中表达式的值为11的是( )。 A. ++pt->x B. *pt->y C. pt->x D. (pt++)->x 1009. 有以下说明和定义语句 struct student { int age; char num[8];};

相关文档
最新文档