1-1
如果strcmp(s1,s2)返回的结果为0,表示字符串s1和s2不相同。
语法/原型:
int strcmp(const char* stri1,const char* str2);
参数 str1 和 str2 是参与比较的两个字符串。
strcmp() 会根据 ASCII 编码依次比较 str1 和 str2 的每一个字符,直到出现不同的字符,或者到达字符串末尾(遇见\0)。
返回值:
- 如果返回值 < 0,则表示 str1 小于 str2。
- 如果返回值 > 0,则表示 str2 小于 str1。
- 如果返回值 = 0,则表示 str1 等于 str2。
T
F
1-2
c语言的数组下标从0开始。
(1分)
T
F
1-3
数组初始化时,初始值个数小于数组元素的个数,C语言自动将剩余的元素初始化为初始化列表中的最后一个初始值。
字符数组 \0
整型数组 0
(1分)
T
F
1-4
数组定义后,数组名表示该数组所分配连续内存空间中第一个单元的地址,即首地址,是一个常量,不能被修改。
(1分)
T
F
1-5
== can be used to compare two strings.
(1分)
T
F
1-6
指向数组元素的指针只可指向数组的首元素。
(1分)
T
F
1-7
数组定义后,数组名表示该数组所分配连续内存空间中第一个单元的地址,即首地址。
(1分)
T
F
1-8
二维数组的元素在内存中按行/列方式存放,即先存放第0行的元素,再存放第1行的元素……其中每一行的元素再按照列的顺序存放。
(1分)
T
F
1-9
若有定义int a[]={2,4,6,8,10},a[1]和a++表示的含义相同。
a[1] == *(a+1)
a++不允许!a是常量!
T
F
(0 分)
1-10
数组的长度可以是变量。
(1分)
T
F
1-11
执行语句int *p = 1000;后,指针变量p指向地址为1000的变量。
(1分) p是指针, p=1000 是把p指向了地址为1000的值(没实际意义
T
F
1-12
不同类型的指针变量是可以直接相互赋值的。
(1分)
T
F
1-13
要通过函数调用来改变主调函数中某个变量的值,可以把指针作为函数的参数。
(1分)
T
F
1-14
对于定义int a[10],*p=a; 语句p=a+1;和a=a+1;都是合法的。
a是常量!
T
F
1-15
在C语言中,数组名是不可改变的,不能对它进行赋值运算。
(1分)
T
F
2-1
为了判断两个字符串s1和s2是否相等,应当使用下列哪个语句( )。
(2分)
A.
if(s1==s2);
B.
if(strcmp(s1,s2)==0);
C.
if(s1=s2);
D.
if(strcpy(s1,s2));
2-2
设有二维数组定义及初始化 int a[][3] = {{1,4}, {3,2}, {4,5,6}, {0}}; 则元素 a[2][1] 的值是______。
(2分)
A.
2
B.
5
C.
6
D.
4
2-3
一维数组初始化 以下关于数组定义时进行初始化的描述中,( )选项是错误的。
(2分)
A.
int d[5]; 数组d中的值是无法预知。
B.
int d[5]={0}; 数组d中的值全为0;
C.
int d[5]={1}; 数组d中的值全为1;
D.
int d[5]={1}; 数组d中的值第1个为1,其余均为0;√
2-4
若想将一个字符数组a的内容存入另一个字符数组b中,下列正确的是( ).
(2分)
A.
strcpy(a,b);
B.
trcat(b,a);
C.
b=a;
D.
strcpy(b,a);
2-5
下述对C语言字符数组的描述错误的是( )
(2分)
A.
字符数组可以存放字符串
B.
字符数组中的字符串可以整体输入、输出
C.
可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值
D.
不可以用关系运算符对字符数组中的字符串进行比较
2-6
在C/C++语言中引用数组元素时,数组下标的要求,下列选项中最合适的是( ) 。
(2分)
A.
整型常量
B.
整型变量
C.
整型表达式
D.
任何类型的表达式
2-7
有数组初始化语句“int a[] ={1,2,3,4,5,6,7,8,9,10};”,则数值最小和最大的元素下标分别是( )。
(2分)
A.
1,10
B.
0,9
C.
1,9
D.
0,10
2-8
有数组定义语句“int i=3,a[20];”,则元素引用错误的是( ) 。
(2分)
A.
a[7*i-1]
B.
a[2*i*i+1]
C.
a[3*i+1]
D.
a[0]
2-9
有初始化语句“int a[3][4]={1,3,5,7,9};”,则a[1][2]的值为( )。
(2分)
A.
0
B.
3
C.
5
D.
9
2-10
根据声明int a[10], *p=a; ,下列表达式错误的是( )。
(2分)
A.
a[9]
B.
p[5]
C.
a++
D.
*p++
2-11
下面程序的输出结果是( )。
# include <stdio.h>
void fun (int *x, int *y)
{
printf("%d%d", *x, *y);
*x = 3;
*y = 4;
}
int main(void)
{
int x=1, y=2;
fun(&x, &y);
printf("%d%d", x, y);
return 0;
}
(2分)
A.
2134
B.
1212
C.
1234
D.
2112
2-12
已有定义int k=2; int *ptr1, *ptr2; 且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是( )。
(2分)
A.
k = *ptr1 + *ptr2;
B.
ptr2 = k;
C.
ptr1 = ptr2;
D.
k = *ptr1 *(*ptr2);
2-13
执行以下程序后,y的值是:
int main ( )
{
int a[]={2,4,6,8,10};
int y=1,x,*p;
p=&a[1];
for(x=0;x<3;x++)
y + = * (p + x);
printf("%d\n",y);
return 0;
}
(2分)
A.
17
B.
18
C.
19
D.
20
2-14
下列程序的执行结果是( )。
void fun ( int *p )
{ (*p)++;
}
main( )
{ int a=5;
fun(&a);
printf("%d",a);
}
(2分)
A.
5
B.
a
C.
6
D.
程序有误
2-15
变量的指针是指变量的( )。
(2分)
A.
值
B.
地址
C.
名
D.
内存单元
2-16
执行语句char a[10]={"abcd"}; *p=a;后,*(p+4)的值是( )。
(2分)
A.
"abcd"
B.
'd'
C.
'\0'
D.
不能确定
2-17
若有定义int(*p)();标识符p可以( )。
一个指向函数值为整数的函数指针
函数指针
定义
函数指针,其本质是一个指针变量,该指针指向这个函数。总结来说,函数指针就是指向函数的指针。
声明格式:类型说明符 (*函数名) (参数)
如下:
int (*fun)(int x,int y);
1
函数指针是需要把一个函数的地址赋值给它:
fun = &Function;
fun = Function;
调用函数指针的方式:
x = (*fun)();
x = fun();
指针函数
定义
指针函数,是一个返回指针的函数,其本质是一个函数,而该函数的返回值是一个指针。
声明格式为:*类型标识符 函数名(参数表)
int *fun(int x,int y);
这个函数就是一个指针函数。其返回值是一个 int 类型的指针,是一个地址。
A.
表示函数的返回值
B.
指向函数的入口地址
C.
表示函数的返回类型
D.
表示函数名
2-18
若有函数max(a,b),并且已使函数指针变量p指向函数max,当调用该函数时,正确的调用方法是( )。
(2分)
A.
(*p)max(a,b)
B.
*pmax(a,b);
C.
(*p)(a,b);
D.
*p(a,b);
2-19
请问下列程序的执行结果是( )
void fun(int *p,int n)
{
int i;
for(i=0;i<n;i++)
(*p)++;
}
int main()
{
int a[5]={1,2,3,4,5},i;
fun(a,5);
for(i=0;i<5;i++)
printf("%d ",a[i]);
return 0;
}
(2分)
A.
1 2 3 4 5
B.
2 3 4 5 6
C.
6 2 3 4 5
D.
2 2 4 4 6
2-20
若变量已正确定义并且指针p已经指向某个变量x,则(*p)++相当于____。
(2分)
A.
p++
B.
x++
C.
*(p++)
D.
&x++