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