首先你的代码有两处错误
#include
int main() //这里的int指返回类型为:int,即整数类型,但是你在这个函数最 //后没有返回任何数据,所以错误
//修改方式有两种①:吧int改为void,即无返回类型
//②:在 printf("\n");后面加一句 return 0;
{
int i=5;
void palin(int n);
printf("请输入5个字符:");
palin(i);
printf("\n");
}
void palin(n) //这里palin()括号内的变量n需要定义一个类型,但是你吧它写在了下面
int n;
{
char next;
if(n<=1) {
next=getchar();
printf("相反顺序输出结果:");
putchar(next);
} else {
next=getchar();
palin(n-1);
putchar(next);
}
}
-------------------------------------------分割线-----------------------------------------
下面是正确的代码及注释
#include
int main() //main函数声明
{
int i=5; //定义一个变量i,并赋初值5
void palin(int n); //声明palin函数,无返回值,定义整型参数n
printf("请输入5个字符:"); //输出语句,输出一句话:请输入5个字符:
palin(i); //调用palin函数
printf("\n"); //输出语句,\n代表换行,dos窗口程序走到这里光标会换行
return 0; //返回0,
}
void palin(int n){ //函数实现,{ }里的代码是函数体
char next; //定义一个char类型变量
if(n<=1) { //分支判断语句,如果n<=1就执行 { }里的代码,否则就 //执行 else { }里的代码
next=getchar(); //吧从控制台输入的字符赋值给next字符变量
printf("相反顺序输出结果:"); //输出一句话,没什么好讲的,同上
putchar(next); //吧next的值输出
} else {
next=getchar(); //吧从控制台输入的字符赋值给next字符变量
palin(n-1); //调用palin函数,注意这里是palin函数调用palin函数, //即:调用自身,在数学上这叫递归,有兴趣可以百度一下
putchar(next); //吧next的值输出
}
}
最后解释一下palin函数:
刚开始n=5, 走else,next=getchar(); 然后palin(4);还走else,next=getchar();直到n=1,走if,next=getchar(),所以next=getchar()调用了5次,吧输入在dos命令行的字符放入缓冲区,执行printf("相反顺序输出结果:"); 再然后 putchar(next); 输出字符,此时的字符是n=1时的字符,即:你输入的最后一个字符;再然后程序会回到n=2时else里剩下的putchar(next); 输出字符,此时的字符是n=2时的字符,即:你输入的倒数第二个字符;以此类推,输出5个字符。这样就完成了顺序输入,倒序输出的算法
int main(void){
int i=5;//声明变量i并初始化为5
void palin(int n);//声明函数,否则编译找不到自定义函数palin
printf("请输入5个字符:");//提示输入5个字符
palin(i);//用5调用函数palin
printf("\n");//回车是版面需要
return 0;//加上这一行,少了不行
}
void palin(int n){//自定义一个递归函数palin,这里原来的写法是1990年代的格式,
//现在过不了编译了,它和这个写等价
char next;//声明一个变量
if(n<=1){//当n<=1时执行以下至}前的代码
next=getchar();//从键盘接收一个字符赋给next
printf("相反顺序输出结果:");//提示
putchar(next);//输出刚才接收的字符
}//函数从这里的}前返回至下面的palin(n-1);后
else{//当n为5、4、3、2时执行以下至}前的语句
next=getchar();//从键盘接收一个字符
palin(n-1);//将n-1再调用palin直到n==2
putchar(next);//n==1时从上面else前的}前返回到这一句前面反复执行这一句直到n==5
}
}
递归调用不太好表述,也不太好理解,得好好琢磨……
#include
int main() ’程序的主函数,也是不要的不可缺少
{
int i=5; ‘声明一个数值型变量 i ,并赋值为5
void palin(int n); ’声明一个自定义函数,不过位置不对,应该放在主函数的上面
printf("请输入5个字符:"); ‘向屏幕输出文字信息,内容是:请输入5个字符
palin(i);调用自定义函数,并将数值变量作为参数传递给该函数
printf("\n");向屏幕输出一个换行符号,让屏幕换一行
}
void palin(n)自定义的函数明细部分
int n;声明一个数值型变量 n,不过位置不对,应该在下一行内,就是左括号的下边
{
char next;声明一个字符型变量 ,变量名为next
if(n<=1) {判断语句,用来判断数值变量n是否小于等于1
next=getchar();调用系统函数getchar,并将返回值保存在 next里面
printf("相反顺序输出结果:");向屏幕输出文字信息,内容是:相反顺序输出结果
putchar(next);调用系统函数,向屏幕输出变量next中的数值
} else {判断语句的子语句,意思是否则
next=getchar();调用系统函数getchar,并将返回值保存在 next里面
palin(n-1);调用系统函数,将n的值减一
putchar(next); 调用系统函数,向屏幕输出变量next中的数值
}
}
顺便说一下,此程序的编写太过于垃圾了,调用了那么多系统函数,导致程序的可读性和可移植性大大降低,实际编写中不会这样写