备考计算机二级 C 语言 程序设计考试,选择题是不容忽视的重要部分。
今天为大家带来 10 道选择题,聚焦指针与数组的复杂应用,助力突破难点。
1、有以下程序
#include <stdio.h>
main()
{
int a[5] = {1,2,3,4,5}, *p = a;
printf("%d\n", *(p+2));
}
程序运行后的输出结果是( )
A. 1
B. 2
C. 3
D. 4
答案:C
分析:p指向数组首地址(a[0]),p+2表示向后移动 2 个元素的地址(指向a[2]),*(p+2)取出该地址的值 3,故 C 正确。
2、以下定义中,p是指向数组的指针的是( )
A. int *p [5];
B. int (*p)[5];
C. int p [5];
D. int *p ();
答案:B
分析:A 是指针数组(数组元素为 int 指针);B 是指向 “包含 5 个 int 元素的数组” 的指针;C 是普通 int 数组;D 是返回 int 指针的函数声明。故 B 正确。
3、有以下程序
#include <stdio.h>
main()
{
int a[3][3] = {{1,2,3}, {4,5,6}, {7,8,9}}, *p = &a[0][0];
printf("%d\n", *(p+4));
}
程序运行后的输出结果是( )
A. 5
B. 4
C. 6
D. 3
答案:A
分析:二维数组在内存中按行连续存储,元素顺序为 1、2、3、4、5、6、7、8、9。p指向首元素,p+4指向第 5 个元素(值为 5),故 A 正确。
4、以下程序段中,能正确输出字符串的是( )
A. char *str = “hello”; printf (“% s”, str);
B. char str [5] = “hello”; printf (“% s”, str);
C. char *str; *str = “hello”; printf (“% s”, str);
D. char str [5]; str = “hello”; printf (“% s”, str);
答案:A
分析:A 中指针str指向字符串常量,可通过%s输出;B 中数组长度为 5,无法存储 “hello”(含 ‘\0’ 共 6 个字符),会溢出;C 中未初始化指针str就赋值,存在风险;D 中数组名是常量,不能直接赋值。故 A 正确。
5、有如下程序
#include <stdio.h>
main()
{
int a[2][3] = {1,2,3,4,5,6};
int (*p)[3] = a;
printf("%d %d\n", *(*(p+1)+1), (*p)[1]);
}
程序运行后的输出结果是( )
A. 5 2
B. 4 2
C. 5 3
D. 6 3
答案:A
分析:p是指向二维数组行的指针,p+1指向第二行,*(p+1)+1指向第二行第二列(值 5);(*p)[1]是第一行第二列(值 2),故输出 “5 2”,A 正确。
6、以下关于指针数组的叙述中,正确的是( )
A. 指针数组的每个元素都是同类型的指针
B. 指针数组的长度必须在定义时指定
C. 指针数组的元素不能指向字符串
D. 指针数组中的指针必须指向相同类型的数据
答案:A
分析:指针数组是 “元素为指针的数组”,每个元素类型相同(A 正确);可通过初始化列表确定长度(B 错误);可指向字符串(如char *strs[]={"a","b"},C 错误);指针可指向不同类型数据(需强制转换,D 错误)。
7、有以下程序
#include <stdio.h>
main()
{
int a[4] = {1,2,3,4}, *p[4], i;
for(i=0; i<4; i++)
p[i] = &a[i];
printf("%d\n", *p[2]);
}
程序运行后的输出结果是( )
A. 1
B. 2
C. 3
D. 4
答案:C
分析:p是指针数组,p[i]指向a[i],p[2]指向a[2],*p[2]即a[2]=3,故 C 正确。
8、以下程序段中,不能正确遍历数组元素的是( )
A. int a [5] = {1,2,3,4,5}, *p; for (p=a; p<a+5; p++) printf (“% d”, *p);
B. int a [5] = {1,2,3,4,5}, i; for (i=0; i<5; i++) printf (“% d”, a [i]);
C. int a [5] = {1,2,3,4,5}, *p = a; while (p < a+5) printf (“% d”, *p++);
D. int a [5] = {1,2,3,4,5}, *p = a; for (i=0; i<5; i++) printf (“% d”, p [i++]);
答案:D
分析:D 中p[i++]会导致下标和指针同时递增,遍历错误(实际访问a[0]、a[2]、a[4]后越界);A、B、C 均正确遍历数组,故 D 错误。
9、有如下程序
#include <stdio.h>
void fun(int *x, int n)
{
int i, t;
for(i=0; i<n/2; i++)
{
t = x[i];
x[i] = x[n-1-i];
x[n-1-i] = t;
}
}
main()
{
int a[5] = {1,2,3,4,5};
fun(a,5);
for(i=0; i<5; i++)
printf("%d", a[i]);
}
程序运行后的输出结果是( )
A. 54321
B. 12345
C. 13542
D. 21543
答案:A
分析:fun函数反转数组,调用后a变为{5,4,3,2,1},故输出 A。
10、以下关于数组名作为函数参数的叙述中,正确的是( )
A. 数组名作为实参时,传递的是数组所有元素的值
B. 函数形参必须是数组名
C. 函数形参可以是指针变量
D. 数组名作为参数时,函数中不能修改数组元素的值
答案:C
分析:数组名作为实参传递的是首地址(A 错误);形参可以是指针(如void fun(int *x),C 正确,B 错误);函数中可通过指针修改数组元素(D 错误)。
希望这 10 道题能帮助大家对计算机二级 C 语言的知识点有更深入的理解和掌握。如果想要获取完整版 PDF(含二级更多题目题库)

3万+

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



