备考计算机二级 C 语言 程序设计考试,选择题是不容忽视的重要部分。
今天为大家带来 10 道选择题,聚焦文件操作与位运算的综合应用,助力巩固实战能力。
1、有以下程序
#include <stdio.h>
main()
{
FILE *fp;
int i, a[3] = {1,2,3};
fp = fopen("test.dat", "wb");
fwrite(a, sizeof(int), 3, fp);
fclose(fp);
fp = fopen("test.dat", "rb");
fseek(fp, sizeof(int), SEEK_SET);
fread(a, sizeof(int), 1, fp);
fclose(fp);
printf("%d\n", a[0]);
}
程序运行后的输出结果是( )
A. 1
B. 2
C. 3
D. 0
答案:B
分析:程序先向文件写入数组{1,2,3}
,再通过fseek
移动到第二个整数位置(跳过 4 字节),读取的值为 2 并存入a[0]
,故输出 2,B 正确。
2、若有定义:int x=0x16; 则执行语句x ^= 0x10;
后,x 的值是( )
A. 0x06
B. 0x10
C. 0x16
D. 0x26
答案:A
分析:0x16
(二进制00010110
)与0x10
(二进制00010000
)按位异或,结果为00000110
(十六进制0x06
),故 A 正确。
3、以下程序的功能是统计文件中字符的个数,其中正确的是( )
A.
#include <stdio.h>
main()
{
FILE *fp; int cnt=0; char c;
fp = fopen("file.txt", "r");
while((c = fgetc(fp)) != EOF) cnt++;
fclose(fp);
printf("%d\n", cnt);
}
B.
#include <stdio.h>
main()
{
FILE *fp; int cnt=0;
fp = fopen("file.txt", "r");
while(fgetc(fp) != EOF) cnt++;
fclose(fp);
printf("%d\n", cnt);
}
C.
#include <stdio.h>
main()
{
FILE *fp; int cnt=0; char c;
fp = fopen("file.txt", "r");
while(fread(&c, 1, 1, fp) == 0) cnt++;
fclose(fp);
printf("%d\n", cnt);
}
D.
#include <stdio.h>
main()
{
FILE *fp; int cnt=0;
fp = fopen("file.txt", "r");
while(fgets(&cnt, 1, fp) != NULL) cnt++;
fclose(fp);
printf("%d\n", cnt);
}
答案:A
分析:A 通过fgetc
循环读取字符,遇EOF
终止,正确统计字符数;B 未判断读取成功与否,可能多计数;C 中fread
返回 1 时表示读取成功,循环条件错误;D 中fgets
参数错误且逻辑混乱。故 A 正确。
4、有以下程序
#include <stdio.h>
main()
{
int a=3, b=5, c;
c = (a << 1) | (b >> 1);
printf("%d\n", c);
}
程序运行后的输出结果是( )
A. 7
B. 8
C. 6
D. 9
答案:A
分析:a << 1
计算为 3 左移 1 位,即二进制 11
变为 110
(十进制 6);b >> 1
计算为 5 右移 1 位,即二进制 101
变为 10
(十进制 2)。按位或运算 6 | 2
结果为 7
(二进制 111
),故 A 正确。
5、以下关于文件读写函数的叙述中,错误的是( )
A. fgetc
函数从文件中读取一个字符
B. fputs
函数向文件写入一个字符串
C. fread
函数只能读取文本文件
D. fprintf
函数按格式向文件写入数据
答案:C
分析:fread
函数可读取二进制文件(如结构体、数组等),并非只能读取文本文件(C 错误);A、B、D 描述均正确,故 C 错误。
6、有如下程序
#include <stdio.h>
main()
{
FILE *fp;
char s[ ] = "Hello";
fp = fopen("test.txt", "w");
fputs(s, fp);
fclose(fp);
}
程序执行后,文件 test.txt
中的内容是( )
A. Hello
B. Hello\0
C. H
D. 空
答案:A
分析:fputs
向文件写入字符串 “Hello”(不含终止符 \0
),故文件内容为 “Hello”,A 正确。
7、若有定义:int x=0x000F; 则执行语句 x &= 0xFFF0;
后,x 的值是( )
A. 0x0000
B. 0x000F
C. 0xFFF0
D. 0xFFFF
答案:A
分析:0x000F
(二进制 0000000000001111
)与 0xFFF0
(二进制 1111111111110000
)按位与,结果为 0000000000000000
(十六进制 0x0000
),故 A 正确。
8、有以下程序
#include <stdio.h>
main()
{
FILE *fp;
int i, n=0;
fp = fopen("data.dat", "r");
while(fscanf(fp, "%d", &i) == 1) n++;
fclose(fp);
printf("%d\n", n);
}
若 data.dat
文件中内容为 “12 34 56”,程序运行后的输出结果是( )
A. 0
B. 1
C. 2
D. 3
答案:D
分析:fscanf
循环读取文件中的整数,共读取到 12、34、56 三个整数,n
累加为 3,故 D 正确。
9、以下程序的功能是将整数 x
的高 8 位和低 8 位交换,正确的表达式是( )
A. (x & 0xFF) << 8 | (x >> 8)
B. (x & 0xFF00) << 8 | (x & 0xFF)
C. x << 8 | x >> 8
D. (x & 0xFF) | (x >> 8) << 8
答案:A
分析:x & 0xFF
提取低 8 位(如 x=0x1234
时得到 0x34
),左移 8 位后变为高 8 位(0x3400
);x >> 8
提取高 8 位(0x12
),两者按位或运算得到 0x3412
,实现高低 8 位交换。B、C、D 均无法正确交换,故 A 正确。
10、有如下程序
#include <stdio.h>
main()
{
FILE *fp;
char c;
fp = fopen("file.txt", "r+");
while((c = fgetc(fp)) != EOF)
{
if(c >= 'a' && c <= 'z')
{
fseek(fp, -1L, SEEK_CUR);
fputc(c - 32, fp);
}
}
fclose(fp);
}
程序的功能是( )
A. 将文件中所有小写字母转换为大写字母
B. 将文件中所有大写字母转换为小写字母
C. 统计文件中小写字母的个数
D. 清空文件内容
答案:A
分析:程序以读写模式打开文件,读取每个字符,若为小写字母则通过 fseek
回退一个位置,用 fputc
写入对应的大写字母(c-32
),故功能是将小写字母转为大写,A 正确。
希望这 10 道题能帮助大家对计算机二级 C 语言的知识点有更深入的理解和掌握。如果想要获取完整版 PDF(含二级更多题目题库)