问题 问答题

请编写函数fun,该函数的功能是:判断字符串是否为回文,若是,函数返回1,主函数中输出Yes,否则返回0,主函数中输出No。回文是指顺读和倒读都一样的字符串。
例如:字符串"LEVEL"是回文,而字符串"123312"就不是回文。
注意:部分源程序在文件PROG1.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
文件PROG1.C内容如下:
#include<stdio.h>
#define N 80
int fun(char *str)


void 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");

答案

参考答案:int fun(char *str)
{
int i,j;
for(i=0;str[i]!=’\0’;i++);
j=i-1;
for(i=0;i<j;i++,j--)
if(str[i]! =str[j])return 0;
return 1:
}

解析: 函数fun使用的算法是:首先通过第一个for循环,求出字符串的长度,第一个for循环的循环体是一条空语句,跳出循环后变量i的值即为字符串的长度。执行“j=i-1;”,变量j记录了字符串最后一个字符的下标。然后通过第二个for循环进行字符的比较,第一个字符与最后一个字符进行比较,第二个字符和倒数第二个字符进行比较,以此类推,变量i自加,变量j自减,如果在比较的过程中,出现str[i]!=str[j]的情况,则通过“return 0;”既中断了循环,又返回了函数值0。如果在比较的过程中,str[i]和对应的str[j]相等,则不会中断循环,循环正常结束后返回函数值1。
[归纳总结] 本套试题的程序填空和程序设计题考查的是字符串的比较。字符串的比较可以是长度的比较,也可以是字符串中字符本身的比较。字符串的处理是等级考试试题中的常见题目,在编程处理字符串问题时,要注意数组元素下标的变化规律,尤其是在涉及字符移动的时候。同时,字符串的结束标记’\0’也是字符串编程时不能忽略的问题。

单项选择题
单项选择题