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

备考计算机二级 C 语言 程序设计考试,选择题是不容忽视的重要部分。

今天为大家带来 10 道选择题,聚焦函数指针与递归算法,助力提升高级编程能力。

1、以下定义中,p是指向函数的指针的是( )
A. int (*p)(int);
B. int *p (int);
C. int (*p)[int];
D. int *p;

答案:A

分析:int (*p)(int)表示p是指向 “参数为 int、返回值为 int 的函数” 的指针(A 正确);B 是返回 int 指针的函数声明;C 是指向数组的指针(格式错误);D 是函数指针数组(格式错误),故 A 正确。

2、有如下程序

#include <stdio.h>
int add(int a, int b) { return a + b; }
int sub(int a, int b) { return a - b; }
main()
{
    int (*f)(int, int);
    f = add;
    printf("%d,", f(3, 2));
    f = sub;
    printf("%d\n", f(3, 2));
}

程序运行后的输出结果是( )
A. 5,1
B. 5,5
C. 1,5
D. 1,1

答案:A

分析:f是函数指针,指向add时计算 3+2=5;指向sub时计算 3-2=1,输出 “5,1”,故 A 正确。

3、以下关于递归函数的叙述中,正确的是( )
A. 递归函数必须有返回值
B. 递归函数必须有终止条件
C. 递归函数调用次数不受限制
D. 递归函数不能有参数

答案:B

分析:递归函数若没有终止条件会导致无限递归(栈溢出),必须有终止条件(B 正确);可无返回值(如void函数,A 错误);调用次数受栈空间限制(C 错误);可以有参数(D 错误)。

4、有以下程序

#include <stdio.h>
int fact(int n)
{
    if(n <= 1) return 1;
    else return n * fact(n-1);
}
main()
{
    printf("%d\n", fact(5));
}

程序运行后的输出结果是( )
A. 15
B. 24
C. 120
D. 60

答案:C

分析:递归计算 5 的阶乘,fact(5)=5×4×3×2×1=120,故 C 正确。

5、以下程序的功能是用递归求斐波那契数列第 n 项,斐波那契数列定义为:f(1)=1, f(2)=1, f(n)=f(n-1)+f(n-2),程序中错误的是( )

#include <stdio.h>
int fib(int n)
{
    if(n == 1) return 1;
    else return fib(n-1) + fib(n-2);
}
main()
{
    printf("%d\n", fib(5));
}

A. 递归终止条件不完整
B. 递归表达式错误
C. 函数参数错误
D. 无错误

答案:A

分析:程序缺少n==2的终止条件,当n=2时会递归调用fib(1)+fib(0)fib(0)会无限递归,故 A 正确。

6、有如下程序

#include <stdio.h>
void fun(int n)
{
    if(n > 0)
    {
        printf("%d", n%10);
        fun(n/10);
    }
}
main()
{
    fun(1234);
}

程序运行后的输出结果是( )
A. 1234
B. 4321
C. 1357
D. 2468

答案:B

分析:递归函数先输出n%10(当前数的个位),再递归处理n/10(去除个位后的值)。对 1234 的处理为:输出 4→处理 123→输出 3→处理 12→输出 2→处理 1→输出 1,最终输出 “4321”,故 B 正确。

7、以下关于函数指针的叙述中,正确的是( )
A. 函数指针的类型由它指向的函数决定
B. 函数指针只能指向库函数
C. 函数指针不能作为函数参数
D. 函数指针的调用方式与函数名相同

答案:A

分析:函数指针的类型由所指向函数的返回值和参数类型决定(A 正确);可以指向自定义函数(B 错误);可以作为函数参数(如回调函数)(C 错误);调用时需通过(*p)()p()的方式(D 错误),故 A 正确。

8、有以下程序

#include <stdio.h>
int sum(int a, int b) { return a + b; }
int mul(int a, int b) { return a * b; }
main()
{
    int (*f)(int, int);
    f = sum;
    printf("%d,", f(2, 3));
    f = mul;
    printf("%d\n", f(2, 3));
}

程序运行后的输出结果是( )
A. 5,6
B. 5,5
C. 6,5
D. 6,6

答案:A

分析:函数指针f先指向sum,计算 2+3=5;再指向mul,计算 2×3=6,输出 “5,6”,故 A 正确。

9、有如下递归函数

int fun(int n)
{
    if(n <= 1) return 1;
    else return fun(n-1) + fun(n-2);
}

该函数的功能是计算( )
A. 斐波那契数列第 n 项
B. n 的阶乘
C. 1 到 n 的和
D. 2 的 n 次方

答案:A

分析:函数满足fun(n)=fun(n-1)+fun(n-2),且fun(1)=1fun(2)=1,符合斐波那契数列定义(第 1 项 1,第 2 项 1,第 n 项 = 第 n-1 项 + 第 n-2 项),故 A 正确。

10、以下关于函数指针数组的叙述中,错误的是( )
A. 函数指针数组的元素是指向函数的指针
B. 函数指针数组可以实现分支选择
C. 函数指针数组的元素类型必须相同
D. 函数指针数组不能作为函数返回值

答案:D

分析:函数指针数组的元素是函数指针(A 正确);可通过下标索引选择不同函数实现分支(B 正确);元素必须指向同类型函数(C 正确);可以作为函数返回值(如返回数组指针)(D 错误),故 D 正确。

希望这 10 道题能帮助大家对计算机二级 C 语言的知识点有更深入的理解和掌握。如果想要获取完整版 PDF(含二级更多题目题库)

夸克网盘分享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值