第十章 结构体与共用体 一、单选题
(1) 以下对结构体类型变量的定义中不正确的是_________. 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; (2) 设有以下语句 (3) struct stu
{int a; float b; }stutype;
则下面叙述正确的是__________. A)struct是结构体类型的关键字
B)struct stu是用户定义的结构体类型 C)stutype是用户定义的结构体类型名 D)a和b都是结构体成员名 (4) 设有以下定义:
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; (5) 设有以下语句:
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
二、填空题
(1)以下程序用以输出结构体变量bt所占内存单元的字节数,请在()内填上适当的内容。 Struct ps {double I;
char arr[20]; }
main()
{struct ps bt;
ptintf(―bt size :%d\\n:,( ));
(2)设有三人的姓名和年龄存在结构数组中,以下程序输出三人中年龄居中者的姓名和年龄,请在()内填上正确的内容。 Static struct man {char name[20]
int age;
}person[]{―li—ming‖,18, ―wang—hua‖,19, ―zhang—ping‖,20 }; main()
{int i, j, max, min; max=min=person[0].age; for( i=1; i<3; i++)
if (person[i].age>max) ( ); else if (person[i].age if(person[i].age!=max( )person[i].age!=min) {printf(―%s %d\\n‖,person[i].name,person[i].age); break; } } (3)若以定义: struct num {int a; int b; float f; }n={1, 3, 5.0}; struct num *pn=&n; 则表达式pn->b/n.a*++pn->b的值是( ( )。 (4)以下程序的功能是计算并打印复数的差。请在( Struct comp {float re; float im; } struct comp *m(x,y) struct comp *x, *y; {( ); z=(struct comp *)malloc(sizeof(struct comp)); z->re=x->re-y->re; z->im=x->im-y->im; return( ( ) ); } main() {struct comp *t; struct xomp a,b; a.re=1; a.im=2; b.re=3; b.im=4; t=m(( )); printf(―z.re=%f, z.im=%f‖, t->re,t->im); } (5)以下程序的运行结果是( ) struct ks {int a; int *b; }s[4],*p; main() { int n=1, i; ),表达式(*pn).a+pn->f的值是 )内填入正确的内容。 printf(―\\n‖); for(i=0; i<4;i++) { s[i].a=n; s[i].b=&s[i.a; n=n+2; } p=&s[0]; p++; printf(―%d, %d\\n‖, (++p)>a, (p++)->a); } 三、判断题 (1)当定义一个结构体变量时,系统分配给它的内存是各成员所需内存量的总和。 (2)C语言中,结构体变量在程序执行期间只有部分成员驻留在内存中。 (3)一个共用体类型定义中不能出现结构体类型的成员。 (4)用typedef只是将已存在的类型用一个新的标识符来代表,而不能增加新类型。 (5)用typedef可以定义各种类型名,但不能用来定义变量。 四、编程题(可选作) (1)试利用指向结构体的指针编制一程序,实现输入三个学生的学号、数学期中和期末成绩,然后计算其平均成绩并输出成绩表。 (2)请定义枚举类型 ,用枚举元素代表人民币的面值。包括1,2,5分;1,2,5角;1,2,5,10,50,100元。 第十一章 位运算 一、单选题 (1)以下运算符中优先级最低的是 优先级最高的是 。 A)&& B) & C) || D) | (2)若有运算符<<,sixeof,^,&= 则它们按优先级按由高到低的正确排列次序是 。 A) sizeof,&=,<<,^ B) sizeof,<<,^,&= C) ^,<<,sizeof,&= D) <<,^,&=,sizeof (3)在C语言中,要求运算数必须是整型的运算符是 。 A)^ B)% C)! D)> (4) 在C语言中,要求运算数必须是整型或字符型的运算符是 。 A) && B) & C) ! D) || (5)sozeof(float)是 。 A)一种函数调用 B)一种不合法的表示形式 C)一个整型表达式 D)一个浮点表达式 二、填空题 (1)在C语言中,&运算符作为单目运算符时表示的是( )运算;作为双目运算符时表示的是( )运算。 (2)与表达式a&=b等价的另一书写形式是( )。 (3)设有char a, b;若要通过a&b运算屏蔽掉a中的其它位,只保留第2和第8位(右起为第1位),则b的二进制数是( ). (4)测试char型变量a 第六位是否为1的表达式是( )(设最右位是第一位)。 (5)设二进制数x的值是11001101,若想通过x&y 运算使x中的低4位不变,高4位清零,则y的二进制数为( )。 三、判断题 (1)利用fseek函数可以实现文件的随机读写的操作。 (2) 函数rewind的作用是使位置指针重新返回文件的开头。 (3) 在C程序中,文件可以用随机读写的方式存取,也可以用顺序读写的方式存取。 (4) 函数ftell(fp)的作用是得到流式文件中的当前位置。 (5) fgetc函数的作用是从指定文件读入一个字符,该文件的打开方式必须是只读的。 四、编程题 (1)请编程序:从终端读入16进制无符号整数M,调用函数 rightrot 将M中的原始数据循环右移N位。并输出 移位前后的内容。 (2)请编写函数getbits从一个16位的单元中取出以n1开始至n2结束的某几位,起始位和结束位都从左向右计算。同时编写主函数调用getbits进行验证。 第十二章 文件 一、单选题 (!)系统的标准输入文件是指 。 A)键盘 B)显示器 C)软盘 D)硬盘 (2)以下可作为函数fopen中第一个参数的正确格式是 。 A) c:user\\text.txt B) c:\%user\\text.txt C) "c:\user\\text.txt" D) "c:\\\%user\\text.txt" (3)若执行fopen函数时发生错误,则函数的返回值是 .