C语言编程:输入一个整数并能逐位正序或反位输出,用递归完成。

作者&投稿:大叔月 (若有异议请与网页底部的电邮联系)
C语言中->是什么意思啊?~

->是一个整体,它是用于指向结构体、C++中的class等含有子数据的指针用来取子数据。换种说法,如果我们在C语言中定义了一个结构体,然后申明一个指针指向这个结构体,那么我们要用指针取出结构体中的数据,就要用到“->”.
举个例子:
struct Data
{
int a,b,c;
}; /*定义结构体*/
struct Data * p;/*定义结构体指针*/
struct Data A = {1,2,3};/*声明变量A*/
int x;/*声明一个变量x*/
p = &A ; /*让p指向A*/
x = p->a;/*这句话的意思就是取出p所指向的结构体中包含的数据项a赋值给x*/
/*由于此时p指向A,因而 p->a == A.a,也就是1*/
对于一开始的问题 p = p->next;这应该出现在C语言的链表,这里的next应该是一个与p同类型的结构体指针,其定义格式应该是:
struct Data
{
int a;
struct Data * next;
};/*定义结构体*/
…………
main()
{
struct Data * p;/*声明指针变量p*/
……
p = p->next;/*将next中的值赋给p*/
}
链表指针是C语言的一个难点,但也是重点,学懂了非常有用。要仔细讲就必须先讲变量、指针。

扩展资料:链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。
链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。
每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。
由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn)和O(1)。
使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。
但是链表失去了数组随机读取的优点,同时链表由于增加了结点的指针域,空间开销比较大。
链表最明显的好处就是,常规数组排列关联项目的方式可能不同于这些数据项目在记忆体或磁盘上顺序,数据的存取往往要在不同的排列顺序中转换。
链表允许插入和移除表上任意位置上的节点,但是不允许随机存取。链表有很多种不同的类型:单向链表,双向链表以及循环链表。
链表可以在多种编程语言中实现。像Lisp和Scheme这样的语言的内建数据类型中就包含了链表的存取和操作。
程序语言或面向对象语言,如C,C++和Java依靠易变工具来生成链表。
参考资料:链表–百度百科

一、问题分析:

要把整数逐位输出,无论正序还是反序,都需要将各个位分离。

在C中的做法就是,通过对10取余,取出个位,然后通过除以10,起到“移位”的效果。

二、算法设计:

1、输入要处理的整数;

2、取出各位;

3、递归调用,以当前值除以10为参数;

4、当值为0时退出。

正序和反序输出,取决于递归调用和输出的位置关系。

三、参考代码:

正序:

#include <stdio.h>
void func(int n)
{
    int v;
    if(n==0) return;//到0结束。
    v=n%10;//取出个位。
    func(n/10);//递归调用
    printf("%d ", v);//输出。
}
int main()
{
    int n;
    scanf("%d",&n);//输入。
    func(n);//调用函数,正序输出各个位。
    return 0;
}

反序:

#include <stdio.h>
void func(int n)
{
    int v;
    if(n==0) return;//到0结束。
    v=n%10;//取出个位。
    printf("%d ", v);//输出。
    func(n/10);//递归调用
}
int main()
{
    int n;
    scanf("%d",&n);//输入。
    func(n);//调用函数,正序输出各个位。
    return 0;
}


正序或反序输出,用递归完成。
#include<stdio.h>
void f1(int n)
{
if(n>10)
f1(n/10);
printf("%2d ",n%10);

}
void f2(int m)
{

printf("%2d ",m%10);
if(m>10)
f2(m/10);
}

main()
{
int n,temp;
printf("输入一个整数: ");
scanf("%d",&n);
printf("选择正序输出输入0,反序输出输入1 :");
scanf("%d",&temp);
if(temp==0)
f1(n);
else
f2(n);

}


C语言程序题:输入任意一个3位数,将其各位数字反序输出。
其实这题的思路可以这样,你可以把一个三位数看出三个数组成的,比如a,b,c然后输出 c,b,a就行了。代码如下:include <stdio.h> void main(){ int a,b,c,x;printf("请输入一个3位数\\n");scanf("%d",&x);a=x\/100;b=x\/10%10;c=x%10;printf("反输出的值为:%d%d%d\\n",c,b,a...

c语言编程:给一个不多于五位的正整数,用if-else语句求出它是几位数...
可以参考下面的代码:include <stdio.h> void main(){ int num; printf("请输入一个不大于5位数的正整数:");scanf("%d",&num);if(num>99999||num<1)printf("您的输入有误!\\n");else { if(num<10)printf("您输入的是1位数!\\n");else if(num<100)printf("您输入的是2位数!\\n...

C语言:编程实现输入,输出
include<stdio.h> include<windows.h> include<conio.h> void show(int *nums);int main(){ int nums[20]={0};\/\/表示1到20个数字的状态,0表示未被输入,1表示已被输入 int save[19],*p=save,n=19,in=0,flag;while(n--){ flag=1;system("cls");show(nums);printf("请输入一个...

c语言编程题!字符串复制。输入一个字符串,把它复制到一个字符数组中,并...
include <stdio.h> int main(){ char a[100] = "\\0",b[100] = "\\0";int i = 0;printf("输入一行字符:\\n");scanf("%s",a);for(i = 0;a[i] != '\\0';i++){ b[i] = a[i];} printf("%s\\n",b);return 0;} ...

c语言,编程题 输入一个以秒为单位的时间值,将其转换为“时:分:秒...
include <stdio.h> main(){ char s[24];int sec;scanf("%d", &sec);s2hms(s,sec);printf("%s\\n",s);}s2hms(char* str, int sec){ int h,m,s;h = sec\/3600;m = sec\/60 - 60* h;s = sec - 3600* h - 60*m;sprintf(str,"%d:%d:%d",h,m,s);} ...

用c++编程 输入一个整数n,输出1!+2!+3!+……+n! 急急急急急!
先写出一个如下的函数:int fun(int n){ int s=1;for(int i=1;i<=n;i++)s*=i;return s;} 然后在主函数中调用反复调用它 int main(){ int n;while(cin>>n){ int sum=0;for(int i=1;i<=n;i++){ sum+=fun(i);} cout<<sum<<endl;} } ...

c语言编程题 输入一字符串,判断该字符串是否为回文。
include <stdio.h> include<stdlib.h> int main(){ char a[100];int i=0,j=0;printf("请输入字符串:\\n");gets(a);while(a[i]!='\\0')i++;i--;for(;j<=i;i--,j++){ if(a[i]!=a[j]){ break;} } if(j<=i){ printf("不是回文串\\n",a);} else { printf("是...

c语言编程题:从键盘输入一个十进制数,将其转换为二进制、八进制和十六...
\/*我用个栈来帮你做*\/ \/*此栈数据项为整型,只定义初始化栈,入栈,出栈操作,输出栈中元素操作*\/ include<iostream.h> define MaxSize 100 typedef struct { int data[MaxSize];int top;}Stack;\/\/顺序栈,也可用链栈 void InitStack(Stack &S)\/\/初始化栈 { S.top=-1;} int push(Stack...

c语言编程题目 输入一个小写字母后,打印如下图形。例如:输入d则打印...
include "stdio.h"main(){ char c;int i,j,k,t;printf("\\nEnter char:");scanf("%c",&c);t=c-96;printf("\\n");if(t>=2){ for(i=0;i<t;i++){ for(j=t-i;j>0;j--)printf(" ");for( k=0;k

C语言编程题,从键盘输入一个数,用函数调用求它的阶乘(如5!=120)_百度...
阶乘的结果,数值很大,要用double计算和存放。打印整数部分就可以了。include <stdio.h> double jc(int n){ int i;double x=1.0;for (i=1;i<=n;i++) x = x * (double) i;return x;} void main(){ int i,n;double x;printf("Please enter a number 1 to 10\\n");scanf("%d...

涵江区18457662752: 输入一个正整数 用递归实现将整数逐位正序输出每一位数(c语言) -
占阙双黄: #include <stdio.h>void f(int a) {if (a < 10)printf("%d", a);else{f(a/10);printf("%d", a%10);} }int main() {int a; printf("a = ");scanf("%d", &a);f(a);getchar();return 0; }

涵江区18457662752: C语言编程:输入一个整数并能逐位正序或反位输出,用递归完成. -
占阙双黄: 一、问题分析:要把整数逐位输出,无论正序还是反序,都需要将各个位分离.在C中的做法就是,通过对10取余,取出个位,然后通过除以10,起到“移位”的效果.二、算法设计:1、输入要处理的整数;2、取出各位;3、递归调用,以当...

涵江区18457662752: c语言,用循环,输入一个整数,正序输出其各个位例如输入1234输出1 2 3 4
占阙双黄: #include<stdio.h>#include<math.h>int main() { int a; scanf("%d", &a); while(a>0) { printf("%d\n", a%10); a = a/10; } return 0;}

涵江区18457662752: C语言 将一个正整数从右往左按位输出 -
占阙双黄: #include <stdio.h> void fun(long); //函数声明,注意添加分号; int main() {long n;printf("请输出一个正整数:"); //标点符号应该在英文模式下书写scanf("%ld", &n); //遗漏一边双引号printf("原来数据: n = %ld\n", n);fun(n);...

涵江区18457662752: C语言程序设计:编写程序,输入一个正整数,统计该整数的位数并计算其各个数位上的数字之和. -
占阙双黄: #include <stdio.h>int main() {int a, b, i, t;int k = 0, sum = 0; scanf("%d", &a); //输入整数a t = a;if(a / 10 == 0){k = 1;sum = a;printf("%d\n", k);printf("%d\n", sum);}else{while(a / 10 != 0){a = a / 10; //每除10,就有一位k++; ...

涵江区18457662752: c语言:输入一个整数,从高位开始逐位输出它的各位数字. -
占阙双黄: 保证运行成功,呵呵.如你想输入2个数,先输入2回车,然后输入一个要分解的数,回车,即可运行得出结果;同样的再次输入第2个数进行运行.#include <stdio.h> int main( ) { int ri, repeat; int digit; long in, temp, pow; scanf("%d", &repeat); ...

涵江区18457662752: c语言:任意输入一个整数 判断它的位数 输出各个位上的数.高手帮忙给个程序!! -
占阙双黄: //此类问题用数组解决 char s[10]={"\0"}; scanf("%s",s); int len=strlen(s); printf("\n位数是:%d\n",len); int i; for(i=len-1;i>=0;i--) { printf("%c",s[i]); }

涵江区18457662752: 有没有C语言大神啊,帮写个程序呗.输入一个五位数的正整数,按顺序输出组成该整数的各位数字!!!! -
占阙双黄: 随便码了一个最简单的,有需求再追问#includeint main(){ int dat[5]; printf("Please Enter 5 Data\n"); scanf("%d,%d,%d,%d,%d",&dat[0],&dat[1],&dat[2],&dat[3],&dat[4]); printf("%d,%d,%d,%d,%d",dat[4],dat[3],dat[2],dat[1],dat[0]); getch(); return 0;}希望能帮助你.

涵江区18457662752: 设计一个程序,要求输入一个整数,并能逐位正序和反序输出.如输入一个整数3456,则输出3456和6543. -
占阙双黄: 正序:直接输出 逆序:拿3456说明,假设已定义变量n=3456 n%10取得末尾的数,输出;n=n/10;此时n=345;循环这一步骤,直到n/10=0.为了你好,就不贴代码了,自己实现吧,祝你成功!

涵江区18457662752: C语言程序设计:编写程序,输入一个正整数,统计该整数的位数并计算其各个数位上的数字之和. -
占阙双黄:[答案] #include int main(){int a,b,i,t;int k = 0,sum = 0;scanf("%d",&a); //输入整数at = a;if(a / 10 == 0){k = 1;sum = a;printf("%d\n",k);printf("%d\n",sum);}else{while(a / 10 != 0){a = a / 10; //每除10,就有...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网