嵌入式软件工程师笔试题(含答案).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=94;
printf(″%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 原值 3 为 5 ,写作“ 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.′\000′
B.′\14′
C.′\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为每边字符的个数( 3〈N〈20 ),要求最外层为“X”,第二层为“Y”,
从第三层起每层依次打印数字0,1,2,3,...
例子:当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]))