全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

物联网笔试题:C语言笔试题(一)

发布时间:2022-06-07 14:32:00
发布人:wjy

  1、下面的程序可以从0....n-1中随机等概率的输出m个不重复的的数。这里我们假设n远大于m。

ningth(int n,int m){

 srand((unsigned int)time(0));

 for(int i=;i<n;i++){

  if(?){

   count<<i<<endl;

   (?);

  }

 }}

  A.rand()%(n-i)<=m;m--;

  B.rand()%(n-i)<m;m--;< p="">

  C.rand()%(n-i)>=m;m++;

  D.rand()%(n-i)>m;m++;

 

  2、有以下程序

#include <stdio.h>mian(){

 int a[]={2,4,6,8},*p=a,i;

 for(i=0;i<4;i++)

 a[i]=*p++;

 printf("%d\n",a[2]);}

  程序的输出结果是()

  A.2  

  B.8  

  C.4  

  D.6

 

  3、【多选题】关于浅复制和深复制的说法,下列说法正确的是()

  A.浅层复制:只复制指向对象的指针,而不复制引用对象本身

  B.深层复制:复制引用对象本身

  C.如果是浅复制,修改一个对象可能会影响另外一个对象

  D.如果是深拷贝,修改一个对象不会影响到另外一个对象

 

  4、以下代码最后一次打印结果是()

void fun(int iinputnum){

 static int icount=1;

 icount=icount+iinputnum;

 printf("\n icount=%d"icount+iinputnum);}for(i=1;i<3;i++)

 fun(i);

  A.icount=3

  B.icount=6

  C.icount=4

  D.icount=20

 

  5、下列程序执行后的输出结果是()

void main()

{

 char x=0xFFFF;

 printf("%d\n",x--);

}

  A.-32767

  B.FFFE

  C.-1

  D.-32768

 

  6、C++中构造函数和析构函数可以抛出异常吗?

  A.都不行

  B.都可以

  C.只有构造函数可以

  D.只有析构函数可以

 

  7、【多选题】两个线程并发执行以下代码,假设a是全局变量,那么以下输出()哪个是可能的

int a=1;

void foo(){

 ++a;

 printf("%d",a);

}

  A.3 2

  B.2 3

  C.3 3

  D.2 2

 

  答案区:

  1、答案:B

  2、答案:D

  解析:*p++ 先取指针p指向的值(数组第一个元素2),再将指针p自增1 (*p)++ 先去指针p指向的值(数组第一个元素2),再将该值自增1(数组第一个元素变为3) *++p 先将指针p自增1(此时指向数组第二个元素), 操作再取出该值 ++*p 先取指针p指向的值(数组第一个元素2),再将该值自增1(数组第一个元素变为3)

  3、答案:ABCD

  4、答案:B

  这是考察static静态局部变量的用法。 静态局部变量的特点: 1.该变量在全局数据区分配内存; 2.静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用 不再进行初始化; 3.静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0。fun(1)时 icount初始化为1,之后不再初始化,执行第一条语句 icount=2; 打印出来是3; fun(2)时 icount=2+2=4,打印的结果是4+2=6.

  5、答案:C

  6、答案:C

  析构函数不能抛出异常,处理析构函数异常的正确方式是将异常封装在析构函数内部,而不是抛出异常,如下代码所示。 ~ClassName(){ try{ do_something(); } catch{ //... } } 原因如下:C++异常处理模型有责任处理那些因为出现异常而失效的对象,处理方式是调用这些失效对象的析构函数,释放掉它们占用的资源。如果析构函数再抛出异常,则会陷入无尽递归嵌套之中,因此这是不被允许的。

  7、答案:ABCD

  假设线程x和y同时执行,x和y可随时被抢占,a的初始值为1 A:3, 2 y先执行++a,a为2; y再执行printf,a入栈,在打印到终端之前切换到x x执行++a,a为3; x执行printf,输出3;再切换到y y执行打印,输出2 B:2 3 x先执行++a,a为2; x再执行printf,输出2;切换到y y执行++a,a为3; y执行printf,输出3; C:3 3 x先执行++a,a为2;切换到y y执行++a,a为3; y执行printf,输出3;切换到x x执行printf,输出3 D:2 2 类似C, 执行++a操作但没有写回到内存 这里关键有两点: (1)两个线程可随时被抢占 (2)++a和printf不是原子指令,可随时被打断;特别注意函数printf,a作为参数压栈后,a再变化则不会影响输出(printf实际打印的是压栈的参数,是值拷贝的栈变量)

相关文章

个体户营业执照可以申请抖音小店吗

个体户营业执照可以申请抖音小店吗

2023-10-08
抖音小店怎么关联快递公司

抖音小店怎么关联快递公司

2023-10-08
抖音小店在哪里改地址

抖音小店在哪里改地址

2023-10-08
开通抖音小店的流程图片

开通抖音小店的流程图片

2023-10-08

最新文章

上海物联网培训一般费用多少

上海物联网培训一般费用多少

2023-09-12
北京物联网培训费用大概多少

北京物联网培训费用大概多少

2023-09-12
北京物联网培训需要费用高不高

北京物联网培训需要费用高不高

2023-09-12
上海效果好的物联网培训费用高吗

上海效果好的物联网培训费用高吗

2023-09-12
在线咨询 免费试学 教程领取