已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第十一章 结构体与共用第四章 循环结构 参考答案一、选择题:1. B 解析:a的值为1,a6为真,执行循环体,b的值加a后为3,a的值加2后为3,b的值与10求余运算后值为3。 a的值为3,a6为真,执行循环体,b的值加a后为6,a的值加2后为5,b的值与10求余运算后值为6。 a的值为6,a6为真,执行循环体,b的值加a后为11,a的值加2后为7,b的值与10求余运算后值为1。 a的值为7,a0&x0&x0&x0&x3-5-7-9,语句s+=1每次执行使s增加的数为:2,4,6,8,10,所以s的值为自然数110中偶数的值。10. C 解析:C项s=s+1/n, 1/n首先运算,n为整型变量,1也是整型变量,当n=210时,1/n的值为整数0,故C不正确11. B 分析过程与第6题类似。12. C13. A从键盘输入 1 2 3 4 5 0后,程序从main函数开始执行,先将1读入到s变量中,while的判断条件s0成立,则执行循环体。循环体语句是一个switch结构的语句,依据s的值去执行相应的case语句,直到碰到break语句跳出switch结构。第一次s为1,执行case 1: 此时输出6,没有碰到break语句,继续执行case 2:输出5,紧接着碰到break语句跳出本次switch结构。然后程序再次读入整数2再次执行while循环。此题需要理解switch语句的执行过程。14. D 解析:在循环中当x等于0,3,6,9时x%3等于0,这时会进入if语句执行printf语句,在输出前x会先自加。屏幕上输出14710。15. D 解析: 注意a变量在for循环的表达式3和循环体中都有改变。16. 2345 解析:选择中没有此答案。本题注意的是在循环第一次进入switch语句的时候是执行的default后面的语句块,由于没有break,所以还会执行case2:case4:后面的语句。17. A解析: 首先执行+n,判断条件表达式n=0为假退出循环。B条件表达式1永远为真是无限循环,C条件表达式n的值为10永远为真是无限循环,D没有条件表达式,所以没有退出条件,是无限循环。此题要注意的是0为假,非0为真。18. B解析:此题考查for语句的嵌套以及if语句的执行。此题输出的结果是m=1。分析:第一次循环 i=1,j=319. D 解析:第一次循环x=8,x%30,进入if语句输出x的值为8,然后x自减1,执行continue立即进行下次循环条件判断。第二次循环x=6,x%3=0,不进入if语句,执行if语句后面的printf(“%d,”,-x),x先自减1再输出得到5。第三次循环x=4,x%30,进入if语句输出x的值为4,然后x自减1,执行continue立即进行下次循环条件判断。第四次循环x=2,x%30,进入if语句,输出x的值为2,然后x自减1,执行continue立即进行下次循环条件判断。第五次循环x=0,判断表达式x0为假。结束循环输出结果为8,5,4,2。答案D20. C解析:第一次循环a=0,a%2=0,进入if语句的else部分输出字符A,第二次循环a=1,a%2=1,进入if语句输出字符2, 第三次循环a=2,a%2=0,进入if语句的else部分输出字符C, 第四次循环a=3,a%2=1,进入if语句输出字符4, 第五次循环a=4,a%2=0,进入if语句的else部分输出字符E, 第六次循环a=5,a%2=1,进入if语句输出字符6,此时a=6,跳出循环,因此最终结果输出:A2C4E6。21. A22. B 解析:外层循环3次,i的值在内层循环中依次为1,2,3内层循环次数依次为3,2,1次。23. D 解析:代码“if(n%3!=0) continue;”无实际意义。当n自加到4的时候结束循环。答案D。24. D解析: 表达式2为赋值语句k=1,条件永远为真,会进入死循环。答案D25. A 解析:0%任何数等于0,所以第一次循环的时候就进入了if语句退出了for循环。i=21,i20为假,退出了while循环。a的值为21。26. D 解析:i的初值为0,第一次循环的时候满足i0,进入第一个if语句,执行continue直接进行下次循环,i的值没有改变。第二次循环又重复了第一次循环的操作,所以是死循环。27. B解析: 控制每行输出“*”号的过程。一共四行,每行输出奇数个。二填空题:1. 7 解析:从键盘输入14 63后程序将14赋给变量m,63赋值给变量n,最外层的while条件m!=n为真,进入循环体。循环体语句是两组while循环,依次计算改变m、n的值直到m=n时程序结束,因此最终输出m的值为7。2. 11解析:循环的判断表达式为i5,i的初值是1,所以i得值依次是1,2,3,4。sum=sum+1+2+3+4,sum的值等于11.答案是113. n=n/10 解析:此题的解法是先用输入的数据%10可以得到个位数,再让输入的数据除以10,使十位变成个位。循环使用上面的方法。当只剩下个位的时候也就是n小于10的时候n/10等于0退出循环。所以填入的是“n=n/10”。4. 3 4解析:此题考查for循环语句的执行机制。表达式3在跳出循环前会执行一遍,因此i的值最后为3。5. 5解析:for循环语句的循环体是空语句。6. 6 解析:此题属于循环的嵌套。当i=1时,输出0个号,当i=2时,输出1个号,当i=3时,输出2个号,当i=,4时,输出3个号,共输出6个号。7. 0 解析:getchar()只能获得单个字符,输入“1234567890”ch的值为1。循环条件为假,循环一次也没有执行。答案为:0 8. 23 解析:参考第3题。答案:543219. k=n k+解析: 见书59,64页while和for循环的执行过程。答案:k=n k+10. ACE解析:理解字符转化为整形数使用到ASCII码,a的ASCII码是97,f是102,A是65。答案是ACE11. k=n12. 23 解析:此题需理解的是在switch中case后面没有break的话会继续执行下一个case或default后面的语句。答案为2313. 1 3 2 解析:m=0,n=0,k=0,i=9当i值为9时,i=11为真,执行switch语句,(i/10)的值为0,匹配case 0,执行m+,n+,再执行break语句,跳出switch体,再执行i+, i值为10;此时m值为1,n的值为1,k的值为0.当i值为10时,i=11为真,执行switch语句,(i/10)的值为1,匹配default,执行k+,n+,结束switch体,执行i+,i值为11. 此时m值为1,n的值为2,k的值为1.当i值为11时,i=11为真,执行switch语句,(i/10)的值为1,匹配default,执行k+,n+,结束 switch体,执行i+,i值为12. 此时m值为1,n的值为3,k的值为2. i值为12时,i=11为假,结束for循环。最后输出m,n,k的值132.14. i10 i%3 解析:根据题意先得到100以内所有个位是6的数,在判断哪些能被3整除。答案为i10 i%3!=0。15. 074 解析:当a的值为0时,a20为真,则执行b=a%10后b的值为0,执行putchar函数后输出字符0,for循环中表达式3中每次a递增7,所以第二次循环时,a的值为7,a20为真,则执行b=a%10后b的值为7,执行putchar函数后输出字符7。第三次a的值为14,a20为真,则执行b=a%10后b的值为4,执行putchar函数后输出字符4,此时执行表达式3后a的值为21,a20条件为假,循环结束。因此最终答案为输出:074第五章 函数 参考答案一 选择题1.C 解析:在C程序的书写时,严格的缩进要求可以增强程序的可读性,但是不会影响程序的编译于运行。2.B 解析:在C程序中必须有且仅有一个主函数为main函数,它是程序的入口和出口。但是没有规定它在程序中具体的位置。3.A4.B5.A 解析:函数的实参可以使被调用函数的调用语句。但是总之函数的实参个数之间用逗号隔开,个数,类型分别于形参的一一对应。6.B 解析:当程序在函数体中执行时,遇到return语句结束函数的调用。即使函数体中有多个return语句,但是遇见第一个return语句时函数的调用就结束了,后面的return语句是不会再执行的(也就是说即使有多条return语句,最终执行的只有一句)。而返回值是void类型的函数一般有return语句是缺省的,如果要有不能return语句后面不能有返回值,可以是return;;如果函数体中没有使用return语句,当函数调用结束后,还是会回到调用处的。7.B 解析:其他解析同上。return语句中可以有表达式和常量,变量等。8.D.解析:调用语句可以出现在表达式,实参和当一句话独立存在,但是不能出现在形参中,形参一般情况下是变量。9.C 解析:考察的是函数的调用;其中的实参有两个,实参1为逗号表达式最终的值,实参2为自增表达式的值。10.C解析:f1(x,y)的作用是返回x、y中较大的,f2(x,y)的作用是返回x、y中较小的。d=f1(a,b)=f1(4,3)=4d=f1(d,c)=f1(4,5)=5e=f2(a,b)=f2(4,3)=3e=f2(e,c)=f2(3,5)=3此时各值为a=4,b=3,c=5,d=5,e=3,f=a+b+c-d-e=4。所以答案d, f , e为5, 4, 311.A解析:函数不能嵌套调用,但是可以自己调用自己成为递归;被调用函数在调用之前可以先声明,再调用,后定义;构成C程序的基本单位是函数而不是语句。12.C 解析:fun1(a)=a2,fun2(x,y)=(int)(fun1(x)+fun1(y)=(int)( x2+ y2),所以fun1(1.1,2.0)=(int)(1.21+4.0)=(int)5.21=5由于w是double型的,所以w的值为5.0。13.C 解析:函数的值是单向传递的,只能是从实参传到形参,而且只有当从实参传到形参时才为形参分配一定的存储空间。等函数调用结束后,这个空间就会被释放掉。14.B 解析:考察函数的调用。调用语句中的实参有两个,实参1为表达式2*a,其值为8,实参2为调用语句fun(b,c),在这个调用语句中又有两个实参分别传给fun函数的形参a和b,调用结束后返回的值为5;故实参2的最终值为5,再次调用函数fun,分别把8传给a,把5传给b,最后返回的结果值为6.故答案选B.15.C 解析:函数不能嵌套定义。改变形参的值不会影响实参的值。函数体中要使用C中的库函数,得包含定义其所在的头文件。16.A 考察的是函数的声明。在函数声明时,声明是一句话,其中形参的类型不能省略,但是形参名可以省略;声明时形参名可以和定义时的形参名不相同,但是类型必须匹配;声明时必须指出函数的返回值类型和名称,这两点必须与定义时的返回值类型和名称一一对应。17. B 解析:允许这种函数说明的方式存在。如果只在主函数中说明,则只能在主函数中调用f;如果在主函数以前说明,则包括主函数的所有函数都可以调用,如果同时主函数又说明了,则不影响。18. B19. C20. A 解析:程序的执行总是从main函数开始,在main函数结束,无论main函数在程序的什么地方。21. D22. A 解析:函数f(int v,int w)的功能是将实参v和w进行交换,但是实参值的变化对形参没有影响,所以本题中x,y,z中的值不发生变化。23. C 解析:本题考察的是函数的递归调用。在解决这类题时,先找出何时被调用函数调用结束,然后确定被调用函数总共被调用了几次。再分析最终的结果。24. B上面已经分析过同类问题。25. A 考察的还是递归调用的问题。26. B.同时。27. A.解析:在主函数中确定循环的次数为三次,实参i的值分别为0,10.20.故调用f函数的次数为3次;故结果为1+101+401=503.28. B.解析:主函数中第一次调用fun函数时实参为3,故调用fun函数时在函数体中循环了3次,输出了3个*;第二次调用fun函数时实参为4,故输出了4个*;由此可以确定选择B答案。29. B30. D 主函数的循环语句中对fun函数总共调用了4次,每次都返回形参a的值;只有在把值从实参传给形参时才为形参分配存储空间,等函数调用结束,这个空间会消失掉。所以形参a的值在每次调用时都为2,故最后主函数中的s的值为2*2*2*2=16.二填空题1. 1.0,1.0,1.0解析:分别求出变量的初始值。a=a*x为的是求xn ,所以其初始值为1,b=b*i位的是求n!,所以其初始值为1,当n=0时,s=1,所以s的初始值为1。由于定义的是double型的数据,所以答案为a=1.0,b=1.0,s=1.0;2.m=fun(a,4)+fun(b,4)-fun(a+b),4);解析:由程序可以看出fun(x,n)=xn。fun(a,4)=a4, fun(b,4)=b4,fun(a+b,3)=(a+b)3,当要计算m= a4+ b4+(a+b)3 时,函数调用语句为m= fun(a,4)+ fun(b,4)+ fun(a+b,3);3. x,x*x+1解析:1)求f(x)的累加和,即为求f(0)+f(1)+ f(2)+ f(3)+ f(4)+,函数SunFun来实现此功能。括号中应该填入累加的序号值,即为x。2)f(x)=x2+1,F(int x)函数来实现这个功能,所以填写x*x+1。4. 5.0解析:fun1(a)=a2,fun2(x,y)=(int)(fun1(x)+fun1(y)=(int)( x2+ y2),所以fun1(1.1,2.0)=(int)(1.21+4.0)=(int)5.21=5由于w是double型的,所以w的值为5.0。5. 1 3 解析:fun函数是一个递归函数,主函数中调用的fun(3)共递归两次,fun(3)中又调用fun(3/2)即fun(1),先输出fun(1)中x的值,为1,然后再输出fun(3)中x的值为3。所以结果为1 3。6. double max解析:通过程序可以看出,main函数中使用了max函数,而其他地方没有对max函数进行说明。所以程序中应该对max函数进行说明。说明的格式为double max(double,double)。7.3,2,2,3 解析:同课本本章第三节例1。8. 2 5解析:同上面第5题相类似。9. 5510. 30 0第六章 指针 参考答案一、选择题1 答案:A 分析:本题主要考指针赋值,n2=n1;是把n2的值赋给n1,故根据指针赋值的定义可知选A,即把q所指对象的值赋给p所指对象。2 答案:B 分析:本题主要考指针定义,因为p指向变量x,故输出其值的时候应该是x的值。3 答案:C 分析:本题主要考指针的定义和赋值,C前面是定义一个量a并赋值为10,后面定义一个指针,并把a的值赋给这个指针。4 答案:D5 答案:A分析:本题主要考的是指针的变量的赋值,在使用scanf()函数的时候,后面跟的是一个地址,由于pa本身保存的是地址,故选A6 答案:D分析:本题主要考的指针的赋值及指向指针的指针的赋值,根据定义知选D。B的正确形式是*q2;C的正确形式应该是q=&p。7 答案:C分析:本题主要考的是全局变量和局部变量,以及指针的用法,第一个f(&a)的返回值是5,第二个返回值是2。8 答案:A 分析:本题主要考的是变量自加,指针传值,以及指针的赋值。通过第二行a=b可知p1,p2指向的变量的值相同,都指向了b所指的对象,也是p2所指的对象a,由于(*a)+;是实现a所指对象的自加,故由a变成b,故最终选A。9 答案:A 分析:本题主考NULL,一般来说当我们把一个空值以整数的形式输出出来的时候,默认的情况是0。10 答案:C11 答案:C 分析:本题主要考指针的指针,c先指向b,b是一个指针,它指向a,故c最终是指向a的,故其值是a中的值。12 答案:A 分析:本题主要考指针的赋值,我们不能把一个具体的值赋给一个指针变量。B选项是w,p指向同一对象。C是p指向a。D是把w所指对象的值赋给p所指对象。13 答案:B 分析:本题主要考指针传值,p,q分别指向a,b,然而r会指向它们的较小值。14 答案:D 分析:在D中把一个整形变量的值赋给一个指针的地址,故而是错的。应该写成p=&a。15 答案:D16 答案:D17 答案:C 分析:本题主要考指针标识符*和乘号*的区别,*p=*p1*(*p2)中第1,2,4个*号是指针标识符,而第三个是乘号,故其运算的结果是3。18 答案:A19 答案:A 分析:本题主要说的是函数的递归调用,函数fun()实现的功能是从1加到n,然后返回给主函数。20 答案:D分析:A不能把一个具体的值赋给一个指针变量。B q是指向指针的指针只能保存指针的地址。C同B。21 答案:D分析:A指针赋处初值时不能把一个具体的值赋给一个指针变量指向的地址。B语法错误,C不能发地址赋给浮点型变量。22 答案:C分析:scanf()函数的输入数据列表应该是合法的地址表达式。23 答案:D分析:A中b需要预先定义,B中字符变量b只能接收单个字符。C中二级指针应定义为*c。24 答案D25 答案:B二、填空题1 答案:8 4 分析:void f()函数里的x,y分别是一个指针变量和整型变量,指针x指向一个整型的变量,即指向主函数里的x,故在函数void f()里修改指针x的值,会影响到主函数里的x的值,但修改void f()里的y的值却不会影响到主函数里的y的值。因为主函数x传的是地址,y传的是值。2 答案:d。 3 答案:35分析:p,q分别指向x,y,然后调用函数swap();它的功能是把两个指针所指向的对象交换,原来a,b分别指向x,y,但交换后分别指向y,x,所以并不把指向的对象的值交换。 函数返回后,p,q仍然分别指向x,y。故其值不变。4 答案: n=n/10分析:把n除以10,每执行一次就可以把数的阳未位去掉,因为两个整数相除,不会保留小数,故最低位会丢掉,并且把数缩小到十分之一。然后依次从个位到最高位把数字输出。5 答案:654321第七章 一维数组 参考答案一选择题1. 答案:B分析:A答案,初始化值的个数超过了常量表达式的值。C答案,左边定义的是普通字符变量。D答案,整型数组不能赋字符串。2. 答案:D考点:一维数组的定义分析:一维数组定义的形式为:类型名 数组名常量表达式注意点:(1)常量表达式不能省略,不能为变量,但可以使宏定义名 (2)数组名是用户定义标识符。A答案中没有02008这种形式的常量表达式。B中省略了常量表达式,因此是错误的。C答案常量表达式不能为变量。3. 答案:D分析:常量表达式不能为变量。4. 答案:B 考点:循环和数组元素的引用分析:int p8=11,12,13,14,15,16,17,18(1) i=0,j=0,判断:i+7为真,i的值为1,判断if中的表达式(p1%2)为假,不执行j+=p1(2) i=1,j=0,判断:i+7为真,i的值为2,判断if中的表达式(p2%2)为真,执行j+=p0后j的值为13(3) i=2,j=13,判断:i+7为真,i的值为3,判断if中的表达式(p3%2)为假,不执行j+=p1(4) i=3,j=13,判断:i+7为真,i的值为4,判断if中的表达式(p4%2)为真,执行j+=p0后j的值为28(5) i=4,j=28,判断:i+7为真,i的值为5,判断if中的表达式(p5%2)为假,不执行j+=p1(6) i=5,j=28,判断:i+7为真,i的值为6,判断if中的表达式(p6%2)为真,执行j+=p0后j的值为45(7) i=6,j=45,判断:i+7为真,i的值为7,判断if中的表达式(p1%2)为假,不执行j+=p1(8) i=7,j=45,判断:i+7为假,结束循环(9) 输出j的值为455. 答案:C分析: 第一次循环,i=0,i%2=0,a0%2= 0,a0=a0+1=3;第二次循环,i=1,1%2=1,a1=0;第三次循环,i=2,a2%2=1,a2=a2-1=4;第四次循环, i=3,i%2=1,a3=0。6. 答案:D分析:ABC三个答案都是给所定数组范围外的元素赋值7. 答案:A分析:本题考察点是,用scanf函数赋值时,空格,回车等间隔符都是输入终止符8 答案:B分析:在定义指针变量s时将数组名a赋给s,则s指向数组a的第一个元素,s+3就指向数组a中的第三个元素9. 答案:A分析:同第8题10. 答案:B分析: 本题是统计数组s中所放的字符串中有多少个数字字符。0代表着字符串的结束,所以,只有0,1,2三个11答案:C 分析:数组x的类型是double,所以输入格式控制符应该用“%lf”,scanf后面跟,地址,所以选c12. 答案: D分析:循环、数组元素的引用和逻辑运算int p7=11,13,14,15,16,17,18(1) i=0,k=0,判断:i7&p0%2为真,执行k=k+p0后k的值为11,执行i+后i的值为1。(2) i=1,k=11,判断:i7&p1%2为真,执行k=k+p1后k的值为24,执行i+后i的值为2。(3) i=2,k=24,判断:i7&p2%2为假,结束循环。注意:27&p2%2左边为真,但是右边为假,那么整个表达式为假。(4) 输出k的值为24。13. 答案:A分析:循环嵌套,交换int x=1,3,5,7,2,4,6,0第一个嵌套循环(1) i=0,i=0为真,判断(x3x2)为真,进行交换后x=1,3,7,5,2,4,6,0,j-2) j=1,j=0为真,判断(x2x1)为真,进行交换后x=1,7,3,5,2,4,6,0,j3) j=0,j=0为真,判断(x1x0)为真,进行交换后x=7,1,3,5,2,4,6,0,j4) j=-1,j=0为假,i+(2) i=1,i=1为真,判断(x3x2)为真,进行交换后x=7,1,5,3,2,4,6,0,j-2)j=1,j=1为真,判断(x2x1)为真,进行交换后x=7,5,1,3,2,4,6,0,j3)j=0,j=1为假,i+(3) i=2,i=2为真,判断(x3x2)为真,进行交换后x=7,5,3,1,2,4,6,0,j-2)j=1,j=2为假,i+(4)i=3,i3为假第二个嵌套循环:(1)i=0,i3为真1)j=4,j7为真,判断(x5x4)为假,j+2)j=5,j7为真,判断(x6x5)为假,j+ 3)j=6,j7为真,判断(x7x6)为真,进行交换后x=7,5,3,1,2,4,0,6,j4)j=7,j7为假,i+(2) i=1,i3为真1)j=4,j6为真,判断(x5x4)为假,j+2)j=5,j6为真,判断(x6x5) 为真,进行交换后x=7,5,3,1,2,0,4,6,j+ 3)j=6,j6为假,i+(3) i=2,i3为真1)j=4,j5为真,判断(x5x4)为真,进行交换后x=7,5,3,1,0,2,4,6,j+2)j=5,j5为假,i+(4) i=3,i3为假第三个循环:for(i=0;i8;i+)输出xi的值为:7531024614. 答案:C 分析:地址是常量,不能进行自增运算。15. 答案:C 分析:每次循环,数组b的元素依次作为数组a的下标16. 答案:A分析:用strlen求字符串长度时,只算实际字符的个数17. 答案:C分析:本题调用fun函数时,参数传递,第一个是址传递,传递的是数组名也就是数组a中第一个元素的地址,第二个是值传递18. 答案:B分析:同17题,本题还有函数的递归调用,即:函数自己调用自己19. 答案:D分析:*p是数组的第一个元素,则(*p)+是给数组第一个元素的值加一20. 答案:C分析:第一个for循环中,数组s的元素作为数组c的下标依次相加21. 答案:D分析:a+i是数组a中第i个元素的地址,再加*号就是第i个元素的值了,不用再加*号22. 答案:A分析:p指向数组a中第一个元素,则p+2就是第三个元素23答案:B分析:p指向的是数组a的第三个元素,q指向的数组a的第五个元素24. 答案:C 分析:p0值为数组a的第二个元素4,p1值为6,p2值为825. 答案:A 分析:p指向数组a的第一个元素,通过*p依次将数组a中元素数出来26. 答案:D分析:p为指针变量,不能赋普通数值,只能赋地址27. 答案:D分析:把a3地址赋给p,所以p0就是a3,p5就是a8。28 答案:B 分析:s0是数组第四个元素,所以,s2是数组第六个元素029答案:C 分析:s是数组名也是数组第一个元素的地址,所以,*s是数组第一个元素的值r,r+2就是t30.答案:B分析:sizeof是求x在内存中占多少字节,strlen是算字符串的实际长度31.答案:C分析:通过循环将数组t中奇数位上的值依次相加32.答案:C分析:指针数组的定义33.答案:D分析:通过调用函数fun,将实参a传递给形参s,则s就指向数组a中第一个元素,fun函数中循环的功能是输出数组a中ASCII值为偶数的字母34.答案:A分析:考点:数组名和指针变量该题中定义了一个一维数组,其中的元素为20个,定义了指针变量p,将数组名赋值给变量p,即:该指针变量指向了数组的首地址,数组的第一个元素。A、*p得到的值为数组中的第一个元素的值,和s0等价。B、s中的元素个数为20 ,p所指的字符串为“Beijing”为6个C、s为数组名。是首地址,为地址常量,不是变量。D、s数组中的内容为B,e,i,j,i,n,g,0,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0,而p所指的内容为:“Beijing”,故不相同。故选答案A。35. 答案:A分析:考点:字符串字符串的存储:用数组存储,在最后的末尾有一个0.定义了一个指针变量pc.将数组名赋值给变量pc,即pc指向了数组的首地址,pc+5的到的是第下标为5的字符的地址,即:z的地址,*(pc+5)得到的为字符z的值。所以最后的值为z.36. 答案:D分析:通过赋值,让指针p指向数组a的最后一个元素,再给p减一,指向数组a的第三个元素,然后将其值赋给y,所以,选D37. 答案:D分析:在main函数中,指针变量r指向数组a的第一个元素,通过函数调用,f函数中的指针变量p也指向数组a的第一个元素,所以,p+3就是数组第四个元素,但数值传递的话,形参的改变是不影响实参的,所以选D38 答案:D分析:函数fun的功能是输出数组P的第5个元素,在主函数中,把a3的地址赋给函数fun,因为在C语言中,数组的下标是从0开始,所以数组中输出的第8个元素,即9。39答案:D分析:考点:函数间数据的传递函数的调用:如果传递的是普通变量,则在传递过程时为:单向传递;如果传递的是数组名、变量的地址和指针时,值为双向传递。40答案:C分析:将fun函数调用三次,大家要注意:参数传递时,有地址传递也有数值传递41答案:A分析:调用函数fun时,参数一为地址传递,参数二为数值传递42答案A:分析:调用fun函数时,实参为指针数组名,所以,形参必须为二级指针43答案:C分析:fun函数中第一个while循环是将字符串中a前面的*全部去掉,第二个while循环是将a指向的字符串赋给b44答案:B分析:函数的递归调用45答案:B分析:调用prt函数时,实参有地址传递也有数值传递46答案:A分析:指针q赋空值,没有指向,所以不能赋普通值二、填空题1 答案:24 分析:考点:数组和循环。I,j的初值为0 。判断while括号中表达式的值,如果为真值,执行后面的循环语句。1.i7&pi%2=1 表达式可以表示为07&11%2=1为真值,表达式的值为真值。执行 j+=pi+;变量i变为1,i+表达式的值为0.p0的值为11,j=j+11=11;2.i的值为1,pi的值为13,所以表达式i7&pi%2=1的值为真值,执行语句j+=pi+;变量i变为2,i+表达式的值为1.p1的值为13,j=j+13=24;3i的值为2,pi的值为14,所以表达式i7&pi%2=1的值为假值。退出循环。最后变量j的值为24.最后输出变量j的值为:242 答案:1111分析:考点:for循环和数组。这是一个for循环。其中红色框内的内容为根在for语句后面的一条语句,当for语句中的表达式2的值为真值时,则执行后面的语句。1. 执行表达式1,变量i变为1,执行表达式2,表达式2:i=4为真值,执行语句,将ni-1*2的值赋值给ni;ni-1的值为n0即0;所以ni-1*2的值为0,即ni得到的值也为0,执行完该语句后执行输出语句,输出的是ni+1的值,即1.执行表达式3:变量i变为2;2. 执行for语句表达式2,表达式2:i=4为真值,执行语句,将ni-1*2的值赋值给ni;ni-1的值为n1即0;所以ni-1*2的值为0,即ni得到的值也为0,执行完该语句后执行输出语句,输出的是ni+1的值,即1. 执行表达式3:变量i变为3;3. 执行for语句表达式2,表达式2:i=4为真值,执行语句,将ni-1*2的值赋值给ni;ni-1的值为n2即0;所以ni-1*2的值为0,即ni得到的值也为0,执行完该语句后执行输出语句,输出的是ni+1的值,即1. 执行表达式3:变量i变为4;4. 执行for语句表达式2,表达式2:i=4为真值,执行语句,将ni-1*2的值赋值给ni;ni-1的值为n3即0;所以ni-1*2的值为0,即ni得到的值也为0,执行完该语句后执行输出语句,输出的是ni+1的值,即1. 执行表达式3:变量i变为5;5. 执行for语句表达式2,表达式2:i=4为假值,不执行语句,退出循环语句。所以最后得到的值为11113 答案:i-1 分析:将ai的元素移动到前一个位置,那么就是ai-1=ai4 答案;0或者填写 0 分析:字符串的结束标志05 答案:96 答案:107 答案:38 答案:149 答案:1310 答案:6分析:考点:指针、数组、多目运算符指针:指针是有指向,当对指针进行*号运算时,得到的值为该指针所指向的变量的值。多目运算符:表达式1 ?表达式2:表达式3当表达式1的值为真值时,执行表达式2的值。当表达式的值为假值时,执行表达式3的值。分析:该题中的p为指针变量,得到的数组中第一个元素的地址,即:指针变量指向了数组中的第一个元素,即a0;11答案:19分析:考点:指针、数组指针:指针是有指向,当对指针进行*号运算时,得到的值为该指针所指向的变量的值。分析:该题中的p为指针变量,得到的数组中第二个元素的地址,即:指针变量指向了数组中的第二个元素,即a1;1、 执行表达式1,变量x的值为0,执行表达式2的值:x3为真值,执行循环的语句:y+=*(p+x), p指向了数组中的第二个元素。p+x即得到的是第二个元素的地址,(*(p+y)得到的值为数组中第二个元素的值,即:4。所以语句y+=*(p+x);为y=y+4=1+4=5; 执行完后返回到for循环的表示的3:x+,变量x的值为1.2、 执行表达式2的值:x3为真值,执行循环的语句:y+=*(p+x), p指向了数组中的第二个元素。p+x即得到的是第三个元素的地址,(*(p+y)得到的值为数组中第三个元素的值,即:6。所以语句y+=*(p+x);为y=y+6=5+6=11; 执行完后返回到for循环的表示的3:x+,变量x的值为2.3、 执行表达式2的值:x3为真值,执行循环的语句:y+=*(p+x), p指向了数组中的第二个元素。p+x即得到的是第四个元素的地址,(*(p+y)得到的值为数组中第四个元素的值,即:8。所以语句y+=*(p+x);为y=11+8=19; 执行完后返回到for循环的表示的3:x+,变量x的值为34、 执行表达式2的值:x3为假值,退出整个循环。最后输出变量y的值。即:1912答案:6分析:定义了一个指针变量p,并将数组名a赋值给变量p,所以变量p指向了数组的第一个元素。13答案:5756分析:略(考试不考。省略,学员不用做)14答案:2 4分析:定义了指针变量p和指向指针的指针变量k.将数组名赋值给变量p,则p指向了数组的第一个元素,k=&p.即:将指针变量p的地址赋值给变量k,即:k指向了指针变量p.15 答案:13516 答案:P17 答案:21118 答案:7777654321第八章 二维数组 参考答案一、选择题1 答案:C 2 答案:B分析:定义二维数组时,若不指定第一维,必须给该数组赋值,D 赋值的是三行3 答案:D分析:未指明第二维长度4 答案:D分析:A)N是变量,B)前者是一行两列,后面是两行一列,C)必须指明第二维长度5 答案:C分析:未指明第二维长度6 答案:D分析:ABC越界7 答案:B分析:存放顺序a00,a01.a05,a10,a11.a158 答案:C分析:intm3=1,4,7,2,5,8,3,6,9;由可判定m数组是三行三列的数组, 输出的是m数组的第三行的值9答案:A分析:if(i2)a1i=a1i-1;由此可判定a10=3,a11=4, else a1i=1;a12=1a01=210 答案: B分析:将2,6,9,2,相加11答案:B分析:t20=3,t11=5,t02=712 答案:B分析:将a00分别和a00,a11,a22,a33比较,若a00小则交换,再将a11和a22,a33比较,若a11小则交换13 答案:A 分析:将每列排序,依次输出a00,a11,a22,a3314 答案: C15 答案:B分析:p0 指向a10的地址,p0+1指向的是a11的地址16 答案:A17 答案:D分析:相当于给a33赋值0-9,输出a10a11,a1218 答案: A 分析: 是二维数组的指针定义方式。假设该数组为a,p指向该数组的a00,*p表示取该行的值。p+i表示指针移动了i个位置,即此时p指向ai0,*(p+i)表示取第i行的值,*(p+i)j,则指定了取出第i行第j个数值19答案:B20答案:B分析:见1821答案:D22 答案:C23 答案:C24 答案:C分析:同15题25 答案:B26 答案:A分析:pa1i等同a1i,见第9题27答案:B分析:for(j=i;j=i;j+) t=t+bibjj;/t=b00+b11+b2228答案:B分析:由输出数字的图形来看,每行第一个数的第二维的索引值都和第一维的索引值相等29答案:A分析:该函数的功能是求出数组的最小值及最小值的索引,由数组中的值可看出最小值为-5
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 46445.1-2025影像材料和印刷品耐磨性第1部分:通用摩擦试验方法
- 灌肠相关试题及答案
- 2025年传统手工艺品数字化推广项目可行性研究报告及总结分析
- 2025年食品外卖行业运营可行性研究报告及总结分析
- 2025年城市防灾减灾体系建设可行性研究报告及总结分析
- 2025年社区服务创新平台可行性研究报告及总结分析
- 2025年碳中和目标下的能效管理系统可行性研究报告及总结分析
- 2025年卫生招聘考试之卫生招聘(计算机信息管理)模考模拟试题(全优)
- 2025年数字化媒体广告投放优化实施方案
- 2025年欧盟数据合规协议
- 硬盘质保合同协议
- 2025-2030应急指挥通信系统及子行业应急指挥车行业市场深度调研报告
- 护理学专业职业素养教育
- 混凝土机械知识培训课件
- 《实验室应急预案》专题培训
- 门窗订购合同范本
- 《海洋调查与监测》课件
- 国际合作基本信息表
- 设计师与设计公司合作协议范本3篇
- 血小板减少护理查房课件
- 人员退休欢送会34
评论
0/150
提交评论