2. 改錯題
下列給定程序中,函數(shù)fun()的功能是:在字符串str中找出ASCⅡ碼值最小的字符,將其放在第一個位置上,并將該字符前的原字符向后順序移動。例如,調(diào)用fun()函數(shù)之前給字符串輸入fagAgBDh,調(diào)用后字符串中的內(nèi)容為AfaggBDh。
請改正程序中的錯誤,使它能得到正確結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序:
#include
/**********************found***********************/
void fun(char p)
{
char min, *q;
int i=0;
min=p[i];
while (p[i]!=0)
{
if (min>p[i])
{
/**********************found***********************/
p=q+i;
min=p[i];
}
i++;
}
while(q>p)
{*q=*(q-1);
q--;
}
p[0]=min;
}
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)錯誤:void fun(char p)
正確:void fun(char *p)
(2)錯誤:p=q+i;
正確:q=p+i;
【解析】錯誤:由于本題中函數(shù)的功能是對字符串進(jìn)行處理,而不是對單個字符進(jìn)行處理,因此,函數(shù)的參數(shù)應(yīng)為字符串指針。
錯誤2:使指針q指向ASCII碼最小的字符
本題解答需要3個步驟:
(1)找到字符串中ASCII碼值最小的字符,并保存。
(2)將該字符復(fù)制,并將該字符前面的字符串順次后移。
(3)將ASCII碼值最小的字符賦給字符串的第1個字符。找到ASCII碼值最小的字符可以通過定義一個字符min,該字符初始時等于字符串的第1個字符,若字符串的下一個字符小于min,則將下一個字符賦給min,如此循環(huán)到字符尾,即可得到ASCII碼值最小的字符,同時令指針q指向最小字符。之后對最小字符前面的子串順次后移,可采用while語句實(shí)現(xiàn)。
此題需要熟練掌握和靈活應(yīng)用C語言的字符與整型變量的關(guān)系以及字符串操作。
相關(guān)鏈接:北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |