千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > 物联网笔试题:C语言笔试题(一)

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

来源:千锋教育
发布人:wjy
时间: 2022-06-07 14:32:00 1654583520

  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实际打印的是压栈的参数,是值拷贝的栈变量)

tags:
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT