⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 练习(六).txt

📁 谭浩强的C语言题集
💻 TXT
字号:
结构与联合

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;
       month=11;
       day=11;
   (B) birth.year=1984;
       birth.month=11;
       birth.day=11;
   (C) s.year=1984;
       s.month=11;
       s.day=11;
   (D) s.birth.year=1984;
       s.birth.month=11;
       s.birth.day=11;

2、当说明一个结构变量时系统分配给它的内存是(  )
   (A) 各成员所需内存量的总和
   (B) 结构中第一个成员所需内存量
   (C) 成员中占内存量最大者所需的容量
   (D) 结构中最后一个成员所需内存量

3、以下对结构变量的定义中不正确的是(  )
   (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;

4、设有以下说明语句
	struct stu
	{
		int a;
		float b;
	} stutype;
   则下面的叙述不正确的是(  )
   (A) struct是结构类型的关键字
   (B) struct stu是用户定义的结构类型
   (C) stutype是用户定义的结构类型名
   (D) a和b都是结构成员名

5、C语言结构变量在程序执行期间(  )	//此题不妥
   (A) 所有成员一直驻留在内存中
   (B) 只有一个成员驻留在内存中
   (C) 部分成员驻留在内存中
   (D) 没有成员驻留在内存中

6、在16位IBM_PC机上使用C语言,若有如下定义:
	struct data
	{
		int i;
		char ch;
		double f;
	} b;
   则结构变量b占用内存的字节数是(  )
   (A) 1
   (B) 2
   (C) 8
   (D) 11

7、以下程序的运行结果是(  )
	#include<stdio.h>
	void main()
	{
		struct date
		{
			int year,month,day;
		} today;
		printf("%d\n",sizeof(struct date));
	}
   (A) 6
   (B) 8
   (C) 10
   (D) 12

8、根据下面的定义,能打印出字母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]);

9、下面程序的运行结果是(  )
	void 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

10、若有以下定义和语句:
	struct student
	{
		int age;
		int num;
	};
	struct student stu[3]={{1001,20},{1002,19},{1003,21}};
	void main()
	{
		struct student *p;
		p=stu;
		...
	}
   则以下不正确的引用是(  )
   (A) (p++)->num
   (B) p++
   (C) (*p).num
   (D) p=&stu.age

11、以下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);

12、若有以下定义和语句,则以下引用形式不合法的是
	struct s
	{
		int i1;
		struct s *i2,*i0;
	};
	static struct s a[3]={2,&a[1],'\0',4,&a[2],&a[0],6,'\0',&a[1]},*ptr;
	ptr=a;
   (A) ptr->i1++
   (B) *ptr->i2
   (C) ++ptr->i0
   (D) *ptr->i1

13、设有以下定义:	//此题有点硬拗
	struct sk
	{
		int n;
		float x;
	} data,*p;
   若要使p指向data中的n域,正确的赋值语句是(  )
   (A) p=&data.n;
   (B) *p=data.n;
   (C) p=(struct sk *)&data.n;
   (D) p=(struct sk *)data.n;

14、若有以下说明和语句
	struct student
	{
		int age;
		int num;
	} std,*p;
	p=&std;
   则以下对结构变量std中成员age的引用方式不正确的是(  )
   (A) std.age
   (B) p->age
   (C) (*p).age
   (D) *p.age

15、若有以下程序段:
	struct dent
	{
		int n;
		int *m;
	};
	int a=1,b=2,c=3;
	struct dent s[3]={{101,&a},{102,&b},{103,&c}};
	void main()
	{
		struct dent *p;
		p=s;
		...
	}
   则以下表达式中值为2的是(  )
   (A) (p++)->m
   (B) *(p++)->m
   (C) (*p).m
   (D) *(++p)->m

16、若有以下说明和语句,则对pup中sex域的正确引用方式是(  )
	struct pupil
	{
		char name[20];
		int sex;
	}pup,*p;
	p=&pup;
   (A) p.pup.sex
   (B) p->pup.sex
   (C) (*p).pup.sex
   (D) (*p).sex

17、设有以下语句:
	struct st
	{
		int n;
		struct st *next;
	};
	static struct st a[3]={5,&a[1],7,&a[2],9,'\0'},*p;
	p=&a[0];
   则以下表达式的值为6的是(  )
   (A) p++->n
   (B) p->n++
   (C) (*p).n++
   (D) ++p->n
18、以下程序的输出结果是(  )
	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]};
	void 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

19、若有以下说明和语句,则下面表达式中值为1002的是(  )
	struct student
	{
		int age;
		int num;
	};
	struct student stu[3]={{1001,20},{1002,19},{1003,21}};
	struct student *p;
	p=stu;
   (A) (p++)->num
   (B) (p++)->age
   (C) (*p).num
   (D) (*++p).age

20、以下对结构变量stu1中成员age的非法引用是(  )
	struct student
	{
		int age;
		int num;
	} stu1,*p;
	p=&stu1;
   (A) stu1.age
   (B) student.age
   (C) p->age
   (D) (*p).age

21、设有以下说明和定义语句,则下面表达式中值为3的是(  )
	struct s
	{
		int i1;
		struct s *i2;
	};
	static struct s a[3]={1,&a[1],2,&a[2],3,&a[0]},*ptr;
	ptr=&a[1];
   (A) ptr->i1++
   (B) ptr++->i1
   (C) *ptr->i1
   (D) ++ptr->i1

22、以下程序的功能是:读入一行字符(如:a,...,y,z),按输入时的逆序建立一个链接式的节点序列,即先输入的位于链表尾(如下图),然后再按输入的相反顺序输出,并释放全部结点。请选择正确的内容填入【 】中。
   【1】(  )
   【2】(  )
   【3】(  )

	┌─┬─┐ ┌─┬─┐		  ┌─┬──┐
	│Z│ ┼→│Y│ ┼→...--→│a│NULL│
	└─┴─┘ └─┴─┘		  └─┴──┘

	#include<stdio.h>
	#define getnode(type) 【1】malloc(sizeof(type))
	void main()
	{
		struct node
		{
			char info;
			struct node *link;
		} *top,*p;
		char c;
		top=NULL;
		while((c=getchar())【2】)
		{
			p=getnode(struct node);
			p->info=c;
			p->link=top;
			top=p;
		}
		while(top)
		{
			【3】
			top=top->link;
			putchar(p->info);
			free(p);
		}
	}

	【1】
   (A) (type)
   (B) (type *)
   (C) type
   (D) type *
	【2】
   (A) =='\0'
   (B) !='\0'
   (C) =='\n'
   (D) !='\n'
	【3】
   (A) top=p
   (B) p=top
   (C) p==top
   (D) top==p

23、若要利用下面的程序片断使指针变量p指向一个存储整型变量的存储单元,则【 】中应填入的内容是(  )
	int *p;
	p=【 】malloc(sizeof(int));
   (A) int
   (B) int *
   (C) (* int)
   (D) (int *)

24、若已建立下面的链表结构,指针p、q分别指向图中所示结点,则不能将q所指的结点插入链表末尾的一组语句是(  )

	     ┌─┬─┐  ┌─┬──┐
	...→│a│ ┼→│b│NULL│
	     └─┴─┘  └─┴──┘
	       ↑	  ┌─┬─┐
	       p	  │c│ │
			  └─┴─┘
			   ↑
			   q


   (A) p->next=NULL; p=p->next; p->next=q;
   (B) p=p->next; q->next=p->next; p->next=q;
   (C) p=p->next; q->next=p; p->next=q;
   (D) p=(*p).next; (*q).next=(*)p.next; (*p).next=q;

25、当说明一个联合变量时系统分配给它的内存是(  )
   (A) 各成员所需内存量的总和
   (B) 结构中第一个成员所需内存量
   (C) 成员中占内存量最大者所需内存量
   (D) 结构中最后一个成员所需内存量

26、以下对C语言中联合类型数据的叙述正确的是(  )
   (A) 可以对联合变量名直接赋值
   (B) 一个联合变量中可以同时存放其所有成员
   (C) 一个联合变量中不能同时存放其所有成员
   (D) 联合类型定义中不能出现结构类型的成员

27、若有以下定义和语句
	union data
	{
		int i;
		char c;
		float f;
	} a;
	int n;
   则以下语句正确的是(  )
   (A) a=5;
   (B) a={2,'a',1.2};
   (C) printf("%d\n",a);
   (D) n=a;

28、设有以下说明,则下面不正确的叙述是(  )
	union data
	{
		int i;
		char c;
		float f;
	} un;
   (A) un所占的内存长度等于成员f的长度
   (B) un的地址和它的各成员地址都是同一地址
   (C) un可以作为函数参数
   (D) 不能对un赋值,但可以在定义un时对它初始化

29、C语言联合类型变量在程序运行期间(  )
   (A) 所有成员一直驻留在内存中
   (B) 只有一个成员驻留在内存中
   (C) 部分成员驻留在内存中
   (D) 没有成员驻留在内存中

30、以下程序的运行结果是(  )
	#include<stdio.h>
	void main()
	{
		union
		{
			long a;
			int b;
			char c;
		} m;
		printf("%d\n",sizeof(m));
	}
   (A) 2
   (B) 4
   (C) 6
   (D) 8

31、对下面程序中的每个打印语句后的注释行内的【x】小题,选择正确的运行结果。
	#include<stdio.h>
	void main()
	{
		union
		{
			int a[2];
			long b;
			char c[4];
		} s;
		s.a[0]=0x39;
		s.a[1]=0x38;
		printf("%lx\n",s.b);		/*【1】*/
		printf("%c\n",s.c[0]);		/*【2】*/
	}
	【1】
   (A) 390038
   (B) 380039
   (C) 3938
   (D) 3839
	【2】
   (A) 39
   (B) 9
   (C) 38
   (D) 8

32、对下面语句中的每个打印语句后的注释行内的【x】小题,选择正确的运行结果。
	#include<stdio.h>
	void main()
	{
		int j;
		union
		{
			int a;
			long b;
			unsigned char c;
		} m;
		m.b=0x12345678;
		printf("%x\n",m.a);		/*【1】*/
		printf("%x\n",m.c);		/*【2】*/
	}
	【1】
   (A) 1234
   (B) 5678
   (C) 12345678
   (D) 0
	【2】
   (A) 12
   (B) 78
   (C) 1234
   (D) 5678

33、在16位IBM-PC机上使用C语言,若有如下定义:
	union data
	{
		int i;
		char ch;
		double f;
	} b;
   则联合变量b占用内存的字节数是(  )
   (A) 1
   (B) 2
   (C) 8
   (D) 11

34、以下程序的运行结果是(  )
	#include<stdio.h>
	union pw
	{
		int i;
		char ch[2];
	} a;
	void main()
	{
		a.ch[0]=13;
		a.ch[1]=0;
		printf("%d\n",a.i);
	}
   (A) 13
   (B) 14
   (C) 208
   (D) 209

35、使用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

36、下面对typedef的叙述中不正确的是(  )
   (A) 用typedef可以定义各种类型名,但不能用来定义变量
   (B) 用typedef可以增加新类型
   (C) 用typedef只是将已存在的类型用一个新的标识符来代表
   (D) 使用typedef有利于程序的通用和移植

37、以下程序的运行结果是(  )
	typedef union
	{
		long a[2];
		int b[4];
		char c[8];
	} TY;
	TY our;
	void main()
	{
		printf("%d\n",sizeof(our));
	}
   (A) 32
   (B) 16
   (C) 8
   (D) 24

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -