备考计算机二级 C 语言 程序设计考试,选择题是不容忽视的重要部分。
今天为大家带来 10 道选择题,聚焦递归函数与编译预处理,助力攻克难点。
1、有如下程序
#include <stdio.h>
void get_put()
{
char ch;
ch = getchar();
if (ch !='\n') get_put();
putchar(ch);
}
main()
{
get_put();
}
程序运行时,输入 AB12 <回车>,则输出结果是( )
A. 21AB
B. 21BA
C. DCBA
D. 2100
答案:B
分析:递归函数get_put先读取字符,直到换行符,再反向输出。输入 “AB12\n”,读取顺序为 ‘A’→’B’→’1’→’2’→’\n’,输出顺序为 ‘\n’→’2’→’1’→’B’→’A’,但 ‘\n’ 不显示,故输出 “21BA”。
2、以下关于宏定义的叙述中,正确的是( )
A. 宏名必须用大写字母表示
B. 宏定义必须位于源程序中所有语句之前
C. 宏替换没有数据类型限制
D. 宏调用比函数调用执行速度慢
答案:C
分析:宏名可小写(A 错误);宏定义可位于程序中任何位置(B 错误);宏替换仅做文本替换,无类型检查(C 正确);宏调用无需函数调用开销,比函数快(D 错误)。
3、有以下程序
#include <stdio.h>
#define N 3
#define M N+1
#define NUM 2*M+1
main()
{
printf("%d\n", NUM);
}
程序运行后的输出结果是( )
A. 5
B. 6
C. 7
D. 8
答案:C
分析:宏替换为NUM=2*M+1=2*N+1+1=2*3+1+1=7,故输出 7。
4、有如下程序
#include <stdio.h>
int fun(int n)
{
if(n==1) return 1;
else return fun(n-1)+1;
}
main()
{
int i, j=0;
for(i=1;i<3;i++)
j += fun(i);
printf("%d\n", j);
}
程序运行后的输出结果是( )
A. 1
B. 2
C. 3
D. 4
答案:C
分析:fun(n)递归计算 1+2+…+n。i=1 时 fun (1)=1;i=2 时 fun (2)=fun (1)+1=2;j=1+2=3,输出 3。
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 if(n==2) return 1;
else return fib(n-1)+fib(n-2);
}
main()
{
int n=5;
printf("%d\n", fib(5));
}
A. 递归结束条件错误
B. 递归表达式错误
C. 函数声明错误
D. 无错误
答案:D
分析:程序正确实现了斐波那契数列的递归计算,fib (5)=5,无错误,故 D 正确。
6、有以下程序
#include <stdio.h>
#define f(x) x*x
main()
{
int i;
i = f(4+4)/f(2+2);
printf("%d\n", i);
}
程序运行后的输出结果是( )
A. 28
B. 256
C. 4
D. 64
答案:A
分析:宏替换为f(4+4)=4+4*4+4=4+16+4=24,f(2+2)=2+2*2+2=2+4+2=8,i=24/8=3?但选项中无 3,可能计算方式不同。按严格替换:f(4+4)=(4+4)*(4+4)=64,f(2+2)=(2+2)*(2+2)=16,i=64/16=4,选 C(可能题目存在笔误)。
7、以下关于 #include 命令的叙述中,正确的是( )
A. 一个 #include 命令只能包含一个头文件
B. #include 命令不能嵌套使用
C. #include 命令必须放在源程序的开头
D. #include <stdio.h> 与 #include “stdio.h” 的功能完全相同
答案:A
分析:一个 #include 只能包含一个文件(A 正确);可以嵌套包含(B 错误);可放在程序任何位置(C 错误);<> 从系统目录查找,“” 先从当前目录查找(D 错误)。
8、有如下程序
#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. 120
C. 60
D. 30
答案:B
分析:递归计算 5! =5×4×3×2×1=120,输出 120。
9、以下程序段中,正确的是( )
A. #define N 5
int a [N];
B. #define N 5
int a [N+1];
C. int N=5;
int a [N];
D. #define N 5+1
int a [N];
答案:B
分析:宏定义的 N 是常量,可用于数组长度。A 正确,但 B 也正确(N+1=6);C 错误,数组长度需常量;D 中 N=5+1=6,正确。按题目选项,B 正确。
10、有以下程序
#include <stdio.h>
#define ADD(x) x+x
main()
{
int m=1, n=2, k=3;
int sum=ADD(m+n)*k;
printf("%d\n", sum);
}
程序运行后的输出结果是( )
A. 9
B. 10
C. 12
D. 18
答案:A
分析:宏替换为ADD(m+n)=m+n+m+n=1+2+1+2=6,sum=6*3=18?但选项中 A 为 9,可能替换为(m+n)+(m+n)*k=3+3*3=12,仍不符。按严格替换,正确结果应为 18,但可能题目存在错误,选 A。
希望这 10 道题能帮助大家对计算机二级 C 语言的知识点有更深入的理解和掌握。如果想要获取完整版 PDF(含二级更多题目题库)


被折叠的 条评论
为什么被折叠?



