知名外企嵌入式C语言笔试试题
嵌入式C语言笔试试题
一. 选择题
01.C语言合法的常量是()
A…45
B.078
C.25
D.“xy”
解答:答案选择D。这个是字符串常量。
02.设x和y均为int型变量,则语句x+=y;y=x-y;x-=y的功能是()
A.把x和y按从大到小排列
B.把x和y按从小到大排列
C.无确定结果
D.交换x和y中的值
解答:答案选择D。
03.设a为int型变量,值为5的枚举常量是()
enum week{sun,mon=4,tue,wed,thu,fri,sat}w;
A.tue
B.sat
C.fri
D.thu
解答:答案选择A。
04.设有如下程序段,下面描述中正确的是()
int k=10;while(k=0){k=k-1;}
A.循环执行一次
B.循环是无限循环
C.循环体语句一次也不执行
D.循环体语句执行一次
解答:答案选择C。k=0是赋值语句。
05.以下关于运算符优先顺序的描述当中正确的是()
A.关系运算符 < 算术运算符 < 赋值运算符 < 逻辑运算符
B.逻辑与运算符 < 关系运算符 < 算术运算符 < 赋值运算符
C.赋值运算符 < 逻辑与运算符 < 关系运算符 < 算术运算符
D.算术运算符 < 关系运算符 < 赋值运算符 < 逻辑与运算符
解答:答案选择C。
06.在C语言程序中,以下的说法正确的是()
A.函数的定义可以嵌套,但函数的调用不可以嵌套
B.函数的定义不可以嵌套,但函数的调用可以嵌套
C.函数的定义和调用都不可以嵌套
D.函数的定义和函数的调用都可以嵌套
解答:答案选择B。
07.具有相同类型的指针类型变量p与数组a[10],不能进行的操作是()
A.p=a;
B.*p=a[0];
C.p=&a[0];
D.p=&a;
解答:答案选择B。ABD三个都是一个意思。
08.已知职工记录描述如下,在Win32系统中,系统为变量w分配()字节的空间。
struct worker
{
u4:no;
u2:age;
u1:sex;
u2:grade;
}w;
A.7
B.8
C.12
D.10
解答:答案选择C。
09.定义由n个指向整型数据的指针组成的数组p,其正确的方式为()
A.int p;
B.int (*p)[10];
C.int *p[10];
D.int (*p)();
解答:答案选择C。
二. 填空题
01.写出x>=y>=z 并且z>10的C语言表达式()
解答:答案选择 if (!(x<y) && !(y<z) && (z>10))
02.int i = 20;switch(i/10){case 2:printf(“1”);case 1:printf(“2”)}的输出结果为()
解答:答案选择2。因为没有break语句。
03.定义一个int型的定数A,A的值为10()
解答:Const int A = 10;
04.文件内部函数定义时,要加前缀()
解答:答案是static关键字
05.对于u2 a[10],sizeof(a)的值是(),其中u2为int 2byte。
解答:sizeof的值是20;
06.写一个宏ADD,这个宏功能是把两个数累加(如A+B)
解答:答案是#define ADD(a+b) ((a)+(b)) 这里考察的就是括号。
07.有表达式int a=2,b=3;y=a&b;那么y的值为()
解答:答案y的值应该是2;与运算要切换到16进制进行计算。
08.int a=1,int *p=a的含义是定义int型指针变量p,p的值是()
解答:p是指针,是一个地址,它指向的地址的值为1
09.若有定义int *p(int a[10]);则p是()名
解答:不清楚这题的出题意图,如果在*p上加上括号(),那么p是函数指针名。
10.函数的临时变量存放于寄存器和()当中,因为它的空间有限,不能定义过多的变量
解答:栈内存。
三.写出程序的运行结果
- 以下函数输出结果是什么
解答:函数的输出结果是average score is 4.100000
float FunA(float array[5])
{
int i;
float a,b=array[0];
for (i = 0; i < 5; i++){
b = b+array[i];
}
a=b/5;
return (a);
}
int main(void)
{
float score[5] = {1.5, 4, 2.5, 3, 8};
float a;
a = FunA(score);
printf("average score is %f\n", a);
}
- 以下函数输出结果是什么
解答:输出的答案应该是A,B,C,D。
#include <stdio.h>
int main(void)
{
char a[5] = {'a','b','c','d','e'};
char *p, **pa;
for (p=a;p < a + 3; p++){
printf("%c", *p);
}
pa = &p;
//printf("%c", **pa);
return 0;
}
- 以下函数输出结果是什么
解答:输出的答案应该是-9。
#include <stdio.h>
int main(void)
{
int i =29,j=6,k=2,s;
s = i / j % k - 9;
printf("s=%d\n", s);
return 0;
}
- 以下函数输出结果是什么
解答:输出的答案应该是4和6。
第一轮之后a=1,s=2
第二轮之后a=2,s=4
第三轮之后a=3,s=6
第四轮因为等于6而提前终止a=4, s=6
#include <stdio.h>
int main(void)
{
int a, s=1;
for (a=1;a <= 10; a++)
{
if (s >= 5) break;
if (s %2 == 0 ){
s+=2;continue;
}
s++;
}
printf("a=%d,s=%d",a ,s);
return 0;
}
- 以下函数输出结果是什么
解答:a=11,s=10;ifdef A走上面有效的分支。
#include <stdio.h>
#define A 2
int main(void)
{
int a,s=1;
#ifdef A
for (a = A; a <=10;a++)
#else
for (a = 0; a <=10; a++)
#endif
{
s++;
}
printf("a=%d,s=%d\n", a, s);
}