选择(1)
1.设 int x[]={1,2,3,4,5,6},*p=x; 则值为 3 的表达式是
*p=x这里指针p指向数组的首元素地址,p+=2则指针指向第三个元素,而*++p是前置加加,p先自增,再解引用,就指向第四个元素了 b中为后置加加,是先解引用再加所以不影响,正确, c中p+=3就错了,因为指向第四个元素了 d中++*p,因为*p为3,所以就是++3了,结果为4
2.如有定义:char str[20];,能将从键盘输入的字符串“How are you”保存到 str 数组的语句是( )
gets(字符数组名或指针)
gets能够接受空格、制表符Tab和回车等。
gets和sacnf函数,在字符串接受结束后自动加'\0'
3.关于类的叙述正确的是()。
解析:
A在类中定义的变量称为类的成员变量,在别的类中不可以直接使用局部变量的
C使用别的类的方法需要通过该类的对象引用方法的名字
D只要没有定义任何构造函数,JVM都会为类生成一个默认构造函数
4.下面哪个标识符是合法的?
解析: java的变量名有三种元素构成:数字+字符+$+下划线 不能有空格
5.设C语言中,一个int型数据在内存中占2个字节,则unsigned int型数据的取值范围为
int、unsigned int 所占字节数相同,所以unsigned int 也占2个字节。
int 最高位为符号位,只能表示-32768~32767, unsigned int 无符号位,可以表示0~65535
5.已知函数的原型是:int fun(char b[10], int &a);变量c,d的定义是:char c[10];int d;,正确的调用语句是()
函数的原型是:int fun(char b[10], int &a);
变量c,d的定义是:char c[10];int d;
①函数第一个形参 char b[10] ,需要传入的是数组的首地址。数组char c[10] 的数组名 c 是数组的首元素地址,可以传入 c。
②函数第二个形参int &a为引用类型作为形参,d 是 整型变量,可以直接传入,因此传给 fun 函数的实参是 d。最终,fun 函数调用的形式是 f(c,d)。因此选A。
补充:如果函数原型为int fun(char b[10], int *a);
即此时第二个形参为指针类型,则需传入变量d的地址,此处就应该选B。
6.DOS 系统中打印机设备名是( )
7.
|
4次,分别和45、77、95、82进行比较
首先和中间值45比较,82比45***择右边,右边六个数和中间值77比较,82比77***择右边,右边3个数选择中间值95进行比较,82比95小选择左边,左边1个数和82比较相等
8.定义语句"double * array [8]"的含义正确的是()。
指针数组( * stings[] ):可以说成是”指针的数组”,首先这个变量是一个数组,其次,”指针”修饰这个数组,意思是说这个数组的所有元素都是指针类型,在32位系统中,指针占四个字节。
数组指针( (*strings)[] ):可以说成是”数组的指针”,首先这个变量是一个指针,其次,”数组”修饰这个指针,意思是说这个指针存放着一个数组的首地址,或者说这个指针指向一个数组的首地址。
9.以下正确定义一维数组的选项是( )
当申明类型为char而传入一个数值时,会默认那个数值为某char类型的ASCII编码。例如char a=48;打印出来a=‘0’.
10.已知int a[3][4];则下列能表示a[1][2]元素值的是
在数组中,数组名是第一个数组的地址.
注意这里a不是第一个元素的地址,而是第一个维数组的地址,a[0][0]才是表示的一维数组第一个元素的地址.
地址 + 1表示向下移一层.
11.下面是折半查找的实现,data是按升序排列的数据,x是查找下标,y是查找的上标,
v是查找的数值,返回v在data的索引,若没找到返回-1。代码不正确是____。
上下标没有写清楚,题目所指的应该是[x,y),这样5应该是m-1
而在下标为[x,y]的情况下,1,4,5都是有问题的。。。。正确版本应该是这样吧
while(x<=y) {
m = x + (y-x)/2; //2
if(data[m] == v) return m; //3
else if(data[m] > v) y = m-1; //4
else x = m+1; //5
}
补充:这里下标是个坑,记住上限有没有包含就可以对付1,4,5处的问题(熟记理解两个版本的代码区别),然后是2,写成x+(y-x)/2是防止xy都很大的情况下x+y越界。这样的话应对二分查找应该够了
12.若有说明语句“int a[10],*p=a;”,对数组元素的正确引用是
是对数组中元素的引用 a为数组名 也代表数组首元素的地址值 *p=a则p也指向数组a的第一个元素地址,则*(p+2)指向数组a中第三个元素
13.
以下代码执行后,array的结果是?
var array=[-1,1,3,4,6,10];
array.sort((a,b)=>Math.abs(a-3)-Math.abs(b-3));
sort() 方法用于对数组的元素进行排序,参数决定排序的顺序。
- 原数组var array=[-1,1,3,4,6,10];
- 参数(a,b)=>Math.abs(a-3)-Math.abs(b-3):即数值减3的绝对值[4,2,0,1,3,7]作为参数决定排序。
- 根据绝对值减3大小排列[0,1,2,3,4,7],对应的原数组排序后为[3,4,1,6,-1,10]
14.一个5*4的矩阵,有多少个长方形?(正方形也算是长方形)
可以这样理解:五行四列的表格有6*5条边,从六条边选两条(横向),从四条边中选两条(纵向),就可以确定一个矩形。C(6,2)*C(5,2)=15*10=150
15.递归公式
的时间复杂度为( )。
【master公式的使用】
T(N) = a*T(N/b) + O(N^d)
T(N)是样本量为N的情况下的时间复杂度,a是子过程的部分,N/b是子过程的运行次数,N^d剩余其他的过程。
1) log(b,a) > d -> 复杂度为O(N^log(b,a))
2) log(b,a) = d -> 复杂度为O(N^d * logN)
3) log(b,a) < d -> 复杂度为O(N^d)
本题 a=4, b=2, d=1, case 1) O(n^2)
16.若二维数组 a 有 m 列,则在数组元素 a[i][j] 前的元素个数为( )
一般来说,都是默认数组下标是从0开始,矩阵是从1开始
17.在C语言中,若有定义:int a[4][10](其中0<=i<4,0<=j<10);则下列选项中对数组元素a[i][j]引用错误的是()
A是a[i][j]的地址
D是A再取*则是a[i][j]的值
C正确,a[i]为第i行第0个元素的值,加j后为a[i][j]地址,再取*就是a[i][j]
B正确,a[0][0]取地址是数组第一个元素的地址,加上10*i为第i行第0个元素的地址,在加j是a[i][j]地址,再取*是a[i][j]的值
18.int
a[
10
]={
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
},*p=a;
不能表示a数组元素的表达式是
解析:
A:相当于a[0]
B:以为数组的下标从0开始,所以10越界。
C:相当于a[0]
D:p和a指向同一个数组,可以做加减法(如果p和a不是指向同一数组则会出错),得到的值为整数。此题为0。所以D也相当于a[0]。
19.以下不属于字符串的方法的是?()
split() 方法用于把一个字符串分割成字符串数组。 slice() 方法可从已有的数组中返回选定的元素。 reverse() 方法用于颠倒数组中元素的顺序。 concat() 方法用于连接两个或多个数组。
20.数组指针和指针数组有什么区别 ?
数组指针只是一个指针变量,指向一个一维数组,它占有内存中一个指针的存储空间,指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。