C语言上级资料答案(解析)
第一套1、本题的考核点是结构体类型变量的定义和引用以及文件函数的应用。fopen函数的作用是打开一个文件,在fun函数中为输入打开一个二进制文件,所以第一个空填:"rb"或与此语句功能相同的语句;利用嵌套循环语句按学号从小到大排序,所以第二个空填:>s[j].sno或与此语句功能相同的语句;再用二进制方式把排序后的数据输出到指定文件中,fwrite函数的作用是往文件的当前位置写入指定字节的数据块,所以第三个空填:fwrite。2、首先,我们必须先读懂题中程序的大致意思,这是发现并改正程序中错误的重要前提。程序中的重要思想如下:1、函数fun()的功能是根据一个整型形参计算题目中的数学公式;2、由于公式中运用了除法,所以公式的最终值必须使用double型,以保持最终值的精确性。题中的第一个错误出现在函数fun()中的语句"for(i=2;i
m){m=x1+x2;x1=x2;x2=m;}returnm;}第二套1、本题的考核点是C语言中的基本算法和简单语句的使用。fun函数是用来对整数进行判断是否符合题目中规定的条件。首先对变量赋初值,n返回的是符合条件的整数的个数,因此第一个空填:0;while语句用于求出100至x(x≤999)之间的符合条件的整数个数,故第二个空填:x;由while循环语句可知第三个空是设置循环变量的步长,根据题义可知循环步长是1,因此第三个空填:t++或与此语句相同功能的语句。2、本题的考核点是C语言的一些基本常识和循环语句的使用。n从本题的要求看,如果某一个元音字母没有在字符串中出现时,程序应返回0。主函数中num[5]代表一块C编译器随机分配的内存地址,在没有对这块内存地址初始化之前,这块内存中存放着随机的数据,也有可能是1,2...等数字,因此在fun函数开始应对num数组进行初始化。fun函数的第一个for循环中,k才是循环变量,而i只是一个常量,因此"num[i]=0;"应改为"num[k]=0;"或相同作用的语句。另外,s代表的只是一个字符串的指针,把它直接当一个数据看待是没有意义的,应该把"switch(s)"语句改为"switch(*s)"语句。本评析仅供参考。3、本题的考核点是数组、循环语句。解题思路:使用循环语句将数组下标为奇数的元素与2取余,如果余数不为零则将其值存入另外一个数组中。本评析仅供参考。voidfun(char*s,chart[]){inti,slenth,n=0;slenth=strlen(s);/*统计字符串s中字符的个数*//*将字符串s中所有下标和ASCII值同时为奇数的字符复制到数组t中*/for(i=1;ip)"。本评析仅3.本题的考核点是公式算法。解题思路:从1至m累计log(i)的和值,最后求它的平方根。本评析仅供参考。doublefun(intm){inti;ndoubles=0;for(i=1;i<=m;i++)/*求In(1)~In(m)的和*/s=s+log(i);s=sqrt(s);/*求s的平方根*/return(s);}第四套1.本题的考核点是字符串中字符的移动。本题程序实现的是将字符串中的字母顺序前移,其它字符顺序后移操作。在fun函数中定义了字符型指针变量指向字符串地址,if语句判断字符串中的字符是否为字母,若是则将其内容赋值给指针变量t;若不是则将其内容赋值给指针变量p,所以第一个空填:*(s+i)或与此语句相同功能的语句。第一个for循环结束后,指针变量t中的内容为字符串中的所有字母字符,指针变量p中的内容为字符串中的其它字符,变量k的值是字符串中其它字符的个数。第二个for循环是将指针变量p中存储的字符赋给指针变量t,所以第二个空填:k或与此语句相同功能的语句。指针变量最后指向的应该是个空值或是0,所以第三个空填:0。2.本题的考核点是C语言的标识符。解题思路:通过循环语句来交叉合并数组。本题中while语句出现了逻辑错误,其i应该是小于j。第二处错误是没有注意到C语言是区分大小写的。本评析仅作参考。3.本题的考核点是数组、循环语句。解题思路:使用循环语句将数组下标为偶数的元素与2做取余操作,如果余数为零则将其值存入另外一个数组中。本评析仅供参考。voidfun(char*s,chart[]){inti,slenth,n=0;slenth=strlen(s);/*统计字符串s中字符的个数*//*将字符串s中所有下标和ASCII值同时为偶数的字符复制到数组t中*/for(i=0;ipp[k]){x=pp[i];pp[i]=pp[j];pp[j]=x;}/*对进行符合条件的整数进行从小到大的排序*/}第八套1.本题的考核点是C语言中字符串数组和字符串指针变量的应用。在fun函数中通过字符串指针变量来访问字符串数组元素。首先利用for循环语句将二维数组中各元素的首地址赋给指针变量ps。变量k作为指针变量ps的下标值,其值根据循环中变量i的值变化,所以第一个空填:i;内层循环判断指针变量所指向的数组元素的长度,所以第二个空填:*(ps+j)或与此语句功能相同的语句;题目要求将字符串按由长到短的顺序排序,所以第三个空填:tp。2.本题着重考察考生对C语言中一些简单算法的掌握情况。八进制转换成十进制的方法是:例如77777=7*8^4+7*8^3+7*8^2+7*8^1+7*8^0本题中的第一个错误:题中要求将一个由八进制数字字符组成的字符串转换为等值的十进制数,思路应是:先将字符串中相应的字符减去字符0的ASCII值,得出该字符的八进制数,然后乘以8的次幂之和,即可求得该数的十进制数,所以程序中语句"n=*p-'o';"应改为"n=*p-'0';";本题中的第二个错误与第一个错误相似,另外,八进制转换成十进制应乘以8的次幂,所以应将程序中n语句"n=n*7+*p-'o';"改为"n=n*8+*p-'0';"。解决问题的方法是多种多样的,同一个问题的答案不止一个。本评析仅作参考。3.本题的考核点是二维数组、循环语句的嵌套。解题思路:先用一个变量记录二维数组的第一个元素,然后通过嵌套的循环语句依次将数组中的其他元素与这个变量作比较,如果大于它则交换两者的值。本评析仅供参考。fun(inta[][M]){inti,j,base;base=a[0][0];/*将二维数组的第一个元素赋给变量base,该变量是存放数组中最大元素的值*/for(i=0;i<2;i++)/*设置循环变量*/for(j=0;j='a'&&ss[i]<='z')/*判断该字符是否为小写字母*/ss[i]=ss[i]-'a'+'A';/*若上述条件成立,则将其转换为大写字母*/}第十一套1.本题的考核点是结构体类型变量的定义和引用以及文件函数的应用。fopen函数的作用是打开一个文件,在fun函数中为读/写打开一个二进制文件,while循环控制语句的作用是在打开的文件内找到与形参相匹配的内容,feof函数的作用是检测文件位置指示器是否已到末尾,n所以第一个空填:feof(fp);sizeof操作符以字节形式给出了其操作数的存储大小,fread函数的作用是从文件的当前位置开始读取size*count个字节的数据,所以第二个空填:==sno;如果在指定文件中找到相同数据并且未到文件尾,则将每门课的分数加3,fseek函数的作用是设定文件操作指示器位置,所以第三个空填:sizeof(STU)。2.本题主要考查的是函数的递归调用。由于k!=k*(k-1)!,当k=0时,其阶乘为1,当k大于0时,其阶乘为k*(k-1)!,即递归调用fun函数,所以第一处错误"k<0"应改为"k>0"。由于条件判断是否相等用的是关系运算符"==",而不是赋值运算符"=",所以第二处错误"k=0"应改为"k==0"。本评析仅供参考。3.本题的考核点是公式算法。解题思路:累计1/(i*(i+1))的和,通过一循环即可实现。本评析仅供参考。doublefun(intn){inti;doubles=0;for(i=1;i<=n;i++)s=s+1.0/(i*(i+1));/*累加各分式的值*/return(s);}第十二套1.本题的考查的是指针、循环语句和判断奇偶数的算法。解题思路:定义一个变量t,用于存放指针变量n所指向数据的任意一个位上的数(从低位到高位依次),所以第一个空填:10;如果取出的这个数值不为偶数即t%2!=0,则保留此数值,所以第二个空填:0;在满足while(*n)为真的情况下继续执行循环,直到将所有的偶数去除,x用来存放去除偶数后剩余的数,题目中要求将新的数通过形参指针n传回,x中就存放着新的数,所以第三个空填:x。本评析仅供参考。2.本题考查的是二维数组。本程序通过输入的数据控制输出矩阵的行列数,并调用fun函数控制二维数组各元素的值。在fun函数中,定义了二维数组a作为形参,由于定义数组时对第一维的长度可以不指定,但第二维的长度不能省,所以本程序第一处错误中应将"a[][]"改为"a[][M]"。在fun函数中采用嵌套的for循环给二维数组赋值,其中变量j控制行下标,变量k控制列下标,并由题面所给矩阵可看出,第j行第k列中的元素值等于行下标加1与列下标加1的乘积,所以第二处错误中应将"a[k][j]"改为"a[j][k]"。本评析仅作参考。3.本题的考核点是公式算法。解题思路:通过一变量累计乘积,求阶乘,通过另一变量累计乘积,求次方,再通过一变量累计分式的和。本评析仅供参考。ndoublefun(doublex,intn){inti;doublef=1.0,h=x;doubles=1;s=s+h/f;/*求公式中1、2两项的和(即1+x)*/for(i=2;i<=n;i++){f=f*i;/*求公式中每一项分母的阶乘值*/h=h*x;/*求公式中每一项分子的乘方值*/s=s+h/f;}return(s);}第十三套1.本题的考查的是数组的应用。解题思路:在主函数中随机抽取10个正数,并将值赋给数组x。在函数fun的形参中,定义一个指针变量av用来存放平均值,第一个for循环的作用就是计算平均值,所以第一个空填:*av;第二个for循环的作用是将数组中的数与平均值进行比较,求出小于平均值且离平均值最近的数,变量d用来表示到平均值的距离,j可以用来存放符合条件的数值也可以用来表示下标,所以第二个空填:i;如果用来存放数值则第三个空可填:j;如果用来表示下标第三个空可填x[j]。本评析仅供参考。2.本题的考核点是C语言中一些规定的应用。对while条件的说明,其中括号要相应完整,对应整齐。所以题中的第一处错误是while语句的最后缺少一个右括号,应该添加一个右括号,与前面的括号对应完整。C语言规定,每个语句和数据定义的最后必须有一个分号。分号是C语句的必要组成部分。所以,break语句要发挥语句的作用,其后必须要加分号。第二处错误应改为"break;"。本评析仅作参考。3.本题的考核点是删除字符串中字符的算法。解题思路:从原串的尾部开始找到第一个不为*的字符,将从这个字符开始到串首的字符放在另一个字符串数组中,最后将新串中的字符逆序放到原串中覆盖原串。本评析仅供参考。voidfun(char*a){charb[81];inti=0,j,s=0;j=strlen(a)-1;while((j!=-1)&&(a[j]=='*'))j--;/*查找出字符串数组a中尾部第一个不为"*"的字符*/while(j!=-1){b[i]=a[j];j--;i++;}/*将字符串a中尾部不为"*"开始的所有字符全部复制到字符串b中*/b[i]='';j=0;i=0;while(b[i++]!='')s++;i=0;nwhile(b[i]!=''){a[j+s]=b[i];j++;i++;}/*将字符串b中的所有字符复制到a字符串中覆盖原串*/a[s]='';}第十四套1.本题考查的是二维数组名作为实参时,实参和形参之间的数据传递。解题思路:首先定义一个列下标i,外循环for语句用来将指针b指向第一行中的元素,所以第一个空填a[0][i];j用来控制二维数组行的变化,在内循环中的if语句用来对每列的各个元素进行比较,如果b[i]小于第i列的第j个元素,则将a[j][i]的值赋给b[i],即用b[i]记录每列元素中最大的那个元素,所以第二个空填:<;主函数中的fun函数用来定义实参,实参用数组名来表示,所以第三个空填:x,y。本评析仅供参考。2.首先,我们必须先读懂题中程序的大致意思,这是发现并改正程序中错误的重要前提。程序中的重要思想如下:1、用题中提供的公式求π的近似值,直到最后一项的绝对值小于指定的数(参数num)为止;2、在题中必须使用求分数绝对值的函数。本题的第一个错误:在函数中的while循环中,条件明显不对,应当改为"while((fabs(t))>=num)",这样才能保证循环结束的条件为最后一项的绝对值小于指定的数(参数num);本题的第二个错误:在函数循环中求分数值的语句"t=s%n;"中错误使用了%号,在C语言中%是求余运算符,而我们的目的是为了进行除运算,所以,该语句应当改为"t=s/n;"。本评析仅作参考。3.本题的考核点是删除字符串中字符的算法。解题思路:先将原串中的串首连续的*号字符赋给一字符串数组,再从原串中的第一个非*字符开始,将非*号的字符追加其后,最后将新串覆盖原串。本评析仅供参考。voidfun(char*a){charb[81];inti=0,j=0;while(a[i]&&(a[i]=='*')){b[j]=a[i];j++;i++;}/*将原串中的串首连续的*号字符赋给一字符串数组b*/while(a[i])if(a[i]!='*'){b[j]=a[i];j++;i++;}/*从原串中的第一个非*字符开始,将非*号的字符追加在数组b后*/elsei++;b[j]='';j=0;i=0;while(b[j])/*将字符串b中的所有字符复制到a字符串中覆盖原串*/{a[i]=b[j];i++;j++;}a[i]='';}第十五套1.本题考查的是二维数组名作为实参时,实参和形参之间的数据传递。解题思路:当二维数组名作为实参时,对应的形参必须是一个行指针变量,其fun函数首部可以写成:nvoidfun(int(*a)[N])所以第一个空可以写成:[N]或[7];再根据题面要求最外层元素为1,往内依次递增一个数字,根据for循环语句得知第二个空填:i;第三个空填:i+1或1+i。本评析仅供参考。2.本题考查的是阶乘的运算。n!=1*2*3*……*(n-1)*n,而本题while循环中的"result*=--n;"只能说明此阶乘只乘到了n-1,并没有乘以n,因为"--n"表示先使得n的值减1,再把减1后的值放入表达式中运算,所以此表达式应改为"result*=n--;",但result为double型的,所以,也可以在n--前加上强制类型转型,如果不加也可以,系统会自动进行类型转换。最后算出的result的值为n!,故return后面应填result。3.本题的考核点是删除字符串中字符的算法。解题思路:将从第一个非*字符开始到串尾连续*之前的所有字符赋给另一字符串数组,最后将新串中的字符放到原串中覆盖原串。本评析仅供参考。voidfun(char*a,intn,inth,inte){charb[81],*c,*d;inti=0,j=0;c=a;d=a;c=c+h;d=d+n-e-1;while(c<=d){b[i]=*c;i++;c++;}/*将从第一个非*字符开始到串尾连续*之前的非*字符追加在数组b中*/b[i]='';i=0;while(b[i]){a[j]=b[i];j++;i++;}/*将字符串b中的所有字符复制到a字符串中覆盖原串*/a[j]='';}第十六套1.本题的考查的是循环语句和判断奇偶数的算法。解题思路:定义一个变量t,用于存放变量n取出的任意位上的一个数(从低位到高位依次),根据题目要求取出的数值为偶数,所以第一个空填:0;同时题目要求将低位的数值放在高位,x变量的作用是存放每次循环后求出的倒序偶数,由于每次循环后求出的t的值为个位上的数,所以要使得t的值组合成符合要求的有效数字,就必须使得x的值在前一次循环结果的基础上移位到高位(即x*10),然后再加上个位数t,所以第二个空填:x*10或相同作用的语句;当取出n中数值个位上的数并作处理后,必须使n值各低位上的数用其相对应的比它高一位数进行替换,以便于下一轮循环再次顺利取出其个位上的新数,所以第三个空填:n/10或相同作用的语句。本评析仅供参考。2.本题着重考察考生对C语言中指针数组的定义以及函数返回值的掌握情况。本题中的第一个错误:指针数组定义错误,应将程序中的语句"fun(char(*sq)[N])"改为"char*fun(charsq[N][M])"。本题中的第二个错误:函数返回的应是字符串中最长那个串的地址,这个地址是通过指针sp记录的,所以程序中的语句"returnsq;"应改为"returnsp;"或相同作用的语句。本评析仅作参考。3.本题的考核点是移动字符串中字符的算法。n解题思路:先统计原串串首连续*的个数,再将从第一个非*字符开始至串尾的所有字符赋给一字符串,再通过一循环生成串首连续的*追加其后,最后将新串覆盖原串。本评析仅供参考。voidfun(char*a){charb[81];inti=0,j=0,s=0,k;while(a[i]=='*'){i++;s++;}/*统计原串串首连续星号的个数*/while(a[i])/*将从第一个非星号字符开始至串尾的所有字符赋给字符串b*/{b[j]=a[i];j++;i++;}for(k=0;k。本评析仅作参考。2.本题着重考察考生对C语言中递归算法及函数定义的掌握情况。由主函数中的输出语句可看出,fun函数应返回一个double型值,所以程序中语句"fun(doublea,doublex0)"应改为"doublefun(doublea,doublex0)"。在迭代算法中,两个数据差的绝对值要尽量小,当绝对值不够小时,必须再次递归调用函数。本题中x1与x0差的绝对应在大于0.00001的情况下才继续调用函数fun,所以语句"if(fabs(x1-x0)<0.00001)"应改为"if(fabs(x1-x0)>0.00001)"。本评析仅作参考。3.本题的考核点是找出分数最低的学生数据的算法。解题思路:先从所有的学生数据中找出最低的分值,然后将所有学生分数中与最低分值相等的学生数据放到另一数组中,最后统计分数最低的学生人数并返回。本评析仅供参考。intfun(STREC*a,STREC*b){inti,j=0,min,k,f=0;min=(*a).s;for(i=1;inext;max=c->s;/*假定首结点为最大值*/while(c->next!=0){c=c->next;/*c后移一个结点*/if(maxs)max=c->s;/*找出最大值并将其赋给变量max*/}returnmax;/*返回最大值*/}第二十一套1.本题的考核点是循环语句的应用。从矩阵的第0行第0列开始计算求和,行与列的和首先要初始化为0,所以第一处填:0;若"行的值不等于列的值"或"行的值不等于对角线的值"则不是"幻方"返回0,所以第二处填:||;若是"幻方"则返回1,所以第三处填:1。本评析仅供参考。2.本题着重考察考生对C语言中一些简单算法的掌握情况。本题中的第一个错误:fun函数返回的应为float或double型,所以程序中语句"fun(intn)"应改为"doublefun(intn)"或相同作用的语句。本题中的第二个错误:C语言中关键词应为小写,所以程序中语句"s=s+(Double)a/b;"应改为"s=s+(double)a/b;"或相同作用的语句。本评析仅作参考。3.本题的考核点是C语言中的循环嵌套。解题思路:使用嵌套循环,外循环是列循环,内循环是行循环,这样可以对整个数组中的元素进行符合条件的运算。是对数组上半三角元素中的值乘以n,观察二维数组可以看出,数组上半三角中的元素,行坐标值都小于等于列坐标值。/*该题的关键是在如何表示右上半角,当从上往下到第i行时要从第i列(所以内嵌for()的j从i开始循环)开始替换直到最后一列,本题用外层for()来控制行,而用内嵌的for()来控制在每一行内右边元素乘m,本题采用的是在一行内从最后一列的元素开始往前乘,只有j>=i时才改变。*/voidfun(inta[][N],intm){inti,j;/*定义两个整型变量,用于控制二维数组行、列下标的变化*/for(i=0;i=i;j--)/*内嵌的for()来控制二维数组列的变化*/a[i][j]*=m;/*对数组上半三角元素中的值全部乘以m*/}第二十二套1.本题的考核点是二维数组作为函数参数及循环嵌套。变量p用来记下除第0列外的第k列以内的元素的下标,因此第一处填:k;在满足最外层的for循环下,各列依次进行左移,因此第二处填:N-1;第三处填:temp。本评析仅供参考。2.本题着重考察考生对C语言中一些简单算法的掌握情况。本题中的第一个错误:C语言中,变量是区分大小写的,p和P是不同的两个变量名,所以程序中语句"if(P==n)return-1;"应改为"if(p==n)return-1;"或相同作用的语句。n本题中的第二个错误:由题意可知,要删除符合条件的元素,需将该元素后面的数向前移动一个位置,所以程序中语句"a[i+1]=a[i];"应改为"a[i]=a[i+1];"或相同作用的语句。本评析仅作参考。3.本题的考核点是字符数组、循环语句。解题思路:通过for循环语句以及if语句,判断当前位置上的字符是否为空格(空格的ASCII码值为32),若是空格,再判断下一个字符是否为空格,若下一个字符不是空格,则将当前位置上的字符赋给上一个字符位置上;若下一个字符还是空格,则继续判断该字符的下一个字符,直至其下一个字符为非空格时重复上述赋值操作,最终以字符串结束标志""结束循环。voidfun(char*str){inti,j;for(i=0;*(str+i);i++)if(*(str+i)==32)/*判断当前位置上的字符是否为空格(空格的ASCII码值为32)*/{for(j=i+1;*(str+j);j++)*(str+j-1)=*(str+j);/*删除空格*/*(str+j-1)=0;/*以字符串结束标志""结束循环*/i=0;}}第二十三套1.本题的考核点是字符型指针变量作为函数参数。本题fun()函数有两个字符型指针变量s和t,在函数中通过一个while循环依次取出s所指字符并判断它的ASCII码值是否小于97,如果是,则将其放到另一字符型指针变量t中,所以第一处填:*s;一个字符判断完后指针下移进行下个字符的判断,所以第二处填:s++;变量n用来统计符合条件的字符个数,所以第三处填:n。本评析仅供参考。2.本题的考查点是函数的返回值。由于题目要求a2存放十位数,所以"a2=k%10;"应该改为"a2=k/10;"。程序中通过变量i来记录符合条件值的个数,由题意可知,数的个数作为函数值返回,所以程序中的语句"returnk;"应改为"returni;"或相同作用的语句。本评析仅作参考。3.本题的考核点是二维数组按行转换为一维数组的算法。解题思路:本题提供的参考程序利用内、外循环两层for循环,按行的顺序将第1到3行的数据依次存放到数组中的相应位置上,同时利用形参变量n来统计一维数组中存放的数据的个数,即实现了将M行N列的二维数组中的数据按行的顺序依次放到一维数组中。voidfun(int(*s)[10],int*b,int*n,intmm,intnn){intx,y;/*定义两个整型变量,用于控制数组下标的变化*/for(x=0;xnext;第二空的目的是将p的下个结点赋值给q,故第二空应填:p->next;第三空的目的是判断指针p所指的数值是否大于指针q所指的数值,故第三空应填:>。本评析仅供参考。2、本题的考核点是计算子串在主串中出现的次数。解题思路:将主串中的字符从第一个位置开始逐个与子串中的字符作比较,若子串出现在主串中,次数加1,主串中的指针移动到下一个位置继续与子串比较,反之,主串中的指针也同样移动到下个位置,直至主串中的字符全部比较结束。程序中的第一个错误:指针r指向给定的字符串,即r=t;。程序中的第二个错误:C语言中判断是否相等应当用符号"==","="是赋值符,不用于判断。另外字符串末尾的标志是"",而不是"0",所以第二处改为"if(*r=='')"。本评析仅供参考。3、本题的考核点是统计各年龄段人数的算法。解题思路:本题提供的参考程序,先对数组初始化,再通过for循环和逗号表达式*(a+i)/10>10?10:*(a+i)/10,将年龄整除10后存放到数组d中,具体执行过程是:判断年龄整除10后的值是否大于10,若大于10,则该逗号表达式的值等于10,即实现了将100岁(含100)以上年龄的人数存放在d[10]中;若不大于10,则该逗号表达式的值等于*(a+i)/10的值,即实现了各个年龄段的人数的统计。voidfun(int*a,int*b){inti;for(i=0;i10?10:*(a+i)/10]++;}第三十一套1、本题主要考查了链表的操作。由于函数返回的是一个链表,它应该是一个指向NODE型的指针,故第一空为:NODE;在本题中,由于"q->next=p;"在循环的第二条语句,故在此之前必须要将q->next赋值给某临时变量,所以第二空应为:next;最后,为了保证链表不会断流,必须将r赋值给变量q,故第三空为:r。本评析仅供参考。2、本题的考核点是c语言中循环语句和条件判断语句的使用。解题思路:从本题的要求来看,我们应该采用循环判断的算法。本参考函数使用while循环从头到尾扫描字符串,并在扫描时进行条件判断,对'z','Z'和其它字符进行不同的处理。程序中的第一个错误:循环的条件应当是字符串没有结束,即字符串不为空,在C语言中"@"不表示空。程序中的第二个错误:此处应当是字符指针指向下一个元素,(*s)++;表示字符值加1,没有指向下一个元素,不合题意。n本评析仅供参考。3、本题的考核点是统计字符串中单词个数的算法。解题思路:本题要求统计一行字符串中单词的个数,并作为函数值返回。在给出的参考程序中,若判断出当前字符为非空格,而它前面的字符是空格,则单词数累加1;若当前字符为非空格,而其前面的字符也为非空格,则单词数不累加1,程序细节可以参考程序的注释部分。intfun(char*s){inti=1,j=0;/*i用来记录是否遇到过了空格,j用来记录单词数*/while(*s){if((i==1)&&(*s!=32)){j++;i=0;}/*当i==1且当前s所指向的是字符,则j自增加1,同时将i设为0*/if(*s==32)i=1;/*用i来判断是否遇到了空格,假如遇到了空格则i=1*/s++;/*检测是否是空格,如果是空格则指针变量s向后移动一位*/}returnj;/*返回统计结果*/}第三十二套1、本题的考核点是字符串的应用。本程序将字符串从前向后与从后向前的字母依次比较,在满足各比较字母相等,且比较到或超过字符串长度的二分之一的情况下,说明此字符串是回文。toupper函数的作用是把字符串中所有的小写字母都变成大写字母,而非字母的字符则不改变。程序首先通过调用fun函数将指针变量s指向用户输入的字符串的首地址。在fun函数中,用指针变量lp依次取得字符串中从前向后的各字母,所以lp应指向字符串的首地址,故第一空填"s"或与其等效的形式。指针变量rp依次取得字符串中从后向前的各字母。当满足lp与rp所指向的存储单元的值相等且指针变量lp小于rp的情况下,lp就继续后移,rp继续前移,所以第二空应填"rp--;"或其等效的形式。如果在lp