视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
嵌入式C高级编程笔试A(有答案)3.11
2025-09-29 08:44:15 责编:小OO
文档
《嵌入式C高级编程笔试》试卷A

一、选择题(35*2’)注意程序运行在32位系统下

1. 语句printf(″s\\\″)的输出结果为(   B )

A  s\\\        B  s\        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码

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

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

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 )

A 39   13      B 77    45

C 77   13      D 38    5

32.程序中定义以下宏 #define S(a,b) a*b

 若定义int area; 且令area=S(3+1,3+4),则变量area的值为(    A  )

A  10          B  12         C  21         D  28

33.下列程序的输出结果是( D )。

  char p1[]=“abcd”,*p2=“ABCD”,str[50]=“xyz”;

  strcpy(str+2,strcat(p1+2,p2+1));

  printf(“%s”,str);

A. xyabcAB        B. abcABz        C. ABabcz        D. xycdBCD

34. 阅读以下程序

#include

main ( )

{ int case ; float printF;

     printf(“请输入2个数:”);

scanf(“%d %f”,&case,&printF);

printf(“%d %f\\n”,case,printF);

}

该程序在编译时产生错误,其出错原因是   A

A)    定义语句出错,case是关键字,不能用作用户自定义标识符

B)    定义语句出错,printF不能用作用户自定义标识符

C)    定义语句无错,scanf不能作为输入函数使用

D)    定义语句无错,printf不能输出case的值

35.#include

main( )

{  

char s[ ]={“012xy”}; 

int i,n=0;

for(i=0;s[i]!=’\0’;i++)

if(s[i]>=’a’&&s[i]<=’z’)

 n++;

 printf(“%d\\n”,n);

}

程序运行后的输出结果是   B

A)0               B)2        C)3          D)5

二、编程题(30 ’)

1.编制一个完整的程序:从键盘输入10个整型数组元素,调用自定义函数void  sort( int array[ ] , int n )对其进行由大到小排序,最后将排序结果输出到显示器终端,要求自定义函数sort( )中用冒泡法实现排序。

#include

int main()

{

  int arr [10],i;

  void sort(int arry[],int n);

  for(i=0;i<10;i++)

cin>>arr[i];

  sort(arr,10);

for(i=0;i<10;i++)

cout<}

void sort(int array[  ],int n)

{

    int i,j,k;

for (i=0;ifor(j=0;jif (array[j]>=array[j+1])

          {

              k=array[j];

              array[j]=array[j+1];

              array[j+1]=k;

          }

}

2.编程,求全部水仙花数。所谓水仙花数是指一个三位数,其各位数字立方的和等于该数。如:153 = 13 + 53+ 33

#include

int main()

{

    int a,b,c;

for(a=1;a<=9;a++)

for(b=0;b<=9;b++)

for(c=1;c<=9;c++)

    if(100*a+10*b+c == a*a*a+b*b*b+c*c*c)

    printf("%d \\n",100*a+10*b+c);

}

3. 从键盘输入一组非 0 整数,以输入 0 标志结束,求这组整数的平均值,并统计其中正数和负数的个数。 

解:将这组整数放在整型数组中,一边输入一边求和及统计正数和负数的个数,平均数由和除以整数数量取得。

#include

#include

int main( ){

    int stem[256],sum=0,pnum=0,nnum=0,i=0;

cout<<"input:"< cin>>stem[i];

    while(stem[i]!=0){

        sum+=stem[i];//求和

     if(stem[i]>0) pnum++;//正数数量

        else nnum++;//负数数量

        i++;

     cin>>stem[i];

    }

if(!i) cout<<"the numbers of 0:"<    else {

     cout<<"aver="<<(double)sum/(pnum+nnum)<     cout<<"the numbers of >0:"<     cout<<"the numbers of <0:"<    }

    return 0;

}        下载本文

显示全文
专题