ahua(大华面试题原题+详解)

嵌入式软件工程师笔试题(含答案).txt26选择自信,就是选择豁达坦然,就是选择在名利面前岿然不动,就是选择在势力面前昂首挺胸,撑开自信的帆破流向前,展示搏击的风采。

选择题

1:设float a=2, b=4, c=3;,以下C语言表达式与代数式 (a+b)+c计算结果不一致的是
A.(a+b)*c/2
B.(1/2)*(a+b)*c
C.(a+b)*c*1/2
D.c/2*(a+b)

正确答案B
解释(1/2)值为0,正确写法(1/2.0)

2:为了向二进制文件尾部增加数据,打开文件的方式应采用
A.″ab″
B.″rb+C.″wb″
D.″wb+

r:打开一个bai文本文件只读
w:打开一个du文本文件只写
a:对一个文本文件zhi添加
rb:打开一个二进制文dao件只读
wb:打开一个二进制文件只写
ab:对一个二进制文件添加
r+:打开一个文本文件读/写
w+:生成一个文本文件读/写
a+:打开一个文本文件读/写
rb+:打开二进制文件读/写
wb+:生成二进制文件读/写
ab+:打开二进制文件读/写
如果用写方式打开一个文件,则原先该文件的任何内容会被抹掉,并开始一个新文件。如果不存在那个名字的文件,就生成一个文件。如果你想往文件的尾部再加写一个内容,就必须使用模式“a”。如果文件不存在,就返回出错信息。在打开 一个文件准备进行读操作是,该文件必须存在。如果文件不存在,返回一个出错信息。最后,打开一个读/写操作的文件,如果文件存在它不会被抹掉;如果文件不存在就生成一个文件。

3:下述程序执行后的输出结果是
#include
main()
{
int x='f';
printf("%c\n",'a'+(x-'a'+1));
}
A.g
B.h
C.i
D.j

记住几个关键的点 0 = 0x31 A = 0x41 a = 0x61
a 61
b 2
c 3
d 4
e 5
f 6
可否 ‘a’+(x-‘a’+1)) ‘a’ - ‘a’ x = 0x66 +1
A = g

4:C语言中,下列运算符优先级最高的是
A.B.C.>>
D.= =

优先级连接

5:数组定义为“ int a [ 4 ] ; ”,表达式 ( ) 是错误的。
A.*a
B.a [ 0 ]
C.a
D.a++

D

6:执行语句“ k=7>>1; ”后,变量 k 的当前值是
A.15
B.31
C.3
D.1

C

7:定义函数时,缺省函数的类型声明,则函数类型取缺省类型
A.void
B.char
C.float
D.int

答案D:
解释:

#include "stdio.h" 

typedef (* p_F)(void *,void *);

sum(int a ,int b)
{
	return a+b;
}
int main()
{
	printf("%d",sum(1,2));
}

其中sum 确认缺了一个参数 这边默认是int类型

而 typedef (* p_F)(void *,void *); 定义了一个函数指针 但是类型也是没写,默认是int 型。

8:若main()函数带参数,参数个数最多是
A.0
B.1
C.2
D.3

答案C
int main(int argc,char* argv[])
也可以写成int main(int argc,char** argv)

9:若有宏定义:#define MOD(x,y) x%y
则执行以下语句后的输出结果是
int a=13,b=94printf(″%d\n″,MOD(b,a+4))A.5
B.7
C.9
D.11

要点:建议使用带参宏定义 后面的条件+()

假如不带 int a=13,b=94; MOD(b,a+4)
展开 94%13 + 4 相对于 94 - 13*7+4 = 7
选B

10:下列各个错误中,哪一个不属于编译错误
A.改变 x 原值 35 ,写作“ x==5 ;B.花括号不配对
C.复合语句中的最后一条语句后未加分号
D.变量有引用、无定义

A == 为判断

11:下列程序段运行后, x 的值是( )

a=1;b=2;x=0;
if(!( -- a))x -- ;
if(!b)x=7;else ++x;
A.0
B.3
C.6
D.7

记住一个原则 什么+±-在变量前面的 先自己±1 在变量后面的,执行完这条语句后再自己±1
看题
if(!( – a))x – ;
假如!0 条件为真 x – 变-1 ;
假如(!b)这个条件是假 执行else ++x ; x = 0;
答案A

12:设
#define N 3
#define Y(n) ((N+1)*n)
则表达式2*(N+Y(5+1))的值是
A.42
B.48
C.54
D.出错

直接解答
1种情况 2 *(3+ (3+1) * 5+1)
1种情况 2 *(3+ (3+1) * 6)
这边有个细节就是到底编译器对Y(5+1)是先执行还是先把数据加好再代入呢
这边是第一种情况!
选B

13:若定义了char ch[]={″abc\0def″},*p=ch;则执行printf(%c″,*p+4);语句的输出结果是
A.def
B.d
C.e
D.0

凡是碰到这样的 一定要确定指针是什么类型 ,这边是ch 是执向char类型的指针
这道题目可以变 很难的
答案是e 因为和print有关 。
比如来来来

找不到了 算了 ,下次在补上

14:下列转义字符中错误的是
A.′\000B.′\14C.′\x111′
D.′\2

原理 /是啥 ?
复习下 优先级连接
参考答案:C error C2022: ‘273’ : too big for character

15:算术运算符,赋值运算符和关系运算符的运算优先级按从高到低依次为
A.算术运算、赋值运算、关系运算
B.算术运算、关系运算、赋值运算
C.关系运算、赋值运算、算术运算
D.关系运算、算术运算、赋值运算

原理是 算术是乘除 关系是 赋值是=

答案:B

16:设#define N 3
#define Y(n) ((N+1)*n)
则表达式2*(N+Y(5+1))的值是
A.42
B.48
C.54
D.出错

B

17:表达式 strcmp(3.14 ”,“ 3.278) 的值是一个
A.非零整数
B.浮点数
C.0
D.字符

在这里插入图片描述
返回的是非0整数

18:设struct
{ short a;
char b;
float c;
}cs;
则sizeof(cs)的值是
A.4
B.5
C.6
D.8

原理:内存对齐

short 短整型 2
char 1
float 4
1+2还有+1 和后面的4对齐 总共是8
选:D

19:若变量已正确定义,表达式( j=3 , j++ )的值是
A.3
B.4
C.5
D.0

A 前面有讲

20:C 语言中运算对象必须是整型的运算符是
A.%
B./
C.!
D.**

简答题

21:打印一个N*N的方阵,N为每边字符的个数( 3N20 ),要求最外层为“X”,第二层为“Y”,
从第三层起每层依次打印数字0123...
例子:当N =5,打印出下面的图形:
X X X X X
X Y Y Y X
X Y 0 Y X
X Y Y Y X
X X X X X
22:谈谈COM的线程模型。然后讨论进程内/外组件的差别。

看了一遍排在前面的答案,类似”进程是资源分配的最小单位,线程是CPU调度的最小单位“这样的回答感觉太抽象,都不太容易让人理解。
做个简单的比喻:

  • 进程=火车,线程=车厢线程在进程下行进(单纯的车厢无法运行)

  • 一个进程可以包含多个线程(一辆火车可以有多个车厢)

  • 不同进程间数据很难共享(一辆火车上的乘客很难换到另外一辆火车,比如站点换乘)

  • 同一进程下不同线程间数据很易共享(A车厢换到B车厢很容易)

  • 进程要比线程消耗更多的计算机资源(采用多列火车相比多个车厢更耗资源)进程间不会相互影响,
    一个线程挂掉将导致整个进程挂掉(一列火车不会影响到另外一列火车,但是如果一列火车上中间的一节车厢着火了,将影响到所有车厢)

  • 进程可以拓展到多机,进程最多适合多核(不同火车可以开在多个轨道上,同一火车的车厢不能在行进的不同的轨道上)

  • 进程使用的内存地址可以上锁,即一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块内存。(比如火车上的洗手间)-“互斥锁”

  • 进程使用的内存地址可以限定使用量(比如火车上的餐厅,最多只允许多少人进入,如果满了需要在门口等,等有人出来了才能进去)-“信号量”

作者:知乎用户
链接:https://www.zhihu.com/question/25532384/answer/411179772
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

23:多态类中的虚函数表是Compile-Time,还是Run-Time时建立的?

多态类中的虚函数表是Compile-Time,还是Run-Time时建立的

24:#include

  void main()

  { int c;

  while ((c=getchar())!= ′\ n ′ )

  switch(c -2)

  { case 0:

  case 1:putchar(c+4);break;

  case 2:putchar(c+4);break;

  case 3:putchar(c+3);break;

  default:putchar(c+2);break;

  }

  printf( ″\ n ″ );

  }

  运行时输入: 2473 ,输出结果:6897
25:用两个栈实现一个队列的功能?

1111
(C语言代码)[https://blog.csdn.net/weixin_40671425/article/details/83006485]

26:写一语句实现x是否为2的若干次幂的判断。
参考答案:!(X)&(X-1)

!(X)&(X-1)

27:解二次方程:a*x*x+b*x+c
int Quadratic( double a,double b,double c,double& x1,double& x2);
返回值:解的个数
28:如何判别一个数是unsigned。

#define issignal(x) ((x>=0 && ~x>=0) ? 1:0) //为1是无符号 为0有符号

29:执行下述程序的输出结果是  ABCDEFCDEFEF  。
#include
char b[]="ABCDEF";
main()
{
char *bp;
for (bp=b;*bp;bp+=2)
printf("%s",bp);
printf("\n");
}
30:已知一个数组table,用一个宏定义,求出数据的元素个数。
参考答案:#define NTBL
#define NTBL (sizeof(table)/sizeof(table[0]))
  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值