嵌入式C高级编程伍健.docx
- 文档编号:6031860
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:19
- 大小:21.72KB
嵌入式C高级编程伍健.docx
《嵌入式C高级编程伍健.docx》由会员分享,可在线阅读,更多相关《嵌入式C高级编程伍健.docx(19页珍藏版)》请在冰豆网上搜索。
嵌入式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 答: 对于前一个,程序预处理时,从系统函数库开始找,后一个是从程序工程中开始找 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); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 高级 编程