《嵌入式C高级编程笔试》试卷A
一、选择题(35*2’)注意程序运行在32位系统下
1. 语句printf(″s\\t″)的输出结果为(printf函数是如何实现的 B )
A s\\t B s\t C s\ D s
2.若有条件表达式(exp)?a++:b--,则以下表达式中能完全等价于表达式(exp)的是 (B)
A、(exp==0) B、(exp!=0) C、(exp==1) D、(exp!=1)
3. float a = 3.2;(int)a;printf("a = %d, \n", a);打印什么,运行后a的类型是(D)
A. 3.000000, int
B. 3, int
C. 3.0 float
D. 既不是3,也不是3.000000, float
4.有以下代码:
void func()
{
int a;
a++;
printf("a = %d\n", a);
}
那么变量a储存在( A )
A. 栈
B. 堆
C. 正文段
D. 未初始化数据段
5. 在C语言中, char型数据在内存中的存储形式是( D )
A、补码 B、 反码 C、 原码 D、ASCII码
A、补码 B、 反码 C、 原码 D、ASCII码
6. 假如指针p已经指向某个整型变量x,则(*p)++相当于( )B
A、p++ B、x++ C、*(p++) D、&x++
7. 为了避免嵌套的条件分支语句if-else的二义性,C语言规定:C程序中的else总是与( C )组成配对关系。
A. 缩排位置相同的if B. 在其之前未配对的if
C. 在其之前未配对的最近的if D.同一行上的if
8. 设A为存放(短)整型的一维数组,如果A的首地址为P,那么A中第i 个元素的地址为( B )。
A.P+i*2 B. P+(i-1)*2 C. P+(i-1) D. P+i
9.有函数
void func()
{
//staic int c=0;
c++;
printf("%d\n", c);
}
那么连续调用两次,打印的结果是?( B )
A. 1, 1
B. 1, 2
C. 123495,123496(因为c没初始化,内部的值随机,第二次会比第一次加1)
D. 123495, 123495(因为c没初始化,内部的值随机,并且,值不会增加)
10.如果有以下代码:
char string[] = "love me please";
char *p = string;
char *q = p + 4;
*q++ = '\0';
printf("\"%s\"", p);
printf("\"%s\"", q);分别打印:( B )
A. "love me please" ""
B. "love" "me please"
C. "love me please" "me please"
D. 因为常量字符串不能修改,会发生段错误
11.free(p);
哪个是错误的( D )
A. p的值必须是malloc的返回值
B. 一个指针不能被连续free两次
C. free了p以后p是野指针,应该置为NULL
D. free了以后p的值会自动置为NULL,所以*p = 9会段错误
12.下列描述中不正确的是( C )。
A. 字符型数组中可能存放字符串。
B. 可以对字符型数组进行整体输入、输出。
C. 可以对整型数组进行整体输入、输出。
D. 不能在赋值语句中通过赋值运算符“=”对字符型数组进行整体赋值。
13.不能把字符串:Hello!赋给数组b的语句是( B )。
A. char b[10]={‘H’,‘e’,‘l’,‘l’,‘o’,‘!’};
B. char b[ 10]; b=“Hello!”;
C. char b[10]; strcpy(b,“Hello!”);
D. char b[10]=“Hello!”;
14. 对于循环队列,下列叙述中正确的 D
A)队头指针是固定不变的
B)队头指针一定不大于队尾指针
C)队头指针一定小于队尾指针
D)队头指针可以大于队尾指针,也可以小于队尾指针
15. 有以下程序
#include <stdio.h>
main()
{
int m=1,n=2,*p=&m,*q=&n,*r;
r=p;p=q;q=r;
printf(“%d,%d,%d\n”,m,n,*p,*q);
}
程序运行后的输出结果为 B
A)1,2,1,2 B)1,2,2,1 C)2,1,2,1 D)2,1,1,2
16. 若有定义语句:int a[4][10],*p,*q[4];且0<=i<4,则错误的赋值是: A
A)p=a B)q[i]=a[i] C)p=a[i] D)p=&a[2][1]
17. 下面函数的功能是 A
fun(char *a,char*b)
{
while((*b=*a)!=’\0’)
{
a++;b++;
}
}
A将a所指字符串赋给b所指空间
B使指针b指向a所指字符串
C将a所指字符串和b所指字符串进行比较
D检查a和b所指字符串中是否有’\0’
18. 设有以下函数:
void fun(int n,char *s){……}
则下面对函数指针的定义和赋值均正确的是 A
A void (*pf)( );pf=fun;
B void *pf();pf=fun;
C void *pf();*pf=fun;
D void (*pf)(int,char);pf=&fun;
19. #include <stdio.h>
main ( )
{
int n=2,k=0;
while(k++&&n++>2);
printf(“%d %d\n”,k,n);
}
程序运行后的输出结果是( )D
A、0 2 B、1 3 C、 5 7 D、1 2
20. 有如下代码:
struct test
{
char *name;
int age;
};
int main()
{
char myname[] = "hello, world";
struct test a1, a2;
a1.name = myname;
a1.age = 13;
a2 = a1;
a1.name[0] = 'm';
printf("%s\n", a2.name);
}
输出的结果为:( A )
A. mello, world
B. hello, world
C. 编译无法通过
D. 会段错误
21正确的标识符是 ( D )
A ?a B a=2 C a.3 D a_3
22. 以下c语言函数声明中,不正确的是 ( C )
A void fun (int x, int y); B fun (int x, int y);
C int fun (int x,y); D char *fun (char *s);
23. 设有说明double(*p1)[N];其中标识符p1是( C )。
A. N个指向double型变量的指针。
B. 指向N个double型变量的函数指针。
C. 一个指向由N个double型元素组成的一维数组的指针。
D.具有N个指针元素的一维指针数组,每个元素都只能指向double型量。
24. 以下程序的输出结果是( C )。
#define f(x) x*x
main()
{int a=6,b=2,c;
c=f(a)/f(b);
printf(“%d\n”,c);
}
A. 9 B. 6 C. 36 D. 18
25. 设有如下定义: int x=10,y=3,z;
则语句printf(“%d\n”,z=(x%y,x/y)); 的输出结果是( D )。
A. 1 B. 0 C. 4 D. 3
26. 定义如下变量和数组:int i;int x[3][3]={1,2,3,4,5,6,7,8,9};
则语句for(i=0;i<3;i++) printf(“%d ”,x[i][2-i]); 的输出结果是( C )。
A. 1 5 9 B. 1 4 7 C. 3 5 7 D. 3 6 9
27. 以下对二维数组a进行正确初始化的是( B )
A. int a[2][3]={{1,2},{3,4},{5,6}};
B. int a[ ][3]={1,2,3,4,5,6};
C. int a[2][ ]={1,2,3,4,5,6};
D. int a[2][ ]={{1,2},{3,4}};
28. 下列程序的输出结果是( C )。
int a[5]={2,4,6,8,10},*P,* *k;
p=a; k=&p;
printf(“%d”,*(p++));
printf(“%d\n”,* *k);
A. 4 4 B. 2 2 C. 2 4 D. 4 6
29. 如果char *string = "1234";如何将string中的字符串转化为整形赋值给int a,那么应该选择(C)
A a = (int)string
B a = *string
C a = atoi(string);
D a =string;
30.int a[10] = {3 , 2, 1};
int *p = a + 4;
那么printf("%d, %d\n", a[2], *p);会打印?(C )
A. 2, 0
B 段错误
C 1, 0
D 1, 1
31. 如果:unsigned int a = 77;a>>1;unsigned int b = a&((0x1<<4) - 1);那么a和b的值分别为?( C )
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论