2022年嵌入式软件工程师笔试题 5.pdf
选择题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,因为 a,b,c三个变量都是浮点数,所以在 B答案中其结果是0,因为在计算1/2是就是 0,如果改成1/2.0就正确了。2:为了向二进制文件尾部增加数据,打开文件的方式应采用A.abB.rb+C.wb D.wb+参考答案:D 3:下述程序执行后的输出结果是include main()int x=f;printf(%cn,a+(x-a+1);A.g B.h C.i D.j 参考答案:A 4:C 语言中,下列运算符优先级最高的是A.!B.C.D.参考答案:A 5:数组定义为“int a 4 ;”,表达式 ()是错误的。A.*a B.a 0 C.a D.a+参考答案:D 名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 6 页 -6:执行语句“k=71;”后,变量 k 的当前值是A.15 B.31 C.3 D.1 参考答案:C 7:定义函数时,缺省函数的类型声明,则函数类型取缺省类型A.void B.char C.float D.int 参考答案:D 8:若 main()函数带参数,参数个数最多是A.0 B.1 C.2 D.3 参考答案:C 只知道有定义形式main(int argc,char*argv))9:若有宏定义:#define MOD(x,y)x y 则执行以下语句后的输出结果是int a=13,b=94;printf(dn,MOD(b,a+4);A.5 B.7 C.9 D.11 参考答案: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 名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 6 页 -B.3 C.6 D.7 参考答案:A 12:设#define N 3#define Y(n)(N+1)*n)则表达式2*(N+Y(5+1)的值是A.42 B.48 C.54 D.出错参考答案:B Y(5+1)传递过去的应该是6,而不是简单的把5+1 给替换掉13:若定义了char ch=abc0def ,*p=ch;则执行 printf(%c,*p+4);语句的输出结果是A.def B.d C.e D.0 参考答案:C 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.出错名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 6 页 -参考答案:B 17:表达式 strcmp(“3.14”,“3.278”)的值是一个A.非零整数B.浮点数C.0 D.字符参考答案:A 18:设 struct short a;char b;float c;cs;则 sizeof(cs)的值是A.4 B.5 C.6 D.7 参考答案:D 字节对齐的话应该是8 19:若变量已正确定义,表达式(j=3,j+)的值是A.3 B.4 C.5 D.0 参考答案:A 20:C 语言中运算对象必须是整型的运算符是A.%B./C.!D.*参考答案:A 简答题21:打印一个N*N 的方阵,N 为每边字符的个数(3 N20),要求最外层为“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 名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 6 页 -22:谈谈 COM 的线程模型。然后讨论进程内/外组件的差别。23:多态类中的虚函数表是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 VC+6.0 测试过25:用两个栈实现一个队列的功能?参考答案:设 2 个栈为 A,B,一开始均为空.入队:将新元素push 入栈 A;出队:(1)判断栈 B是否为空;(2)如果不为空,则将栈A中所有元素依次pop 出并 push 到栈 B;名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 6 页 -(3)将栈 B的栈顶元素pop 出;这样实现的队列入队和出队的平摊复杂度都还是O(1),26:写一语句实现x 是否为 2 的若干次幂的判断。参考答案:!(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(table0)名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 6 页 -