考查嵌入式C开发人员的最好的16道题.docx
- 文档编号:30749918
- 上传时间:2023-08-20
- 格式:DOCX
- 页数:22
- 大小:77.75KB
考查嵌入式C开发人员的最好的16道题.docx
《考查嵌入式C开发人员的最好的16道题.docx》由会员分享,可在线阅读,更多相关《考查嵌入式C开发人员的最好的16道题.docx(22页珍藏版)》请在冰豆网上搜索。
考查嵌入式C开发人员的最好的16道题
考查嵌入式C开发人员的最好的16道题
约定:
1)下面的测试题中,认为所有必须的头文件都已经正确的包含了
2)数据类型
char一个字节1byte
int两个字节2byte(16位系统,认为整型是2个字节)
longint四个字节4byte
float四个字节4byet
double八个字节8byte
longdouble十个字节10byte
pointer两个字节2byte(注意,16位系统,地址总线只有16位)
第1题:
考查对volatile关键字的认识
#include
staticjmp_bufbuf;
main()
{
volatileintb;
b=3;
if(setjmp(buf)!
=0)
{
printf("%d",b);
exit(0);
}
b=5;
longjmp(buf,1);
}
请问,这段程序的输出是
(a)3
(b)5
(c)0
(d)以上均不是
第1题:
(b)
volatile字面意思是易于挥发的。
这个关键字来描述一个变量时,意味着给该变量赋值(写入)之后,马上再读取,写入的值与读取的值可能不一样,所以说它"容易挥发"的。
这是因为这个变量可能一个寄存器,直接与外部设备相连,你写入之后,该寄存器也有可能被外部设备的写操作所改变;或者,该变量被一个中断程序,或另一个进程
改变了.
volatilevariableisn'taffectedbytheoptimization.Itsvalueafterthelongjumpisthelastvaluevariableassumed.
blastvalueis5hence5isprinted.
setjmp:
Setsupfornonlocalgoto/*setjmp.h*/
Storescontextinformationsuchasregistervaluessothatthelomgjmpfunctioncanreturncontroltothestatementfollowingtheonecallingsetjmp.Returns0whenitisinitiallycalled.
Lonjjmp:
longjmpPerformsnonlocalgoto/*setjmp.h*/
Transferscontroltothestatementwherethecalltosetjmp(whichinitializedbuf)wasmade.Executioncontinuesatthispointasiflongjmpcannotreturnthevalue0.Anonvolatileautomaticvariablemightbechangedbyacalltolongjmp.Whenyouusesetjmpandlongjmp,theonlyautomaticvariablesguaranteedtoremainvalidarethosedeclaredvolatile.
Note:
Testprogramwithoutvolatilequalifier(resultmayvery)
第2题:
考查类型转换
main()
{
structnode
{
inta;
intb;
intc;
};
structnodes={3,5,6};
structnode*pt=&s;
printf("%d",*(int*)pt);
}
这段程序的输出是:
(a)3
(b)5
(c)6
(d)7
第2题:
(a)
Themembersofstructureshaveaddressinincreasingorderoftheirdeclaration.Ifapointertoastructureiscasttothetypeofapointertoitsfirstmember,theresultreferstothefirstmember.
第3题:
考查递归调用
intfoo(intx,intn)
{
intval;
val=1;
if(n>0)
{
if(n%2==1)val=val*x;
val=val*foo(x*x,n/2);
}
returnval;
}
这段代码对x和n完成什么样的功能(操作)?
(a)xn
(b)x*n
(c)nx
(d)以上均不是
第3题:
(a)
Nonrecursiveversionoftheprogram
intwhat(intx,intn)
{
intval;
intproduct;
product=1;
val=x;
while(n>0)
{
if(n%2==1)
product=product*val;
n=n/2;
val=val*val;
}
}
/*Coderaiseanumber(x)toalargepower(n)usingbinarydoublingstrategy*/
Algorithmdescription
(whilen>0)
{
ifnextmostsignificantbinarydigitofn(power)isone
thenmultiplyaccumulatedproductbycurrentval,
reducen(power)sequencebyafactoroftwousingintegerdivision.
getnextvalbymultiplycurrentvalueofitself
}
第4题:
考查指针
main()
{
inta[5]={1,2,3,4,5};
int*ptr=(int*)(&a+1);
printf("%d%d",*(a+1),*(ptr-1));
}
这段程序的输出是:
(a)22
(b)21
(c)25
(d)以上均不是
第4题:
(c)
typeofaisarrayofint
typeof&aispointertoarrayofint
Takingapointertotheelementonebeyondtheendofanarrayissuretowork.
第5题:
考查多维数组与指针
voidfoo(int[][3]);
main()
{
inta[3][3]={{1,2,3},{4,5,6},{7,8,9}};
foo(a);
printf("%d",a[2][1]);
}
voidfoo(intb[][3])
{
++b;
b[1][1]=9;
}
这段程序的输出是:
(a)8
(b)9
(c)7
(d)以上均不对
第5题:
(b)
第6题目:
考查逗号表达式
main()
{
inta,b,c,d;
a=3;
b=5;
c=a,b;
d=(a,b);
printf("c=%d",c);
printf("d=%d",d);
}
这段程序的输出是:
(a)c=3d=3
(b)c=5d=3
(c)c=3d=5
(d)c=5d=5
第6题:
(c)
Thecommaseparatestheelementsofafunctionargumentlist.Thecommaisalsousedasanoperatorincommaexpressions.Mixingthetwousesofcommaislegal,butyoumustuseparenthesestodistinguishthem.theleftoperandE1isevaluatedasavoidexpression,thenE2isevaluatedtogivetheresultandtypeofthecommaexpression.Byrecursion,theexpression
E1,E2,...,En
resultsintheleft-to-rightevaluationofeachEi,withthevalueandtypeofEngivingtheresultofthewholeexpression.
c=a,b;/*yieldsc=a*/
d=(a,b);/*d=b*/
第7题:
考查指针数组
main()
{
inta[][3]={1,2,3,4,5,6};
int(*ptr)[3]=a;
printf("%d%d",(*ptr)[1],(*ptr)[2]);
++ptr;
printf("%d%d",(*ptr)[1],(*ptr)[2]);
}
这段程序的输出是:
(a)2356
(b)2345
(c)4500
(d)以上均不对
第7题:
(a)
/*ptrispointertoarrayof3int*/
第8题:
考查函数指针
int*f1(void)
{
intx=10;
return(&x);
}
int*f2(void)
{
int*ptr;
*ptr=10;
returnptr;
}
int*f3(void)
{
int*ptr;
ptr=(int*)malloc(sizeof(int));
returnptr;
}
上面这3个函数哪一个最可能引起指针方面的问题
(a)只有f3
(b)只有f1andf3
(c)只有f1andf2
(d)f1,f2,f3
第8题:
(c)
f1andf2returnaddressoflocalvariable,whenfunctionexitlocalvariabledisappeared
第9题:
考查自加操作(++)
main()
{
inti=3;
intj;
j=sizeof(++i+++i);
printf("i=%dj=%d",i,j);
}
这段程序的输出是:
(a)i=4j=2
(b)i=3j=2
(c)i=3j=4
(d)i=3j=6
第9题:
(b)
sizeofoperatorgivesthenumberofbytesrequiredtostoreanobjectofthetypeofitsoperand.Theoperandsiseitheranexpression,whichisnotevaluated((++i+++i)isnotevaluatedsoiremain3andjissizeofintthatis2)oraparenthesizedtypename.
第10题:
考查形式参数,实际参数,指针和数组
voidf1(int*,int);
voidf2(int*,int);
void(*p[2])(int*,int);
main()
{
inta;
intb;
p[0]=f1;
p[1]=f2;
a=3;
b=5;
p[0](&a,b);
printf("%d\t%d\t",a,b);
p[1](&a,b);
printf("%d\t%d\t",a,b);
}
voidf1(int*p,intq)
{
inttmp;
tmp=*p;
*p=q;
q=tmp;
}
voidf2(int*p,intq)
{
inttmp;
tmp=*p;
*p=q;
q=tmp;
}
这段程序的输出是:
(a)5555
(b)3535
(c)5353
(d)3333
第10题:
(a)
void(*p[2])(int*,int);
definearrayofpointertofunctionaccepttwoargumentthatispointertointandreturnint.p[0]=f1;p[1]=f2containaddressoffunction.functionnamewithoutparenthesisrepresentaddressoffunctionValueandaddressofvariableispassedtofunctiononlyargumentthatiseffectedisa(addressispassed).Becauseofcallbyvaluef1,f2cannoteffectb
第11题:
考查自减操作(--)
voide(int);
main()
{
inta;
a=3;
e(a);
}
voide(intn)
{
if(n>0)
{
e(--n);
printf("%d",n);
e(--n);
}
}
这段程序的输出是:
(a)0120
(b)0121
(c)1201
(d)0211
第11题:
(a)
第12题:
考查typedef类型定义,函数指针
typedefint(*test)(float*,float*)
testtmp;
tmp的类型是
(a)函数的指针,该函数以两个指向浮点数(float)的指针(pointer)作为参数(arguments)
Pointertofunctionofhavingtwoargumentsthatispointertofloat
(b)整型
(c)函数的指针,该函数以两个指向浮点数(float)的指针(pointer)作为参数(arguments),并且函数的返回值类型是整型
Pointertofunctionhavingtwoargumentthatispointertofloatandreturnint
(d)以上都不是
第12题:
(c)
Cprovideafacilitycalledtypedefforcreatingnewdatatypenames,forexampledeclaration
typedefcharstring
Makesthenamestringasynonymforint.Thetypestringcanbeusedindeclaration,cast,etc,exactlythesamewaythatthetypeintcanbe.Noticethatthetypebeingdeclaredinatypedefappearsinthepositionofavariablenamenotafterthewordtypedef.
第13题:
数组与指针的区别与联系
main()
{
char*p;
charbuf[10]={1,2,3,4,5,6,9,8};
p=(buf+1)[5];
printf("%d",p);
}
这段程序的输出是:
(a)5
(b)6
(c)9
(d)以上都不对
第13题:
(c)
Ifthetypeofanexpressionis"arrayofT"forsometypeT,thenthevalueoftheexpressionisapointertothefirstobjectinthearray,andthetypeoftheexpressionisalteredto"pointertoT"
So(buf+1)[5]isequvalentto*(buf+6)orbuf[6]
第14题:
Voidf(char**);
main()
{
char*argv[]={"ab","cd","ef","gh","ij","kl"};
f(argv);
}
voidf(char**p)
{
char*t;
t=(p+=sizeof(int))[-1];
printf("%s",t);
}
这段程序的输出是:
(a)ab
(b)cd
(c)ef
(d)gh
第14题:
(b)
p+=sizeof(int)pointtoargv[2]
(p+=sizeof(int))[-1]pointstoargv[1]
第15题:
#include
intripple(int,...);
main()
{
intnum;
num=ripple(3,5,7);
printf("%d",num);
}
intripple(intn,...)
{
inti,j;
intk;
va_listp;
k=0;
j=1;
va_start(p,n);
for(;j { i=va_arg(p,int); for(;i;i&=i-1) ++k; } returnk; } 这段程序的输出是: (a)7 (b)6 (c)5 (d)3 第15题: (c) Whenwecallripplevalueofthefirstargumentpassedtorippleiscollectedinthenthatis3.va_startinitializeptopointtofirstunnamedargumentthatis5(firstargument).Eachcallofva_argreturnanargumentandstepptothenextargument.va_argusesatypenametodeterminewhattypetoreturnandhowbigasteptotakeConsiderinnerloop (;i;i&=i-1)k++/*countnumberof1bitini* infivenumberof1bitsis(101)2 insevennumberof1bitsis(111)3 hencekreturn5 example leti=9=1001 i-1=1000 (i-1)+1=i 1000 +1 1001 Therightmost1bitofihascorresponding0bitini-1thiswayi&i-1,inatwocomplementnumbersystemwilldeletetherightmost1bitI(repeatuntilIbecome0givesnumberof1bits) 第16题: intcounter(inti) { staticintcount=0; count=count+i; return(count); } main() { inti,j; for(i=0;i<=5;i++) j=counter(i); } Thevalueofjattheendoftheexecutionofthethisprogramis: (a)10 (b)15 (c)6 (d)7 第16题: (b) Theansweris(b) Staticvariablecountremaininexistenceratherthancomingandgoingeachtimefunctioniscalled sofirstcallcounter(0)count=0 secondcallcounter (1)count=0+1; thirdcallcounter (2)count=1+2;/*count=count+i*/ fourthcallcounter(3)count=3+3; fifthcallcounter(4)count=6+4; sixthcallcounter(5)count=10+5;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 考查 嵌入式 开发人员 最好 16 道题