问答题
请编写函数fun(),它的功能是:判断字符串是否是回文?若是,函数返回1,主函数中输出:YES,否则返回0,主函数输出NO。回文是指顺读和倒读都一样的字符串。
例如,字符串LEVEL是回文,而字符串12312就不是回文。
[注意] 部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
[试题源程序]
#include<stdio.h>
#define N 80
int fun(char *str)
{
}
main()
{
char
s[N];
printf("Enter a string:")" gets(s);
printf("/n/n"); puts(s);
if(fun(s))
printf("
YES/n");
else
printf(" NO/n");
NONO();
}
NONO()
{
/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/
FILE *rf, *wf;
int i ; char s[N];
rf=fopen("K://k06//24010001//in.dat", "r");
wf=fopen("K://k06//24010001//out.dat", "w");
for(i=0; i<10;
i++){
fscanf(rf, "%s", s);
if(fun(S))
fprintf(wf, "%s YES/n", s);
else
fprintf(wf, "%s NO/n", s);
}
fclose(rf);
fclose(wf);
}
【正确答案】int fun(char *str)
{
int i, n=0, fg=1;
char *p=str;
while(*p)
{
n++;
P++;
}
for(i=0; i<n/2; i++)
if(str[i]==str[n-1-i]);
else
{
fg=0;
break;
}
return fg;
}
【答案解析】[解析] 本题的设计思路是:(1)定义一个int型变量flag用做返回值,定义一个字符指针代替原串遍历,求字符串的长度;(2)利用循环及if条件语句判断字符串首尾对应字符是否相等;(3)如果为回文数,修改flag的值;(4)返回flag。