江苏省计算机等级考试二级C语言笔试辅导

上传人:m**** 文档编号:584784417 上传时间:2024-09-01 格式:PPT 页数:155 大小:1.54MB
返回 下载 相关 举报
江苏省计算机等级考试二级C语言笔试辅导_第1页
第1页 / 共155页
江苏省计算机等级考试二级C语言笔试辅导_第2页
第2页 / 共155页
江苏省计算机等级考试二级C语言笔试辅导_第3页
第3页 / 共155页
江苏省计算机等级考试二级C语言笔试辅导_第4页
第4页 / 共155页
江苏省计算机等级考试二级C语言笔试辅导_第5页
第5页 / 共155页
点击查看更多>>
资源描述

《江苏省计算机等级考试二级C语言笔试辅导》由会员分享,可在线阅读,更多相关《江苏省计算机等级考试二级C语言笔试辅导(155页珍藏版)》请在金锄头文库上搜索。

1、1江苏省计算机等级考试江苏省计算机等级考试二级二级C语言语言笔试辅导笔试辅导2笔试概况笔试概况考试时间:考试时间:2小时小时合格、优秀成绩要求合格、优秀成绩要求内容题型及分值内容题型及分值信息技术信息技术选择题(选择题(20分)分)C语言语言选择题(选择题(10分)分)填空题(填空题(30分):简单填空(分):简单填空(5分)分)阅读程序(阅读程序(13分)分)完善程序(完善程序(12分)分)答题策略答题策略3语法考试要求及考题解析语法考试要求及考题解析(2007秋秋2010春)春)1.C语言基本概念语言基本概念源程序格式、风格和结构。源程序格式、风格和结构。main函数特性。函数特性。C程序

2、保存程序保存。注释位置。注释位置。【考题解析考题解析】填空题填空题在一个在一个C语言源程序中,语言源程序中,必不可少的是必不可少的是。答案:答案: mainmain函数定义函数定义单选题单选题.以下叙述中正确的是以下叙述中正确的是。A在编译时可以发现注释中的拼写错误在编译时可以发现注释中的拼写错误BC语言程序的每一行只能写一条语句语言程序的每一行只能写一条语句Cmain()必须位于程序的开始必须位于程序的开始DC语言程序可以由一个或多个函数组成语言程序可以由一个或多个函数组成答案:答案:D D4单选题单选题在一个源程序中在一个源程序中main函数的位置函数的位置。A必须在最开始必须在最开始B必

3、须在最后必须在最后C必须在预处理命令的后面必须在预处理命令的后面D可以在其他函数之前或之后可以在其他函数之前或之后答案:答案:D单选题单选题下列叙述中正确的是下列叙述中正确的是。A.main函数必须出现在其他函数之前函数必须出现在其他函数之前B.main函数中至少必须有一条语句函数中至少必须有一条语句C.C程序总是从程序总是从main函数的第一条语句开始执行函数的第一条语句开始执行D.C程序总是在执行完程序总是在执行完main函数的最后一条语句后结束函数的最后一条语句后结束答案:答案:C 5单选题单选题以下叙述中正确的是以下叙述中正确的是。A.C语言系统以函数为单位编译源程序语言系统以函数为单

4、位编译源程序B.main函数必须放在程序开始函数必须放在程序开始C.用户定义的函数可以被一个或多个函数调用任意多次用户定义的函数可以被一个或多个函数调用任意多次D.在一个函数体内可以定义另外一个函数在一个函数体内可以定义另外一个函数答案:答案:C全国选择题全国选择题以下叙述中正确的是以下叙述中正确的是()()。A)C语言程序将从源程序中第一个函数开始执行语言程序将从源程序中第一个函数开始执行B)可以在程序中由用户指定任意一个函数作为主函数,程可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行序将从此开始执行C)C语言规定必须用语言规定必须用main作为主函数名,程序将从此开始作为

5、主函数名,程序将从此开始执行,在此结束执行,在此结束D)main可作为用户标识符,用以命名任意一个函数作为主可作为用户标识符,用以命名任意一个函数作为主函数函数答案:答案:C6全国选择题全国选择题以下叙述中正确的是以下叙述中正确的是()。A)C程序中的注释只能出现在程序的开始位置和语句的后程序中的注释只能出现在程序的开始位置和语句的后面。面。B)C程序书写格式严格,要求一行内只能写一个语句程序书写格式严格,要求一行内只能写一个语句C)C程序书写格式自由,一个语句可以写在多行上程序书写格式自由,一个语句可以写在多行上D)用用C语言编写的程序只能放在一个程序文件中语言编写的程序只能放在一个程序文件

6、中答案:答案:C全国选择题全国选择题以下叙述中正确的是以下叙述中正确的是()。A)C程序的基本组成单位是语句程序的基本组成单位是语句B)C程序中的每一行只能写一条语句程序中的每一行只能写一条语句C)简单简单C语句必须以分号结束语句必须以分号结束D)C语句必须在一行内写完语句必须在一行内写完答案:答案:C7基本类型数据的表示及使用基本类型数据的表示及使用系统预定义类型标识符、类型修饰符的使用系统预定义类型标识符、类型修饰符的使用基本类型常量的表示及使用基本类型常量的表示及使用字符串常量形式字符串常量形式 关键字。关键字。标识符。标识符。符号常量的定义与使用符号常量的定义与使用基本类型变量的声明、

7、初始化基本类型变量的声明、初始化,直接引用变量直接引用变量【考题解析考题解析】单单选选题题在在C语语言言源源程程序序中中,不不带带任任何何修修饰饰符符的的浮浮点点数数直直接接量量(例如:(例如:3.14)都是按)都是按类型数据存储的。类型数据存储的。答案:答案:double单单选选题题已已知知sizeof(int)的的值值为为2,为为将将10!的的值值存存储储到到变变量量f中中(10!=3628800),变量),变量f的类型应声明为的类型应声明为。AlongintBintCshortintDunsignedint答案:答案:A A8单选题单选题以下常量表示中正确的是以下常量表示中正确的是(22

8、)。A.xff B.5L C.aEbD.3.14U答案:答案:B B单选题单选题以下语句中有语法错误的是以下语句中有语法错误的是。A.printf(%d,0e);B.printf(%f,0e2);C.printf(%d,0x2);D.printf(%s,0x2);答案:答案:A A9单选题单选题以下选项中不能用作变量名的是以下选项中不能用作变量名的是。A_floatBswitchCsumD_123答案:答案: B B填填空空题题在在C语语言言系系统统中中,如如果果一一个个变变量量能能正正确确存存储储的的数数据据范范围围为为整整数数-32768 32767,则则该该变变量量在在内内存存中中占占(

9、3)个个字字节。节。答案:答案: 2 2单选题单选题以下选项中,不能用作以下选项中,不能用作标识符的是标识符的是。A.print B.FORC.&aD._00答案:答案:C单选题单选题以下选项中,以下选项中,是是C语言关键字。语言关键字。AprintfBincludeCfunDdefault答案:答案:D学校单选题学校单选题执行语句执行语句“printf(”byebye101101“);”时时输出到屏幕的结果输出到屏幕的结果为为(22)。答案:答案:byye101A10学校单选题学校单选题表达式表达式“1e-8/2+1.0f”值的数据类型是值的数据类型是(3)。A.intB.longC.flo

10、atD.double答案:答案:D学校单选题学校单选题以下局部变量声明中正确的是以下局部变量声明中正确的是(2)。A.intchar=2;B.voida=0;C.inta=b=0;D.inta,b=a=0;答案:答案:D11运算符和表达式的表示及使用运算符和表达式的表示及使用赋值表达式,赋值运算符的左值要求赋值表达式,赋值运算符的左值要求算术表达式。算术表达式。+、-运算符左值要求。溢出。运算符左值要求。溢出。关系表达式与逻辑表达式,逻辑表达式优化处理关系表达式与逻辑表达式,逻辑表达式优化处理逗号表达式逗号表达式条件表达式条件表达式表达式运算中操作数类型自动转换与强制转换表达式运算中操作数类型

11、自动转换与强制转换【考题解析考题解析】单单选选题题若若有有声声明明“doublex=3,c,*a=&x,*b=&c;”,则则下下列列语语句中错误的是句中错误的是 。 Aa=b=0;Ba=&c,b=a;C&a=&b;D*b=*a;答案:答案:C C12单选题单选题若有声明若有声明“charss8=”Red“;”,则则sizeof(ss)的值是的值是。A8B4C3D1答案答案:A单选题单选题设有定义和声明如下:设有定义和声明如下:#defined2intx=5;floaty=3.83;charc=d;以下表达式中有语法错误的是以下表达式中有语法错误的是。A.x+B.y+C.c+D.d+答案:答案:

12、 D D单选题单选题数学式数学式在在C程序中正确的表示形式为程序中正确的表示形式为。Asqrt(a)/2*bBsqrt(a)/2/bCsqrt(a)/2bDsqrta/(2*b)答案答案:B13单选题单选题已知有声明已知有声明“longx,y;”且且x中整数的十进制表示有中整数的十进制表示有n位数字(位数字(4n10),若要求去掉整数),若要求去掉整数x十进制表示中的最十进制表示中的最高位,用剩下的数字组成一个新的整数并保存到高位,用剩下的数字组成一个新的整数并保存到y中,则以中,则以下表达式中能正确实现这一功能的是下表达式中能正确实现这一功能的是。A.y=x/(10*(n-1)B.y=x%(

13、10*(n-1)C.y=x%(long)pow(10,n-1)D.y=x%(10 (n-1)答案:答案:C填空题填空题若有声明若有声明“doublex=10,y=5;”,则计算,则计算xy的库函数调的库函数调用形式是用形式是。答案:答案:pow(x,y)或或pow(10,5)填空题填空题若有声明若有声明“intx;”且且sizeof(x)的值为的值为2,则当,则当x值为值为时时“x+1x”为假。为假。答案:答案:3276714填空题填空题若若有声明有声明“floaty=3.14619;intx;”,则计算表达式则计算表达式“x=y*100+0.5,y=x/100.0”后后y的值是的值是。答案:

14、答案: 3.15 3.15 单选题单选题已知有声明已知有声明“inta=3,b=4,c;”,则执行语句,则执行语句“c=1/2*(a+b);”后,后,c的值为的值为。A.0B.3C.3.5D.4 答案:答案:A填空题填空题若有声明若有声明“inta=5,b=2;”,则表达式,则表达式“b+=(float)(a+b)/2”运算后运算后b的值为的值为。答案:答案:5填空题填空题已知有声明已知有声明“charch=g;”,则表达式,则表达式ch=ch-a+A的值为字符的值为字符的编码。的编码。答案:答案:G 15单选题单选题已有声明已有声明“inta=3,b=3,c=2;”,以下选项中值为以下选项中

15、值为0的表的表达式是达式是。A.!a&!b&cB.!a|!b|cC.a=b&b=cD.a=b&bc答案答案:A单选题单选题已知有声明已知有声明“inta=3,b=4,c=5;”,以下表达式中值为,以下表达式中值为0的是的是。A.a&bB.ay=2 .zyx.xy=1.x=(x=0,y=1,z=2)答案:答案:A16填空题填空题数学式数学式对应的对应的C语言表达式为语言表达式为。答案:答案:sqrt(fabs(x)!=4*a/(b*c)或或sqrt(fabs(x)!=4*a/b/c单选题单选题已知有声明已知有声明“inta=12,b=15,c;”,则执行表达式,则执行表达式“c=(a|(b-=a

16、)”后,变量后,变量b和和c的值分别为的值分别为。A3.1B15,12C15,1D3,12答案答案:C短路短路填空题填空题数学式数学式所对应的所对应的C语言表达式为语言表达式为pow(x,)。答案:答案:1.0/3填空题填空题若有声明若有声明“inta=15,b=20,c=25,e;”,则执行语句,则执行语句“e=ab?-c:+c;”后变量后变量e的值是的值是。答案:答案:2617单单选选题题以以下下选选项项中中,不不能能表表示示函函数数功功能的表达式是能的表达式是。A.s=(x0)?1:(x0)?-1:0B.s=x0?1:0)C.s=x0?1:x=0?0:-1答案:答案: C C单选题单选题

17、若有程序段若有程序段“charc=256;inta=c;”,则执行该程,则执行该程序段后序段后a的值是的值是。A.256B.65536C.0D.-1答案:答案: C C18填填空空题题设设有有声声明明“inta=3,b=4;floatx=4.5,y=3.5;”,则则表表达式达式“(float)(a+b)/2+(int)x%(int)y”的值是的值是。答案答案:4.53.5+4%3=4.5*填空题填空题若有声明若有声明“intr=2;”,则执行语句则执行语句“printf(”%d“,sizeof(2*3.14*r);”时输出时输出。答案:答案:8单选题单选题已知有声明已知有声明“intn;flo

18、atx,y;”,则执行语句,则执行语句“y=n=x=3.89;”后,后,y的值为的值为。A.3B.3.0C.3.89D.4.0答案:答案:Bx=3.89,n=3,y=3.0单选题单选题已知有声明已知有声明“inta=3,b=4;”,下列表达式中合法的,下列表达式中合法的是是。A.a+b=7B.a=|b|C.a=b=0D.(a+)+答案:答案:C学校单选题学校单选题已已知知有声明有声明“inta=1,b=2;”,执行语句执行语句“while(-a0&-b0)a=b;”后变量后变量a、b的值是的值是。A.0,2B.0,1C.1,1D.2,2答案:答案:A短路运算,短路运算,-b不执行不执行192.

19、语句语句实现顺序结构的语句实现顺序结构的语句 表达式语句,空语句,复合语句,函数调用语句表达式语句,空语句,复合语句,函数调用语句 标准输入输出库函数标准输入输出库函数printf(),scanf(),getchar(),putchar(),gets(),puts()【考题解析考题解析】单选题单选题已知已知int类型数据在内存中存储长度为类型数据在内存中存储长度为2个字节,以下个字节,以下语句中能正确输出整数语句中能正确输出整数32768的是的是。A.printf(%d,32768);B.printf(%ld,32768);C.printf(%f,32768);D.printf(%c,3276

20、8);答案:答案:B20学校单选题学校单选题已知某编译系统中已知某编译系统中sizeof(int)的值为的值为2,在该编译,在该编译系统中执行以下系统中执行以下(10)语句时输出结果不是语句时输出结果不是39999。A.printf(%u,39999);B.printf(%d,39999);C.printf(%ld,39999);D.printf(%lu,39999);答案:答案:B单选题单选题若有声明若有声明“floatf=123.45678;”,则执行语句,则执行语句“printf(”%.3f“,f);”后,输出结果是后,输出结果是。.1.23e+02.123.457.123.456780

21、.1.234e+02答案:答案:B21单选题单选题已知有声明已知有声明“chars80;”,若需要将键盘输入的,若需要将键盘输入的一个不含空格的字符串保存到一个不含空格的字符串保存到s数组中,则下列语句中正数组中,则下列语句中正确的是确的是。A.scanf(%s,s);B.scanf(%s,s0);C.s=gets();D.s=getchar();答案:答案:A填空题填空题已知有声明和语句已知有声明和语句“inta;scanf(”a=%d“,&a);”,欲,欲从键盘上输入数据使从键盘上输入数据使a中的值为中的值为3,则正确的输入应是,则正确的输入应是。答案:答案:a=3单选题单选题若有声明若有

22、声明“longa,b;”且变量且变量a和和b都需要通过键盘输都需要通过键盘输入获得初值,则下列语句中正确的是入获得初值,则下列语句中正确的是。A.scanf(%ld%ld,&a,&b);B.scanf(%d%d,a,b);C.scanf(%d%d,&a,&b);D.scanf(%ld%ld,&a,&b);答案:答案:D22实现选择结构的语句实现选择结构的语句:if-else,switch【考题解析考题解析】单选题单选题若在一个若在一个C语言源程序中语言源程序中“e1”和和“e3”是表达式,是表达式,“s;”是语句,则下列选项中与语句是语句,则下列选项中与语句“for(e1;e3)s;”功能功能

23、等同的语句是等同的语句是。A.e1;while(10)s;e3;B.e1;while(10)s;e3;C.e1;while(10)e3;s;D.while(10)e1;s;e3;答案:答案:B单选题单选题已知有声明已知有声明“intx,y;”,若要求编写一段程序实现,若要求编写一段程序实现“当当x大于等于大于等于0时时y取值取值1,否则,否则y取值取值-1”,则以下程序段中,则以下程序段中错误的是错误的是。A.if(x=0)y=1;elsey=-1;B.y=x=0?1:-1;C.switch()D.switch(x-abs(x)casex=0:y=1;break;case0:y=1;break

24、;default:y=-1;default:y=-1;答案:答案:C23学校单选题学校单选题已知有声明已知有声明“inta=1,b=2,c=0;”,执行语句,执行语句“if(ab)c=a;a=b;b=c;”后变量后变量a、b的值是的值是(21)。答案:答案:2,024阅读程序阅读程序下列程序运行后的输出结果第一行是下列程序运行后的输出结果第一行是(1);第二;第二行是行是(2)。#includemain()inti,a=0,c=2;for(i=0;i2;i+)switch(+a,a*c)case1:printf(1);case2:printf(2);case3:printf(3n);break

25、;default:printf(othern);答案答案:(1)23(2)other25阅读程序阅读程序以下程序运行时输出结果为以下程序运行时输出结果为(6)#includevoidmain()inti,sum=0;for(i=0;i0;j-=2)k+;B.for(j=0;j15;j+=2)k+;.for(i=0;i0;i-=2)k+;答案答案:A学校单选题学校单选题以下语句中有语法错误的是以下语句中有语法错误的是。A.for(;);B.do;while(1);C.while();D.p:;gotop;答案:答案:C27阅读程序阅读程序 以下程序运行时输出结果最后一行是以下程序运行时输出结果最

26、后一行是 。 #includevoidmain()inta=1,b=1,i;for(i=1;i=2;i+)a=a+b;printf(%d/%d,b,a);b=a+b;printf(%d/%dn,a,b);printf(n);答案答案:3/5,5/828阅读程序阅读程序 以下程序运行时输出结果是以下程序运行时输出结果是。#includemain()ints=1,n=235;dos*=n%10;n/=10;while(n);printf(%dn,s);答案:答案:3029跳转语句跳转语句:break,continue,return【考题解析考题解析】全国选择题全国选择题有以下程序有以下程序#inc

27、lude#includemain()intx=8;for(;x0;x-)if(x%3)printf(%d,x-);continue;printf(%d,-x);程序的运行结果是程序的运行结果是()。A)7,4,2,B)8,7,5,2,C)9,7,6,4,D)8,5,4,2,答案:答案:D303.构造类型数据构造类型数据基本类型数组(一维,二维)基本类型数组(一维,二维)数组声明及初始化数组声明及初始化 数组存储结构数组存储结构使用数组名引用数组元素使用数组名引用数组元素【考题解析考题解析】单选题单选题以下声明中错误的是以下声明中错误的是。Ainta2;Binta=0,1;Cinta3=0;Di

28、nta34=0;答案答案: : C C全国单选题全国单选题下列选项中,能正确定义数组的语句是()。下列选项中,能正确定义数组的语句是()。A)intnum0.2008;B)intnum;C)intN=2008;D)#defineN2008intnumN;intnumN;答案:答案:D31单选题单选题设有声明设有声明“intp10=1,2,i=0;”,以下语句中与以下语句中与“pi=pi+1,i+;”等价的是等价的是。A.pi=pi+;B.p+i=pi;C.p+i=pi+1;D.i+,pi-1=pi;答案:答案:D D全国单选题全国单选题已知有声明已知有声明“intm=5,4,3,2,1,i=0

29、;”,下列对,下列对m数组元素的引用中,正确的是数组元素的引用中,正确的是。A)m-iB)m2*2C)mm0D)mmi答案:答案:B32填空题填空题若有声明若有声明“chars110=ABCDE,s210=A0;”,则语句,则语句“printf(%d,strlen(strcpy(s1,s2);”的输出结果是的输出结果是。答案:答案:3全国选择题全国选择题有以下程序有以下程序#includemain()inta5=1,2,3,4,5,b5=0,2,1,3,0,i,s=0;for(i=0;i5;i+)s=s+abi;printf(%dn,s);程序运行后的输出结果是():程序运行后的输出结果是()

30、:A)6B)10C)11D)15答案:答案:C33单选题单选题已知有声明已知有声明“chars20=”Hello“;”,在程序运行过程,在程序运行过程中,若要想使数组中,若要想使数组s中的内容修改为中的内容修改为“Good”,则以下语,则以下语句中能够实现此功能的是句中能够实现此功能的是。As=Good;Bs20=Good;Cstrcat(s,Good);Dstrcpy(s,Good);答案:答案:D D34单选题单选题已知有声明已知有声明“inta44=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16;”,若,若需要引用值为需要引用值为12的数组元素,则下列选项中

31、错误的是的数组元素,则下列选项中错误的是。A*(a+2)+3B*(*(a+2)+3)C*(a2+3)Da23答案:答案:A35阅阅读读程程序序以以下下程程序序运运行行时时输输出出结结果果中中第第一一行行是是(1),第三行是第三行是(2)。#include#defineN5voidmain()staticcharaNN;inti,j,t,start=0,end=N-1;charstr=123,ch;for(t=0;t=N/2;t+)ch=strt;for(i=j=start;iend;i+)aij=ch;for(j=start;jstart;i-)aij=ch;for(j=end;jstart;

32、j-)aij=ch;if(start=end)astartend=ch;start+,end-;生成矩阵:生成矩阵:1111112221123211222111111for(i=0;iN;i+)for(j=0;jN;j+)printf(%c,aij);printf(n);答案:答案:(1)11111(2)1232136阅阅读读程程序序以以下下程程序序运运行行时时输输出出结结果果的的第第一一行行是是(1),第三行是,第三行是(2)。#includevoidmain()inti,j,a33;for(i=0;i3;i+)for(j=0;j3;j+)if(ij)aij=1;elseaij=i-j+1;

33、for(i=0;i3;i+)for(j=0;j3;j+)printf(%4d,aij);printf(n);生成矩阵:生成矩阵:111211321答案答案:(1)111(2)32137结构类型变量与数组结构类型变量与数组定义结构类型定义结构类型 结构类型变量、数组声明及初始化结构类型变量、数组声明及初始化用变量名引用结构变量(结构数组元素)的全体成员用变量名引用结构变量(结构数组元素)的全体成员用变量名引用结构变量(结构数组元素)的基本类型成员用变量名引用结构变量(结构数组元素)的基本类型成员【考题解析考题解析】单选题单选题若有结构类型定义若有结构类型定义“typedefstructtesti

34、ntx,y2;TEST;”,则以下声明中正确,则以下声明中正确的是的是(27)。Astructtestx;Bstructx;Ctestx;DstructTESTx;答案:答案:A38单选题单选题以下结构变量以下结构变量stu1的声明形式中,错误的是的声明形式中,错误的是。typedefstructstucharname10;floatscore;STU;STUstu1;#defineSTUstructstuSTUcharname10;floatscore;stu1;structstucharname10;floatscore;stu1;structstucharname10;floatscor

35、e;STU;STUstu1;答案:答案:D学校单选题学校单选题若有定义若有定义“structcdoublex,y;c1=1.2,1.3,c2=1.2,1.3,c3;structddoublex,y;d1=1.2,1.3,d2=1.2,1.3,d3;”,则以下表达式中正确的是则以下表达式中正确的是。A.c3=0B.c1=c2C.c3=c1D.d3=c1答案:答案:C39阅读程序阅读程序以下程序运行后的输出结果第一行是以下程序运行后的输出结果第一行是(1);第二;第二行是行是(2)。#includestructnumintx,y;st=1,10,2,20,3,30,4,40,-1,-1,s12,s

36、22;main()inti=0,j=0,k;for(k=0;stk.x!=-1;k+)if(stk.x%2)s1i+=stk;elses2j+=stk;printf(%dn%dn,s10.y,s20.y);答案:答案:(1)10(2)20404.指针类型数据指针类型数据基本类型变量的指针操作基本类型变量的指针操作基本类型变量地址的获取与保存。基本类型变量地址的获取与保存。指向基本类型变量的指针变量声明、初始化与赋值。指向基本类型变量的指针变量声明、初始化与赋值。引用指针变量指向的基本类型变量(使用运算符引用指针变量指向的基本类型变量(使用运算符*)【考题解析考题解析】填空题填空题若有声明若有声

37、明char*p=%d,%dn;inta=1,b=2;则执行语句则执行语句“printf(p,a,b);”时输出时输出(4)。答案:答案:1,2全国选择题全国选择题若有定义语句:若有定义语句:doublex,y,*px,*py,执行了执行了px=&x,py=&y;之后,正确的输入语句是()。之后,正确的输入语句是()。A)scanf(”%f%f”,x,y);B)scanf(”%f%f”,&x,&y);C)scanf(”%lf%le”,px,py);D)scanf(”%lf%lf”,x,y);答案:答案:C41全国全国选择题选择题有以下程序有以下程序#includemain()intm=1,n=2

38、,*p=&m,*q=&n,*r;r=p;p=q;q=r;printf(“%d,%d,%d,%dn”,m,n,*p,*q);程序运行后的输出结果是程序运行后的输出结果是A)1,2,1,2B)1,2,2,1C)2,1,2,1D)2,1,1,2答案:答案:B42全国选择题全国选择题有以下程序有以下程序#include#includeintfun(intn)int*p;p=(int*)malloc(sizeof(int);*p=n;return*p;main()inta;a=fun(10);printf(“%dn”,a+fun(10);程序的运行结果是()。程序的运行结果是()。A)0B)10C)20

39、D)出错出错答案:答案:C43(2)基本类型数组的指针操作基本类型数组的指针操作基本类型数组元素地址的获取、保存与算术运算。基本类型数组元素地址的获取、保存与算术运算。 引用指针变量指向的基本类型数组元素引用指针变量指向的基本类型数组元素 二维数组行地址的获取、保存及算术运算。二维数组行地址的获取、保存及算术运算。行指针变量的声明、初始化。行指针变量的声明、初始化。引用行指针变量指向的基本类型数组元素引用行指针变量指向的基本类型数组元素【考题解析考题解析】单选题单选题设指针变量占设指针变量占2个字节的内存空间,若有声明个字节的内存空间,若有声明“char*p=”123“;intc;”,则执行语

40、句,则执行语句“c=sizeof(p);”后,后,c的值为的值为。A.1B.2C.3D.4答案答案: : B B全国选择题全国选择题若有定义语句:若有定义语句:doublex5=1.0,2.0,3.0,4.0,5.0,*p=x;则错误引用则错误引用x数组元素的是()。数组元素的是()。A)*pB)x5C)*(p+1)D)*x答案:答案:B44单选题单选题若有声明若有声明“intx10=0,1,2,3,4,5,6,7,8,9,*p;”,则值,则值不为不为4的表达式是的表达式是。Ap=x,*(p+4)Bp=x+4,*p+Cp=x+3,*(p+)Dp=x+3,*+p答案答案: : C C单选题单选题

41、已知有程序段已知有程序段 “charstr10=Aoyun,Beijing,*p=&str00;printf(%sn,p+10);”, 则执行则执行printf语句后输出为语句后输出为 。ABeijingBAoyunCingDng答案答案: : A A45单选题单选题已知有声明已知有声明“inti,a10,*p=a;”,现需要将,现需要将1 10保存到保存到a0 a9中,以下程序段中不能实现这一功能的是中,以下程序段中不能实现这一功能的是。A.for(i=0;i10;i+)ai=i+1;B.for(i=0;i10;i+)pi=i+1;C.i=1;while(pa+10)*p+=i+;D.i=1

42、;while(pa+10)*a+=i+;答案:答案:D填空题填空题已知有声明已知有声明“inta32=1,2,3,4,5,6,*p=a0;”,则执行语句,则执行语句“printf(”%dn“,*(p+4);”后的输出结果为后的输出结果为。答案:答案:5单选题单选题若有声明若有声明“inta34,*p=a0,(*q)4=a;”,则下列叙,则下列叙述中错误的是述中错误的是。.a23与与q23等价等价 .a23与与p23等价等价.a23与与*(p+11)等价等价.a23与与p=p+11,*p等价等价答案:答案:B46单选题单选题已知有声明已知有声明“int a33=0,*p1=a1,(*p2)3=a

43、;”,以以下下表表达达式式中中与与“a11=1”不等价的表达式是不等价的表达式是。A.*(p1+1)=1B.p111=1C.*(*(p2+1)+1)=1D.p211=1答案:答案:B B填填 空空 题题 若若 有有 声声 明明 “char s10=”remind“;”, 执执 行行“puts(s+2);”后的输出结果是后的输出结果是。答案答案:mind单选题单选题已知有声明:已知有声明:“chara=Itismine,*p=Itismine;”,下列叙述中错误的是下列叙述中错误的是。A.strcpy(a,“yes”)和和strcpy(p,“yes”)都是正确的都是正确的B.a=“yes”和和p

44、=“yes”都是正确的都是正确的C.*a等于等于*pD.sizeof(a)不等于不等于sizeof(p)答案:答案:B B47全国完善程序全国完善程序以下程序的功能是:借助指针变量找出数组以下程序的功能是:借助指针变量找出数组元素中的最大值所在数组元素的下标值。元素中的最大值所在数组元素的下标值。#includemain()inta10,*p,*s;for(p=a;p-a10;p+)scanf(“%d”,p);for(p=a,s=a;p-a*s)s=_;printf(“index=%dn”,s-a);答案:答案:p48(3)结构类型变量、数组的指针操作结构类型变量、数组的指针操作结构变量地址、

45、结构数组元素地址的获取与保存。结构变量地址、结构数组元素地址的获取与保存。指向结构变量指针变量的声明、初始化与赋值。指向结构变量指针变量的声明、初始化与赋值。引用指针指向的结构类型变量(结构类型数组元素)的基引用指针指向的结构类型变量(结构类型数组元素)的基本类型成员本类型成员结构变量成员的地址、结构数组元素成员的地址获取与保结构变量成员的地址、结构数组元素成员的地址获取与保存。存。指向结构变量成员的指针变量声明、初始化与赋值。指向结构变量成员的指针变量声明、初始化与赋值。【考题解析考题解析】49单选题单选题已知有结构定义和变量声明如下:已知有结构定义和变量声明如下:structstudent

46、charname20;intscore;structstudent*h;stu,*p;int*q;以下选项中错误的是以下选项中错误的是。Ap=&stu;Bq=&stu.score;Cscanf(%s%d,&stu);Dstu.h=p;答案答案: : C C 50阅阅读读程程序序以以下下程程序序运运行行时时输输出出结结果果的的第第一一行行是是(1),第第二行是二行是(2)#includestructsintx,*y;*p;intd5=10,20,30,40,50;structsa5=100,&d0,200,&d1,300,&d2,400,&d3,500,&d4;voidmain()p=a;pri

47、ntf(%5d,p-x+);printf(%5dn,p-x);printf(%5d,*p-y);printf(%5dn,*+p-y);答案答案:(1)100101(2)1020 51单选题单选题设有结构定义及变量声明如下:设有结构定义及变量声明如下:structproductcharcode5;floatprice;y4=100,100;以下表达式中错误的是以下表达式中错误的是。A.(*y).code0=2;B.y0.code0=2;C.y-price=10;D.(*y)-price=10;答案:答案: D D 52(4)指针类型数组的声明和使用指针类型数组的声明和使用【考题解析考题解析】全国

48、单选题全国单选题有以下程序有以下程序#includemain()char*a=abcd,ef,gh,ijk;inti;for(i=0;i4;i+)printf(%c,*ai);程序运行后输出的结果是程序运行后输出的结果是A)aegiB)dfhkC)abcdD)abcdefghijk答案:答案:A全国单选题全国单选题若有定义语句:若有定义语句:inta410,*p,*q4;且且0=i4,则错误的赋值是()。则错误的赋值是()。A)p=aB)q=ac)q0=aD)p=&a21答案:答案:B53全国填空题全国填空题有以下程序有以下程序#includemain()inta=1,2,3,4,5,6,*k

49、3,i=0;while(i3)ki=&a2*i;printf(%d,*ki);i+;程序运行后的输出的结果是程序运行后的输出的结果是_答案:答案:135545.函数函数函数定义、函数声明、函数调用函数定义、函数声明、函数调用(2)函数调用时函数调用时基本类型基本类型实参的传递与使用。实参与形参的实参的传递与使用。实参与形参的类型兼容性要求。实参类型的自动转换类型兼容性要求。实参类型的自动转换【考题解析考题解析】单选题单选题以下函数定义中正确的是以下函数定义中正确的是(25)。A.doublefun(doublex,doubley)B.doublefun(doublex;doubley)C.do

50、ublefun(doublex,doubley);D.doublefun(doublex,y) 答案:答案:A A55单选题单选题以下选项均为以下选项均为fun函数定义的头部,其中错误的是函数定义的头部,其中错误的是。A.intfun(intx,inty)B.intfun(intx,intyx)C.intfun(intx,inty3)D.intfun(intx,int*y)答案:答案:B学校单选题学校单选题已知函数已知函数fun定义的头部为定义的头部为“voidfun(intx,inty)”,以下,以下fun函数声明中正确的是函数声明中正确的是。A.voidfun(intx,inty);B.v

51、oidfun(intx,int*y);C.voidfun(int,int);D.voidfun(int,int*);答案:答案:C单选题单选题若有声明若有声明“longfun(int*x,intn,long*s);inta4=1,2,3,4;longb,c;”,则以下函数调用形式中正确的是,则以下函数调用形式中正确的是。A.c=fun(a,4,b);B.c=fun(a,4,&b);C.c=fun(a4,4,b);D.c=fun(a,4,&b);答案:答案:D56单选题单选题若函数调用时的实参为变量,则以下关于函数形参若函数调用时的实参为变量,则以下关于函数形参和实参的叙述中正确的是和实参的叙述

52、中正确的是。A.实参和其对应的形参占用同一存储单元实参和其对应的形参占用同一存储单元B.形参不占用存储单元形参不占用存储单元C.同名的实参和形参占用同一存储单元同名的实参和形参占用同一存储单元D.形参和实参占用不同的存储单元形参和实参占用不同的存储单元答案:答案:D全国选择题全国选择题函数调用语句函数调用语句func(f2(v1,v2),(v3,v4,v5),(v6,max(v7,v8);中中func函数的实函数的实参个数是()。参个数是()。A)3B)4C)5D)8答案:答案:A57阅读程序阅读程序以下程序运行时输出结果是以下程序运行时输出结果是。#includevoidfunc(intb)

53、inta;a=b;b=10;voidmain()inta=10,b=20;func(b);printf(%d,%d,a,b);答案答案:10,2058阅读程序阅读程序以下程序运行时输出到屏幕的结果是以下程序运行时输出到屏幕的结果是。#includevoidswap(inta,intb)intt;if(ab)t=a,a=b,b=t;voidmain()intx=13,y=11,z=12;if(xy)swap(x,y);if(xz)swap(x,z);if(yz)swap(y,z);printf(%dt%dt%dn,x,y,z);答案:答案:813111259阅读程序阅读程序 以下程序运行时输出结

54、果是以下程序运行时输出结果是 。#includeintf(intx,inty)returnx+y;voidmain()doublea=5.5,b=2.5;printf(%d,f(a,b);答案:答案: 7 760阅读程序阅读程序 以下程序运行后的输出结果是以下程序运行后的输出结果是。#includeintfun(intw1,intw2)returnw2-w1;main()intw=1,k;k=fun(fun(w+1,w),w);printf(%dn,k);答案:答案:261全国选择题全国选择题有以下程序有以下程序#includevoidfun(inta,intb)intt;t=a;a=b;b=

55、t;main()intc10=1,2,3,4,5,6,7,8,9,0,i;for(i=0;i10;i+=2)fun(ci,ci+1);for(i=0;i10;i+)printf(“%d,”,ci);printf(“n”);程序的运行结果是()程序的运行结果是()A)1,2,3,4,5,6,7,8,9,0,B)2,1,4,3,6,5,8,7,0,9,C)0,9,8,7,6,5,4,3,2,1,D)0,1,2,3,4,5,6,7,8,9,答案:答案:A62(3)函数调用时结构函数调用时结构类型类型实参的传递与使用实参的传递与使用阅读程序阅读程序以下程序运行时输出到屏幕的结果第一行是以下程序运行时输

56、出到屏幕的结果第一行是(1),第二行是,第二行是(2)。#includetypedefstructintx,y;direction;intvisible(directions,directionA,directionB,directionC)directionp1,p2;intd;p1.x=B.x-A.x;p1.y=B.y-A.y;p2.x=C.x-A.x;p2.y=C.y-A.y;d=s.x*p1.x*p2.x+s.y*p1.y*p2.y;printf(%4dn,d);returnd0;voidmain()char*ss=invisible,visible;directions=1,1,T=

57、1,1,A=0,0,B=2,1;puts(ssvisible(s,T,A,B);答案:答案:(1)-1(2)invisible63(4)函数调用时指针函数调用时指针类型类型实参的传递与使用实参的传递与使用【考题解析考题解析】单单选选题题若若需需要要通通过过调调用用f函函数数得得到到一一个个数数的的平平方方值值,以以下下f函函数定义中不能实现该功能的是数定义中不能实现该功能的是。A.voidf(double*a)*a=(*a)*(*a);B.voidf(doublea,double*b)*b=a*a;C.voidf(doublea,doubleb)b=a*a;D.doublef(doublea)

58、returna*a;答案:答案: C C64全国全国选择题选择题有以下程序有以下程序#includevoidfun(int*a,int*b)int*c;c=a;a=b;b=c;main()()intx=3,y=5,*P=&x,*q=&y;fun(p,q);printf(”%d,%d,”,*p,*q);fun(&x,&y);printf(”%d,%dn”,*p,*q);程序运行后的输出结果是程序运行后的输出结果是A)3,5,5,3B)3,5,3,5C)5,3,3,5D)5,3,5,3、答案:答案:B65阅读程序阅读程序 以下程序运行时输出结果是以下程序运行时输出结果是 。#includevoid

59、change(intx,inty,int*z)intt;t=x;x=y;y=*z;*z=t;voidmain()intx=18,y=27,z=63;change(x,y,&z);printf(x=%d,y=%d,z=%dn,x,y,z);答案:答案: x=18, y=27, z=18x=18, y=27, z=1866全国选择题全国选择题有以下程序有以下程序#includevoidfun(inta,intn)inti,t;for(i=0;in/2;i+)t=ai;ai=an-1-i;an-1-i=t;main()intk10=1,2,3,4,5,6,7,8,9,10,i;fun(k,5);fo

60、r(i=2;i8;i+)printf(“%d”,ki);printf(“n”);程序的运行结果是程序的运行结果是A)345678B)876543C)1098765D)321678答案:答案:D67阅阅读读程程序序以以下下程程序序运运行行时时输输出出结结果果中中第第一一行行是是(1),第第二行是二行是(2)#includevoidfun(intx,intp,int*n)inti,j=0;for(i=1;i=x/2;i+)if(x%i=0)pj+=i;*n=j;voidmain()intx,a10,n,i;fun(27,a,&n);/*调调用用fun函函数数将将27的的所所有有因因子子保保存存到到

61、a数数组组,因因子子个个数数保存到保存到n*/for(i=0;in;i+)printf(%5d,ai);printf(n%5d,n);答案答案:(1)1 3 9 (2) 3(1)1 3 9 (2) 368阅阅读读程程序序以以下下程程序序运运行行时时输输出出结结果果中中第第一一行行是是(1),第二行是第二行是(2)#includeintfun(char*a,char*b)intm=0,n=0;while(*(a+m)!=0)m+;while(bn)*(a+m)=bn;m+;n+;*(a+m)=0;returnm;voidmain()chars120=yes,s25=no;printf(%dn,f

62、un(s1,s2);puts(s1);答案:答案:(1) 5 (1) 5 (2) yesno 2) yesno 69阅读程序阅读程序以下程序运行时输出到屏幕的结果第一行是以下程序运行时输出到屏幕的结果第一行是(1),第二行是,第二行是(2)。#includevoidfun(char*p1,char*p2);voidmain()inti;chara=54321;puts(a+2);fun(a,a+4);puts(a);voidfun(char*p1,char*p2)chart;while(p1p2)t=*p1;*p1=*p2;*p2=t;p1+=2,p2-=2;答案:答案:(1)321(2)14

63、32570完完善善程程序序以以下下程程序序的的功功能能是是:求求a数数组组中中前前4个个元元素素之之和和及及后后6个元素之和。个元素之和。#includeintfsum(int*array,intn)inti,s=0;for(i=0;(1);i+)s+=arrayi;return(s);voidmain(void)inta15=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15;intsumh,sumt;sumh=fsum(a,4);sumt=(2);printf(“%d%dn”,sumh,sumt);答案答案:(1)in(2)fsum(&a9,6)或或fsum(a+9,6

64、)71(5)函数返回值的产生函数返回值的产生【考题解析考题解析】填填空空题题已已知知有有函函数数定定义义“intfun()return(3,4);”,则则调调用用fun后的函数返回值是后的函数返回值是(1)。答案答案:4全国选择题全国选择题以下叙述中错误的是()。以下叙述中错误的是()。A)用户定义的函数中可以没有用户定义的函数中可以没有return语句语句B)用户定义的函数中可以有多个用户定义的函数中可以有多个return语句,以便可以调语句,以便可以调用一次返回多个函数值用一次返回多个函数值C)用户定义的函数中若没有用户定义的函数中若没有return语句,则应当定义函数语句,则应当定义函数

65、为为void类型类型D)函数的函数的return语句中可以没有表达式语句中可以没有表达式答案:答案:B72全国选择题全国选择题以下关于以下关于return语句的叙述中正确的是()。语句的叙述中正确的是()。A)一个自定义函数中必须有一条)一个自定义函数中必须有一条return语句语句B)一个自定义函数中可以根据不同的情况设置多条)一个自定义函数中可以根据不同的情况设置多条return语句语句C)定义成)定义成void类型的函数中可以有带返回值的类型的函数中可以有带返回值的return语句语句D)没有没有return语句的自定义函数在执行结束语句时不能返语句的自定义函数在执行结束语句时不能返回到

66、调用处回到调用处答案:答案:B73(6)全局变量、局部变量与形式参数的作用域全局变量、局部变量与形式参数的作用域【考题解析考题解析】阅读程序阅读程序以下程序运行时输出结果是以下程序运行时输出结果是。#includeintt;intsub(int*s)*s+=1;t+=*s;returnt;main()inti;for(i=1;i4;i+)printf(%4d,sub(&i);答案:答案:2674(7)局部变量、形式参数的存储类型和生存期局部变量、形式参数的存储类型和生存期【考题解析考题解析】单选题单选题已知在函数已知在函数f中声明了局部变量中声明了局部变量x,如果希望,如果希望f函数第函数第一

67、次被调用返回后变量一次被调用返回后变量x中存储的数据保持到下次中存储的数据保持到下次f函数被函数被调用时仍可以使用,则在声明调用时仍可以使用,则在声明x时必须指定其存储类型为时必须指定其存储类型为(30)。A.autoB.registerC.staticD.extern答案:答案:C填空题填空题声明局部变量时若缺省存储类别,该变量的存储类声明局部变量时若缺省存储类别,该变量的存储类别是别是。答案:答案:auto填空题填空题可以改变局部变量的生存期、但不能改变它的作用可以改变局部变量的生存期、但不能改变它的作用域的存储类别是域的存储类别是。答案:答案:static75阅阅读读程程序序以以下下程程

68、序序运运行行时时输输出出结结果果的的第第一一行行是是(1),第第二二行是行是(2)。#includeintf1()staticinti=0,f=1;returnf*=+i;intf2()inti=0,f=1;returnf*=+i;voidmain()printf(%dn,f1()+f1();printf(%dn,f2()+f2();答案答案:(1)3 (2)2 76阅读程序阅读程序以下程序运行时输出到屏幕的结果第一行是以下程序运行时输出到屏幕的结果第一行是(1),第二行是,第二行是(2),第三行是,第三行是(3)。#includeintg(intx,inty)returnx+y;intf(i

69、ntx,inty)staticintx=2;if(y2)x=x*x;y=xelsey=x+1;returnx+y;voidmain()inta=3;printf(%dn,g(a,2);printf(%dn,f(a,3);printf(%dn,f(a,2);答案:答案:(1)5(2)7(3)8776.函数高级应用函数高级应用(1)递递归函数执行过程归函数执行过程【考题解析考题解析】阅读程序阅读程序以下程序运行时输出结果是以下程序运行时输出结果是(8)。#includevoidf(longx)if(x100)printf(%d,x/10);elsef(x/100);printf(%d,x%100/

70、10);main()f(123456);答案:答案:13578阅读程序阅读程序以下程序运行后的输出结果第一行是以下程序运行后的输出结果第一行是(13)。#includevoidprint(intn);voidprint_n(intn);main()print(4);voidprint(intn)if(n=0)return;print_n(n);if(n0)print(n-1);voidprint_n(intn)if(n=0)return;printf(%d,n);if(n1)print_n(n-1);elseprintf(n);答案:答案:432179阅读程序阅读程序以下程序运行时输出结果是以

71、下程序运行时输出结果是.#include#includevoidsf(char*s1,char*s2)if(*s1=*s2)sf(s1+1,s2+1);voidmain()chara20=ABC,b20=xyz;sf(a+strlen(a),b);puts(a);答案答案:ABCxyz 80阅读程序阅读程序以下程序运行时输出结果是以下程序运行时输出结果是.#include#includeintcount(chars)inti=0;if(si=0)return0;while(isalpha(si)i+;while(!isalpha(si)&si!=0)i+;return1+count(&si);

72、/*递归调用递归调用*/voidmain()charline=oneworld,onedream.;printf(%d,count(line);答案:答案: 4 4 81阅读程序阅读程序以下程序运行时输出到屏幕的结果是以下程序运行时输出到屏幕的结果是。#includevoidfun(intm,intn)if(m=n)printf(%d,m);elsefun(m+1,n);printf(%d,m);voidmain()fun(1,2);答案:答案:22182(2)函数的指针操作函数的指针操作函数地址的获得及保存。指向函数的指针变量声明、初函数地址的获得及保存。指向函数的指针变量声明、初始化、赋值

73、始化、赋值 调用指针变量指向的函数调用指针变量指向的函数【考题解析考题解析】全国填空题全国填空题请将以下程序中的函数声明语句补充完整请将以下程序中的函数声明语句补充完整#includeint_;main()intx,y,(*p)();p=max;printf(“&dn”,(*p)(x,y);intmax(inta,intb)return(ab/a:b);答案答案:max(inta,intb)或或max(int,int)83全国选择题全国选择题设有以下函数:设有以下函数:voidfun(intn,char*s).则下面对函数指针的定义和赋值均正确的是则下面对函数指针的定义和赋值均正确的是A)vo

74、id(*pf)();pf=fun;B)void*pf();pf=fun;C)void*pf();*pf=fun;D)void(*pf)(int,char*);pf=fun;答案答案:D学校单选题学校单选题若已有如下程序:若已有如下程序:#includedoubleg(doublea,double(*p)(double)returnp(a)*p(a);main()doublex=2,y;/*g函数调用语句位置函数调用语句位置*/现需要在现需要在main函数中调用函数中调用g函数,以下选项中正确的函数,以下选项中正确的g函数函数调用语句是调用语句是。Ay=g(x,exp);By=g(x,exp(x

75、);Cy=g(x,exp();Dy=g(doublex,doubleexp);答案:答案:A84(3)返回指针类型值的函数返回指针类型值的函数以下程序运行结果是()。以下程序运行结果是()。#include#includeint*fun(intn)int*p;p=(int*)malloc(sizeof(int);*p=n+10;returnp;main()int*p;p=fun(10);printf(“%dn”,*p);答案:答案:20857.单向链表单向链表结点数据类型定义结点数据类型定义使用使用malloc()函数函数,free()函数动态申请、释放结点存储区函数动态申请、释放结点存储区基

76、本操作:建立链表、遍历链表、查找结点、插入新结点、基本操作:建立链表、遍历链表、查找结点、插入新结点、删除结点、数据统计、链表倒序删除结点、数据统计、链表倒序86建立链表关键操作建立链表关键操作需声明指针变量:需声明指针变量:head(指向链表首结点),(指向链表首结点),p1(指向新申(指向新申请结点),请结点),p2(指向链表末结点)指向链表末结点)while(仍有数据需保存到链表仍有数据需保存到链表)p1=(structnode*)malloc(sizeof(structnode);p1-成员名成员名=数据数据;if(head=0)head=p2=p1;elsep2-next=p1;p2

77、=p1;p2-next=NULL;returnhead;87遍历链表遍历链表(输出结点数据,统计结点数据输出结点数据,统计结点数据)关键操作关键操作需声明指针变量需声明指针变量p或直接用形参或直接用形参p=head;(指向链表首结点)(指向链表首结点)while(p!=NULL)查找结点数据、输出结点数据、统计结点数据查找结点数据、输出结点数据、统计结点数据p=p-next;88插入结点到链表关键操作插入结点到链表关键操作需声明指针变量:需声明指针变量:p(指向待插入新结点),(指向待插入新结点),head(指向链(指向链表首结点)表首结点),p1(指向插入位置之前结点),(指向插入位置之前结

78、点),p2(指向插入(指向插入位置之后结点)位置之后结点) 申请新结点并保存数据到结点申请新结点并保存数据到结点p=(structnode*)malloc(sizeof(structnode);p-成员成员=数据数据;p-next=NULL; 若要求将新结点插入链表第一个结点前若要求将新结点插入链表第一个结点前if(head=NULL)head=pelsep-next=head;head=p;returnhead;89 若要求将新结点插入有序链表中若要求将新结点插入有序链表中if(新结点应插入到链表首结点之前)(新结点应插入到链表首结点之前)p-next=head;head=p;returnh

79、ead;elsep1=head;p1指向链表第一个结点指向链表第一个结点p2=head-next;p2指向链表第二个结点指向链表第二个结点while(p2!=NULL)if(新结点应插入到新结点应插入到p2指向结点之前指向结点之前)立即终止循环立即终止循环elsep1=p2;p2=p2-next;if(p2=NULL)p1-next=p;新结点添加到末结点之后新结点添加到末结点之后elsep-next=p2;p1-next=p;新结点插入新结点插入p2指向结点之前指向结点之前returnhead;90从链表中删除结点关键操作从链表中删除结点关键操作需声明指针变量:需声明指针变量:head(指向

80、链表首结点),(指向链表首结点),p1(指向需(指向需删除结点之前结点),删除结点之前结点),p2(指向需删除结点)(指向需删除结点)if(首结点需要删除,即首结点需要删除,即head-成员成员=给定值给定值)p=head;head=head-next;或或head=p-next;free(p);elsep1=head;p1指向链表第一个结点指向链表第一个结点p2=head-next;p2指向链表第二个结点指向链表第二个结点while(p2!=NULL)if(p2指向结点需删除指向结点需删除)立即终止循环立即终止循环elsep1=p2;p2=p2-next;ifp2=NULL)puts(“no

81、tfound”);未找到结点未找到结点elsep1-next=p2-next;free(p2);删除删除p2指向结点指向结点returnhead;91【考题解析考题解析】插入新结点插入新结点完完 善善 程程 序序 以以 下下 程程 序序 的的 功功 能能 是是 : 函函 数数 struct node *insert(structnode*head,structnode*p)将将p指指向向的的结结点点作作为为首首结结点点插插入入head指指向向的的链链表表中中。main函函数数接接收收从从键键盘盘输输入入的的一一行行字字符符,每每接接收收一一个个字字符符后后,申申请请一一个个新新结结点点保保存存

82、该该字字符符,并并调调用用insert函函数数将将新新结结点点插插入入链链表表中中。最最后后从从表表头头开开始始依依次次输输出出该该链链表表各各结结点点成成员员c的的值值。试试完完善善程程序序以以达达到要求的功能。到要求的功能。#include#includestructnodecharc;structnode*next;92voidmain()structnode*insert(structnode*head,structnode*p);charch;structnode*head,*p;head=NULL;while(ch=getchar()!=n)p=(structnode*)mallo

83、c(sizeof(structnode);(1)=ch;p-next=NULL;(2);p=head;while(p!=NULL)printf(%c,p-c);(3);structnode*insert(structnode*head,structnode*p)if(head=NULL)head=p;else(4);head=p;returnhead;答案答案:(1)p-c(2)head=insert(head,p)(3)p=p-next;(4)p-next=head93数据统计数据统计完完善善程程序序以以下下程程序序创创建建一一个个链链表表并并实实现现数数据据统统计计功功能能。函函数数WOR

84、D*create(chara20,intn)创创建建一一个个包包含含n个个结结点点的的单单向向链链表表,结结点点数数据据来来自自a指指向向的的数数组组中中存存储储的的n个个单单词词(字字符符串串)。函函数数voidcount(WORD*h)统统计计h指指向向的的单单向向链链表表中中不不同同单单词词各各自自出出现现的的次次数数,将将统统计计结结果果保保存存到到局局部部数组数组c中并输出。中并输出。(2009春)春)程序运行时输出结果为程序运行时输出结果为“red:1green:2blue:3”。#includestdio.h#includestdlib.h#includestring.htype

85、defstructwcharword20;structw*next;WORD;94WORD*create(chara20,intn)WORD*p1,*p2,*h=0;inti;for(i=0;inext=p1;p2=p1;p2-next=(2);returnh;答案:答案:(1)p1-word(2)0或或NULL95voidcount(WORD*h)structcharword20;intnum;c6=0;intm=0,i;while(h)if(m=0)strcpy(c0.word,h-word);c0.num=1;m+;elsefor(i=0;iword)=0)(3);break;if(i=

86、m) strcpy(cm.word,h-word); cm+.num=1; (4);for(i=0;inext96voidmain()charwords620=red,green,blue,blue,green,blue;WORD*head=0;head=create(words,6);count(head);97查找、删除结点查找、删除结点完善程序完善程序设设h1和和h2分别为两个单链表的头指针,链表中结分别为两个单链表的头指针,链表中结点的数据结构为:点的数据结构为:typedefstructnodeintdata;structnode*next;NODE;sea_del函数的功能是:删除

87、函数的功能是:删除h1指向的链表中首次出现的与指向的链表中首次出现的与h2指向的链表中数据完全匹配的若干个连续结点指向的链表中数据完全匹配的若干个连续结点,函数返回函数返回h1指向链表的头指针。指向链表的头指针。例如,初态下,例如,初态下,h1指向链表和指向链表和h2指向链表如下图所示:指向链表如下图所示:124790h12470h2调用调用sea_del函数后函数后h1指向链表为:指向链表为:1h19098NODE*sea_del(NODE*h1,NODE*h2)NODE*p,*ph,*q,*s;ph=NULL;p=q=h1;s=h2;if(h1=NULL|(1)returnh1;while

88、(p!=NULL&s!=NULL)while(q-data=s-data&q&s)q=q-next;s=(2);if(s!=NULL)/*失配时失配时,h1起始结点后移起始结点后移,h2从首结点开始从首结点开始*/ph=p;p=q=p-next;s=(3);elseif(ph=NULL)h1=q;elseph-next=q;(4);答案:答案:(1)h2=NULL或或h2=0(2)s-next(3)h2(4)returnh199查找、删除、插入结点查找、删除、插入结点完善程序完善程序设一个单向链表结点的数据类型定义为:设一个单向链表结点的数据类型定义为:structnodeintx;struc

89、tnode*next;fun函数从函数从h指向的链表第二个结点开始遍历所有结点,当遇指向的链表第二个结点开始遍历所有结点,当遇到到x值为奇数的结点时,将该结点移到值为奇数的结点时,将该结点移到h链表第一个结点之前,链表第一个结点之前,函数返回链表首结点地址。函数返回链表首结点地址。print函数输出函数输出p指向的链表中所指向的链表中所有结点的有结点的x值。程序运行后的输出结果是值。程序运行后的输出结果是“1342”。100#include#defineN4structnodeintx;structnode*next;voidprint(structnode*p)while(1)printf(

90、%4d,(2);p=p-next;printf(n);答案:答案:(1)p(2)p-x101structnode*fun(structnode*h)structnode*p1,*p2,*p3;p1=h;p2=p1-next;while(p2)if(p2-x%2)p3=p2;p1-next=(3);p2=p1-next;p3-next=h;(4);elsep1=p2;p2=p2-next;returnh;main()structnodeaN=4,3,2,1,*head=a;inti,num;for(i=0;inext或或p3-next(4)h=p3102链表倒序链表倒序设某单向链表结点的数据结构

91、定义为设某单向链表结点的数据结构定义为:typedefstructnodecharch;structnode*next;linklist;以下程序首先建立一个单向链表以下程序首先建立一个单向链表head(如图(如图1所示),该链所示),该链表每个结点中保存表每个结点中保存x数组的一个元素值数组的一个元素值;输出输出head链表中每链表中每个结点的值个结点的值;再将再将head链表变换为倒序链表(如图所示),链表变换为倒序链表(如图所示),输出倒序后输出倒序后head链表中每个结点的值。链表中每个结点的值。headD0图图1CBAheadA0图图2BCD103#includetypedefstr

92、uctnodecharch;structnode*next;linklist;linklist*create(charx)inti;linklist*pt,*pr,*p=NULL;for(i=0;xi!=0;i+)pt=(linklist*)malloc(sizeof(linklist);pt-ch=xi;pt-next=NULL;if(p=NULL)(1);pr=pt;elsepr-next=pt;(2);returnp;答案:答案:(1)p=pt(2)pr=pr-next 104linklist*revlist(linklist*head)linklist*hp,*p=NULL;hp=he

93、ad;head=(29);while(hp)p=hp;hp=hp-next;p-next=head;(30);returnhead;voidprint(linklist*phead)while(phead)printf(%c,phead-ch);phead=phead-next;printf(n);main()linklist*head;charx=ABCD;head=create(x);print(head);head=revlist(head);print(head);答案:答案:(3)NULL或或0(4)head=phead链表倒序算法提示:链表倒序算法提示:(1)使使hp指向指向hea

94、d链表,置链表,置head为为0(head链表为空链表)。链表为空链表)。(2)从从hp指向的链表第一个结点开指向的链表第一个结点开始,依次从始,依次从hp链表中删除每个结点,将所删除的结点再依次链表中删除每个结点,将所删除的结点再依次插入到插入到head链表第一个结点之前,直到链表第一个结点之前,直到hp链表为空时结束。链表为空时结束。1058.枚举类型数据枚举类型数据枚举类型定义枚举类型定义枚举变量的命名、声明枚举变量的命名、声明枚举常量的使用枚举常量的使用枚举变量的赋值及使用枚举变量的赋值及使用【考题解析考题解析】填空题填空题若已有定义若已有定义“enumTPA,B,C;”,则执行语句则

95、执行语句“printf(”%dn“,A+1);”后输出结果是后输出结果是(3)。答案答案:1单选题单选题.若有枚举类型定义若有枚举类型定义“enumlist1x1,x2,x3,x4=6,x5,x6;”,则枚举常量,则枚举常量x2和和x6代表的代表的值分别是值分别是。A.1,6B.1,8C.2,6D.2,8答案答案:B1069.预处理命令预处理命令#define命令命令(2)#include命令命令【考题解析考题解析】填空题填空题C语言有效的预处理命令总是以语言有效的预处理命令总是以(4)开头。开头。答案:答案: # #填填空空题题执执行行以以下下程程序序段段中中的的语语句句“k=M*M+1;”

96、后后k的的值值是是(4)。#defineN2#defineMN+1k=M*M+1;答案:答案: 6 6107阅读程序阅读程序以下程序运行后的输出结果是以下程序运行后的输出结果是。#include#defineCount(n)+nmain()intx=-3,n=8;while(Count(x)n-;printf(%dn,n);答案:答案:6108阅读程序阅读程序以下程序运行时输出到屏幕的结果为以下程序运行时输出到屏幕的结果为。#include#defineMAX(A,B)AB?2*A:2*Bvoidmain()inta=1,b=2,c=3,d=4,t;t=MAX(a+b,c+d);printf(

97、%dn,t);答案:答案:10阅读程序阅读程序以下程序运行时输出结果是以下程序运行时输出结果是(5)。#defineEVEN(x)x%2=0?1:0main()if(EVEN(5+1)printf(Even);elseprintf(Odd);答案:答案:Odd109全国选择题全国选择题以下叙述中错误的是以下叙述中错误的是()。A)在程序中凡是以在程序中凡是以“#”开始的语句行都是预处理命令行开始的语句行都是预处理命令行B)预处理命令行的最后不能以分号表示结束预处理命令行的最后不能以分号表示结束C)#defineMAX是合法的宏定义命令行是合法的宏定义命令行D)C程序对预处理命令行的处理是在程序

98、执行的过程中进程序对预处理命令行的处理是在程序执行的过程中进行的行的答案:答案:D11010.文件操作文件操作文件指针变量的声明(重点掌握)文件指针变量的声明(重点掌握)缓冲文件系统常用操作函数的使用:缓冲文件系统常用操作函数的使用:fopen(),fclose(),fprintf(),fscanf(),fgetc(),fputc(),fgets(),fputs(),feof(),rewind(),fread(),fwrite(),fseek()【考题解析考题解析】填填空空题题已已知知某某程程序序中中有有预预处处理理命命令令“#include”,为为使使语语句句“zx=fopen(”c:a.t

99、xt“,”r“);”能能正正常常执行,在该语句之前必须有声明执行,在该语句之前必须有声明。答案答案:FILE*zx;填填空空题题 若若需需要要打打开开D盘盘上上user子子目目录录下下已已经经存存在在的的名名为为abc.txt的的文文本本文文件件,先先读读出出文文件件中中数数据据,后后追追加加写写入入新新数数据据,则正确的函数调用语句是:则正确的函数调用语句是:“fp=fopen(D:userabc.txt,);”。答案答案:a+“111单选题单选题已知已知A盘根目录下有文本文件盘根目录下有文本文件“data.txt”且程序中且程序中已有声明已有声明“FILE*fp;”,若程序需要先从,若程序

100、需要先从“data.txt”文件文件中读出数据,修改后再写入中读出数据,修改后再写入“data.txt”文件中,则调用文件中,则调用fopen函数的正确形式是函数的正确形式是(28)。A.fp=fopen(a:data.txt,rw);B.fp=fopen(a:data.txt,w+);C.fp=fopen(a:data.txt,r+);D.fp=fopen(a:data.txt,r);答案答案:C 单选题单选题下列叙述中,正确的是下列叙述中,正确的是。AC语言中的文件是流式文件语言中的文件是流式文件,只能顺序存取文件中数据只能顺序存取文件中数据B调用调用fopen函数时若用函数时若用“r”或

101、或“r+”模式打开一个文件,模式打开一个文件,该文件必须在指定存储位置或默认存储位置处存在。该文件必须在指定存储位置或默认存储位置处存在。C当对文件进行了写操作后,必须先关闭该文件然后再打当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到该文件中的第开,才能读到该文件中的第1个数据。个数据。D无论以何种模式打开一个已存在的文件,在进行了写操无论以何种模式打开一个已存在的文件,在进行了写操作后,原有文件中的全部数据必定被覆盖。作后,原有文件中的全部数据必定被覆盖。答案答案:B 112全国选择题全国选择题有以下程序有以下程序#includemain()FILE*fp;intal0=1,2

102、,3,i,n;fp=fopen(d1.dat,w);for(i=0;i3;i+)fprintf(fp,%d,ai);fprintf(fp,n);fclose(fp);fp=fopen(d1.dat,r);fscanf(fp,%d,&n);fclose(fp);printf(%dn,n);程序的运行结果是程序的运行结果是()。A)12300B)123C)1D)321答案:答案:B113阅读程序阅读程序以下程序运行时输出结果是以下程序运行时输出结果是 . .#includevoidmain()doublex3=1.1,2.2,3.3,y;FILE*fp=fopen(d:a.out,wb+);fwr

103、ite(x,sizeof(double),3,fp);fseek(fp,2L*sizeof(double),SEEK_SET);fread(&y,sizeof(double),1,fp);printf(%.1f,y);fclose(fp);答案:答案: 3.3 3.3 11411.综合合单选题单选题在下列在下列C语言源程序的错误中,通常不能在编译时发语言源程序的错误中,通常不能在编译时发现的是现的是(21)。A.括号不匹配括号不匹配B.非法标识符非法标识符C.数组元素下标值越界数组元素下标值越界D.程序结构不完整程序结构不完整答案:答案: C C单选题单选题以下定义和声明中,语法均有错误的是以

104、下定义和声明中,语法均有错误的是(21)。int_f(intx)intf(intf)int2x=1;structforintx;A.B. C.D.答案:答案: B B115单选题单选题若程序中已有相应的声明,下列语句中错误的是若程序中已有相应的声明,下列语句中错误的是。printf(i=4?%6dn:%6d,i);i=4?printf(%6dn,i):printf(%6d,i);for(i=10;i-)if(i=1)break;for(i=10;)if(i-);break;答案:答案:D116全国填空题全国填空题以下程序的输出结果是以下程序的输出结果是_#includemain()intj,a

105、=1,3,5,7,9,11,13,15,*p=a+5;for(j=3;j;j-)switch(j)case1:case2:printf(“%d”,*p+);break;case3:printf(“%d”,*(-p);答案:答案:9911117阅读程序阅读程序以下程序运行时输出结果中第一行是以下程序运行时输出结果中第一行是(1),第二行是第二行是(2),第三行是,第三行是(3)。#includemain()inti,j,a33=0;for(i=0;i3;i+)for(j=0;j3;j+)switch(i-j+2)case0:case1:aij=1;break;case2:aij=2;break;

106、case3:aij=3;break;case4:aij=5;break;for(i=0;i3;i+)for(j=0;j3;j+)printf(%4d,aij);printf(n);答案:答案:(1)211(2)321(3)532118算法考试要求及考题解析算法考试要求及考题解析(2007秋秋2010春)春)1.基本操作:交换,累加,累乘基本操作:交换,累加,累乘【考题解析考题解析】交换数据交换数据阅读程序阅读程序以下程序运行时输出到屏幕的结果是以下程序运行时输出到屏幕的结果是(7)。#includevoidmain()inta=1,b=2;a+=b;b=a-b;a-=b;printf(%d,%

107、dn,a,b);答案:答案:2,11192.数值计算算法数值计算算法(1)求若干整数的最大公约数求若干整数的最大公约数(2) 求一个十进制表示整数的反序数求一个十进制表示整数的反序数(3) 一元非线性方程求根(牛顿迭代法,半分区间法)一元非线性方程求根(牛顿迭代法,半分区间法)(4) 定积分计算(梯形法,矩形法)定积分计算(梯形法,矩形法)(5) 级数计算(递推法)级数计算(递推法)(6) 矩阵转置,矩阵转置,矩阵乘法矩阵乘法【考题解析考题解析】120求最大公约数求最大公约数完善程序完善程序以下程序求一组整数的最大公约数。以下程序求一组整数的最大公约数。#includeintgcd(inta,

108、intb)intr;while(1)r=a%b;a=b;(2);returna;voidmain()intx,i,a6=12,56,48,32,16,24;x=(3);for(i=1;i6;i+)x=gcd(4),ai);printf(%d,a0);for(i=1;i5;i+)printf(%d,ai);printf(%d)=%dn,a5,x);答案答案:(1)b!=0(2)b=r(3)a0(4)x121求一个十进制字符串表示整数的反序数求一个十进制字符串表示整数的反序数阅读程序阅读程序以下程序运行后的输出结果是以下程序运行后的输出结果是(10)。#includemain()chara=369

109、,*p=a;ints=0,t=1;while(*+p)t*=10;p-;while(t)s+=(*p-0)*t;p-;t/=10;printf(%dn,s);答案:答案:963122一元非线性方程求根(牛顿迭代法)一元非线性方程求根(牛顿迭代法)阅读程序阅读程序用牛顿迭代法求方程用牛顿迭代法求方程3x3-3x2+x-1=0在在2.0附近的一附近的一个实根,精度要求为个实根,精度要求为10-5。函数。函数F求求f(x)的值,函数的值,函数F1求求f(x)的一阶导数值。的一阶导数值。牛顿迭代公式如下:牛顿迭代公式如下:123#include#includefloatF(floatx)returnx

110、*(3*x*(x-1)+1)-1;floatF1(floatx)return9*x*x-6*x+1;floatnewtoon(floatx)floatf,f1,x0;do(1);f=F(x0);f1=F1(x0);x=(2);while(fabs(x-x0)1e-5);returnx;main()floatx0;scanf(%f,&x0);printf(Theresult=%.2fn,newtoon(x0);答案:答案:(1)x0=x(2)x0-f/f1或或x0-F(x0)/F1(x0)124级数计算(递推法)级数计算(递推法)完善程序完善程序以下程序通过给出的公式计算的近似值,计算过以下程序

111、通过给出的公式计算的近似值,计算过程在所加项的值小于程在所加项的值小于10-10时终止。时终止。#includemain()doublesum=0.5,t,t1,t2,t3;intodd=1,even=2;t=t1=t2=1.0;t3=0.5;while(t1e-10)t1=(1);odd+=2;even+=2;t2=1.0/odd;t3=(2);t=t1*t2*t3;sum+=t;printf(nPI=%.8lf,(3); 答案:答案:(1)t1*odd/even(2)t3*0.5*0.5(3)sum*61253.非数值计算算法非数值计算算法(1)穷举法找数穷举法找数(2) 排序(冒泡法,插

112、入法排序(冒泡法,插入法,选择法),选择法)(3) 在数组中查找数据(线性法,折半法)在数组中查找数据(线性法,折半法)(4)将一个数据插入有序数组中将一个数据插入有序数组中(5) 删除数组中数据删除数组中数据(6)多个数组数据合并多个数组数据合并(7) 数据统计数据统计(8) 其他(素数判断,回文数判断,回文判断,约瑟夫问题)其他(素数判断,回文数判断,回文判断,约瑟夫问题)(9) 生成矩阵(杨辉三角形,生成矩阵(杨辉三角形,)(10) 模拟十进制长整数算术运算模拟十进制长整数算术运算 (11)字符串处理(子串替换,加密字符串处理(子串替换,加密, ,) 【考题解析考题解析】126穷举法找数

113、穷举法找数阅读程序阅读程序寻找具有下列特性的四位正整数,其百位数为寻找具有下列特性的四位正整数,其百位数为0,去掉百位数去掉百位数0可得到一个三位正整数,而该三位正整数乘以可得到一个三位正整数,而该三位正整数乘以9等于原四位正整数。例如,等于原四位正整数。例如,60756759,所以,所以6075是具是具有上述特性的正整数。有上述特性的正整数。#includeintfun(intn)inta4,i,k;k=n;for(i=0;k0;i+)ai=(1);k/=10;if(2)&(a3*100+a1*10+a0)*9=n)return1;elsereturn0;main()inti,n=0;for

114、(i=1000;i10000;i+)if(fun(i)printf(%4dt,i);printf(n);答案答案(1)k%10(2)a2=0或或!a2127穷举法找数穷举法找数完善程序完善程序某餐厅用苹果、桔子、香蕉、菠萝、梨五种水果制某餐厅用苹果、桔子、香蕉、菠萝、梨五种水果制作水果拼盘,要求每个拼盘中恰有三种不同水果。以下程序作水果拼盘,要求每个拼盘中恰有三种不同水果。以下程序的功能就是计算可以制作出多少种这样的水果拼盘并列出组的功能就是计算可以制作出多少种这样的水果拼盘并列出组合方式。合方式。#includetypedefenumapple,orange,banana,pineapple

115、,pearFruit;main()(1)fruits=apple,orange,banana,pineapple,pear;Fruitx,y,z,p;intk=0,i;for(x=(2);x=pear;x+)for(y=x+1;y=pear;y+)for(z=y+1;z=pear;z+)printf(n%d%s%s%s,+k,fruitsx,fruitsy,fruitsz);答案:答案:(1)char*(2)apple或或0128排序:排序:下标为奇数的数组元素排序,选择法下标为奇数的数组元素排序,选择法阅读程序阅读程序以下程序运行时输出结果是以下程序运行时输出结果是.#includevoid

116、sort(inta,intn)inti,j,p;intt;for(i=1;in-1;i+=2)p=i;for(j=i+2;jap)p=j;if(p!=i)t=ai;ai=ap;ap=t;voidmain()ints=8,1,4,3,n=4,k;sort(s,n);for(k=0;kn;k+)printf(%4d,sk);printf(n); 答案答案:8341129排序排序(选择法)(选择法)完完善善程程序序以以下下程程序序对对二二维维数数组组a中中存存储储的的N N矩矩阵阵做做如如下下操操作作:先先将将每每一一行行中中值值最最大大的的元元素素与与该该行行位位于于主主对对角角线线处处的的元元素

117、素交交换换值值,然然后后对对主主对对角角线线上上的的所所有有元元素素排排序序使使其其自自左左上上角角到到右右下下角角升升序序排排列列,最最后后输输出出排排序序后后主主对对角角线线上上各各元元素的值。试完善程序以达到要求的功能。素的值。试完善程序以达到要求的功能。130#include#defineN5voidfun(intxN,intn)inti,j,t,arr,col;for(i=0;in;i+)arr=xi0;col=0;for(j=0;j=arr)arr=xij;(1);t=xii;(2);xicol=t;for(i=0;in-1;i+)for(j=i+1;jn;j+)if(3)t=xi

118、i;xii=xjj;xjj=t;voidmain()intaNN=10,25,24,13,23,11,22,12,21,14,20,15,19,16,18,17,9,4,5,3,2,1,6,7,8,i;fun(a,N);for(i=0;ixjj131结构数组排序:按成员结构数组排序:按成员x值升序,值升序,x值相同的按成员值相同的按成员y值升序值升序阅阅读读程程序序以以下下程程序序运运行行时时输输出出结结果果中中第第一一行行是是(1),第第二二行行是是(2)第三行是第三行是(3).#includetypedefstructintx;inty;S;voidfun(Spp,intn)inti,j,

119、k;St;for(i=0;in-1;i+)k=i;for(j=i+1;jn;j+)if(ppj.xppk.x)|(ppj.x=ppk.x&ppj.yppk.y)k=j;if(k!=i)t=ppi;ppi=ppk;ppk=t;voidmain()Sa5=3,2,3,1,1,2,2,4,2,3;inti,n=5;fun(a,n);for(i=0;in;i+)printf(%d,%dn,ai.x,ai.y);答案:答案:(1)1,2(2)2,3(3)2,4132二维数组数据变换:最小值所在行与最后一行数据交换,二维数组数据变换:最小值所在行与最后一行数据交换,最大值所在列与最后一列数据交换最大值所在

120、列与最后一列数据交换阅读程序阅读程序以下程序运行后的输出结果第一行是以下程序运行后的输出结果第一行是(1);第;第二行是二行是(2);第三行是;第三行是(3)。#includevoidsot(inta33)inti,j,i0,j1,min,max,temp;min=max=a00;for(i=0;i3;i+)for(j=0;j3;j+)if(aij=max)max=aij;j1=j;133for(j=0;j3;j+)temp=ai0j;ai0j=a2j;a2j=temp;for(i=0;i3;i+)temp=aij1;aij1=ai2;ai2=temp;for(i=0;i3;i+)for(j=

121、0;j3;j+)printf(%d,aij);printf(n);main()intb33=3,2,1,6,5,4,9,8,7;sot(b);答案:答案:(1)789(2)456(3)123134排序排序完善程序完善程序下列程序的功能是对下列程序的功能是对a数组数组a0an-1中存储的中存储的n个整数从小到大排序。排序算法是:第一趟通过比较将个整数从小到大排序。排序算法是:第一趟通过比较将n个个整数中的最小值放在整数中的最小值放在a0中,最大值放在中,最大值放在an-1中;第二趟中;第二趟通过比较将通过比较将n个整数中的次小值放在个整数中的次小值放在a1中,次大值放在中,次大值放在an-2中;

122、中;,依次类推,直到待排序序列为递增序列。,依次类推,直到待排序序列为递增序列。试完善程序以达到要求的功能。试完善程序以达到要求的功能。135#include#defineN7voidsort(inta,intn)inti,j,min,max,t;for(i=0;i(1);i+)(2);for(j=i+1;jn-i;j+)if(ajamax)max=j;if(min!=i)t=amin;amin=ai;ai=t;if(max!=n-i-1)if(max=i)t=amin;amin=an-i-1;an-i-1=t;elset=amax;amax=an-i-1;an-i-1=t;答案:答案:(1)

123、n/2或或n-i或或n-i-1(2)min=max=i136voidmain()intaN=8,4,9,3,2,1,5,i;sort(a,N);printf(sorted:n);for(i=0;iN;i+)printf(%dt,ai);printf(n);137字符串排序字符串排序完善程序完善程序程序运行时输出结果第一行程序运行时输出结果第一行(1)第二行是第二行是(2)。#include#includevoidfun(charstr20,intn)inti,j,k;chars20;for(i=0;in-1;i+)k=i;for(j=i+1;jn;j+)if(strcmp(strj,strk)

124、0)k=j;strcpy(s,stri);strcpy(stri,strk);strcpy(strk,s);main()charstr620=PASCAL,BASIC,FORTRAN,C,COBOL,Smalltalk;inti;fun(str,6);for(i=0;i6;i+)printf(%sn,stri);答案:答案:(1)BASIC(2)C138删除数组中满足给定条件的所有数据删除数组中满足给定条件的所有数据阅读程序阅读程序 以下程序运行时输出结果的第一行是以下程序运行时输出结果的第一行是(1);第二行是第二行是(2)。(删除数组中所有偶数)(删除数组中所有偶数)#includeint

125、fun(int*x,intn)inti,j;for(i=j=0;in;i+)if(*(x+i)%2)*(x+j+)=*(x+i);returnj;main()inta10=1,5,2,3,8,3,9,7,4,10,n,i;n=fun(a,10);for(i=0;in;i+)printf(%5d,ai);if(i+1)%3=0)printf(n);答案:答案:(1)153(2)397139数组数据合并数组数据合并阅读程序阅读程序以下程序运行时输出结果的第一行是以下程序运行时输出结果的第一行是(1);第;第二行是二行是(2);第三行是;第三行是(3)。#include#defineN10intme

126、rge(inta,intb,intc,intmN+1)inti=0,j,k;while(k=m0i)!=2)j=m1i;if(k=0)ci=aj;elseci=bj;i+;returni;140main()intaN=1,3,5,bN=2,4,6,c2*N,i,n;intm2N+1=0,1,0,1,0,1,2,0,0,1,2,2,1,-1;n=merge(a,b,c,m);printf(%dn,n);for(i=0;in;i+)printf(%d,ci);if(i+1)%3=0)printf(n);答案:答案:(1)6(2)123(3)654141在数组中查找数据在数组中查找数据阅读程序阅读程

127、序以下程序运行时,若在键盘上输入以下程序运行时,若在键盘上输入2,则,则输出是输出是(1);若在键盘上输入;若在键盘上输入i,则输出是,则输出是(2)。#include#includeintstrch(char*s,charch)inti;for(i=strlen(s);i=0;i-)if(si-1=ch)returni;if(i0)return0;main()charch,s1=as123d2nfghjkm;intk;printf(inputch:);ch=getchar();k=strch(s1,ch);if(k!=0)printf(k=%dn,k);elseprintf(notfound

128、n); 答案:答案:(1)k=7(2)notfound142约约瑟瑟夫夫问问题题:n个个人人报报数数,报报到到3的的人人出出列列,剩剩下下人人继继续续报报数数,直到所有人出列为止直到所有人出列为止,显示依次出列人编号,显示依次出列人编号阅阅读读程程序序以以下下程程序序运运行行时时若若输输入入8,则则输输出出结结果果中中第第一一行行是是(1),第二行是,第二行是(2),第三行是,第三行是(3)。#includevoidmain()intk,i,m,n,num20;scanf(%d,&n);for(i=0;in;i+)numi=i+1;i=k=m=0;while(mn-1)if(numi!=0)k

129、+;if(k=3)printf(%4d,numi);numi=0;k=0;m+;if(m%3=0)printf(n);i+;if(i=n)i=0;i=0;while(numi=0)i+;printf(%4d,numi);答案答案:(16)361(17)528(18)47143生成矩阵(杨辉三角形)生成矩阵(杨辉三角形)阅读程序阅读程序以下程序运行时输出到屏幕的结果第二行是以下程序运行时输出到屏幕的结果第二行是(1),第四行是,第四行是(2)。#include#defineN6voidmain()inti,j,aN+1N+1;for(i=1;i=N;i+)aii=1;ai1=1;for(i=3;

130、i=N;i+)for(j=2;ji;j+)aij=ai-1j-1+ai-1j;for(i=1;i=N;i+)for(j=1;j=0;i-)ci=(ai-0)+(bi-0)+k;k=(2);ci=ci%10+0;if(k)for(i=n+1;i0;i-)ci=(3);ci=k+0;答案答案:(1)intn(2)ci/10(3)ci-1146voidmain()charp180=1000000001,p280=9000000009,p380;inti,x=strlen(p1),y=strlen(p2);if(x=0;i-)p1i+y-x=p1i;p1i=0;(4);if(xy)for(i=y;i=

131、0;i-)p2i+x-y=p2i;p2i=0;add(p1,p2,p3,x);puts(p3);答案答案:(4)x=y147字符串处理:加密字符串处理:加密完完善善程程序序以以下下程程序序中中函函数数replace的的功功能能是是:将将字字符符串串s中中所所有有属属于于字字符符串串s1中中的的字字符符都都用用s2中中的的对对应应位位置置的的字字符符替替换换。假假如如s为为“ABCBA”,s1为为“AC”,s2为为“ac”,则则调调用用replace函函数数后后,字字符符串串s的的内内容容将将变变换换为为“aBcBa”。试试完完善程序以达到要求的功能。善程序以达到要求的功能。148#includ

132、e#defineMAX20voidreplace(char*s,char*s1,char*s2)char*p;for(;*s;s+)p=s1;while(*p&(1))p+;if(*p)*s=(2);voidmain() char sMAX=ABCBA,s1MAX=AC, s2MAX=ac;(3);printf(Thestringofsis:);printf(%sn,s);答案答案:(1)*p!=*s(2)*(s2+p-s1)(3)replace(s,s1,s2)149字符串处理:数据统计字符串处理:数据统计完善程序完善程序统计一个字符串中数字字符统计一个字符串中数字字符“0”到到“9”各自出

133、现的次各自出现的次数,统计结果保存在数组数,统计结果保存在数组count中。例如,如果字符串为中。例如,如果字符串为“1enterschar4543123564879ffgh”,则统计结果为,则统计结果为:1:22:13:24:35:26:17:18:19:1。#includevoidfun(char*t,intcount)char*p=t;while(1)if(*p=0&*p=9)count(2)+;p+;voidmain()chars80=1enterschar4543123564879ffgh;intcount10=0,i;fun(s,count);for(i=0;i10;i+)if(c

134、ounti)printf(%d:%d,i,counti);答案:答案:(1)*p或或*p!=0或或p0!=0(2)*p-0或或p0-0150数据统计数据统计完善程序完善程序程序功能:选票统计。二维数组程序功能:选票统计。二维数组s中保存了投票后中保存了投票后10张有效选票上所填写的候选人姓名,结构数组张有效选票上所填写的候选人姓名,结构数组stat中保存中保存统计结果。程序运行后的输出结果是统计结果。程序运行后的输出结果是“liu:2wang:5zhao:3”。#include#includetypedefstructcharname20;/*候选人姓名候选人姓名*/intcount;/*候选

135、人得票数候选人得票数*/COUNT;151intcount(charx20,intn,(1)inti,j,k=0;for(i=0;(2);i+)for(j=0;j=k)(4);stk.count+;k+;returnk;main()chars1020=liu,wang,zhao,zhao,wang,liu,wang,zhao,wang,wang;COUNTstat5=0;inti,n;n=count(s,10,stat);for(i=0;in;i+)printf(%s:%dt,stati.name,stati.count);答案:答案:(1)COUNTst或或COUNT*st(2)in(3)s

136、tj.count+(4)strcpy(stk.name,xi)152字符串处理:子串替换字符串处理:子串替换完善程序完善程序下列程序中函数下列程序中函数find_replace的功能是:在的功能是:在s1指向指向的字符串中查找的字符串中查找s2指向的字符串,并用指向的字符串,并用s3指向的字符串替换指向的字符串替换在在s1中找到的所有中找到的所有s2字符串。若字符串。若s1字符串中没有出现字符串中没有出现s2字符字符串,则不做替换并使函数返回串,则不做替换并使函数返回0,否则函数返回,否则函数返回1。试完善。试完善程序以达到要求的功能。程序以达到要求的功能。#include#includein

137、tfind_replace(chars1,chars2,chars3)inti,j,k,t=0;chartemp80;if(s10=0|s20=0)returnt;for(i=0;s1i!=0;i+)k=0;j=i;while(s1j=s2k&s2k!=0)j+;(1);答案:答案:(1)k+153if(s2k=0)strcpy(temp,&s1j);(2);i=i+strlen(s3);(3);t=1;returnt;voidmain()charline80=Thisisatestprogramandatestdata.;charsubstr110=test,substr210=actual

138、;intk;k=find_replace(line,substr1,substr2);if(4)puts(line);elseprintf(notfoundn);答案:答案:(2)strcpy(&s1i,s3)或或strcpy(s1+i,s3)(3)strcpy(&s1i,temp)或或strcpy(s1+i,temp)(4)k或或k=1或或k!=0或或k0154字符串处理:数字字符串转换为整数字符串处理:数字字符串转换为整数完善程序完善程序以下程序中函数以下程序中函数longfun(char*str)的功能是:自的功能是:自左至右取出非空字符串左至右取出非空字符串str中的所有数字字符,将这

139、些数字中的所有数字字符,将这些数字字符组成一个不超过字符组成一个不超过8位的十进制整数并输出。例如,字符位的十进制整数并输出。例如,字符串串str为为“efg32gh76.jbejing08t5y4u2”,程序输出:,程序输出:32760854。#includelongfun(char*str)inti=0;longk=0;char*p=str;while(*p!=0&(1)if(*p=0&*p=9)k=(2)+*p-0;+i;(3);returnk;voidmain()charx=efg32gh76.jbejing08t5y4u2;printf(%ldn,fun(x);答案:答案:(1)i8(2)k*10(3)p+155补充:回文数判断补充:回文数判断完善程序完善程序以下程序输出以下程序输出6位整数中的所有回文数。若一个整位整数中的所有回文数。若一个整数等于它自身的反序数,则称该整数为回文数。例如,数等于它自身的反序数,则称该整数为回文数。例如,123321是回文数。是回文数。#includeintmain()longx,y=0,i;for(i=100000;i0)y=y*10+x%10;(2);if(i=y)printf(t%ld,i);return0;答案答案:(1)y=0(2)x=x/10

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号