1. 不能把字符串:Hello!赋给数组 b 的语句是( )。
A)char b[10]={'H','e','l','l','o','!'};
B)char b[10];b="Hello!";
C)char b[10];strcpy(b,"Hello!");
D)char b[10]="Hello!";
答案:B;只能在定义的时候使用=来初始化, 不能单独赋值
2. 下面程序运行的结果是( )。
main()
{
char ch[7]={“65ab21”}; int i,s=0;
for(i=0;ch[i]>='0' && ch[i]<='9';i+=2)
s=10*s+ch[i]-'0';
printf("%d\n",s);
}
(A) 2ba56 (B) 6521 (C) 6 (D) 62
答案:C
3. 若有以下说明:
int a[12]={1,2,3,4,5,6,7,8,9,10,11,12};
char c='a',d,g;
则数值为 4 的表达式是()。
(A)a[g-c] (B)a[4] (C)a['d'-'c'] (D)a['d'-c]
答案:D
4. 下列描述中不正确的是( )。
(A) 字符型数组中可以存放字符串
(B) 可以对字符型数组进行整体输入、输出
(C) 可以对整型数组进行整体输入、输出
(D) 不能在赋值语句中通过赋值运算符"="对字符型数组进行整体赋值
答案:C;C语言规定只能逐个引用数组元素而不合下次引用整个数组。字符数组的输入、输出可以将整个字符串一次输入或输出。所以,选项C的说法是不正确的。
5. 有以下程序
main()
{
char p[]={'a', 'b', 'c'}, q[]="abc";
printf("%d %d\n", sizeof(p),sizeof(q));
};
程序运行后的输出结果是( )。
(A)4 4 (B)3 3 (C)3 4 (D)4 3
答案:C;sizeof()是统计字节长度包含\0、0;而strlen()统计长度不包含\0、0
6.下列程序执行后的输出结果是 ( )。
main()
{
char arr[2][4];
strcpy(arr,"you");
strcpy(arr[1],"me");
arr[0][3]='&';
printf("%s \n",arr);
}
(A)you&me (B) you (C) me (D) err
答案:A
7. 当执行下面的程序时,如果输入 ABC,则输出结果是( )。
#include "stdio.h"
#include "string.h"
main()
{
char ss[10]="1,2,3,4,5";
gets(ss);
strcat(ss, "6789");
printf("%s\n",ss);
}
(A) ABC6789 (B) ABC67 (C) 12345ABC6 (D) ABC456789
虽然你定义的SS数组有字符串,但是gets函数输入的ABC将原来的字符串覆盖了所以新的数组为SS[10]="ABC",接下来的stract是字符串连接函数即将字符串"6789"连接到ABC后面.所以输出的结果是ABC6789.
8.若有定义:int aa[8];,则以下表达式中不能代表数组元素 aa[1]的地址的是( )。
(A) &aa[0]+1 (B) &aa[1] (C) &aa[0]++ (D) aa+1
数组的地址和数组中的第一个元素的地址相同。数组中第一个元素地址的表示方法为&aa[0],与其等价的有 &aa[0]++,所以选项C不正确的;选项A为数组的第 1个元素的地址下移一位即是第二个元素aa[1]的地址;B也为数组的第二个元素的地址,选项D中aa表示数组的地址,加1表示数组首地址后移一位,即代表数组元素中的第二个元素aa[1]的地址。所以,4个选项中C为所选。
9. 有以下程序
#include "stdio.h"
#include
main()
{
char a[]={'a','b','c','d','e','f','g','h','\0'};
int i,j;
i=sizeof(a);
j=strlen(a);
printf("%d,%d\n",i,j);
}
程序运行后的输出结果是( )。
(A) 9,9 (B) 8,9 (C) 1,8 (D) 9,8
sizeof( )函数返回字符串所占字节数,strlen函数返回字符串的长度,其中'\0'是一个转义字符, 称为空值,它占用存储空间,但不计入串的长度。
10.有以下程序
main()
{
char a[7]="a0\0a0\0";
int i,j;
i=sizeof(a);
j=strlen(a);
printf("%d %d\n",i,j);
}
程序运行后的输出结果是( )。
(A)2 2 (B)7 6 (C)7 2 (D)6 2
字符数组的元素数量在定义时已经确定,与其存储的内容无关,本题中语句char a[7]定义了由7个字符元素组成的字符数组,其sizeof(a)=7。字符数组常常存储字符串,但其存储的字符串长度与数组长度没有直接关联。C语言规定,字符串从首字符开始,以第一个值为ASCII码0的字符结尾,其中的非0字符数量就是字符串的长度。在本题中,a[0]='a',a[1]='0',a[2]=0,从首字符位置a[0]到第一个ASCII值为0的字符a[2],其中共有2个非0字符,因此strlen(a)=2。
11.以下叙述中错误的是( )。
(A)对于 double 类型数组,不可以直接用数组名对数组进行整体输入或输出
(B)数组名代表的是数组所占存储区的首地址,其值不可改变
(C)当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信 息
(D)可以通过赋初值的方式确定数组元素的个数
[解析] 数组下标从0开始,当数组元素的下标超出了定义的范围时,系统不会出“下标越界”的信息,运行会出错,因此在编程时务必检查下标是否越界。
12. 以下叙述中正确的是( )。
#include
main()
{
char p[]={'a', 'b', 'c'}, q[10]={'a', 'b', 'c'};
printf("%d %d\n", strlen(p), strlen(q));
}
(A)在给 p 和 q 数组置初值时,系统会自动添加字符串结束符,故输出的长度都为 3
(B)由于 p 数组中没有字符串结束符,长度不能确定;但 q 数组中字符串长度为 3
(C)由于 q 数组中没有字符串结束符,长度不能确定;但 p 数组中字符串长度为 3
(D)由于 p 和 q 数组中都没有字符串结束符,故长度都不能确定
strlen 是计算以“\0”结束的字符串的长度的函数,函数的值为字符串中实际长度,不包括“\0”。 题中“q[10]={'a','b','c'}”虽然给出了数组大小,即数组实际分配的存储空间,但此字符串只占用前 3 个存 储单元,其余存储单元系统自动加上“\0”,故数组 q 的长度为 3;由于 p 数组中没有字符串结束符,故字 符串的长度不能确定
13. 以下能正确定义字符串的语句是( )。
(A)char str[]={′064′};
(B)char str="kx43";
(C)char str=";
(D)char str[]="\0";
char 声明字符变量 字符变量的规格:占用一个字节的内存空间(字符串根据它的长度来确定它在内存中占用的字节数,只有空字符串为1个字节。),一般以字符型或者整型数据处理。所以char str = "kx43"只能把字符 'k'
14.以下数组定义中错误的是( )。
(A)int x[][3]={0};
(B)int x[2][3]={{l,2},{3,4},{5,6}};
(C)int x[][3]={{l,2,3},{4,5,6}};
(D)int x[2][3]={l,2,3,4,5,6};
[解析] 选项B)中行数定义为2,但实际需要存放3行元素,所以错误。
15.若要求从键盘读入含有空格字符的字符串,应使用函数( )。
(A)getc() (B)gets() (C)getchar() (D)scanf()
[解析] scanf()语句用“空格”区别不同的字符串;getc()与getchar()语句不能用于字符串的读入。
16. 输出结果是:
main()
{
int a[3][3]={{1,2,9},{3,4,8},{5,6,7}},i,s=0;
for(i=0;i<3;i++)
s+=a[i][i]+a[i][3-i-1];
printf("%d\n",s);
}
17. 输出结果是
#include
main()
{
char ch[]="abc",x[3][4];
int i;
for(i=0;i<3;i++)
strcpy(x[i],ch);
for(i=0;i<3;i++)
printf("%s",&x[i][i]);
printf("\n");
}
%s遇到0 \0就停止输出