2025年9月计算机二级C语言程序设计——选择题打卡Day12

备考计算机二级 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(含二级更多题目题库)

夸克网盘分享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值