<<嵌入式C高级编程笔试>>试卷B
一、选择题(35*2’
1. 语句printf(s\\t)的输出结果为(   
A  s\\t        B  s\t        C  s\        D  s
*2. 程序中定义以下宏 #define S(a,b) a*b
 若定义 int area; 且令area=S(3+1,3+4),则变量area的值为(    A 
A 10          B 12        C 21        D.  28
正确标识符 D
A ?a        B a=2    C a.3    D a-3
3. float a = 3.2(int)aprintf("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型数据在内存中的存储形式是
A补码      B 反码      C 原码     DASCII
*6. 执行下列语句中,sum变量的值是                         
  int sum=0
  for(int i=0;i<10;i++,sum+=i);
  A  45          B  55        C  0          D  编译错误   
假如p指向整型变量x, 则(*p++等价B
A p++        B x++        C*(p++)        D&x++
7. 为了避免嵌套的条件分支语句if-else的二义性,C语言规定:C程序中的else总是与( C )组成配对关系。
A. 缩排位置相同的if                    B. 在其之前未配对的if
printf怎么加endl
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()
{
    static int c;
    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. freep以后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] strcpybHello);
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
A1212    B1221    C2121  D2112
16. 若有定义语句:int a[4][10],*p,*q[4];0<=i<4,则错误的赋值是: A
Ap=a    Bq[i]=a[i]  Cp=a[i]  Dp=&a[2][1]
17. 下面函数的功能是  A
fun(char *a,char*b)
{
while((*b=*a)!=’\0’) 
{
a++;b++;
}
}
Aa所指字符串赋给b所指空间
B使指针b指向a所指字符串
Ca所指字符串和b所指字符串进行比较
D检查ab所指字符串中是否有’\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)intchar);pf=&fun
19. #include  <stdio.h>
main ( )
  int  n=2,k=0;
while(k++&&n++>2);
printf(%d  %d\n,k,n);
}
程序运行后的输出结果是(    )D
A0  2          B1  3        C 5  7        D1  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. 以下函数findmax拟实现在数组中查最大值并作为函数值返回,但程序中有错导致不能实现预定功能。
#define MIN -2147483647
int findmax {int x[],int n}
{ int i,max;;
for {i=0;i<n;i++}
{ max =MIN;
if(max<x[i]) max=x[i];}
return max;
}
造成错误的原因是  D
A)定义语句int i,max:中max 未赋初值
B)赋值语句max=MIN;中,不应给max MIN
C)语句if(max<x[i]) max=x[i];中判断条件设置错误
D)赋值语句max=MIN;放错了位置
22. 有以下程序
#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);