2个回答
展开全部
我猜楼主的想法是:
让数组的头和尾比较,一样了,就比较下一对,一直比较到最后,如果i=j,就说明是回文。
但是题主却没有用循环语句,按照楼主的程序就能比较两次,比较不完肯定错;而且题主找到的i,并不指向数组最后一个元素,而是指向他的结尾符号。(详情看图)
改正意见:
1. 使用循环语句,从头判断到尾。
那就要求我们给循环语句一个最长执行长度,这就要考虑两种情况,一种,数组长度为奇数,另一种,数组长度尾偶数。不同的情况我们的判决情况也不一样,必须选一个适合两种情况的判决条件,这里使用n=i/2-1,让n来作为标准。(原因看图)。(其实除了要考虑这种情况之外,还要考虑特殊情况,比如长度为1,2这样的,这种特殊情况,就是程序容易忽略,容易出错的地方。)
2. 在判断前,i-1,让i指向数组最后一个元素。
#include <stdio.h>
int main()
{
char a[20];
gets(a);
int i,j,n;
j=i=0;
while(a[i]!='\0')i++; //此时i并不指向a的最后一个元素,而是指向它的结尾符号‘、0’
n=i/2-1;
i--; //让i指向a的最后一个元素
while(j<=n)
{
if(a[i]!=a[j])break;
else {
i--;
j++;
}
}
if(j>n)printf("\n回文!");
else printf("\n不回文!");
return 0;
}
总结:编程不容易,思考需谨慎。面向过程的的编程,任何情况都要考虑出来,这样你的程序才是正确的。
更多追问追答
追问
答主给的答案我看懂了 但是还是想问一下 为什么我写的那个只能循环两次呢 是哪里出了问题呀 非常感谢!!!
答主给的答案我看懂了 但是还是想问一下 我的答案可以改一下哪里 改成正确的么 非常感谢!!!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询