用C语言编程:给一个不多于5位的正整数,要求如下:

2024-11-08 09:37:12
推荐回答(5个)
回答1:

不对的原因,主要是if条件语句应该是用“==”而不是“=”,这是判断,不是赋值。其它的错误,scanf_s("%d",&a)改成scanf("%d",&a),printf用错了,printf打印应该是一个占位符对应一个要输出的内容,就是你代码中%d对应一个输出。

修改后的代码:

#include

int main()

{

int a, b, c, d, e, f, w;

printf("输入一个不多于五位的整数:");

scanf("%d",&a);

//第一问,求出它是几位数

b = 10000 - a;

c = 1000 - a;

d = 100 - a;

e = 10 - a;

f = 0 - a;

while (a < 0 || a > 99999)

printf("输入错误,请重新输入\n");

if (b < 0)

{

printf("a是五位数\n");

w = 5;

}else if (c < 0){

printf("a是四位数\n");

w = 4;

}else if (d < 0){

printf("a是三位数\n");

w = 3;

}else if (e < 0){

printf("a是两位数\n");

w = 2;

}else if (f < 0){

printf("a是个位数\n");

w = 1;

}else

printf("输入错误,请重新输入\n");

//第二问,分别输出每一位数字

if (w == 5)

printf("%d %d %d %d %d\n", a / 10000, a / 1000 % 10, a / 100 % 10, a / 10 % 10, a % 10);

if (w == 4)

printf("%d %d %d %d\n", a / 1000 % 10, a / 100 % 10, a / 10 % 10, a % 10);

if (w == 3)

printf("%d %d %d\n", a / 100 % 10, a / 10 % 10, a % 10);

if (w == 2)

printf("%d %d\n", a / 10 % 10, a % 10);

if (w == 1)

printf("%d\n", a % 10);

//第三问,按逆序输出各位数字

if (w == 5)

printf("%d %d %d %d %d\n", a % 10, a / 10 % 10, a / 100 % 10, a / 1000 % 10, a / 10000);

if (w == 4)

printf("%d %d %d %d\n", a % 10, a / 10 % 10, a / 100 % 10, a / 1000 % 10);

if (w == 3)

printf("%d %d %d\n", a % 10, a / 10 % 10, a / 100 % 10);

if (w == 2)

printf("%d %d\n", a % 10, a / 10 % 10);

if (w == 1)

printf("%d\n", a % 10);

}

修正后的代码执行如下:

回答2:

这样就好了,最大错误是switch语句,因为当p<5时,case 5就没意义了,就会报错。
这题要用数组做的话会很简洁,可惜你们没学到,我们也是才学C语言,讲的比较快,呵呵。
能想到这方法这的很不容易,,居然循环都没用

#include
int main()
{
int a,b,c,d,e,p,n;
scanf("%d",&n);
if (n>9999)
p=5;
else if(n>999)
p=4;
else if(n>99)
p=3;
else if(n>9)
p=2;
else p=1;
printf("位数:%d\n",p);
a=n/10000;
b=(int)(n-a*10000)/1000;
c=(int)(n-a*10000-b*1000)/100;
d=(int)(n-a*10000-b*1000-c*100)/10;
e=(int)(n-a*10000-b*1000-c*100-d*10);
printf("每一位数为:");
if(p==5)
{
printf("%d %d %d %d %d\n",a,b,c,d,e);
printf("反向数为:%d%d%d%d%d\n",e,d,c,b,a);
}
if(p==4)
{
printf("%d %d %d %d\n",b,c,d,e);
printf("反向数为:%d%d%d%d\n",e,d,c,b);
}
if(p==3)
{
printf("%d %d %d\n",c,d,e);
printf("反向数为:%d%d%d\n",e,d,c);
}
if(p==2)
{
printf("%d %d\n",d,e);
printf("反向数为:%d%d\n",e,d);
}
if(p==1)
{
printf("%d\n",e);
printf("反向数为:%d\n",e);
}
return 0;
}

回答3:

/* Note:Your choice is C IDE */
#include"stdio.h"
void main()
{
int a,i,b,c,e,f,n;
scanf("%d",&n);
a=n/10000;
b=n%10000/1000;
c=n%10000%1000/100;
e=n%10000%1000%100/10;
f=n%10000%1000%100%10/1;
if(a>0)
{ printf("有五位数");printf("%d%d%d%d%d",f,e,c,b,a);}
else if(b>0)
{printf("%d%d%d%d",f,e,b,c);
printf("有四位数");}
else if(c>0)
{printf("有三位数");printf("%d%d%d",f,e,c);}
else if(e>0)
{printf("有两位数");printf("%d%d",f,e);}
else
{printf("有一位数");printf("%d",f);}
}这样才可以把各位数字分解出来,希望对你有帮助

回答4:

switch 语句 没错 ,换成这样就 可以了 (还有有一种用法 ,不过 会麻烦点) , 还有就是 要对 n 作 限制
#include
int main()
{
int a,b,c,d,e,p,n;
scanf("%d",&n);
if (n < 100000 && n > 0)
{
if (n>9999);
p=5;
else if (n>999);
p=4;
else if (n>99);
p=3;
else if (n>9);
p=2;
else p=1;
printf("位数:%d\n",p);
printf("每一位数为:");
a=n/10000;
b=(int)(n-a*10000)/1000;
c=(int)(n-a*10000-b*1000)/100;
d=(int)(n-a*10000-b*1000-c*100)/10;
e=(int)(n-a*10000-b*1000-c*100-d*10);
switch(p);
{
case 5:printf("反向数为:%d%d%d%d%d",a);
case 4:printf("反向数为:%d%d%d%d",b);
case 3:printf("反向数为:%d%d%d",c);
case 2:printf("反向数为:%d%d",d);
case 1:printf("反向数为:%d",e);
break;
}
}
return 0;
}

回答5:

1.
int x;//5位数
i=0;//求解
do
{x=x/10;i++}
while(x);
//i为所求
2.
int x;//5位数
do
{printf(%d,x%10);x=x/10;}
while(x);
3.上面输出的就是逆序的,先个位,再十位,。。。。