C语言问题 输入一个不多于5位的正整数,要求如下结果
第一种方法代码:
#include
#include
int main()
{
int a,b,c,d;int count = 1;printf("请输入一个不多于5位的正整数:");
scanf("%d",&a);c = a;
printf("逆序:
");
while(c / 10 != 0)
{
count++;b = c % 10;
printf("%d
",b);
c = c / 10;
}
b = c % 10;
printf("%d
",b);
printf("位数是:%d
",count);
printf("顺序:
");
while(a % 10 != 0)
{
d = a / (int)pow(10,(count-1));
printf("%d
",d);
a = a % (int)pow(10,count-1);
count--;
}
return 0;
}
扩展资料:
输入一个不多于5位的正整数,编程实现以下功能:
(1)判断它是几位数
(2)分别打印每一位数字
(3)按逆序输出各位数字
(4)例如:输入2345
(5)则输出:2 3 4 5
5 4 3 2
编程思路:
首先用if语句判断输入的数是几位数,然后分别求出每位上的数字并打印,最后将求出来的每位上的数字反序输出。
程序相关知识点:
选择结构中的if语句、switch语句,循环结构中的while语句、for语句。
#include#define N 5int main(){ int len(int x); int i,x; for(i=0;i<N;i++){ scanf("%d",&x); printf("The length of %d is %d
",x,len(x)); } return 0;}int len(int x){ int ans=0; while(x){ ans++; x/=10; } return ans;}
这个问题出在你的if和else的配合问题:
if(b!='
') c=getchar();//***
if(c!='
') d=getchar();//***
if(d!='
') e=getchar();//***
if(e!='
') f=getchar();//***
if(f=='
') printf("place=5");
else
if(e=='
') printf("place=4");
被 //*** 标记的行上if语句是没有else配合的,也就是说你的if语句在这里就已经结束,所以下一句if语句将要执行。因此当你输入的数字位数少于4位时,输出的结果是不对的。它不能正确的输出你输入的数字是几位数。你只要把if和else配对使用就可以避免这种现象,以下是我配对并增加了容错措施的程序,其实就是在if后加了{}。使他们配成对。
#include <stdio.h>
main()//使用了返回函数。故去掉了void
{
char a='\000',b='\000',c='\000',d='\000',e='\000',f='\000';
a=getchar();
if(a<=48||a>57) {printf("Error!
"); return;}//输入非数字字符报错,并退出程序。
else {b=getchar();
if(b!='
') {c=getchar();
if(c!='
') {d=getchar();
if(d!='
') {e=getchar();
if(e!='
') {f=getchar();
if(f=='
') printf("place=5");
else {printf("Error!
"); return;}}//位数超过5位后报错,并退出程序。
else printf("place=4");}
else printf("place=3");}
else printf("place=2");}
else printf("place=1");
printf("
%c %c %c %c %c",a,b,c,d,e);
printf("
%c%c%c%c%c
",e,d,c,b,a);
}
}
运行该程序输入123输出如图:
如有问题,请追问~!
这个程序是把所有的printf都执行了一遍的,举个例子,假如你的b==\n,按题目的意思是程序就此结束,可是我看到楼主的编程却成了c==\n的时候输出place=2 当你输入的数据b==\n的时候,后面的数肯定是空啊,所以如果你是一个数你将执行了所有的printf,就是你运行不成功的原因。
#include <stdio.h>
void main()
{
char a='\000',b='\000',c='\000',d='\000',e='\000',f='\000';
a=getchar();
if(a<=48||a>57)
printf("Error!\n");
else
{
b=getchar();
if(b!='\n')
{
c=getchar();
if(c!='\n')
{
d=getchar();
if(d!='\n')
{
e=getchar();
if(e!='\n')
{
f=getchar();
if(f=='\n')
{
printf("place=5");
}
}
else
{
printf("place=4");
}
}
else
{
printf("place=3");
}
}
else
{
printf("place=2");
}
}
else
{
printf("place=1");
}
printf("\n%c %c %c %c %c",a,b,c,d,e);
printf("\n%c%c%c%c%c\n",e,d,c,b,a);
}
}
效率?毫无效率可言
完全可以,我在vc++2010上试了,可以的
把void去掉,就可以了
调翠结核:[答案] #include "stdio.h" void main() { char str[100]; int i; gets(str); printf("长度为%d\n",strlen(str)); for(i=0;iprintf("%-2c",str[i]); printf("\n"); for(i=strlen(str)-1;i>=0;i--) printf("%c",str[i]); } 这个可以满足要求
当涂县18997198627: C语言编程:给一个不多于5位的正整数, - ?
调翠结核: 不多于五位的正整数,包括一位数到五位数,所有的数值. 即[1,99999]. 以下代码,功能为获取一个不多于五位的正整数并输出. int main() {int n;srand(time(NULL));printf("%d", rand()%99999+1); }
当涂县18997198627: c语言问题,求大神解答!给一个不多于5位的正整数.①求出它是几位数.②分别输出每一位数字.③按逆序输出各位数字.例如原数位465,应输出5 6 4.... - ?
调翠结核:[答案] #include#include#includeint main(){int num,tmp,i,j;int n[5]={0};//用于存储num分解后的每位上的数字,由于num不超过5位,所以数组有5个单元就可以了 int *sq_ls_num;printf("请输入一个不多于5位的正整数: ");sc...
当涂县18997198627: 输入一个不多于5位的正整数,求出它是个几位数,C语言设计 - ?
调翠结核:/* 120 120是3位数. 23 23是2位数. 2234565 2234565是7位数. q Press any key to continue */ #includeint main() {unsigned num,digits,t;while(scanf("%u",&num) == 1) {digits = 0;t = num;if(t == 0) digits = 1;else {while(t) {t /= 10;++digits;}}printf("%u是%d位数.\n",num,digits);}return 0; }
当涂县18997198627: (C语言题目) 给一个不多于5位的正整数,要求: - ?
调翠结核: #include void main(){ int i=0,j,n,a[5]; scanf("%d",&n); while(n) {a[i]=n%10;n/=10;i++;} printf("%d位数\n",i); for(j=i-1;j>=0;j--) printf("%d",a[j]); printf("\n"); for(j=0;jprintf("%d",a[j]); }
当涂县18997198627: C语言编程:输入一个不超过5位的正整数, - ?
调翠结核: #include void main() { int n,i,a[10]; printf("请输入一个不超过5位的正整数:\n"); scanf("%d",&n); int sum=0; for(i=0;;i++) { a[i]=n%10;/*取余存于a[i]中*/ n=n/10; sum++;/*位数加一*/ if(n==0) break; } printf("它是%d位数\n",sum); int j; ...
当涂县18997198627: c语言编程:给一个不多于5位的正整数,要求(1)求出它是几位数(2)分别输出每一位数字(3)按逆序 - ?
调翠结核: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23#include<stdio.h> voidmain() {intn,i=0;intj=0;while(1){printf("请输入一个小于5位数的整数:");scanf("%d",&n);if(n>=10000)printf("输入错误,请重新输入:");elsebreak;}while(n){i=i*10+n%10;n=n/10;j++;}printf("输入数字为%d位数\n",j);printf("逆序后:%d\n",i); }
当涂县18997198627: 用C语言编程:给一个不多于5位的正整数,要求如下: - ?
调翠结核: #includeint 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...
当涂县18997198627: 求一个C程序:输入一个不多于5位的正整数,要求输出每一位数字. - ?
调翠结核: #include<stdio.h> void main() {int num;printf("请输入一个不超过5位数的整数: \n");scanf("%d",&num);int i,j;int numtp[5]={0};int temp;for(i=10,j=0;num>=1;num=num/10,j++){temp=num%10;numtp[j]=temp;}for(j=j-1;j>=0;j--)printf("%d ",numtp[j]); }
当涂县18997198627: c语言输入一个不多于5位正整数要求:求出它是几位数;分别打印出每一位数字;按逆序输出各位数字. - ?
调翠结核: #include<stdio.h> int main() { int n,num=0,i,a[5],m; scanf("%d",&n); for(i=0;i<=4;i++) { if(n!=0) { m=n%10; a[i]=m; n=n/10; num++; } //上面这一块为了将数据存起来,后面好拿出来用 else break; } printf("%d\n",num); for(i=num-1;i>=0;i--) printf("%d ",a[i]); printf("\n"); for(i=0;i<num;i++) printf("%d ",a[i]);return 0; } 望采纳