NewCode01

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.

有一个有序表为{1,3,9,12,32,41,45,62,75,77,82,95,100},当折半查找值为82的结点时,____次比较后查找成功。

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.数组指针和指针数组有什么区别 ?

数组指针只是一个指针变量,指向一个一维数组,它占有内存中一个指针的存储空间,指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值