问答题
下列给定程序中,函数fun的功能是:从P所指字符串中找出ASCII码值最大的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动。例如,调用fun函数之前给字符串输入“ABCDeFGH”,调用后字符串中的内容应为“eABCDFGH”。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>void fun(char*P){ char max,*q;int i=0; max=P[i]; while(p[i]!=0) { if(max<P[i]) {max=P[i];/*********found*********/ q=P+i } i++; }/*********found*********/ while(q<P) { *q=*(q一1);q--; } P[0]=max;}void main(){ char str[80]; printf("Enter a string:"); getS(str), printf("\nThe original string:"); puts(str); fun(str); printf("\nThe string after moving:"); puts(str);printf("\n\n");}
【正确答案】正确答案:(1)q=p+i; (2)while(q>p)
【答案解析】解析:解答本题需要三个步骤,首先找到字符串中ASCII码值最大的字符并保存;然后将该字符复制,并将该字符前面的字符串顺次后移;最后将ASCII码值最大的字符赋给字符串的第一个字符。要找到ASCII码值最大的字符可以通过定义一个字符变量max,该字符变量初始时等于字符串的第一个字符,若字符串的下一个字符大于max,则将下一个字符赋给max,如此循环到字符尾,即可得到ASCII码值最大的字符,同时令指针q指向最大字符。此后对最大字符前面的子串顺次后移,可采用while语句实现。