这是我看了一道题后,自己编的,题是会了,但是我自己之前编的有错

C语言 码拜 9年前 (2015-05-11) 855次浏览 0个评论

先上这个题目,但是我不是要问题怎么做,而是我编的这个为什么不能调试???,运行也是错的,编译是过了。我想值到我的编码为什么会出现这状况,不是这题怎么做.谢谢大家了。
1.———–》》》题目:
/*一辆以固定速度行驶的汽车,司机在上午8点看到里面表里的读数是一个对称数(即这个数从左向右和 从右向左读是完全一样的),为95859。
两个小时后表里出现了一个新的对称数,问该车的速度是多少?新的对称数是多少?
技术要点:
本题的关键是如何将探测到的五位数的各位分解存到数组中,方法有很多种,这里我们用到了while循环来实现该功能,具体举数字说明一下,
如果i=95886,当k=100000时,a[1]=95886%100000/1000,此时a1中存放的数字是9,k通过k/=10被重新赋值为10000,第二次循环啊a[2]=95886%10000/1000,
此时a[2]中存放的是5,以此类推,a[3],a[4],a[5]中存放的数字分别是8,8,6,这样就可以通过比较第一位和第五位,第二位和第四位是否相同来判断
数字是否是否是我们要找的对称数。*/

2.—》》    我出错的代码:  为什么不能调试???哪错了,大家看看,谢谢;

#include"stdio.h"
int main()
{
    int a[5];
    int i,n;
    
    for(n=95860;;n++)
    {
        i=0;
        while(n>10)
        {
            a[i++]=n%10;            
            n=n/10;
        }
        a[i]=n;
        if(a[0]==a[4]&&a[1]==a[3])
        {
             printf("%d%d%d%d%d\n",a[0],a[1],a[2],a[3],a[4]);
             break;
        }
        
    } 
/*我来说下,首先a数组是用来存放每个位上的数的,那个if是用来选数,我们现在就是要
    在95860后面开始找,找到一个数,那个数它是对称相等的,比如95859,以8位分界线
    两边的数对称相等。*/    
    
    
}
20分
修改如下:

#include"stdio.h"
int main()
{
	int a[5];
	int i, j, n;

	for (n = 95860;; n++)
	{
		i = 0;
		j = n;    //用j记录n的值
		while (j>10)
		{
			a[i++] = j % 10;
			j = j / 10;
		}
		a[i] = j;
		if (a[0] == a[4] && a[1] == a[3])
		{
			printf("%d%d%d%d%d\n", a[0], a[1], a[2], a[3], a[4]);
			break;
		}

	}
	/*我来说下,首先a数组是用来存放每个位上的数的,那个if是用来选数,我们现在就是要
	在95860后面开始找,找到一个数,那个数它是对称相等的,比如95859,以8位分界线
	两边的数对称相等。*/
	return 0;
}
我在你的代码for循环开始处添加一句 printf(“woaino  %d  “,n); 运行结果是
这是我看了一道题后,自己编的,题是会了,但是我自己之前编的有错
原因就是n是main()函数中的变量,对于for循环来说就属于外部全局的,所以,除了第一次,每次循环n都是从11开始,加到11后,进入while循环,执行n=n/10; n变为1,然后n++变成2,再在for循环中加到11,然后继续,所以找不到了。
只需要在for循环中添加 int m = n; 然后用m取值即可。你试试。
20分
#include <stdio.h>

void main()
{
int i = 95859, j;
int a[5];
for (i = 95860; i < 100000; i++)
{
a[0] = i/10000;
a[1] = i/1000%10;
a[2] = i/100%10;
a[3] = i/10%10;
a[4] = i%10;
while ((a[0] == a[4]) && (a[1] == a[3]))
{
for (j = 0; j < 5; j++)
{
printf(“%d “, a[j]);
}
printf(“\n”);
return;
}
}
}

你的for循环里面没有循环条件,编译器不会给你编译通过,而且不符合语法规范。
n是for的变量,在while里面不能改

k =n, i=0;
while(k) a[i++] =k%10, k/=10;

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明这是我看了一道题后,自己编的,题是会了,但是我自己之前编的有错
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!