第1题:关于一维数组初始化,下面哪个定义是错误的?( )
A、int arr[10] = {1,2,3,4,5,6};
B、int arr[] = {1,2,3,4,5,6};
C、int arr[] = (1,2,3,4,5,6);
D、int arr[10] = {0};
答案:C 、int arr[] = (1,2,3,4,5,6)是错误的定义。
解析:一维数组的初始化可以使用大括号{ }来赋初值。选项A和B都是正确的数组初始化形式。选项D中的{0}表示将数组中的所有元素初始化为0。选项C的赋值形式是错误的,应该使用大括号{ }来表示数组的初值。
第2题:定义了一维int型数组a[10]后,下面的错误的引用是:( )
A、a[0] = 1;
B、a[0] = 5*2;
C、a[10] = 2;
D、a[1] = a[2]*a[0];
答案:C
解析:int a[10]表示定义了具有10个元素的数组a,但是当调用数组a中某个元素时,下表引用操作符是只能为0~9。因此选项C,a[10]是错误的。
第3题:下面代码的结果是:( )
#include <stdio.h>
int main()
{
int arr[] = {1,2,(3,4),5};
printf("%d\n",sizeof(arr));
return 0;
}
A、4 B、16 C、20 D、5
答案:B
解析:这段代码定义了一个整型数组arr,并初始化为{1,2,(3,4),5}。这里需要注意的是,(3,4)并不是一个数组元素的合法值,而是一个逗号操作符的使用。逗号操作符会依次执行两个操作数,并返回最后一个操作数的值。在这个例子中,(3,4)会先执行3,然后再执行4,所以表达式的值为4。因此,数组实际上为{1,2,4,5}。使用sizeof()函数获取数组的大小,返回的是数组的总字节数。由于整型占用4个字节,所以结果为4x4=16。
第4题:关于一维数组描述不正确的是:( )
A、数组的下标是从0开始的
B、数组在内存中是连续存放的
C、数组名表示首元素的地址
D、随着数组下标的由小到大,地址由高到低
答案:D
解析:数组随着下标的由小到大,地址也是由小到大变化的。数组在内存中是连续存放的。
第5题:以下能对二维数组a进行正确初始化的语句是:( )
A、int a[2][ ] = {{0,1,2},{3,4,5}};
B、int a[ ][3] ={{0,1,2},{3,4,5}};
C、int a[2][4] = {{0,1,2},{3,4},{5}};
D、int a[ ][3] = {{0,2},{},{3,4,5}};
答案:B
解析:选项A错误,初始化时省略行,但是不能省略列。选项C、D错误,在二维数组的定义中,每一行必须有相同的元素个数。
第6题:若定义int a[2][3] = {1,2,3,4,5,6};则值为4的数组元素是( )
A、a[0][0]
B、a[1][0]
C、a[1][1]
D、a[2][1]
答案:B
解析:二维数组访问是使用下标的形式的,二维数组是有行和列的,只要锁定了行和列就能唯一锁定数组中的一个元素。
0 1 2
0 1 2 3
1 4 5 6
a[x][y]:x表示行,y表示列。因此值为4的数组元素是a[1][0]。
第7题:关于rand函数说法错误的是?
A、rand函数生成了0~32767之间的随机数
B、rand函数生成的真正的随机数
C、rand函数在使用之前,需要调用srand函数设置随机数的生成器
D、rand函数的使用需要包含stdlib.h的头文件
答案:B
解析:rand函数生成的随机数是伪随机数的,伪随机数不是真正的随机数,是通过某种算法生成的随机数。真正的随机数的是无法预测下一个值是多少的。而rand函数是对一个叫“种子”的基准值进行运算生成的随机数。
第8题:给出以下定义:
char acX[] = "abcdefg";
char acY[] = {'a','b','c','d','e','f','g'};
以下说法正确的是( )
A、数组acX和数组acY等价
B、数组acX和数组acY的长度相同
C、sizeof(acX) > sizeof(acY)
D、strlen(acX) > strlen(acY)
答案:C
解析:acX是一个字符串,它以null字符'\0'结尾,而acY是一个字符数组,所以两者不等价。选项A错误;
虽然数组acX和数组acY都有7个元素,但是数组acX是一个以null字符结尾的字符串,而数组acY是一个没有null字符结尾的字符数组。所以在长度上,数组acX的长度比数组acY的长度多一个字节,所以选项B错误。
sizeof(acX)返回的是数组acX的总字节数,而sizeof(acY)返回的是数组acY的总字节数。在这个情况下,由于acX是一个字符串,sizeof(acX)会包括字符串的长度和结尾的null字符,所以sizeof(acX)大于sizeof(acY),选项C正确。
strlen(acX) > strlen(acY)。strlen(acX)返回的是字符串acX的长度,而strlen(acY)返回的是字符串acY的长度。在这个情况下,由于acX和acY都是以null字符结尾的字符串,它们的长度是相同的,所以strlen(acX)等于strlen(acY),选项D错误。
第9题:下面代码的结果是:( )
#include <stdio.h>
int main()
{
char str[] = "hello bit";
printf("%d %d\n",sizeof(str),strlen(str));
return 0;
}
A、10 9
B、9 9
C、10 10
D、9 10
答案:A
解析:str[ ]是一个字符串,它以null字符'\0'结尾。因此,sizeof(str)的值为10个字节,而strlen(str)表示字符串长度,为9个字节。
第10题:在C语言中,以下哪个选项描述了变长数组(Variable Length Array, VLA)的特点?
A、变长数组的大小在编译时确定,不能改变。
B、变长数组的大小可以在运行时确定,比如使用变量来指定数组大小,一旦确定大小后,它的大小是固定的,无法改变。
C、一旦确定大小后,它的大小是固定的,无法改变。
D、变长数组只能用于存储字符类型的数据。
答案:B
解析:变长数组是C语言中的一项特性,它允许在运行时使用变量来指定数组的大小。与传统的数组相比,变长数组的大小不再固定的,在每次使用前都可以重新指定大小。A、C选项描述的传统的数组的特点;D选项变长数组可以用于存储任何类型的数据,不限于字符类型。