1、国家二级 C语言机试(结构体、共用体、位运算及文件操作)模拟试卷 5及答案与解析 一、选择题 1 以下关于 typedef的叙述错误的是 ( A) typedef只是将已存在的类型用一个新的名字来代表 ( B)用 typedef可以为各种类型说明一个新名,但不能用来为变量说明一个新名 ( C)用 typedef可以增加新类型 ( D)用 typedef为类型说明一个新名,通常可以增加程序的可读性 2 以下叙述中错误的是 ( A)可以用 typedef将已存在的类型用一个新的名字来代表 ( B)可以通过 typedef增加新的类型 ( C)用 typedef定义新的类型名后,原有类型名仍有效 (
2、 D)用 typedef可以为各种类型起别名,但不能为变量起别名 3 若有定义 typedefcharT10; Tca;上述定义中 a的类型与下面选项中完全相同的是 ( A) char(*a)10; ( B) char*a; ( C) chara10; ( D) char*a10; 4 以下叙述中正确的是 ( A)使用 typedef说明新类型名时,其格式是: typedef新类型名原类型名; ( B)使用 typedef说明新 类型名时,后面不能加分号 ( C)在程序中,允许用 typedef来说明一种新的类型名 ( D)在使用 typedef改变原类型的名称后,只能使用新的类型名 5 有以
3、下程序 #include stdio h typedefstructintb, p; )A; voidf(Ac)/*注意: C是结构变量名 */ intj; c b+=l; c p+=2; main( ) i; Aa=l, 2; f(a); printf(” d, dn”, a b, a p); ) 程序运行后的输出结果是 ( A) 274 ( B) 1, 2 ( C) 1, 4 ( D) 2,3 6 设有定义: structcomplexintreal, unreal; datal=1, 8, data2; 则以下赋值语句中错误的是 ( A) data2=(2, 6); ( B) data2
4、=datal; ( C) data2 real=data1 real; ( D) data2 real=daM unreal; 7 有以下程序 #include stdio h #include string h typedefstructcharname9; charsex; intscore2; STU; STUfSTUa) STUb=Zhao, m, 85, 90; inti; strcpy(a name, b name); a sex=b sex; for(i=0; i 2; i+)a scorei-b scorei; returna: main( ) STUc=Qian,f, 95,
5、 92, d; d=f(c); printf” s, c, d, d, ”, d name, d sex, d。 score0, d score1); printf(” s, c, d, d, ”, c name, C sex, C score0, C score1); ( A) Zhao, m, 85, 90, Zhao, m, 85, 90 ( B) Qian, f,95, 92, Qian, f,95, 92 ( C) Zhao, m, 85, 90, Qian, f,95, 92 ( D) Qian, f,95, 92, Zhao, m, 85, 90 8 有以下结构体说明、变量定义和
6、赋值语句 structSTDcharname10; intage;charsex; s5, *ps; ps= s0;则以下 scanf函数调用语句有错误的是 ( A) scanf dt, s0 age); ( B) scanf c, (ps- sex); ( C) scanff s, s0 name); ( D) scanff dtt, ps- age); 9 有以下程序 #include stdio h #include string h StructA inta; charb10; doublec; ); structAf(structAt); main( ) structAa=1001,
7、ZhangDa,1098 0); a=f(a); printf( d, s, 6 1fn, a a, a b, a c); structAfStructAt) t a=1002; strcpy(t b, ”ChangRong”); t C 1202 0; returnt; 程序运行后的输出结果是 ( A) 1002, ZhangDa, 1202 0 ( B) 1002, ChangRong, 1202 0 ( C) 1001, ChangRong, 1098 0 ( D) 1001, ZhangDa, 1098 0 10 有以下程序 #includestructordintx, y; )dt2
8、=1,2, 3, 4);main( )structord*p=dt; printf” d, ”, +(p- x); printf(” dn”, +(p- y); )程序运行后的输出结果是 ( A) 4, 1 ( B) 2, 3 ( C) 3, 4 ( D) 1, 2 11 有下列程序: structSintn; inta20; ); voidflint*a, intn) inti; for(i=0; i n-1; i+)ai+: i; ) main( ) inti; structSs=10, 2, 3, 1, 6, 8, 7, 5, 4, 10, 9); f(s a, s n); for(i=
9、0; i s n; i+)printf(” d, ”, s ai); ) 程序运行后的输出结果是 ( A) 3,4, 2, 7, 9, 8, 6, 5, 11, 10, ( B) 2, 3, 1, 6, 8, 7, 5, 4, 10, 9, ( C) 2, 4, 3, 9, 12, 12, 11, 11, 18, 9, ( D) 1, 2, 3, 6, 8, 7, 5, 4, 10, 9 12 假定已 建立以下链表结构,且指针 p和 q已指向如图所示的节点:则以下选项中可将 q所指节点从链表中删除并释放该节点的语句组是 ( A) p=q- next; free(q); ( B) p=: q;
10、free(q); ( C) (*p) next=(*q) next; free(p); ( D) p- next q next; free(q); 13 有以下定义和语句: structworkers intnum; charname20; charc; struct intday; intmonth; intyear; s; ); structworkersw, *pw; pw= w; 能给 W中 year成员赋 1980的语句是 ( A) w year=1980; ( B) pw- year=1980; ( C) w S year=1980; ( D) *pw year=1980; 14
11、有以下程序 #include stdio h #includestring h typedefstructcharname9; charsex; floatscore2; STU; voidf(STUa) STUb=”Zhao,m, 85 0, 90 0); inti; strcpy(a name, b name); a sex=b sex; for(i=0; i 2; i+)a scorei=b scorei; 程序的运行结果是 ( A) Qian, m, 85, 90 ( B) Zhao, m, 85, 90 ( C) Zhao, f,95, 92 ( D) Qian, f,95, 92
12、15 有以下程序 structA inta; charb10; doublec; ; voidf(structAt); main( ) structAa。 1001,ZhangDa”, 1098 0); ffa); printf(” d, s, 6 1fn”, a a, a b, a c); voidf(structAt) t a=1002; strcpy(t b, ”ChangRong”); t c=1202 0; 程序运行后的输出结果是 ( A) 1002, ChangRong, 1202 0 ( B) 1001, ZhangDa, 1098 0 ( C) 1001, ChangRong,
13、 1098 0 ( D) 1002, ZhangDa, 1202 0 16 若有以 下程序 typedefstructstuchar*name, gender; intscore; STU; voidf(char*p)p=(char*)malloc(10); strcpy(p, “Qian”); ) main( ) STUa=fNULL, m, 290, b; a name=(char*)malloc(10); strcpy(a name, Zhao); b=a f(b name); b gender f: b score=350; printf( s, c, d, , a name, a g
14、ender,a score); printf( s, c, dha, b name, b gender,b score); 则程序的输出结果是 ( A) Zhao, m, 290, Qian, f,350 ( B) Qian, f,350, Qian, f,350 ( C) Qian, m, 290, Qian, f,350 ( D) Zhao, m, 290, Zhao, f,350 17 若有以下程序 typedefstructstucharname10, gender; intscore; )STU; voidf(char*P)strcpy(P, Qian); main( ) STUa=
15、Zhao, m, 290, b; b=a; f(b name); b gender=f; b score 350; printf( s, c, d, , a name, a gender,a score); printf( s, c, dn, b name, b gender, b score); 则程序的输出结果是 ( A) Zhao, m, 290, Zhao, m, 290 ( B) Qian, f,350, Qian, f350 ( C) Zhao, m, 290, Qian, f,350 ( D) Zhao, m, 290, Zhao, C350 18 若有以下程序段 structs
16、tintn; structst*next; ); structsta3=5, a1, 7, a2, 9, 0, *p; p= a0; 则以下选项中值为 6的表达式是 ( A) +(p- n) ( B) (*p) n ( C) p- n+ ( D) p- n 19 以下叙述中正确的是 ( A)结构体类型中的各个成分均不能是数组或指针 ( B)结构体类型的变量,不能在声明结构体类型组成时一起定义 ( C)使用 typedef定义新类型名后,新类型名与原类型名实际上是等价的 ( D)元素为结构体类型的数组,只能在声明过结构体类型之后,单独进行定义 20 以下叙述中正确的是 ( A)结构体变量的地址不
17、能作为实参传给函数 ( B)结构体数组名不能作为实参传给函数 ( C)即使是同类型的结构体变量,也不能进行整体赋值 ( D)结构体中可以含有指向本结构体的指针成员 21 有以下程序 structSinta; intb; ; main( ) structSa, *p= a; a a=99; printf(” dn”, ); 程序要求输出结构体中成员 a的数据,以下不能填入 横线处的内容是 ( A) a a ( B) *p a ( C) p- a ( D) (*p) a 22 有以下程序 #include stdio h structSTUcharname9; charsex; intscore2
18、; ; voidf(structSTUa) structSTUb=zhao,m, 85, 90); a1 b; main( ) structSTUc2=tQian,f, 95, 92), Sun”, m, 98, 99; f(c); printf( s, c, d, d, , c0 name, c01 sex, c0 score0,c0 score1); printf( s, c, d, dn, , c1 name, c1 sex, c1 score0,c1 score1); 程序运行后输出结果是 ( A) Qian, f,95, 92, Sun, m, 98, 99 ( B) Zhao, m
19、, 85, 90, Sun, m, 98, 99 ( C) Qian, f,95, 92, Zhao, m, 85, 90 ( D) Zhao, m, 85, 90, Qian, f,95, 92 23 有以下程序 main( ) unsignedchara=2, b=4, c=5, d; d=aJb; d =c; printff dn, d); ) 程序运行后的输出结果是 ( A) 3 ( B) 5 ( C) 4 ( D) 6 24 有以下程序 main( ) inta=l, b=2, c=3, x; x=(ab) c; printf( dn, x); ) 程序的运行结果是 ( A) 1 (
20、 B) 2 ( C) 3 ( D) 0 25 有以下程序 #include stdio h main( ) chara=4; printf( dha, a=a 1); ) ( A) 8 ( B) 16 ( C) 40 ( D) 4 26 若变量已正确定义,则以下语句的输出结果是 s=32; s=32; printf( d, s); ( A) -1 ( B) 1 ( C) 32 ( D) 0 27 若有 以下程序 main( ) intc; C=1315; pfintf( dn, c); 则程序的输出结果是 ( A) 15 ( B) 18 ( C) 13 ( D) 5 28 有以下程序 main
21、( ) inti=l; i=ii; printf( dn, 1); 程序运行后的输出结果是 ( A) -1 ( B) 0 ( C) 1 ( D) 7 29 下列关于 C语言文件的叙述中正确的是 ( A)文件由结构序列组成,可以构成二进制文件或文本文件 ( B)文件由一系列数据依次排列组成, 只能构成二进制文件 ( C)文件由数据序列组成,可以构成二进制文件或文本文件 ( D)文件由字符序列组成,其类型只能是文本文件 30 有以下程序 #include stdio h main( ) FILE*f; f=fopen(”filea txt,w); fprintf(f,”abc”); fclose(
22、f); 若文本文件 filea txt中原有内容为: hello,则运行以上程序后,文件 filea txt中的内容为 ( A) abc1o ( B) abc ( C) helloabc ( D) abchello 31 有下列程序: #include stdio h main( ) FILE*fp; inta10=1,2, 3), i, n; fp=fopen(”d1 dat”, ”w”); for(i=0; i 3; i+)fprintf(fp, d”, ai); fprintf(fp,n); fclose(fp); fp=open(d1 dat, r); fscanf(fp, d, n)
23、; fclose(fp); printf( dn, n); 程序的运行结果是 ( A) 12300 ( B) 123 ( C) 1 ( D) 321 32 有以下程序 #include stdio h main( ) FILE*pf; char*sl=”China,*s2=Beijing: pf=fopen(abc dat, wb+); fwrite(s2, 7, l, pf); rewind(pf); /*文件位置指针回到文件开头 */ fwrite(sl, 5, 1, pf); fclose(pf); 以上程序执行后 abc dat文件的内容是 ( A) Chinang ( B) Chin
24、a ( C) ChinaBeijing ( D) BeijingChina 33 有下列程序: #include stdio h main( ) FILE*fp; inta10=1,2, 3, 0, 0, i; fp=fopen(d2 dat, wb); fwtite(a, sizeof(int), 5, fp); fwrite(a, sizeof(int), 5, fp); fclose(fp); fp=fopen(d2 dat,rb); fread(a, sizeof(int), 10, fp); fclose(fp); for(i=0; i 10; i+)printf( d, ai);
25、程序的运行结果是 ( A) 1, 2, 3, 1, 2, 3, 0, 0, 0, 0, ( B) 1, 2, 3, 0, 0, 1, 2, 3, 0, 0, ( C) 123, 0, 0, 0, 0, 123, 0, 0, 0, 0, ( D) 1, 2, 3, 0, 0, 0, 0, 0, 0, 0 34 有以下程序 #include stdio h main( ) FILE*fp; charstr10; fp=fopen(myfile dat,w); fputs(abc,fp); fclose(fp); fp=fopen(myfile dat, a+); fprintf(fp, d, 28
26、); rewind(fp); fscanf(fp, s str); puts(str); fclose(fp); 程序运行后的输出结果是 ( A) 28c ( B) abc28 ( C) abc ( D)因类型不一致而出错 35 以下程序用来统计文件中字符的个数 (函数 feof用以检查文件是否结束,结束时返回非零 ) #include stdio h main( ) FILE*fp; longnum 0: fp=fopen(fname dat,r); while(_) fgetc(fp); num+; ) printf(num= din,num); fclose(fp); ) 下面选项中,填
27、入横线处不能得到正确结果的是 ( A) feof(fp) ( B) reot(rp) NULL ( C) !feof(fp) ( D) feof(fp) 0 36 若 fp已定义为指向某文件的指针,且没有读到该文件的末尾,则 C语言函数feof(fp)的函数返回值是 ( A) 0 ( B)非 0 ( C) 1 ( D) EOF 国家二级 C语言机试(结构体、共用体、位运算及文件操作)模拟试卷 5答案与解析 一、选择题 1 【正确答案】 C 【试题解析】 C语言允许用 typedef说明一种新的类型名,其一般形式为:typedef类型名标识符;在此 “类型名 ”必须是在此语句之前已有定义的类型标
28、识符。 “标识符 ”是一个用 户定义标识符,用作新的类型名。 Typedef语句的作用仅仅是用 “标识符 ”来代表已存在的 “类型名 ”,并未产生新的数据类型,原来的类型名依然有效,这样可以增加程序的可读性。 【知识模块】 结构体、共用体、位运算及文件操作 2 【正确答案】 B 【试题解析】 C语言允许用 typedef说明一种新类型名。 typedef类型名标识符:其中 “类型名 ”必须是在此语句之前已定义的类型标识符; “标识符 ”是一个用户定义标识符,用作新的类型名: typedef语句的作用仅仅是用 “标识符 ”来代表已存在的 “类型名 ”,并 未产生新的数据类型,原有类型名依然有效。
29、 【知识模块】 结构体、共用体、位运算及文件操作 3 【正确答案】 D 【试题解析】 题目中利用 typedef定义了字符数组类型 T,而后定义了该类型的指针 a,因此 a为指针数组。 【知识模块】 结构体、共用体、位运算及文件操作 4 【正确答案】 C 【试题解析】 C语言允许用 typedef说明一种新类型名。定义形式如下: typedef类型名标识符;其中 “类型名 ”必须是在此语句之前已定义的类型标识符; “标识符 ”是一个用户定义标识符,用作新的 类型名; typedef语句的作用仅仅是用 “标识符 ”来代表已存在的 “类型名 ”,并未产生新的数据类型,原有类型名依然有效。 【知识模
30、块】 结构体、共用体、位运算及文件操作 5 【正确答案】 B 【试题解析】 在 C语言中,数据只能从文参单向传递给形参,称为 ”按值 ”传递。也就是说,当简单变量作为实参时,用户不可能在函数中改变对应实参的值。所以本题中在 main( )函数 f(a)语句中结构体实参 a作为值,传递给函数f(AC中的形参 c;这种值传递的方式不会对实参 a产生任何影响,所以结构体实参 a的值不 会发生变化。 【知识模块】 结构体、共用体、位运算及文件操作 6 【正确答案】 A 【试题解析】 本题主要考查结构体变量的定义与初始化。题目中定义了 complex类犁的结构体变量 datal和 data2,并对 da
31、tal进行了初始化。可以用一个结构体变量对另一个结构体变量赋值,用一个结构体变量的成员对另一个结构体变量的成员赋值。 【知识模块】 结构体、共用体、位运算及文件操作 7 【正确答案】 C 【试题解析】 在 C语言中,函数实参与形参之间数据的传递是传值,也就是说在用实参调用 形参时,是把实参的值拷贝一份给形参,而实参的值并不变化,仍是原来的值。所以对于本题来说,在主函数中调 f(e)后,实参 e的值并不会变化,仍是原值。在函数 f中把局部变量 b的值依次返回给变量 d。 【知识模块】 结构体、共用体、位运算及文件操作 8 【正确答案】 D 【试题解析】 程序段定义了结构体变量数组 s5和指针变量
32、 ps,然后 ps指向数组 s5中的第一个元素,因而 ps- age引用 s0 age。因为在输入 scan( )函数中,第 2个参数应该表示为地址变量,而选项 A表示的值,而不是 一个地址值。 【知识模块】 结构体、共用体、位运算及文件操作 9 【正确答案】 B 【试题解析】 在主函数中定义结构体 A的变量 a,并对其赋初值,再调用函数f(a),在函数 f(a)中对结构体变量 a的各个成员重新进行了赋值操作,并把其值返回在屏幕上输出。 【知识模块】 结构体、共用体、位运算及文件操作 10 【正确答案】 B 【试题解析】 在题目中定义了结构体 ord类型的数组变量 dt,并对其赋初值。在程序中
33、定义了指向结构体 ord类型的指针变量 p,并且它指向变量数组 dt的第一个元素 dt0,所以此时成员变量 p- x的值等于 1,成员变量 p- y的值等于 2,在输出时分别加 1,所以输出结果为选项 B。 【知识模块】 结构体、共用体、位运算及文件操作 11 【正确答案】 C 【试题解析】 voidf(int*a, intn)函数的功能是对数组 a的每一个元素加上其下标的值。所以在 main( )函数中 f(s as n)语句会调用 f(int*a, intn)函数,此时指针 a指向数组 s a=2, 3, l, 6, 8, 7, 5, 4, 10, 9, n=10:然后执行for(i=0;
34、 i n 1; i+)ai+=i;语句,也就是从 0开始到 8对数组 s a=2, 3,1, 6, 8, 7, 5, 4, 10, 9中的每一个元素加上其下标值。 【知识模块】 结构体、共用体、位运算及文件操作 12 【正确答案】 D 【试题解析】 本题考查了在线性链表删除一个节点的方法,要删除 q所指向的节点,只需要把 q所指向的节点的前一个节点中的后继指针指向 q所指向的节点的下一个节点即可,即 p- next=q- next=再释放 q所指向的节点,即 free(q)。 【知识模块】 结构体、共用体、位运算及文件操 作 13 【正确答案】 C 【试题解析】 本题主要考查的是结构体变量的嵌
35、套定义,也就是说一个结构体变量也可以是一个结构体。在本题中 works这个结构体中包含了结构体 s。所以对结构体变量 w中 year成员的引用是 w s year。 【知识模块】 结构体、共用体、位运算及文件操作 14 【正确答案】 B 【试题解析】 本题考查在结构体中函数的实参和形参的传递,调用 ffc1后,实参传向形参,进行 f( )函数功能的实现,但程序中没有返回语句,故形参不能将值传回实参,它们值的传递具有不可 逆性,所与 printf输出的还是 c中实参的值。 【知识模块】 结构体、共用体、位运算及文件操作 15 【正确答案】 B 【试题解析】 在主函数中定义结构体 A的变量 a,并
36、对其赋初值,再调用函数f(a),形参 t接收实参的数据,在函数 f(t)中对结构体变量 t的各个成员进行了赋值操作,需要注意的,形参和实参之间是数据传递,因此对形参的操作对实参不产生影响,因此在主函数输出仍然输出变量 a的数据 【知识模块】 结构体、共用体、位运算及文件操作 16 【正确答案】 D 【试题解析】 函数 f(char*p)的主要功能申请字符串的存储空间,然后存入字符串 “Qian”,但当程序调用结束以后,形参指针变量 p撤销,存储的字符串地址丢失,而不能更改实参指针的值。主函数中结构体变量定义同时赋初值,初始情况其 name指针成员存储空,而后语句为其分配存储空间,存入字符串 z
37、hao。执行 b=a;语句后, b的数据和 a的数据相同,调用函数 f以后, b的 name成员的值没变。 【知识模块】 结构体、共用体、位运算及文件操作 17 【正确答案】 C 【试题解析】 主函数中结构体变量定义同时赋初值。执 行 b=a;语句后, b的数据和 a的数据相同,调用函数 f(b-name),形参指针 p接收实参 b name的地址,此时 p和 b name指向同一个存储空间,流程转到 f执行, p指向的存储空间存放字符串 oian,流程结束返回主函数。主函数中变量 b的其他成员存放数据。因此 a的数据 zhao, m, 290, b的数据为 QJan, f, 350。注意本题
38、结构体 STU类型变量 a和 b中的 name成员为数组,不是指针,它具有白己的存储空间。 【知识模块】 结构体、共用体、位运算及文件操作 18 【正确答案】 A 【试题解析】 选项 A中表达式 +(p- n)为前缀自加表达式, p- n和 a0 n等价,其他为 5,前缀自加后值为 6。选项 B中表达式 (*p) n和选项 D的表达式p n含义相同,表示取结构指针 p所指向的成员,因此值为 5。选项 C中表达式 p- n+为后缀白加表达式,相当于 (p- n)+,表达式值为 5。 【知识模块】 结构体、共用体、位运算及文件操作 19 【正确答案】 C 【试题解析】 C语言允许用 typedef
39、说明一种新类型名, typedef语句的作用仪仪是用 “标识符 ”来代表已存在的 “类型名 ”,并未产生新的数据类型,原有类型名依然有效。结构体变量定义有下而三种形式: (1)先定义结构,冉说明结构变量。 (2)在定义结构类型的同时说明结构变量。 (3)直接说明结构变量。 【知识模块】 结构体、共用体、位运算及文件操作 20 【正确答案】 D 【试题解析】 一个结构体变量包含若干成员,这些成员可以是数值类型、字符类型、数组类犁,也可以是指针类型,甚至可以是正存定义的结构体类型指针。用结构体变量作实参时,采取的是 ”值传递 ”的方式,将结构体变量所占的内存单元的内 容全部顺序传递给形参。形参也必
40、须是同类犁的结构体变量。结构体小数组作为参数时,采取了 ”地址传递 ”的方式,形参须为同类型的结构指针或者形态结构数组。 【知识模块】 结构体、共用体、位运算及文件操作 21 【正确答案】 B 【试题解析】 如果 D指向结构体,那么下面三种形式都可以访问结构体的成员:结构体变量成员名、 (*p)成员名、 p-成员名。 【知识模块】 结构体、共用体、位运算及文件操作 22 【正确答案】 C 【试题解析】 在主函数中,定义了结构体 sTu数组 c2,并对 其赋初始值。执行f(C时,存函数 f( )中,把结构体变量 b的值赋给了 c1。 【知识模块】 结构体、共用体、位运算及文件操作 23 【正确答
41、案】 C 【试题解析】 本题考查位运算, |为按位或运算,为按位与运算,按位与 ( )运算符的作用是:把参加运算的两个运算数按对应的二进制位分别进行 ”与 ”运算,当两个相应的位都为 1时,该位的结果为 1;否则为 0。按位或 (1)的运算规则是:参加运算的两个运算数中,只要两个相应的二进制位中一个为 1,则该何的运算结果即为 1;只有当两个相应位的数都为 0时,该 位的运算结果才为 0。首先 d=214值为 6, d=6 5值为 4。 【知识模块】 结构体、共用体、位运算及文件操作 24 【正确答案】 C 【试题解析】 1、 2、 3的二进制形式分别为 00000001、 00000010、
42、 00000011。首先计算 1与 2的或运算,即 1 2=(00000001) (00000010)=00000011,再将其与 3进行 ”与 ”运算,结果为 (00000011) (00000011)=00000011,即十进制数 3。 【知识模块】 结构体、共用体、位运算及文件操作 25 【正确答案】 A 【试题解析】 本题主要考查按位右移运算。 a=4的二进制为 00000100, a 1后为 00001000,其值为十进制数值 8。 【知识模块】 结构体、共用体、位运算及文件操作 26 【正确答案】 D 【试题解析】 按位异或 ”运算的规则是:参与运算的两个运算数中相对应的二制位上,
43、若数相同,则该位的结果为 0;若数不同,则该位的结果为 1。因为语句s=32; s, =32;相当于 s与自身做按位异或运算,所以其结果等于 0。 【知识模块】 结构体、共用体、位运算及文件操作 27 【正确答案】 C 【试题解析】 按位或 (|)的运算规则是:参加运算的两个运算数中,只要两个相应的二进制位中一个为 1,则该位的运算结果即为 1;只有当两个相应位的数都为 O时,该位的运算结果才为 0。 13的二进制位 1101, 5的二进制位 0101,或运算的结果为 1101,因此值为 13。 【知识模块】 结构体、共用体、位运算及文件操作 28 【正确答案】 B 【试题解析】 按位异或 (
44、 )的运算规则是:参与运算的两个运算数中相对应的二进制位上,若数相同,则该位的结果为 0;若数不同,该位的结 果为 1。本题中表达式 ii的值必为 0,因为 i的各个位置的二进制值相同。 【知识模块】 结构体、共用体、位运算及文件操作 29 【正确答案】 C 【试题解析】 在 C语言中,对输入、输出的数据都按 ”数据流 ”的形式进行处理。数据可以按文本形式或二进制形式存放在介质上,因此文件可以按数据的存放形式分为文本文件和二进制文件。 【知识模块】 结构体、共用体、位运算及文件操作 30 【正确答案】 B 【试题解析】 本题考查文件打开办式。格式:文件指针名 =fopen(文件名,使用文件方式
45、 ) 需要 注意的是:用 ”w”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。 【知识模块】 结构体、共用体、位运算及文件操作 31 【正确答案】 B 【试题解析】 本题考查以读和写的方式打开文件对文件内容操作的不同,fp=fopen(“d1 dat”, ”w”);以可写的方式为输出建立新文本文件,调用 printf,输出 ”123”, fp=fopen(d1, dat, r);以只读的方式打开文本文件,不能对文件内容 进行操作。 【知识模块】 结构体、共用体、位运算及文件操作 32 【正确答案】 A 【试题解
46、析】 本题主考查函数 fwrite的使用。函数 fwrite的调用形式为:intfwrite(char*pt,unsignedsize,unsignedn, FILE。 fp);其功能是把 pt所指向的n*size个字节输出到 fp所指文件中。在本题中 fwrite(s2, 7, 1, p0;的功能是把字符串 ”Beijing”输入到文件 abc dat中,然后调用 rewind(pf),把文件位置指针回到文件开头,再调用 fwrite(s1, 5, 1, pD把字符串 ”China”写入到文件abc dat中,所以此时文件 abc dat的内容为 Chinang。 【知识模块】 结构体、共用
47、体、位运算及文件操作 33 【正确答案】 B 【试题解析】 首先用函数 fopen( )以 ”wb”的方式开打文件 ”d2 dat”,然后调用两次 fwrite函数将数组 a的 5个元素,依次输出到文件 fp中,共 10个字节,关闭文件。再次打开文件,使用文件指针指向文件的开头,调用 fread函数从文件 fp中读取这 10个字节的数据到数组 a中,此时数 组 a的内容就变为 l, 2,3,0,0, 1,2,3,0,0,最后的输出结果为 ”1, 2,3, 0, 0, 11, 2,3,0,0”。 【知识模块】 结构体、共用体、位运算及文件操作 34 【正确答案】 B 【试题解析】 在程序中首先把字符串 abc写