错题
1.指向数组元素的指针只可指向数组的⾸元素。 (F)
解析:不是想指谁就指谁。
2.数组名就是⼀个指针常量,指向数组的⾸元素(或者说代表了数组的⾸地址)。(F)
解析:数组名是指针常量,指针不是有常量指针和指针常量和常量常指针吗?地址是绝对的,score指向受保护,但⾸地址的内容可以改变,所以数组⾸地址应该是指针常量int *const score,你的第⼆个注释说地址就是指针,应该是指针常量,指针就是地址是⼀种宽泛的说法,不对请指正哈。
3.假设有定义如下: int array[10]; 则该语句定义了⼀个数组array。其中array的类型是整型指针(即: int *)。(F)
解析:纠正下,“ int[] Array=new int[10]”,这样的命名类型才可以,否则,数组是没法转出int类型的。
4.⼀维数组定义的⼀般形式如下,其中的类型名指定数组变量的类型。(F)
解析:其中,类型名确定所有元素的数据类型,元素个数给定数组要包含的变量个数,它可以使⽤表达式形式,但该表达式中只能出现变量常量和运算符。
5.数组定义后,数组名表⽰该数组所分配连续内存空间中第⼀个单元的地址,即⾸地址。 (T)
解析:整个数组是以⾸地址开头的⼀块连续的内存单元。如有字符数组char c[10]。设数组c的⾸地址为2000,也就是说c[0]单元地址为2000。则数组名c就代表这个⾸地址。
6.数组定义为 int a[3][2]={1, 2, 3, 4, 5, 6},数组元素( B )的值为6。
A.a[3][2]
B.a[2][1]
C.a[1][2]
D.a[2][3]
解析:定义a为3*2(3⾏2列)的数组,有6个元素。该数组的下标变量共有3×2个,即:
a[0][0],a[0][1]
a[1][0],a[1][1]
a[2][0],a[2][1]
数组中的每个元素都由元素名以[i,j]的形式标识,其中a是数组名,i和j是唯⼀标识a中每个元素的下标。这是⼀个有三⾏四列的⼆维数组:i 从0到2,j从0到1。
若要表⽰第2个元素,则使⽤a[0][1]。
7.假设scanf语句执⾏时输⼊ABCDE<;回车>,能使puts(s)语句正确输出ABCDE字符串的程序段是( C )。
A.char s[5]={“ABCDE”}; puts(s);
B.char s[5]={‘A’, ‘B’, ‘C’, ‘D’, ‘E’}; puts(s);
C.char *s; scanf("%s", s); puts(s);
D.char *s; s=“ABCDE”; puts(s);
解析:要正常输出ABCDE必须在字符串的末尾有’\0’作为结束,这样输出函数才知道什么时候终⽌。
A选项中字符串数组⼤⼩为5只能放ABCDE,放不下’\0’了。如果⼤⼩为6,会⾃动在后⾯补’\0’
B选项与A⼀样,放不下’\0’
C选项,楼主要知道,字符串读⼊进来是要存起来的,⽽s只是个指针,存不下这么多字符。必须是char s[6];scanf("%s",s);puts(s);
D选项是正确的,"ABCDE"作为静态常量存储于程序段,地址赋给s,可以正常输出。
8.以下不正确的赋值或赋初值的⽅式是( )。
A.char str[]=“string”;
B.char str[7]={‘s’, ‘t’, ‘r’, ‘i’, ‘n’, ‘g’};
C.char str[10];str=“string”;
D.char str[7]={‘s’, ‘t’, ‘r’, ‘i’, ‘n’, ‘g’, ’\0’};
解析:char str1[10]="string"; 这样初始化是可以的
char str1[10]; str1="string"; 指针str1是不能存放字符串的,只能具体赋值如:str1[0]=‘s’;
9.以下定义语句中不正确的是( D )。
A.double x[5]={2.0, 4.0, 6.0, 8.0, 10.0};
B.char c2[]={’\x10’, ‘\xa’, ‘\x8’};
C.char c1[]={‘1’, ‘2’, ‘3’, ‘4’, ‘5’};
D.int y[5]={0,1,3,5,7,9};
解析:很明显是D,D中定义了⼀个只有5个元素的整形数组,却给它赋了6个值,明显的错误。
10.假设scanf语句执⾏时输⼊ABCDE<;回车>,能使puts(s)语句正确输出ABCDE字符串的程序段是( D )。
A.char s[5]={“ABCDE”}; puts(s);
B.char s[5]={‘A’, ‘B’, ‘C’, ‘D’, ‘E’}; puts(s);
C.char *s; scanf("%s", s); puts(s);
D.char *s; s=“ABCDE”; puts(s);
解析:要正常输出ABCDE必须在字符串的末尾有’\0’作为结束,这样输出函数才知道什么时候终⽌。
A选项中字符串数组⼤⼩为5只能放ABCDE,放不下’\0’了。如果⼤⼩为6,会⾃动在后⾯补’\0’
B选项与A⼀样,放不下’\0’
C选项,楼主要知道,字符串读⼊进来是要存起来的,⽽s只是个指针,存不下这么多字符。必须是char s[6];scanf("%s",s);puts(s);
D选项是正确的,"ABCDE"作为静态常量存储于程序段,地址赋给s,可以正常输出。
11.有说明语句int a[4][5];,则a[2]+3表⽰( A )。
A.a数组⾏下标为2、列下标为3的元素的地址
B.a数组⾏下标为2、列下标为3的元素的值
C.a数组第2⾏的⾸地址
D.a数组第3⾏的⾸地址数组全部赋值为1
解析:a[2]就是这个⼆维数组的第三⾏的数组名,也是这⼀⾏⾸元素的地址,所以,+3就表⽰是该⾏第4个元素的地址。
12.在int a[ ][3] = { {1,4}, {3,2}, {4,5,6}, {0} };中,a[2][1]的值是
( A )。
A.5
B.0
C.6
D.2
解析:a[2][1]=5
13.对于定义 char str[] = “abc\000def\n”(注:其中0为数字零),求字符串str的长度len和数组str的⼤⼩size,len和size分别是:( C )
A.12 ,13
B.3 ,11
C.3 ,9
D.3 ,4
解析:str是⼀个字符串数组
sizeof返回的是对象占⽤内存的字节数
14.以下哪个定义中的p不是指针,请选择恰当的选项: ( C )
A.char **p;
B.char (*p)[10];
C.char *p[6];
D.给出的三项中,p都是指针
解析:C为定义⼀个指针数组,也就是数组⾥的元数为指针
15.有两个字符数组a,b,则以下正确的输⼊语句是( B )
B.scanf("%s%s",a,b);
C.scanf("%s%s",&a,&b);
解析:对于字符串数组或字符串指针变量,由于数组名可以转换为数组和指针变量名本⾝就是地址,因此使⽤scanf()函数时,不需要在它们前⾯加上"&“操作符。
所以“A.scanf(”%s%s",&a,&b)”中,变量a、b多携带了“&”操作符,是错误的。⽽对于gets()函数的使⽤,其中参数为字符串变量(字符串数组名或字符串指针),所以“B.gets(a); gets(b);”是正确的⽤法。
16.若⽤数组名作为函数调⽤的实参,则传递给形参的是 (A)
A.数组的⾸地址
B.数组第⼀个元素的值
C.数组中全部元素的值
D.数组元素的个数
解析:A. 数组的⾸地址
17.下⾯的程序段将输出( D ) 。
double a[4][5];
printf("%d\n", sizeof(a));
A.12
B.20
C.96
D.160
解析:a在形参中只是⼀个指针变量,占的内存⼤⼩为4字节
18.下⾯的程序段将输出( D) 。
double a[][5] = {{1, 2, 3}, {4, 5}, {6}};
printf("%d\n", sizeof(a));
A.48
B.72
C.88
D.120
解析:double (*p)[5]; 声明 p 是1个 指针,可以指向有5个成员的 double 型数组。
double (*p)[5] = d; 初始化,指向 数组 d 的⾸地址。
19.在以下描述中,( A,B)是正确的。
A.int a[5] = {1, 2, 3, 4, 5};
定义了数组a,并对数组元素赋初值。此时,a[0]为1,a[1]为2,a[2]为3,a[3]为4,a[4]为5。
B.static int b[10];
定义了静态数组b,且10个数组元素的初值都为0。
C.int fib[45] = {1, 1};
定义了数组fib,并对数组 fib 的前2个元素赋初值,其余元素的值都为0。
D.static int week[7] = {1, 2, 3};
定义了静态数组week,并对数组 week 的前3个元素week[0]~week[2]赋初值,week[3]~week[6]值都是不确定的。
解析:week[3]~week[6]值都是0
20.在以下描述中,( A,B,C,D)是正确的。
A.int a[3][3] = {1};
定义了数组a,并对数组a赋初值。此时,a[0][0]的值为1,⽽其余元素的值都是不确定的。B.static int b[4][3] = {{ }, { }, { },{9}};
定义了静态数组b,并对数组赋初值。此时,b[3][0]的值为9,⽽其余元素的值都为0。
C.int a[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
和int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
等价。
D.static int b[4][3] = {{1, 2, 3}, { }, {4, 5}};
和static int b[4][3] = {1, 2, 3, 0, 0, 0, 4, 5};
等价。
E.int a[3][3] = {{},{4},{}};
定义了数组a,并对数组a赋初值。此时,a[1][1]的值为4,⽽其余元素的值都是不确定的
解析:E项中其余元素为0
21.定义了数组a,并对数组a赋初值。此时,a[1][1]的值为4,⽽其余元素的值都是不确定的。选项( A,B,C,D)与以下字符数组定义等价。
A.static char s[6] = {‘H’, ‘a’, ‘p’, ‘p’, ‘y’, ‘\0’};
B.static char s[6] = {‘H’, ‘a’, ‘p’, ‘p’, ‘y’};
C.static char s[6] =“Happy”;
D.static char s[6] ={“Happy”};
E.static char s[6] = {‘H’, ‘a’, ‘p’, ‘p’, ‘y’, 0};
解析:E项中有6个元素
22.
#include<stdio.h>
#include<string.h>
int main()
{
char s[80];
static int count[10];
int i;
scanf("%s", s);
for(i=0;i<
;i++)
if(s[i]>=‘0’&&s[i]<=‘9’)
;
for(i=0;i<10;i++) printf("%d",count[i]);
return 0;
}
(1)strlen(s) (2)count[s[i]-‘0’]++
23.填空
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论