运行结果如下:
疑问
首先想现在这里举例出我在写这个程序所遇到的问题然后一一解决
- 要求的数组为10以内,但不满10时如何更除去不需要的数组
- 如何控制前面为0是不输出而内部有0时会输出
- 当输入整数的最后一位有0时如何记录位数
整体思路
(1)设置一个一维数组存放以逆序方式存放输入整数的各位数字(怎样做?);
(2)定义一个变量存放整数的长度;
(3)设置一个标志符来控制是否允许打印,初值为0;若一开始连续的数字是0,则不允许打印,若从非0数字开始,则可以打印;
(4)若标志符的最后状态还是0,则可判定输入的是0,则逆序输出0。
解决疑问
- q1:首先为数组定义大小(数组内只能放置常量)
const int N=10; int a[N];
设置一个变量i在存入整数时记录位数
printf("Enter x:"); scanf("%d",&x); i=0; while(x>0) { a[i]=x%10; x/=10; i++; }
在设置一变量存放位数值
length=i;
最后在循环时for的控制为
for(i=0;i<length;i++)
这样就完成了有效的运用数组
-
q2:在逆序存放时最后一位有0则在最开始会有0,我们定义一个变量(标识符),来判断0与非0
int isPrinted=0;
然后我们要在for循环中用if嵌套判断(if判断中的本质就是为0不运行,为1运行)
for(i=0;i<length;i++) { if(isPrinted==0)//最开始不运行 { if(a[i]!=0) isPrinted=a[i];//非0时可以运行了 } if(isPrinted) { printf("%d",a[i]); } } if(isPrinted==0)//输入本来就为0则输出也为0 printf("%d",0);
-
q3:可以将原本的while(x%10!=0)改为while(x>0)这样就可以实现了
while(x>0) { a[i]=x%10; x/=10; i++; }
最后代码
#include<stdio.h>
const int N=10;
int main()
{
int a[N],x,i,length,isPrinted=0;
printf("Enter x:");
scanf("%d",&x);
i=0;
while(x>0)
{
a[i]=x%10;
x/=10;
i++;
}
length=i;
printf("\n逆序结果为:");
for(i=0;i<length;i++)
{
if(isPrinted==0)
{
if(a[i]!=0)
isPrinted=a[i];
}
if(isPrinted)
{
printf("%d",a[i]);
}
}
if(isPrinted==0)
printf("%d",0);
printf("\n");
return 0;
}