嵌入式C高级编程伍健.docx

上传人:b****6 文档编号:6031860 上传时间:2023-01-03 格式:DOCX 页数:19 大小:21.72KB
下载 相关 举报
嵌入式C高级编程伍健.docx_第1页
第1页 / 共19页
嵌入式C高级编程伍健.docx_第2页
第2页 / 共19页
嵌入式C高级编程伍健.docx_第3页
第3页 / 共19页
嵌入式C高级编程伍健.docx_第4页
第4页 / 共19页
嵌入式C高级编程伍健.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

嵌入式C高级编程伍健.docx

《嵌入式C高级编程伍健.docx》由会员分享,可在线阅读,更多相关《嵌入式C高级编程伍健.docx(19页珍藏版)》请在冰豆网上搜索。

嵌入式C高级编程伍健.docx

嵌入式C高级编程伍健

上嵌《嵌入式C高级编程》考试试卷A

1

2

3

4

5

6

7

8

9

10

B

B

B

C

C

D

C

D

C

D

11

12

13

14

15

16

17

18

19

20

A

D

C

D

A

C

B

B

A

D

一、选择题(1.5*20)

(1)下列数据结构中,按先进后出原则组织数据的是(  )

A)线性链表B)栈

C)循环链表D)顺序表

(2)下列表达式中,结果为5的是(  )

A)6*5%6

B)5*-2+15

C)5+75%10

D)6+-2/3

(3)关于C语言的主函数描述正确的是(  )

A)C程序可以有多个main函数

B)C程序必有一个而且只能有一个main函数

C)C程序可以没有main函数

D)C程序的执行不一定在main函数开始执行

(4)已知x,y,z均为整型变量,且值均为1,则执行语句++x||++y&&++z;后,表达式x+y的值为(  )

A)1

B)2

C)3

D)4

(5)若inti,j;,则for(i=j=0;i<10&&j<8;i++,j+=3)控制的循环体执行的次数是(  )

A)9

B)8

C)3

D)2

(6)下列关于栈的描述正确的是(  )

A)在栈中只能插入元素而不能删除元素

B)在栈中只能删除元素而不能插入元素

C)栈是特殊的线性表,只能在一端插入或删除元素

D)栈是特殊的线性表,只能在一端插入元素,而在另一端删除元素

(7)阅读下列程序,则执行结果是(  )

#include"stdio.h"

main()

{

inta=0,b=0,c=0,i;

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

switch(i)

{

case0:

a=i++;

case1:

b=i++;

case2:

c=i++;

case3:

i++;

}

printf("%d,%d,%d,%d\n",a,b,c,i);

}

A)0,1,3,4

B)1,2,3,4

C)0,1,2,5

D)0,2,3,4

(8)以下描述错误的是(  )

A)C程序中,函数可以直接或间接的调用自己

B)函数调用时,函数名必须与所调用的函数名字完全一致

C)函数说明语句中的类型必须与函数返回值的类型一致

D)实参数可以与形参个数不一致

(9)阅读下面程序,则执行后的结果为(  )

#include"stdio.h"

intfun1()

{

intk=20;

returnk;

}

intfun2()

{

inta=15;

returna;

}

fun3(inta,intb)

{

intk;

k=(a-b)*(a+b);

printf("%d\n",k);

}

main()

{

fun3(fun1(),fun2());

}

A)0

B)184

C)175

D)编译不通过

(10)以下对一维数组c进行正确的定义初始化的语句是(  )

A)intc[10]=0;

B)intc[10]={0}*10;

C)intc[1]={0,0,0,0,0,0,0};

D)intc[10]={0};

(11)阅读下列程序,则执行后输出的结果是(  )

#include"stdio.h"

intk=1;

fun(intk)

{

k++;

k=k*6;

}

main()

{

fun(k);

printf("%d\n",k);

}

A)1

B)2

C)6

D)12

(12)现有如下程序段

#include"stdio.h"

voidfun(int*a,int*b,int*c)

{

*c=*a+*b;

}

main()

{

inta[2]={12,23},c;

fun(a,a+1,&c);

printf("%d\n",c);

}

则程序的输出结果为(  )

A)23

B)12

C)0

D)35

(13)若有以下语句,则正确的描述是(  )

chara[]="toyou";

charb[]={′t′,′o′,′y′,′o′,′u′};

A)a数组和b数组的长度相同

B)a数组长度小于b数组长度

C)a数组长度大于b数组长度

D)a数组等价于b数组

(14)已知:

chara[15],b[15]={"Ilovechina"};则在程序中能将字符串Ilovechina赋给数组a的正确语句是(  )

A)a="Ilovechina";

B)strcpy(b,a);

C)a=b;

D)strcpy(a,b);

(15)阅读下面程序,则执行后的结果为(  )

#include"stdio.h"

main()

{

char*str="abcdefghijklmnopq";

while(*str++!

=′e′);

printf("%c\n",*str);

}

A)f

B)a

C)e

D)q

(16)现有如下程序段

#include"stdio.h"

intfun(intk,int*m);

{

if(k%3)

*m=k*k;

else

*m=k/3;

}

main()

{

int(*p)(int,int*),m;

p=fun;

(*p)(78,&m);

printf("%d\n",m);

}

则程序段的输出结果为(  )

A)24

B)25

C)26

D)27

(17)阅读下列程序,则执行后的输出结果为(  )

#include"stdio.h"

fun(intx)

{

if(x/2>0)fun(x/2);

printf("%d",x%2);

}

main()

{

fun(20);

putchar(’\n′);

}

A)11100

B)10100

C)10101

D)10110

(18)阅读如下程序段,则执行后程序的输出结果是(  )

#include

main()

{

structa

{

intx;

inty;

}num[2]={{20,5},{6,7}};

printf("%d\n",num[0].x/num[0].y*num[1].y);

}

A)0

B)28

C)20

D)5

(19)阅读下列程序段

#include"stdio.h"

typedefstructaa

{

inta;

structaa*next;

}M;

voidset(M*k,inti,int*b)

{

intj,d=0;

for(j=1;j

{

k[j-1].next=&k[j];

k[j-1].a=b[d++];

}

k[j-1].a=b[d];

}

main()

{

Mk[5],*p;

intd[5]={23,34,45,56,67};

set(k,5,d);

p=k+1;

printf("%d\n",table);

}

则下面的表达式在table处,能使程序执行后,打印输出数据45的是(  )

A)p->next->a

B)++p->a

C)(*p).a++

D)p++->a

(20)阅读下面程序,程序实现的功能是(a123.txt在当前盘符下已经存在)(  )

#include"stdio.h"

voidmain()

{

FILE*fp;

inta[10],*p=a;

fp=fopen("a123.txt","w");

while(strlen(gets(p))>0)

{

fputs(a,fp);

fputs("\n",fp);

}

fclose(fp);

}

A)从键盘输入若干行字符,按行号倒序写入文本文件a123.txt中

B)从键盘输入若干行字符,取前2行写入文本文件a123.txt中

C)从键盘输入若干行字符,第一行写入文本文件a123.txt中

D)从键盘输入若干行字符,依次写入文本文件a123.txt中

二、填空题(2×12分)

(1)阅读下面程序,则在执行时候的输出为________1,2_____。

#include"stdio.h"

main()

{

intx=1,y=2,z=0;

if(x=2)

z=x,x=y,y=z;

printf("%d,%d\n",x,y);

}

(2)语句printf("%d\n",′H′-′0′+64);的执行结果为______88_____。

(3)阅读下面程序,则程序的执行结果为_______10_____。

#include"stdio.h"

fun(intx)

{

x=50;

}

main()

{

inta=10;

fun(a);

printf("%d\n",a);

}

(4)以下程序的输出结果是___12,1_________。

intfun(intx,inty,int*p,int*q)

{

*p=x*y;

*q=x/y;

}

main()

{

inta,b,c,d;

a=4;

b=3;

fun(a,b,&c,&d);

printf("%d,%d\n",c,d);

}

(5)下面程序是求出数组arr的两条对角线上元素之和,请填空。

#include"stdio.h"

main()

{

intarr[3][3]={2,3,4,8,3,2,7,9,8},a=0,b=0,i,j;

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

for(j=0;j<3;j++)

if(__i==j_________________)

a=a+arr[i][j];

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

for(____j=2_______________;j>=0;j--)

if(_____i+j==2______________)

b=b+arr[i][j];

printf("%d,%d\n",a,b);

}

(6)下面程序的功能是:

对字符串从小到大进行排序并输出,请填空。

#include"string.h"

#include"stdio.h"

sort(char*a[],intn)

{

inti,j;

char*p;

for(j=1;j<=n-1;j++)

for(i=0;_____j

if(______strcmp(&a[i],&a[i+1])____________>0)

{

p=a[i];

a[i]=a[i+1];

a[i+1]=p;

}

}

main()

{

inti;

char*book[]={"itisme","itisyou","howareyou","fine","goodnight","goodbye"};

sort(_____book,__6____________);

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

printf("%s\n",book[i]);

}

(7)下面的函数是完成1~n的累加,完成函数。

a(intk)

{

intsum=0;

if(k<=0)

printf("error\n");

if(k==1)

___printf(“sumis1\n”);________________;

else

{

for(;k>0;k--)

{

sum+=k;

}_

printf(“sumis%s\n”,sum);

}_________________;

}

三、请填写BOOL,float,指针变量与“零值”比较的if语句。

(6分)

提示:

这里“零值”可以是0,0.0,FALSE或者“空指针”。

例如int变量n与“零值”比较的if语句为:

if(n==0)

if(n!

=0)

以此类推。

请写出BOOLflag与“零值”比较的if语句:

if(flag==FALSE)

if(flag!

=FALSE)

请写出char*p与“零值”比较的if语句:

if(p==NULL)

if(p!

=NULL)

四、以下为WindowsNT下的32位C++程序,请计算sizeof的值(6分)

charstr[]=“Hello”;

char*p=str;

intn=10;

请计算

sizeof(str)=6

sizeof(p)=4

sizeof(n)=4

voidFunc(charstr[100])

{

请计算

sizeof(str)=100

}

void*p=malloc(100);

请计算

sizeof(p)=4

五、简答题(9分)

1、头文件中的ifndef/define/endif干什么用?

答:

防止头文件被重复定义

2、#include和#include“filename.h”有什么区别?

答:

对于前一个,程序预处理时,从系统函数库开始找,后一个是从程序工程中开始找

3、const有什么用途?

(请至少说明两种)

答:

1.让变量成为常量。

2.只能在初始化时赋值。

所以被其它文件调用时,不能在赋值。

六、有关内存的思考题(6分)

voidGetMemory(char*p)

{

p=(char*)malloc(100);

}

voidTest(void)

{

char*str=NULL;

GetMemory(str);

strcpy(str,"helloworld");

printf(str);

}

请问运行Test函数会有什么样的结果?

答:

程序可能会崩溃。

str是个野指针。

voidGetMemory(char**p,intnum)

{

*p=(char*)malloc(num);

}

voidTest(void)

{

char*str=NULL;

GetMemory(&str,100);

strcpy(str,"hello");

printf(str);

}

请问运行Test函数会有什么样的结果?

答:

hello

《嵌入式C高级编程》机试试卷

一、编写strcpy函数,并验证;求字符串长度

已知strcpy函数的原型是

char*strcpy(char*strDest,constchar*strSrc);

其中strDest是目的字符串,strSrc是源字符串。

(1)不调用C++/C的字符串库函数,请编写函数strcpy,至少用三种方式实现。

(2)计算strDest字符串的长度

charstrcpy(char*strDest,constchar*strSrc)

{

intlen=0;

while(*strSrc)

{

*strDest=*strSrc;

strDest++;

strSrc++;

}

while(*strDest++)

len++;

returnlen;

}

二、编写一个程序,删除每个输入行末尾的空格,并删除完全是空格的行。

voiddelete_space(char*str)

{

char*p;

p=str;

while(*str)

{

str++;

}

str--;

while(*str==32&&str!

=p)

{

*str=0;

str--;

}

str=p;

}

三、编写一个递归版本的reverse(s)函数,以将字符串S倒置。

voidreverse(char*S)

{

if(*s!

=NULL)

reverse(++s);

printf(“%c”,*S);

}

四、三色球问题

若一个口袋中放有12个球,其中有3个红的,3个白的和6个黒的,问从中任取8个共有多少种不同的颜色搭配?

五、猴子吃桃问题

猴子吃桃问题:

猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。

以后每天早上都吃了前一天剩下

的一半零一个。

到第10天早上想再吃时,见只剩下一个桃子了。

求第一天共摘了多少。

void_monkey_peach()

{

intnum=0;

intdays=10;

if(days==1)

{

num=2;

}

else

{

monkey_peach(num,--days);

num=num+1+num*2;

}

}

六、爱因斯坦的数学题

爱因斯坦出了一道这样的数学题:

有一条长阶梯,若每步跨2阶,则最最后剩一阶,若每步跨3阶,则最后剩2阶,若每步跨5阶,则最后剩4阶,若每步跨6阶则最后剩5阶。

只有每次跨7阶,最后才正好一阶不剩。

请问这条阶梯共有多少阶?

voidstep()

{

inti,j;

for(i=0;;i++)

{

if(i%2==1)

if(i%3==2)

if(i%4==3)

if(i%5==4)

if(i%6==5)

if(i%7==0)

{

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

break;

};

}

}

七、编写一个程序,比较两个文件并打印它们第一个不相同的行。

voidfilecmp(char*fname1,char*fname2)

{

FILE*fp1;

FILE*fp2;

intline1=0;

intline2=0;

char*stream1;

char*stream2;

fp1=open(fname1,”r”);

fp2=open(fname2,”r”);

while(fread(stream1,1,sizof(char),fp1)&&fread(stream2,1,sizof(char),fp2))

{

if(stream1!

=stream2)

{

while(stream1--&&stream1==‘\n’)

while(++tream1!

=‘\n’)

printf(“%s”,stream1);

printf(“\n”);

while(stream2--&&stream2==‘\n’);

while(++tream2!

=‘\n’)

printf(“%s”,stream2);

}

}

}

八、实现功能:

1、从键盘输入一行字符串,调用函数建立反序的链表,然后输出整个链表。

2、求出链表的最大值。

3、设计一个用链表表示的直接插入排序算法。

4、已知两个链表head1和head2各自有序,请把它们合并成一个链表依然有序。

(保留所有结点,即便大小相同)

已知

structnode

{

chardata;

structnode*next;

}*head;

#include

#include

#include

structnode

{

chardata;

structnode*next;

}*head;

headcreate_linklist()

{

char*str;

headhead,p;

head=(head)malloc(sizeof(structnode));

head->next=NULL;

p=head->next;

scanf(“%s”,str);

while(str)

{

p=(head)malloc(sizeof(structnode));

p->next=NULL;

p-data=*str;

p=p->next;

}

p=head;

while(p->next)

printf(“%c”,p->data);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1