错题

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行的首地址

解析: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 )

A.gets(a,b);
B.scanf("%s%s",a,b);
C.scanf("%s%s",&a,&b);
D.gets(“a”),gets(“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个元素

#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.填空在这里插入图片描述
在这里插入图片描述
24.填空在这里插入图片描述
25.填空在这里插入图片描述
26.填空在这里插入图片描述

  • 14
    点赞
  • 94
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值