C语言习题解答_第1页
C语言习题解答_第2页
C语言习题解答_第3页
C语言习题解答_第4页
C语言习题解答_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Z习题解答目录12习题解答3121选择题3122填空题3123编程题422习题解答5221选择题5222填空题7223编程题832习题解答11321选择题11322填空题12323编程题1242习题解答15421选择题15422填空题17423编程题1852习题解答29521选择题29522填空题31523编程题3362习题解答37621选择题37622填空题41623编程题4372习题解答67721选择题67722填空题68723编程题68212习题解答121选择题1、B【分析】在一个C程序中必须有且只能有一个MAIN函数,而且MAIN函数可以在任何地方出现2、C【分析】C语言中合法以的标识符组成为字母,数字,下划线,且数字不能打头,亦不能为关键字。A中,SUB不合法。B中4D不合法。D中VOID为关键字。3、【分析】4、C【分析】转义字符中,第一个”输出“,第二输出,第三个B退格,把前一个去掉了,第四个输出,第五个T跳格,第六个”输出”,第七个N输出换行。5、C【分析】本题将10进制17,分别按8、16进制输出。8的进制2128111710,16制11116111710122填空题1、主【分析】一个C源程序中至少包括一个主函数,其他函数没有限制。2、双引号。【分析】两种写法都是允许的,使用尖括号表示在包含文件目录中去查找包含目录是由用户在设置环境时设置的,而不在源文件目录去查找使用双引号则表示首先在当前的源文件目录中查找,若未找到才到包含目录中去查找。用户编程时可根据自己文件所在的目录来选择某一种命令形式。3、261,B1【分析】将10进制的177,按8进制和16进制两种形式输出。4、A3B7X85Y7182C1AC2A【分析】SCANF函数中,格式说明符以外的原样输入。5、PRINTF函数中,格式说明符以外的原样输出。MNF控制输出结果中共M位,小数3占N位。【分析】123编程题1INCLUDE“STDIOH“VOIDMAINFLOATQIANMI,YINGLI/定义变量SCANF“QIANMIF“,/输入数据PRINTF“YINGLIF“,QIANMI160934/计算并输出数据2INCLUDE“STDIOH“VOIDMAINCHARXPRINTF“请输出一个小写小母N“SCANF“C“,PRINTF“输出字母的大写型式为C“,X323、INCLUDEVOIDMAINFLOATC,FPRINTF“请输入一个摄氏温度“SCANF“F“,F32C90/5C4PRINTF“华氏温度为52FN“,F4INCLUDEVOIDMAININTA3,B4,C5FLOATX12,Y24,Z36DOUBLEU51274,N128765PRINTF“A3D,B3D,CDN“,A,B,CPRINTF“X76F,Y76F,Z76FN“,X,Y,ZPRINTF“XY32F,YZ32F,XZ32FN“,XY,YZ,XZPRINTF“U0LFN0LFN“,U,NPRINTF“C1AOR97NC2BOR98N“22习题解答221选择题1、C【分析】语言的运算符按运算对象的个数可以分为单目、双目和三目运算符和多目运算符。2、C【分析】运算符要求参加运算的数必须是整数3、A【分析】B赋值运算的作用是用将常量赋给变量,而不能给表达形式所以A32不对。C运算符要求参加运算的数必须是整数,而X是FLOAT类型所以X3不对。DYFLOATI,由于I是INT类型,向FLOAT类型转换是自由转的,不需要强制转。4、A【分析】因为K7,X12XK,则X127,此时X5,而K5,即K75此时K2,所以XKK5就等价于523。同理,XK5的值为0;XKK5的值为2;XKK5的值也为25、A5【分析】首先通过N10005将原数扩大100,并通过05判断是否进位。之后/100进行舍去小数点后第三位的运算。6、B【分析】分析根据优先级别,先计算小括号里,Y与3相等成立所以表达式的值为1,再将1赋给X,而X的值就是表达式的值为17、A【分析】略8、D【分析】“A大于等于10”、“A小于等于0”两者分别为关系运算,一个“或”字又表明为逻辑或运算,所以D对。9、B【分析】在逻辑表达式求解中,并不是所有的逻辑运算符都被执行,对则A(A25)等价于A20,所以AA20202040。416【分析】XXY等价于X(X)(Y),放在变量的前面时,要先对变量进行变化,然后再用,所以原式即为X143,而1432,即X2,而此时X14,所以XX216。5X1WHILEAGETCHAREOFBGETCHARCGETCHARGETCHAR/在录入C后用GETCHAR滤掉回车IFABTMPAABBTMPIFACTMPAACCTMPIFBCTMPBBCCTMPPRINTF“CCCN“,A,B,CRETURN0/第二种INCLUDEINTMAINCHARA,B,C,TMP9WHILESCANF“CCCC“,/逗号表达式,简洁IFACTMPA,AC,CTMPIFBCTMPB,BC,CTMPPRINTF“CCCN“,A,B,CRETURN0输入数据有多组,每组占一行,有三个字符组成,之间无空格。例如输入QWEASDZXC输出EQWADSCXZ4编程实现输入一个无符号整数(UNSIGNED类型),分别输出它的低四位和高四位。INCLUDE待查MAINUNSIGNEDU0XFFFF/举例UNSIGNEDCHARL,H/SCANF“U“,LU/得到低8位HU8/得到高8位PRINTF“UU,LU,HU“,U,L,HGETCHAR5根据当前银行的利率表,编程实现从键盘输入存款金额MONEY,存期YEAR和年利率RATE,计算银行存款的本息SUM(保留1位小数)。INCLUDEINTMAININTYEARFLOATMONEY,RATE,SUMPRINTF“请输出金额,利率,存款时间N“SCANF“F,F,D“,SUMMONEYYEARRATEPRINTF“存款的本息SUM1FN“,SUM1032习题解答321选择题1D【分析】在此要注意,ELSE总是于之前面最近的且没有用过的IF进行配对,所以在本题中,ELSE与第二个IF配对,且整体做为第一个IF语句的语句体。又因,1020不成立,所以第一个IF根本不被执行,所以M的值没有任何变化。2A【分析】ELSE总是于之前面最近的且没有用过的IF进行配对,所以在本题中,IFABTSTELSEIFABT5ELSET2S相当于TSTABT5ABT2SA20不成立,B31成立,则执行B3CONTINUE则B4,然后跳出本次行循环,则此时A2,B4以后同理进行判断。10A【分析】对于双重循环,外层循环变化一次,内层变化一个循环。本题。当I1时,J可以为3、2、1,同理当当I2时,J可以为3、2、1;当I3时,J可以为3、2、1;而语句IFIJ3BREAK则表时,如果IJ3时结束整个FOR循环。条件不成立时再执行MIJ322填空题1HN2【分析】SN为第N次落地时共经过的米数,HN为第N次反弹的高度N2,HN2才为第N次经过的距离。2N0J【分析】由输出语句可知,定义的变量I,J分别用于存放正数和负数的个数。所以只要输入的数不是0,则进行判断。30K/10COUNT【分析】COUNT作为累计的和所以初值一定为0;而WHILE循环的作用是将指定的数K的各各位上的字数字取出来。K10负责实现取出K的个位。则前两位则需通过K/10来实现。IFT10成立即是需要的数字,则总数需要自增。所以COUNT450I10【分析】本题的累加问题中,累加50次,即IINTMAININTYEAR,MONTH,DAYSPRINTF“ENTERYEARANDMONTH“SCANF“DD“,SWITCHMONTHCASE1CASE3CASE5CASE7CASE8CASE10CASE12/处理“大“月/DAYS31BREAKCASE4CASE6CASE9CASE11/处理“小“月/DAYS30BREAKCASE2/处理“平“月/IFYEAR40/如果是闰年/13ELSEDAYS28/不是闰年/BREAKDEFAULTPRINTF“INPUTERRORN“/月份输入错误/DAYS0IFDAYS0PRINTF“D,DISDDAYSN“,YEAR,MONTH,DAYSRETURN03编写一个程序,计算并输出下列级数之和23123NXXXXEXN其中N与X从键盘输入。INCLUDE“STDIOH“INCLUDE“MATHH“MAININTI,NDOUBLES10,S110,XSCANF“D,F“,FORI1I65EINY4481016【分析】枚举类型变量的值是一些整数,从花括号的第一个名字开始,系统自动赋予从0开始的值。RED0,YELLOW1若在定义类型时对枚举常量进行了初始化,则按照初始化的值计算,BLUE4,GREEN5,WHITE6。423编程题1编写一个程序,计算FIBONACCI数列的前15个数,并将其存储到一维数组FIB中,然后输出结果。FIBONACCI数列的定义为1101121NNNFFFNNN【问题分析】【程序代码】INCLUDEINTMAININTFIB151,1INTIFORI2IINTMAINCONSTINTN10/定义一个包含11个元素的整型数组A,并初始化一组有序序列INTAN120,25,31,36,41,46,67,68,78,98INTI,DPRINTF“请输入一个整数N“SCANF“D“,FORIN1I0IIFAIDAI1AIELSEAI1DBREAKPRINTF“插入整数后的新序列N“FORI0IINCLUDEINCLUDEINCLUDEINTMAININTA50,B250INTNUM0,FLAGINTI,J,T/以下产生50个1200之间的随机数存于数组A,并显示SRANDINTTIME0FORI0IINTMAININTA5623,56,78,90,12,45,13,14,16,17,18,19,32,35,36,38,39,31,41,43,45,46,48,49,51,52,53,5,57,58INTI,J,C,RINTD/查找的数据INTFLAG0/是否找到标志/输入要查找的数据PRINTF“请输入查找数据“SCANF“D“,FORI0IINTMAININTA66,I,JFORI0IINTMAIN21FLOATA34,B42,C32INTI,J,KPRINTF“输入矩阵AN“FORI0IINTMAININTA55INTI,J,SUM0PRINTF“输入矩阵AN“FORI0IINTMAINCHARSTR100INTI,NUM0,WORD0CHARCGETSSTR/输入一个字符串给字符数组STRFORI0CSTRI0I/只要字符不是0就继续执行循环IFCWORD0/如果是空格字符,使WORD置0ELSEIFWORD0/如果不是空格字符且WORD原值为0WORD1/使WORD置1NUM/NUM累加1,表示增加一个单词PRINTF“字符串中单词数为D“,NUM/输出单词数RETURN09输入一个字符串,编写一个程序,将该字符串中的所有大写字母转换成相应的小写字母,所有小写字母转换成相应的大写字母。【程序代码】INCLUDEINTMAINCHARSTR100INTI0PRINTF“ENTERTHESTRINGN“GETSSTRWHILESTRI0IFSTRIACHART1000,S1000INTI0,J,K0,LENPRINTF“请输入主字符串N“GETSSTRPRINTF“请输入子字符串N“GETSSUBSTRLENSTRLENSUBSTR/WHILESTRI0FORJ0JCONSTINTN3STRUCTSTUDENT/声明一个结构体类型STRUCTSTUDENT24INTNUMCHARNAME10INTSCORE3/3门课程成绩INTMAINSTRUCTSTUDENTSTUN/定义含N个元素结构体数组INTI,J,SUM,FLAGPRINTF“请输入学生的学号、姓名和成绩N“/以下输入N个学生的学号及他们的3门课程的成绩FORJ0J240|FLAG1PRINTF“DSN“,STUJNUM,STUJNAMERETURN012采用结构体类型编写一个程序,实现输入三个学生的学号以及数学、语文、英语成绩,然后计算每位学生的总成绩以及平均成绩并按总分由大到小输出成绩表。【程序代码】INCLUDESTRUCTSTUDENT/声明一个结构体类型STRUCTSTUDENTINTNUMINTSCORE3/3门课程成绩INTTOTALFLOATAVGINTMAINSTRUCTSTUDENTSTU3,TEMP/定义含3个元素结构体数组INTI,J,K25/以下输入N个学生的学号及他们的3门课程的成绩PRINTF“请输入学生的学号和3门课程的成绩N“FORJ0JSTUKSCOREKJ/进行成绩比较IFKI/两个元素交换TEMPSTUKSTUKSTUISTUITEMPPRINTF“THEORDERISN“/以下输出排序后的学生信息FORI0ICONSTINTN2INTMAINSTRUCTCHARNUM10CHARNAME1526CHARCREATEUNIONINTNOCHARADDR20FROMSPNINTIPRINTF“请输入零件清单N“FORI0IINTMAINENUMCOLORRED,YELLOW,BLUE,WHITE,BLACKENUMCOLORI,J,K,PRIINTN,LOOPN0FORIREDIINTMAINENUMCOLORRED,YELLOW,BLUE,WHITE,BLACKENUMCOLORCOLORINTCSCANF“D“,SWITCHC/根据输入C转换成枚举类型CASE0COLORREDBREAK28CASE1COLORYELLOWBREAKCASE2COLORBLUEBREAKCASE3COLORWHITEBREAKCASE4COLORBLACKBREAKSWITCHCOLORCASEREDPRINTF“S“,“RED“BREAKCASEYELLOWPRINTF“S“,“YELLOW“BREAKCASEBLUEPRINTF“S“,“BLUE“BREAKCASEWHITEPRINTF“S“,“WHITE“BREAKCASEBLACKPRINTF“S“,“BLACK“BREAKRETURN052习题解答521选择题1B【分析】源程序是由函数组成的。程序的全部工作都是由各式各样的函数完成的,所以也把语言称为函数式语言。由于采用了函数模块式的结构,语言易于实现结构化程序设计。使程序的层次结构清晰,便于程序的编写、阅读、调试。2B【分析】在语言中,所有的函数定义,包括主函数MAIN在内,都是平行的。也就是说,在一个函数的函数体内,不能再定义另一个函数,即不能嵌套定义。但是函数之间允许相互调用,也允许嵌套调用。习惯上把调用者称为主调函数。函数还可以自己调用自己,称为递归调用。3C【分析】有参函数定义的一般形式为“类型标识符函数名类型形参,类型形参函数体”。很显然,A、B和D错误。4B【分析】函数值的类型和函数定义中函数的类型应保持一致。如果两者不一致,则以函数类型为准,自动进行类型转换。如函数值为整型,在函数定义时可以省去类型说明。5B【分析】函数调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。296B【分析】在C语言中,实参和形参在数量上,类型上,顺序上应严格一致,否则会发生类型不匹配的错误。根据题中MAIN函数中函数调用语句“FUNX,A”可知,函数FUN的实参有两个,依次为“FLOAT类型和INT类型”,所以函数FUN的首部也应包含两个形参,并且类型和顺序应与实参一致。7C【分析】函数F有两个参数E1,E2和E3,E4,E5,每个参数都是一个逗号表达式。8D【分析】函数值的类型和函数定义中函数的类型应保持一致。如果两者不一致,则以函数类型为准,自动进行类型转换,所以D的说法不正确。A、B和C选项的说法正确,并且,在函数中允许有多个RETURN语句,但每次调用只能有一个RETURN语句被执行,因此只能返回一个函数值。9D【分析】C语言中,形参和实参的功能是作数据传送。发生函数调用时,主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送,所以形参只能是变量。10D【分析】C语言中,可以用以下3种方式调用函数函数语句函数调用的一般形式加上分号即构成函数语句。函数表达式函数作为表达式中的一项出现在表达式中,以函数返回值参与表达式的运算。这种方式要求函数是有返回值的。函数实参函数作为另一个函数调用的实际参数出现。这种情况是把该函数的返回值作为实参进行传送,因此要求该函数必须是有返回值的。11D【分析】MAIN函数中,函数调用语句“RFUNCFUNCX,Y,Z”的调用过程是,先调用函数“FUNCX,Y”即将“X”和“Y”的值传给函数FUNC的形参,计算“XY”结果为“7”,然后将结果“7”作为函数“FUNCFUNCX,Y,Z”的实参,再调用函数“FUNC”,计算“7Z”结果为“15”,最后将返回值“15”赋给变量“R”。12C【分析】题中语句“INTX,Y”定义了两个外部变量“X”和“Y”,即全局变量,是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。外部变量“X”和“Y”不在文件的开头定义,其有效的作用范围只限于定义处到文件终了。在定义点之前的函数“NUM”想引用外部变量,则应该在引用之前用关键字EXTERN对该变量作“外部变量声明”。表示该变量是一个已经定义的外部变量。有了此声明,就可以从“声明”处起,合法地使用该外部变量。该程序从“MAIN”函数开始执行,改变了外部变量“X”和“Y”的值,接下来调用函数“NUM”,将外部变量“X”和“Y”的值重新赋值为“5”和“25”,最后返回“MAIN”函数,输出结果。13A30【分析】根据题意,值的应该为小数形式,所以正确答案应该从“A”和“B”中选,结合题中给出的计算值的公式,S应为“SS10/II”,显示A答案正确。14B【分析】语句“WHILESI0I”的执行过程是,先判断字符串“S”是否结束,如果不结束,则“I”,即取下一个字符继续判断,所以当遇到字符串结束标志后,变量I不再执行“I”操作,此时I的值即为字符串的长度,所以应返回I的值。15B【分析】局部变量是在函数内作定义说明的。其作用域仅限于函数内,离开该函数后再使用这种变量是非法的。主函数MAIN中定义的变量也只能在主函数中使用,不能在其它函数中使用。同时,主函数中也不能使用其它函数中定义的变量。因为主函数也是一个函数,它与其它函数是平行关系。所以在MAIN函数体内定义的变量也是局部变量,因此B的说法不正确。16A【分析】在复合语句中也可定义变量,其作用域只在复合语句范围内。17A【分析】在复合语句中也可定义变量,其作用域只在复合语句范围内。18A【分析】函数中的局部变量,如不专门声明为STATIC存储类别,都是动态地分配存储空间的,数据存储在动态存储区中。自动变量用关键字AUTO作存储类别的声明。关键字AUTO可以省略,AUTO不写则隐含定为“自动存储类别”,属于动态存储方式。19A【分析】在语言源程序中凡是以“”开头的均为预处理命令。20A【分析】对带参数的宏,在调用中,不仅要宏展开,而且要用实参去代换形参。本题中宏“YN”的形参为“N”,宏定义为“N1N”,所以调用宏“Y51”时,“N”由“51”代换,最终结果为Z23315148。通常在宏定义中,字符串内的形参通常要用括号括起来以避免出错。522填空题1全局局部【分析】全局变量也称为外部变量,它是在函数外部定义的变量。它不属于哪一个函数,它属于一个源程序文件。其作用域是整个源程序。形参变量是属于被调函数的局部变量。2定义调用31【分析】在语言中,所有的函数定义,包括主函数MAIN在内,都是平行的。也就是说,在一个函数的函数体内,不能再定义另一个函数,即不能嵌套定义。但是函数之间允许相互调用,也允许嵌套调用。习惯上把调用者称为主调函数。函数还可以自己调用自己,称为递归调用。3函数值的类型【分析】函数值的类型和函数定义中函数的类型应保持一致。如果两者不一致,则以函数类型为准,自动进行类型转换。4从变量定义处开始到本程序文件的末尾【分析】外部变量(即全局变量)是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。514【分析】函数FUN的功能是将两个参数的值相加求和,再把结果返回给主调函数。MAIN函数在调用函数FUN时,将“X4”和“X”作为实参传递给对应形参,所以计算后结果为“X4X54514”。6MAXIS55【分析】函数MAX的功能是求包含了N个元素的数组的最大值,并将结果返回给主调函数。MAIN函数定义并初始化了一个包含了8个元素的数组,并将数组名与数组中元素的个数作为MAX函数的实参传递给对应的形参,所以求出的最大值是557SUMISUMN1N【分析】MAIN()函数使用变量“I”接收用户输入的数值,并将“I”作为SUM函数的实参,调用SUM函数计算“1到I的和”。函数SUMINTN的功能是使用形参“N”接收实参“I”传递过来的值,求1到N的和,当N1时,SUM1;当N2时,SUM12可以写成SUMSUM12;当N3时,SUM123可以写成SUMSUM23;所以SUM123N可以写成SUMN1N。8(3,2)(6,5)(9,8)(12,11)【分析】MAIN函数使用“FOR”语句,循环调用“FUN”函数共4次。“FUN”函数中,变量“A”为局部静态变量,因为在定义时没有赋初值,所以编译时自动赋初值0,并且“A”值在函数调用结束后不消失仍保留上次计算后的值。在“FUN”函数中,“PRINTF“D,DN“,A3,AB”语句在执行时,调用PRINTF函数时要输出两个表达式的值(A3和AB分别是两个表达式),大多数系统中,对函数参数的求值顺序是自右而左,所以是先求第2个表达式“AB”的值,然后求第1个表达式“A3”的值。当I1时,A0,B2,输出结果为先计算“AB”的值为2,再计算“A3”的值为“AA3”即A的值为3;当I2时,A3(此时A值为上一次的计算结果),B2,输出结果为先计算“AB”的值为5,再计算“A3”的值为“AA3”即A的值为6;32当I3和I4时依次类推。97【分析】根据宏定义,形参为N。宏调用F23中实参为23,是一个表达式,在宏展开时,用23代换N,得2237,这与函数的调用是不同的,函数调用时要把实参表达式的值求出来再赋予形参。而宏代换中对实参表达式不作计算直接地照原样代换。1050,25【分析】本题为不带参数的宏定义,一共定义了3个宏,在执行“PRINTF“D,DN“,2MN,MN/2”语句时,利用宏代换自右而左输出两个表达式“2MN”和“MN/2”的值。MN/2NM/2M34M/25345/225,2MN2NM2M3452534550。523编程题1编写一个函数,求两个整数的最大公约数。【问题分析】求两个整数的最大公约数可使用辗转相除法。其方法是以小数除大数,如果能整除,那么小数就是所求的最大公约数。否则就用余数来除刚才的除数;再用这新除法的余数去除刚才的余数。依此类推,直到一个除法能够整除,这时作为除数的数就是所求的最大公约数。设两个整数为U和V,则求最大公约数的算法见图51所示。TUVF变换U、V,使用大者为被除数AU(除数),BV(被除数)RB对A求余,若R不为0使除数变为被除数BA,余数为除数AR返回除数A的值。图51【程序代码】INCLUDE“STDIOH“HCFINTU,INTVINTA,B,T,R33IFUVTUUVVTAUBVWHILERBA0BAARRETURNAMAININTU,V,H,LSCANF“D,D“,HHCFU,VPRINTF“HCFDN“,H2编写一个计算N次勒让德多项式的递归程序。N次定义为110/112121NNNNXPNXXPNXXPNNN【程序代码】INCLUDE“STDIOH“MAININTX,NFLOATPINT,INTPRINTF“N输入整数N,X“SCANF“D,D“,PRINTF“ND,XDN“,N,XPRINTF“PDD102FN“,N,X,PN,XFLOATPINTTN,INTTXIFTN0RETURN1ELSEIFTN1RETURNTXELSERETURN2TN1TXPTN1,TXTN1PTN2,TX/TN343设有两个整型数组A和B,试统计这两个数组中对应元素相等与不相等的个数。【程序代码】INCLUDEINCLUDEVOIDFUNINTP,INTQINTM0,N0,IFORI0IINCLUDEINTFUNCHARSTRINTI,N0,FG1CHARPSTRWHILEPNPFORI0ICELSEPRINTF“不能构成三角形N“62习题解答621选择题1D【分析】用”,其中“整型常量表达式”是用来说明数组元素的个数,可以是整型常量、整型常量表达式或符号常量,但不能包含变量。22C【分析】二维数组指针变量说明的一般形式为类型说明符指针变量名长度其中“类型说明符”为所指数组的数据类型。“”表示其后的变量是指针类型。“长度”表示二维数组分解为多个一维数组时,一维数组的长度,也就是二维数组的列数。应注意“指针变量名”两边的括号不可少,如缺少括号则表示是指针数组,意义就完全不同了。23A【分析】PS为包含两个元素的字符指针数组,第一个元素PS0存放了字符串“ABC“的首地址,第二个元素PS1存放了字符串“ABC“的首地址。PS12为第二个元素所指字符串的第三个字符即C,PS01为第一个元素所指字符串的第二个字符即B。24C【分析】一个数组的元素值为指针则是指针数组。指针数组是一组有序的指针的集合。变量P是一个指针数组,用循环语句使P的四个元素分别指向二维数组A的各行。其中PI表示I行0列元素值;PIJ表示I行J列的值;PIJ表示I行J列的值;P表示数组A第0行的首地址,所以PI表示第0行第I个元素。25B【分析】指针数组LANGUAGE被用来表示一组字符串,这时指针数组的每个元素被赋予一个字符串的首地址。26D【分析】由于P与A0相同,故PI表示0行I列的值;PI表示0行I列的值。选项A、B和C表达方式都错误。27D40【分析】指针变量P指向数组A的第一个元素,由于操作符的优先级高于,所以表达式A的返回值为10,然后P指向数组的第二个元素;表达式B和表达式C的返回值也为10,然后将数组第一个元素的N值域加1变为11。28A【分析】操作符的优先级高于操作符和,操作符有最高优先级。29D【分析】共用体变量中所有成员分配同一地址开始的存储空间,使用覆盖技术共享存储单元。本题中对变量CVAL和其下一个字符赋值后,变量IVAL与其共享共一块内存。字符H对应的ASCII是104,转化为16进制为68;字符I对应的ASCII为105,转化为16进制为69。X用来以16进制数输出。30B【分析】字符A对应的ASCII是65,转化为16进制为41;字符B对应的ASCII为66,转化为16进制为42。X用来以16进制数输出。622填空题1IPEPE【分析】第一个FOR循环将输入的10个数放入整形数组ARRAY中,第二个FOR循环中,首先PS指向数组的第一个元素,PE指向数组的最后一个元素,通过中间变量TEMP交换PS和PE所指向的变量内容,然后PS指向数组的第二个元素,PE移向数组的倒数第二个元素,再进行交换,依次类推直到满足条件PSPE时循环结束。2MN1PSUB0【分析】PSUB指向数组SUB的第一个元素位置;执行FOR循环开始,首先P指向主串的第N个位置,然后将P指向的内容复制到PSUB指向的地址空间,然后同时移动P和PSUB,再复制字符内容,依次类推,循环M次结束。输出字符指针所指字符串时,是遇到0才结束的,所以应在子串SUB的最后添加字符0。3P【分析】A为一个字符指针数组,A0中存放的是字符串“FOR“的首地址,A1中存放的是字符串“SWITCH“的首地址,A2中存放的是字符串“IF“的首地址,A3中存放的是字41符串“WHILE“的首地址。二级指针P指向数组A的第一个元素位置,即P和A0是等价的。P后,指向数组A的第二个元素位置,即P和A1是等价的,依次类推。4SCOREN1I【分析】把二维数组SCORE分解为一维数组SCORE0,SCORE1,SCORE2之后,设P为指向二维数组的指针变量,它指向包含4个元素的一维数组SCORE。若P指向第一个一维数组SCORE0,其值等于SCORE,SCORE0,或PRINTF“PLEASEINPUTA10“FORI0IA1P2A0/C语言实现/INCLUDEDEFINEN5MAININTAN0,1,2,3,4INTBN5,6,7,8,9INTPA,QB,TEMPINTI,J0PRINTF“数组交换前NAD“,NFORI0IDEFINEN10MAININTI,MIN,SUMINTANINTP44FORPAPINCLUDETYPEDEFSTRUCTNODEINTDATASTRUCTNODENEXTLNODELNODECREATEINTMINTILNODEH,P,RLNODEMALLOCSIZEOFLNODERDATAMHRFORIM1I0IPLNODEMALLOCSIZEOFLNODEPDATAIPNEXTHHP45RNEXTHRETURNHVOIDJESEPHLNODEP,INTNLNODEQINTJ0PRINTF“OUTQUEUEORDER“DOJIFJN1QPNEXTPNEXTQNEXTPRINTF“D“,QDATAJ0FREQPPNEXTWHILEPNEXTPPRINTF“DN“,PDATAFREEPVOIDMAINLNODEHINTM,NPRINTF“NINPUTM,N“SCANF“D,D“,HCREATEMJESEPHH,N5产生动态数组,输入数组大小后,通过动态分配内存函数MA1LOC产生数组。【程序代码】INCLUDEINCLUDEVOIDMAININTARRAYSIZEINTARRAY46PRINTF“请输入数组大小“SCANF“D“,ARRAYINTMALLOCARRAYSIZESIZEOFINTFORINTI0ICHARSCATCHARSTR1,CHARSTR2/函数返回指向STR1指针CHARPSTR1WHILEP0PWHILEPSTR2/将STR2连接到STR1的后面RETURNSTR1INTMAINCHARA50,B30PRINTF“ENTERSTRING1“SCANF“S“,APRINTF“ENTERSTRING2“SCANF“S“,BPRINTF“ABSN“,SCATA,BRETURN07编写程序,将一个字符串反向存放。【问题分析】通过两个指针,分别指向数组的第一个元素和最后一个元素,进行交换,然后再移动指针,分别指向数组的第二个元素和倒数第二个元素,再进行交换,依次类推。【程序代码】INCLUDEINCLUDEINTMAIN47CHARS255“ASDFGH“CHARPS,PE,TEMPFORPSS,PESSTRLENS1PSINTMAINCHARS255“123ASDFGH“,PINTCOUNT0PSWHILEP0COUNTPRINTF“DN“,COUNTRETURN09输入一串英文文字,统计其中每个字母(不区分大小写)的数目。【问题分析】首先定义一个统计每个字母个数的数组,将A字母的个数放入数组第一个元素中,将B字母的个数放入数组第二个元素中,依次类推。当遇到大写字母时,将其转化为小写字母再进行处理。【程序代码】INCLUDEVOIDMAINCHARCH/CH用来每次接收一个字符INTI,S260/数组S用来统计每个小写字母的个数PRINTF“PLEASEINPUTASTRINGN“SCANF“C“,48WHILECHN/输入一行字符,以回车键结束IFCHAINTC2560,PC,LENPRINTF“PLEASEINPUTTHEFIRSTPOSITIVEINTEGER“SCANF“S“,APRINTF“NPLEASEINPUTTHESECONDPOSITIVEINTEGER“SCANF“S“,BPAASTRLENA1PBBSTRLENB1FORLEN0PAAPA,PB,LENCLENPA0PB0FORPAAPA,LENCLENPA0FORPBBPB,LENCLENPB0FORPCCPC0LENFORPCCLEN1PCCPCPRINTF“D“,PCPRINTF“N“11对一个长度为N的字符串从其第K个字符起,删去M个字符,组成长度为NM的新字符串,并输出处理后的字符串。【程序代码】INCLUDEINCLUDEMAINCHARSTR300,PINTN,M,KPRINTF“PLEASEINPUTSTR300“GETSSTRNSTRLENSTRDOPRINTF“PLEASEINPUTRIGHTK,M“SCANF“DD“,WHILEKN|MN/FORPSTRK1PMAIN50CHARSTR300,SUBSTR300,P,Q,P2,P1PRINTF“PLEASEINPUTSTR300“GETSSTRPRINTF“PLEASEINPUTSUBSTR300“GETSSUBSTRPSTRP2STRFORPP1PQSUBSTRWHILEP1QIFQ0PP1CONTINUEELSEP2PP20PUTSSTR13编写程序,实现在字符串SL中的指定位置第K个字符处插入字符串S2。【程序代码】INCLUDEINCLUDEMAINCHARS1300,S2300,P1,P2,P3INTM,N,KPRINTF“PLEASEINPUTSTRINGS1“SCANF“S“,S1PRINTF“PLEASEINPUTSTRINGS2“51SCANF“S“,S2MSTRLENS1NSTRLENS2DOPRINTF“PLEASEINPUTRIGHTK“SCANF“D“,WHILEKM1P1S1P2S1P3S2WHILEP1P1P2P2NP2WHILEP3P1P3P3P1PRINTF“S“,S114找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小。有可能没有鞍点。【问题分析】本程序要求数组中同行元素没有相同值,同列元素没有相同值。【程序代码】INCLUDEDEFINEN3VOIDMAIN52INTANN,I,J,MIN,M,N,MAXFORI0IMAXMAXAIJNJMINA0NM0FORJ1JINCLUDEDEFINEN100MAINCHARAN300,PN,P1,P2,P3,TEMP300INTI,NPRINTF“PLEASEINPUTNN“SCANF“D“,PRINTF“PLEASEIPUTDSTRINGS“,NFORI0IDEFINEN100MAINCHARSTRN300,P,SENTENCE_ENDINTN,IPRINTF“PLEASEINPUTN“SCANF“D“,PRINTF“PLEASEINPUTDROWN“,NFORI0IA/学号CHARNAME20/姓名FLOATMATH/成绩1FLOATCHINESE/成绩2FLOATENGLISH/成绩3FLOATSUMSTUDENTSTU41,“ZHANGSAN“,66,72,85,223,2,“LISI“,77,88,72,237,3,“WANGWU“,70,80,70,220,4,“LIULIU“,90,85,95,270MAINSTUDENTPS456STUDENTTEMPFORINTI1ISUMSUMTEMPPSJPSJPSJ1PSJ1TEMPFORINTK0KNAME,PSKSUM18桥牌使用52张扑克牌,编写一个模拟人工洗牌的程序,将洗好的牌分别发给四个人。【程序代码】INCLUDEINCLUDEINCLUDEINCLUDEDEFINENUM52DEFINEDECK13ENUMSORTTYPESUIT,VALUETYPEDEFSTRUCTCARDINTSUIT/取值03,分别表示梅花、方块、红心和黑桃57INTVALUE/取值210、J11、Q12、K13、A14CARD/洗牌VOIDSUFFLECARDCARDSINTI,J,TCARDCSRANDTIMENULLFORI0ICARDSJSUITKJELSEIFSTYPEVALUE/学生学号CHARNAME20/学生姓名FLOATSCORE1/第一科成绩FLOATSCORE2/第二科成绩FLOATSCORE3/第三科成绩FLOATSUM/三科总成绩STRUCTSTUDENTNEXTSTUSTUCREATEINTI,NSTUP,HEADNULL,TAILNULL62PRINTF“PLEASEINPUTN“SCANF“D“,HEADSTUMALLOCSIZEOFSTUHEADNEXTNULLTAILHEADFORI0INUM,PNAME,PNEXTNULLTAILNEXTPTAILPRETURNHEADSTUINSERTSORTSTUHEADSTUFIRST/为原链表剩下用于直接插入排序的节点头指针STUT/临时指针变量插入节点STUP,Q/临时指针变量P指向Q的前一个指针FIRSTHEADNEXTHEADNEXTNULL/只含有一个头节点的链表的有序链表WHILEFIRSTNULL/遍历剩下无序的链表TFIRST63QHEADNEXTFIRSTFIRSTNEXTWHILEQNULL/注意这里是体现直接插入排序思想的地方IFQSUMSUMBREAKELSEPQQQNEXT/退出WHILE循环,就找到了插入的位置,将T节点插入到P节点之后,Q节点之前IFQHEADNEXTHEADNEXTTELSEPNEXTTTNEXTQRETURNHEADVOIDDISPLAYSTULSTUPLNEXTWHILEPNULLPRINTF“3D20S62F62F62F62FN“,PNUM,64PNAME,PSCORE1,PSCORE2,PSCORE3,PSUMPPNEXTPRINTF“N“VOIDMAINSTUSLISTSLISTCREATESTUS2INSERTSORTSLISTPRINTF“排序后的学生信息如下N“DISPLAYS220有两个链表A和B,设结点中包含学号、姓名。从A链表中删去与B链表中有相同学号的那些结点。【程序代码】INCLUDEINCLUDEDEFINEN10TYPEDEFSTRUCTSTUDENTINTNUMFLOATSCORESTRUCTSTUDENTNEXTSTUSTUCREATEINTISTUP,HEADNULL,TAILHEADFORI0INUM,PNEXTNULLIFPNUMNEXTPTAILPRETURNHEADVOIDOUTPUTSTUPWHILEPNULLPRINTF“DT2FN“,PNUM,PSCOREPPNEXTSTUDELSTUA,STUBSTUHEAD,P1,P2P1P2HEADA/让P1、P2、HEAD结点指向链表A的头部WHILEBNULLP1P2HEAD/每次循环前让P1、P2始终指向删除后链表的头部WHILEP1NULLIFBNUMP1NUM/学号相同,删除结点信息IFP1HEAD/如果删除的是头结点,则头结点位置要后移HEADP1NEXTFREEP1P1P2HEADELSE/如果删除的是中间结点P2NEXTP1NEXTFR

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论