1、国家二级 C语言机试(结构体、共用体、位运算及文件操作)模拟试卷 14及答案与解析 一、选择题 1 有以下程序 #include main() int a=5, b=1, t; t=(a main()FILE*f; f=fopen(“filea txt“, “w“); fprintf(f, “abc“); fclose(f); 若文本文件 filea txt中原有内容为: hello,则运行以上程序后,文件 filea txt中的内容为 ( A) abclo ( B) abc ( C) helloabe ( D) abchello 15 有以下程序 #include main() FILE*f
2、p; int i, a6=1, 2, 3, 4, 5, 6; fp=fopen(“d2 dat“, “w+“); for(i=0; i main() FILE*fb; char*s1=“Fortran“, “s2=“Basic“; if(fb=fopen(“test txt“, “wb“)=NULL) printf(“Cant open test txt file n“); exit(1); fwrite(s1, 7, 1, fb); *把从地址 s1开始的 7个字符写到 fb所指文件中 * fseek(fb, 0L, SEEK SET); *文件位置指针移到文件开头 * fwrite(s2,
3、 5, 1, fb); fclose(fb); ( A) Basican ( B) BasicFortran ( C) Basic 、 ( D) FortranBasic 17 读取二进制文件的 函数调用形式为: fread(buffer, size, count, fp);其中buffer代表的是 ( A)一个整型变量,代表待读取的数据的字节数 ( B)一个内存块的首地址,代表读入数据存放的地址 ( C)一个文件指针,指向待读取的文件 ( D)一个内存块的字节数 18 有下列程序: #include main() FILE*fp; int a10=1, 2, 3), i, n; fp=fop
4、en(“d1 dat“, “w“); for(i=0; i main() FILE*pf; char*s1=“China“, *s2=“Beijing“; pf=fopen(“abc dat“, “wb+“); fwrite(s2, 7, 1, pf); rewind(pf); *文件位置指针回到文件开头 * fwrite(s1, 5, 1, pf); fclose(pf); 以上程序执行后 abc dat文件的内容是 ( A) Chinang ( B) China ( C) ChinaBeijing ( D) BeijingChina 21 有下列程序: #include main() FI
5、LE*fp; int k, n, a61=1, 2, 3, 4, 5, 6; fp=fopen(“d2 dat“, “w“); fprintf(fp, “ d d d n“, a0, a1, a2); fprintf(fp, “ d d d n“, a3, a4, a5); fclose(fp); 。 fp=fopen(“d2 dat“, “r“); fscanf(fp, “ d d“, &k, &n); printf(“ d d n“, k, n); fclose(fp); 程序运行后的输出结果是 ( A) 1 4 ( B) 123 456 ( C) 123 4 ( D) 1 2 22 有下
6、列程序: #include main() FILE*fp; int a10=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 main() FILE*fp; char str10; fp=fopen(“myfile dat“, “w“); fputs(
7、“abc“, fp); fclose(fp); fp=fopen(“myfile dat“, “a+“); fprintf(fp, “ d“, 28); rewind(fp); fscanf(fp, “ s“, str); puts(str); fclose(fp); 程序运行 后的输出结果是 ( A) 28c ( B) abc28 ( C) abe ( D)因类型不一致而出错 25 以下程序依次把从终端输入的字符存放到 f文件中,用 #作为结束输入的标志,则在横线处应填入的选项是 #include main()FILE*fp; char ch; fp=fopen(“fname“, “w“);
8、 while(ch=getchar()!=#) fputc(_); felose(fp); ( A) fp, ch ( B) ch ( C) ch, “fname“ ( D) ch, fp 26 以下程序用来统计文件中字符的个数 (函数 feof用以检查文件是否结束,结束时返回非零 ) #include main()FILE*fp; long num=0; fp=fopen(“fname dat“, “r“); while(_); fgetc(fp); num+; printf(“num= d n“, num); fclose(fp); 下面选项中,填入横线处不能得到正确结果的是 A)feof
9、(fp) B)feof(fp)=NULL ( A) feof(fp) ( B) feof(fp)=NULL ( C) !feof(fp) ( D) feof(fp)=0 27 下面关于 “EOF”的叙述,正确的是 ( A) EOF的值等于 0 ( B)文本文件和二进制文件都可以用 EOF作为文件结束标志 ( C) EOF是在库函数文件中定义的符号常量 ( D)对于文本文件, fgetc函数读入最后一个字符时,返回值是 EOF 28 若 fp已定义为指向某文件的指针,且没有读到该文件的末尾,则 C语言函数feof(fp)的函数返回值是 ( A) 0 ( B)非 0 ( C) -1 ( D) EO
10、F 国家二级 C语言机试(结构体、共用体、位运算及文件操作)模拟试卷 14答案与解析 一、选择题 1 【正确答案】 C 【试题解析】 本题考查位操作运算符。 “”是左移运算符,左移一位相当于乘 2, “ ”是按位或运算符。 5序移两位相当于乘 4,得到 20, 20的二 进制数是 00010100,和 00000001进行按位或操作得到 00010101,即十进制的 21。 【知识模块】 结构体、共用体、位运算及文件操作 2 【正确答案】 D 【试题解析】 “按位异或 ”运算的规则是:参与运算的两个运算数中相对应的二制位上,若数相同,则该位的结果为 0;若数不同,则该位的结果为 1。因为语句“
11、s=32; s=32; ”相当于 s与自身做按位异或运算,所以其结果等于 0。 【知识模块】 结构体、共用体、位运算及文件操作 3 【正确答案】 A 【试题解析】 按位异或 ()的运算规则是:参与运算的两个运算数中相对应的二进制位上,若数相同,则该位的结果为 0;若数不同,该位的结果为 1。整数 10和 5的二进制编码分别为 1010和 0101,异或结果为 1111,其十进制数据位 15。 【知识模块】 结构体、共用体、位运算及文件操作 4 【正确答案】 C 【试题解析】 按位或 ( )的运算规则是:参加运算的两个运算数中,只要两个相应的二进制位中一个为 1,则该位的运算结果即为 1:只有当
12、两个相应位的数都为0时,该位的运算结果才为 0。 13的二进制位 1101, 5的二进制位 0101,或运算的结果为 1101,因此值为 13。 【知识模块】 结构体、共用体、位运算及文件操作 5 【正确答案】 D 【试题解析】 运算符 ( )是位运算符中唯一的一个单目运算符,运算对象应置于运算符的右边,其运算功能是把运算对象的内容按位取反 (使每一位上的 0变 1, 1变 0)。 i的初值为 0,二进制位 00000000,因此取反后结果为 11111111,最高位为符号位,为一 1的补码形式,因此输出结果为一 1。 【知识模块】 结构体、共用体、位运算及文件操作 6 【正确答案】 B 【试
13、题解析】 按位异或 (n)的运算规则是:参与运算的两个运算数中相对应的二进制位上,若数相同,则该位的结果为 0:若数不同,该位的结果为 1。本题中表达式 ii的值必为 0,因为 i的各个位置的二进制值相同。 【知识模块】 结构体、共用体、位运算及文件操作 7 【正确答案】 D 【试题解析】 C语言提供了 6种位运算符,各种位运算符的含义见下表:【知识模块】 结构体、共用体、位运算及文件操作 8 【正确答案】 D 【试题解析】 在 C语言中,有两种对文件的存取方式;顺序存取和直接存取;如果以 “a”的 方式对一个已打开的文件进行写操作后,则原有文件中内容将保存,新的数据写在原有内容之后。如果以
14、“a+”的方式为读和写而打开一个文件,则既可以对文件进行读,也可以对文件进行写,而且在读和写操作之间不必关闭文件,可以从头开始读。当对文件的读 (写 )操作完成之后,必须将它关闭。 【知识模块】 结构体、共用体、位运算及文件操作 9 【正确答案】 C 【试题解析】 在 C语言中,对输入、输出的数据都按 “数据流 ”的形式进行处理。数据可以按文本形式或二进制形式存放在介质上,因此文件可以按数据的存放形式分为文本文 件和二进制文件。 【知识模块】 结构体、共用体、位运算及文件操作 10 【正确答案】 C 【试题解析】 文件指针实际上是指向一个结构体类型的指针,这个结构体中包含如缓冲区的地址、在缓冲
15、区中当前存取的字符的位置、对文件是 “读 ”或 “写 ”、是否出错、是否已经遇到文件结束标志等信息。一般称文件指针结构体类型名为FILE,可以用此类型名来定义文件指针。 格式 FILE*指针变量名 说明 FILE是一个存储文件信息的结构体类型的变量。 注意不要和文件位置指针混淆,在文件内部有 一个位置指针,用以指示文件内部的当前读写位置。使用 fgetc函数,每读写一次,该指针均向后移动,它不需在程序中定义说明,而是由系统自动设置的。而文件指针是指向整个文件的,须在程序中定义说明,只要不重新赋值,文件指针的值是不变的。 fscanf函数可以向文本文件和二进制文件输入数据。 【知识模块】 结构体
16、、共用体、位运算及文件操作 11 【正确答案】 B 【试题解析】 本题考查文件操作。 fopen的 mode参数有多种类型: r以只读方式打开文件、 r+以可读写方式打开文件、 rb+以读写方式打开一个二 进制文件、 w以只写方式打开文件、 w+以读写方式打开文件、 wb+以读写方式打开二进制文件。 【知识模块】 结构体、共用体、位运算及文件操作 12 【正确答案】 C 【试题解析】 本题考查文件操作。 ftell函数返回文件指针的当前位置,其他的都写文件函数。 【知识模块】 结构体、共用体、位运算及文件操作 13 【正确答案】 D 【试题解析】 在题目中函数 fopen以 “只写 ”方式打开
17、文件 file。 【知识模块】 结构体、共用体、位运算及文件操作 14 【正确答案】 B 【试题解析】 本题考查文件打开方式。 格式:文件指针名 =fopen(文件名,使用文件方式 ) 需要注意的是:用 “w”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。 【知识模块】 结构体、共用体、位运算及文件操作 15 【正确答案】 B 【试题解析】 在程序中定义了一个整型数组 a6,并对它赋初值,并以写入的方式打开了文件 d2 dat。然后利用一个 for循环把数组 a中的元素数据写入文件d2 dat中,调用函数 re
18、wind把将文件内部的位置指针重新指向一个文件的开头,再利用 for循环语句把文件中的数据依次写入到倒序排列的数组 a中,最后输出数组 a中的数组元素。 【知识模块】 结构体、共用体、位运算及文件操作 16 【正确答案】 A 【试题解析】 本题主要考查文件的基本操作。在 main函数中,首先打开text txt文件,然后通过 fwrite函数把 s1字符串写到文件中,接下来通过 fseek函数把文件指针移动到文件开始,再调用 fwrite函数把 s2字符窜写到文件中, s2的长度小于 sl的长度,因此第二次写 的时候会覆盖第一次写的部分内容,程序运行后 test text中内容为 Basica
19、n。 【知识模块】 结构体、共用体、位运算及文件操作 17 【正确答案】 B 【试题解析】 buffer是数据块的指针,对 fread来说,它是内存块的首地址,输入的数据存入此内存块中。 【知识模块】 结构体、共用体、位运算及文件操作 18 【正确答案】 B 【试题解析】 本题考查以读和写的方式打开文件对文件内容操作的不同,fp=fopen(“d1 dat“, “w“);以可写的方式为输出建立新文本文 件,调用 printf,输出 “123”, fp=fopen(“dl, dat“, “r“);以只读的方式打开文本文件,不能对文件内容进行操作。 【知识模块】 结构体、共用体、位运算及文件操作
20、19 【正确答案】 B 【试题解析】 本题考查的是输入输出函数的使用, gets和 getchar函数用于从标准输入设备终端读入字符串和字符,并非从磁盘文件读入, fputs用于把字符串输出到文件, fwrite用于以二进制形式输出数据到文件。 【知识模块】 结构体、共用体、位运算及文件操作 20 【正确答案 】 A 【试题解析】 本题主考查函数 fwrite的使用。函数 fwrite的调用形式为: int fwrite(char*pt, unsigned size, unsigned n, FILE*fp);其功能是把 pt所指向的n*size个字节输出到 fp所指文件中。在本题中 “fwr
21、ite(s2, 7, 1, pf); ”的功能是把字符串 “Beijing”输入到文件 abc dat中,然后调用 rewind(pf),把文件位置指针回到文件开头,再调用 “fwrite(s1, 5, 1, pf)”把字符串 “Chma”写入到文件abc dat中,所以此时文件 abc dat的内容为 Chinang。 【知识模块】 结构体、共用体、位运算及文件操作 21 【正确答案】 B 【试题解析】 用文件函数 fopen打开 d2 dat文件并把数组 a6中的元素分两行写入到 d2 dat文件中,关闭文件。然后再次打开文件 d2 dat,用 fscanf()函数读取文件 d2 dat中
22、的数据,因为每行没有分隔符,所以每一行会被认为是一个完整的数。并存入到变量 k和 n中,输出变量 k和 n的值为 123 456。 【知识模块】 结构体、共用体、位运算及文件 操作 22 【正确答案】 B 【试题解析】 首先用函数 fopen()以 “wb”的方式开打文件 “d2 dat”,然后调用两次 fwrite函数将数组 a的 5个元素,依次输出到文件 fp中,共 10个字节,关闭文件。再次打开文件,使用文件指针指向文件的开头,调用 fread函数从文件 fp中读取这 10个字节的数据到数组 a中,此时数组 a的内容就变为 1, 2, 3, 0, 0,1, 2, 3, 0, 0,最后的输
23、出结果为 “1, 2, 3, 0, 0, 1, 2, 3, 0, 0”。 【知识模块】 结构体、共用体、位运算及文件操作 23 【正确答案】 D 【试题解析】 ANSI C提供的 feof函数的功能是判断 fp所指的文件的位置是否已达到文件尾,如果达到文件尾,则 feof函数的值为 1,否则为 0,表示文件尚未结束。 【知识模块】 结构体、共用体、位运算及文件操作 24 【正确答案】 B 【试题解析】 在程序中首先把字符串 abc写入到文件 myfile dat中,然后再把整数 28追加到字符串 abc的后面,最后把文件 myfile dat的内容读入到字符串str中,并把其内容输出。 【知识
24、模块】 结构体、共用体、位运算及 文件操作 25 【正确答案】 D 【试题解析】 fputc()是以字符 (字节 )为单位的读写函数。每次可从文件读出或向文件写入一个字符。使用格式为 “fpute(eh, fp); ”。 其中 ch是待输出的某个字符,它可以是一个字符常量,也可以是一个字符变量; fp是文件指针。 fputc(ch, fp)的功能是将字符 ch写到文件指针 fp所指的文件中。如果输出成功, fputc函数返回所输出的字符:如果输出失败,则返回一个EOF值。 EOF是在 stdio h库函数文件中定义的符号常量,其值等于 -1。 【 知识模块】 结构体、共用体、位运算及文件操作
25、26 【正确答案】 C 【试题解析】 feof函数用来判断文件是否结束。如果遇到文件结束,函数 feof(fp)的值为 1,否则为 0。题目横线用于判断文件不结束,读出字符。文件不结束 feof值为 0,若执行循环则应用表达式 !feof(fp)。 【知识模块】 结构体、共用体、位运算及文件操作 27 【正确答案】 C 【试题解析】 EOF是在 stdio h库函数文件中定义的符号常量,其值等于 -1。EOF用作文件结束标志,在二进制或者文本文件内部有 一个位置指针,用以指示文件内部的当前读写位置。使用 fgetc函数,每读写一次,该指针均向后移动, 【知识模块】 结构体、共用体、位运算及文件操作 28 【正确答案】 A 【试题解析】 feof用来判断文件是否结束。如果遇到文件结束,函数 feof(fp)的值为 1,否则为 0。 【知识模块】 结构体、共用体、位运算及文件操作