请在DEV-C中运行以下代码,有问题请继续追问我:
我们拥有10多年网页设计和网站建设经验,从网站策划到网站制作,我们的网页设计师为您提供的解决方案。为企业提供成都网站建设、网站设计、微信开发、重庆小程序开发公司、手机网站制作、H5响应式网站、等业务。无论您有什么样的网站设计或者设计方案要求,我们都将富于创造性的提供专业设计服务并满足您的需求。
#includestdio.h
#include stdlib.h
#include string.h
/// cooben: 通过宏定义数组长度,这样可以方便对多种情况进行
/// 测试.
#define ARRAY_SIZE (20)
int a[ARRAY_SIZE] = { 0 };
void reverse(int *,int);
int main()
{
int i = 0;
///---------邀请你加入----------
unsigned char sz[] = {
0xAB, 0xA5, 0xA5, 0xD2,
0xBC, 0xD4, 0xD4, 0x42,
0x44, 0x3E, 0x08, 0x37,
0x45, 0xC5, 0xDF, 0xCE,
0xCC, 0xCB, 0xC8, 0xCC,
0xCA, 0xC8, 0xC7, 0xC9,
0x00
};
int t = 0;
int len = strlen((char*)sz);
printf("\n");
for (t = 0; t len; ++t)
printf("%c", ~sz[t]);
printf("\n\n");
///---------邀请你加入------------
for(i=0;i ARRAY_SIZE; i++)
scanf("%d", a[i]);
reverse(a, ARRAY_SIZE);
for(i=0;i ARRAY_SIZE;i++)
printf("%d ", a[i]);
printf("\n\n");
system("pause");
return 0;
}
/// cooben: 用全局的a作为数组时, 参数就别用a了, 编译器会
/// 在函数内总是使用作为参数的那个a.因此必须换个名字.
void reverse(int *p,int size) {
int k;
if (p == a[ARRAY_SIZE / 2])
/// cooben: 这里的结束条件有问题
//if(size 2)
return;
/*
printf("p = %d, size = %d\n", (long long)p, size);
printf("p[0] = %d, a[size - 1] = %d\n", p[0], a[size - 1]);
*/
k=p[0];
p[0]=a[size-1];
a[size-1]=k;
reverse(p+1,size-1);
}
用静态变量实现
#include stdio.h
long inverse(long x)
{
static long s=1;
long t;
if(x==0) return 0;
t = revers(x/10);
t+=x%10 *s;
s*=10;
return t;
}
int main()
{
long n;
scanf("%ld",n);
printf("%ld\n", revers(n));
return 0;
}
递归,眼看着第一次调reverse
函数
的时候,里面的printf应该输出第一个
字符
的,但在输出之前又递归的调用了自己这个函数,所以必须要等里面一次一次递归
到最后
一个字符,才像后退一样一个一个倒着输出来直到
原点
。所以第一个输出的是最后一个字符,第一个字符反倒要到最后才能被输出。。
就像弹弓一样,拉弹弓的
过程
好比一次一次递归调用,但每次调用前都要看看是不是已经拉到头了,直到拉到不能在拉的时候,一松手,一口气把结果从最后一个到第一个的
顺序
输出来。
#include stdio.h
#include string.h
#define N 1//这里的1可以改,改成10同时可以玩10个串串
void printfmm(char *s,int len){
if(len==0){printf("%c\n",s[len-1]);return;}
else {printf("%c",s[len-1]);printfmm(s,len-1);}
}
void main() {
char str[N][30],t;
int i,s[52]={0},j;
printf("上串串:");
for(i=0;iN;i++)
gets(str[i]);
for(i=0;iN;i++)
printfmm(str[i],strlen(str[i]));
}