c6.0题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。

如题所述

这种题非要用递归做,还真是DT啊。
这是之前在网上见到的一个版本,想法挺新颖的。
不限5个字符,可以输入多个。
#include<stdio.h>
#include<string.h>

void ReverseStr(char* str)
{
int len = strlen(str);
if (0 != len)
{
char temp = *str;

*str = str[len - 1];
str[len - 1] = '\0';

ReverseStr(str + 1);

str[len - 1] = temp;
}
}

void main(void)
{
char str[30];
gets(str);

ReverseStr(str);

printf("%s\n", str);
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-12-30
下面函数执行过程如下:
具体的栈操作过程如下:
abcdef\0
temp=a
fbcdef\0
fbcde\0\0

temp=b
fecde\0\0
fecd\0\0\0
temp=c
fedd\0\0\0
fed\0\0\0\0
push end

pop begin
fedc\0\0\0
fedcb\0\0
fedcba\0
第2个回答  2019-11-12
#include<stdio.h>
#define N 10

char *fun(char *p,char *p0);

int main()
{
char c[N]={'a','b','c','d','e','f','g','h','i','j'};
char *p=&c[N-1],*p0=&c[0];
fun(p0,p);
return 0;
}

char *fun(char *p0,char *p)
{
char *c;
if(p0==p)c=p;
else{
p0++;
char *t=fun(p0,p);
c=--t;
}
printf("%c",*c);
return c;
}
第3个回答  2012-12-30
首先这个代码有问题,void palin(n)应为void palin(int n)后面的int n;不要了,否则不能编译通过。
分析流程很简单:
假定输入34567
首先n=5;next=getchar()=3;
palin(n-1=4);next=getchar()=4(注意关键的地方,这个next和上一个next是不一样的,上一个next被压栈保护;)
……
palin(1);next=getchar()=7;(压栈完成,下面进行出栈)
putchar(next=7);7被pop出来;
……

弄清楚递归,一定要搞明白栈(first in last out)的结构,递归就是依赖栈运行的。在运行下一个递归函数前将上一个递归函数压栈,这个递归函数运行完成后,继续运行上一个递归函数;

这个递归如果拆开来写如下:
1. getchar() 输入3
2. getchar()输入4(上一个getchar()及得到的3被压栈)
3. getchar()……5
4. getchar()……6
5. getchar()……7
5. putchar() 输出7
4. putchar() 输出6
3. putchar() ………5
2. putchar()……4
1. putchar()……3
按照1234554321的次序,标号相同的语句是同一个函数的语句,正所谓first in last out 首先被执行getchar的最后被执行putchar

求C语言题目
1.程序分析:字符共有256个.不同字符,图形不一样. 2.程序源代码:#include "stdio.h"main(){char a176,b219;printf("%c%c%c%c%c\\n",b,a,a,a,b);printf("%c%c%c%c%c\\n",a,b,a,b,a);printf("%c%c%c%c%c\\n",a,a,b,a,a);printf("%c%c%c%c%c\\n",a,b,a,b,a);print...

题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印...
1. getchar() 输入3 2. getchar()输入4(上一个getchar()及得到的3被压栈)3. getchar()……5 4. getchar()……6 5. getchar()……7 5. putchar() 输出7 4. putchar() 输出6 3. putchar() ………5 2. putchar()……4 1. putchar(...

求C语言习题!
题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数 本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。2.程序源代码:main(){int i,j,k,n;printf("'water flower'...

C语言编写: 利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出 ...
void reverse(int i){ char c;if(i>0){c=getch();reverse(i-1);printf(" %c ",c);} } main(){ reverse(5);}

输入的5个字符,以相反顺序打印出来
5. palin(1): if 1<=1 成立, 读字符到next中,打出回车,及执行 putchar(next) 打出读到的字符. 返回.6. 第4步此时等到了palin(1)的返回,继续执行下边的 putchar(next); 打出第4步读到的next;返回.7. 第3步此时等到了palin(2)的返回,继续执行下边的 putchar(next); 打出第3步读到...

编写一个递归函数,将整数的个位上的数字按相反的顺序输出。例如,输入...
include <stdio.h> int main(){ int x;scanf("%d",&x);while(x>9){ int temp=x;x=x\/10;printf("%d\\n",temp-x*10);} printf("%d\\n",x);return 0;}

Python 中的反转字符串:reversed()、切片等
Python 提供了两种直接的方法来反转字符串。由于字符串是序列,因此它们是indexable、sliceable和iterable。这些功能允许您使用切片以相反的顺序直接生成给定字符串的副本。第二个选项是使用内置函数reversed()创建一个迭代器,该迭代器以相反的顺序生成输入字符串的字符。通过切片反转字符串 切片是一种有用的技术,它允许您...

如果有递归调用 return是当前函数的出口 还是整个递归函数直接返回?
2010-03-18 利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出... 28 2012-05-17 转换递归函数 c语言 3 2009-10-26 用递归函数计算阶乘。 12 2009-08-19 PHP 递归函数返回值问题 1 更多关于递归函数的知识 > 正在求助 换一换 回答问题,赢新手礼包 更多等待求助问题 > 登录...

你需要知道的scanf函数用法
首先,scanf函数读取到输入的字符串。 接着,scanf会将这个输入字符串与第一个参数的字符串进行匹配,找到输入字符串中的子串与转换规范的一一对应关系。子串"1"对应转换规范"%hhd" 子串"2"对应转换规范"%hd" 子串"3"对应转换规范"%d" 子串"4"对应转换规范"%ld" 子串"5.6"对应转换规范"%f" 子串...

C语言中关于将数组a中n个整数按相反顺序存放
程序填空题 tk583.c程序的功能是:将数组a中n个整数按相反顺序存放。请将程序补充完整,使它能得出正确的结果。不得增行或删行,也不得更改程序的结构。\\ #include"stdio.h" void inv(int *x,int n) { int *p,m,temp,*i,*j; (1); i=x; j=x+n-1;... 展开 dlz...

相似回答