逆序輸出有很多種,具體的實(shí)現(xiàn)方法取決于你題目的要求
創(chuàng)新互聯(lián)公司是一家以網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)、品牌設(shè)計(jì)、軟件運(yùn)維、網(wǎng)站推廣、小程序App開發(fā)等移動(dòng)開發(fā)為一體互聯(lián)網(wǎng)公司。已累計(jì)為成都被動(dòng)防護(hù)網(wǎng)等眾行業(yè)中小客戶提供優(yōu)質(zhì)的互聯(lián)網(wǎng)建站和軟件開發(fā)服務(wù)。
1. 如果只是要求逆序輸出,那么可以采用類似的方法:
void reverse(char *s)
{
if(*s=='\0')
return;
reverse(s+1);
printf("%c",*s);
}
這種方法在s很長(zhǎng)的情況下會(huì)一直遞歸到底,不是很好。
2. 如果需要將字符串整個(gè)逆序在函數(shù)外面輸出,那么可能希望采用返回字符串指針的方式;實(shí)現(xiàn)如下:
char * reverse( char* s )
{
static char *p = s+strlen(s)-1; //p是一個(gè)靜態(tài)變量,指向當(dāng)前遞歸層處理的字符串尾,而s指向字符串頭
if(s p)
{
char c = *p; //交換頭尾字符
*p = *s;
*s = c;
p--; //尾向前挪一個(gè)
reverse(s+1); //相當(dāng)于頭向后挪一個(gè)
}
return s;
}
3.1 當(dāng)然,有的時(shí)候,并不需要reverse函數(shù)本身遞歸,而是可以借助一些輔助的遞歸函數(shù),比如說(shuō):
void reversehelp(char * head, char * end)
{
if (head end)
{
char c = *head;
*head = *end;
*end = c;
reversehelp(++head, --end);
}
}
然后在調(diào)用時(shí)像這樣調(diào)用:
char * reverse(char * s)
{
char * end = s + strlen(s) - 1;
reversehelp(s, end);
return s;
}
3.2 類似的輔助函數(shù)還可以采用一個(gè)字符串指針和一個(gè)長(zhǎng)度參數(shù)的方式,如下例:
void reversehelp( char* s, int n )
{
if ( n 1 )
{
char c = s[n-1];
s[n-1] = s[0];
s[0] = c;
reversehelp( s+1, n-2 );
}
}
然后在調(diào)用時(shí)如下:
char *reverse(char *s)
{
reversehelp( s, strlen(s) );
return s;
}
樓主你好
具體代碼如下:
#includestdio.h
#includestring.h
int
main()
{
char
*p;
char
c[20];
printf("Enter
a
string:");
scanf("%s",c);
p=c+strlen(c)-1;
while(p=c)
printf("%c",*(p--));
printf("\n");
}
希望能幫助你哈
采用函數(shù)進(jìn)行字符串逆序輸出,過(guò)程為:
定義函數(shù),參數(shù)為字符串指針
定義局部變量指針t指向原字符串
移動(dòng)t指針到字符串尾
向移動(dòng)t指針,直到回到原指針頭,輸出各位置字符。
參考代碼:
1、首先打開軟件VC++6.0軟件,準(zhǔn)備一個(gè)空白的C語(yǔ)言文件,引入頭文件并寫好主函數(shù):
2、然后輸入代碼,首先定義數(shù)組,接著用一個(gè)for循環(huán)接受用戶輸入的數(shù)組元素并將其打印到屏幕上,并保存到前面的數(shù)組中,然后用第二個(gè)for循環(huán)逆序排序,方法就是前面的元素和后面的元素比較大小,前面比后面小就交換順序,最后再用一個(gè)for循環(huán)輸出排序的結(jié)果:
3、最后編譯運(yùn)行寫好的程序,打開一個(gè)命令行,輸入7個(gè)不同的數(shù),之后程序就會(huì)把輸入的數(shù)逆序輸出了。以上就是C語(yǔ)言編程實(shí)現(xiàn)數(shù)組逆序輸出的方法:
①要求
將正整數(shù)或負(fù)整數(shù)
從個(gè)位開始逆序輸出。
涉及三個(gè)變量,
n是原數(shù),
m用于儲(chǔ)存提取的個(gè)位數(shù),
y用于儲(chǔ)存重新組合的逆序數(shù)。
~
②定義函數(shù)
#include stdio.h
int fun(int n)
{int m,y} ;
/*給y賦初值,組合數(shù)在組合之前為0。*/
y=0;
/*給m賦初值,將原數(shù)n的絕對(duì)值賦值給m。
我試了,也可以直接m=n,刪除y=(n=0)?y:-y,結(jié)果一樣有負(fù)號(hào),絕對(duì)值具體還有什么用,等待大神解答。*/
if(n=0)m=n;
else m=-n;
/*當(dāng)m不為0時(shí),循環(huán)繼續(xù)。
當(dāng)m為0時(shí),即提取到只剩一位數(shù)時(shí),m=m/10=0,循環(huán)結(jié)束。*/
while(m!=0)
{y=y*10+m%10;
/*提取個(gè)位:m%10。
已經(jīng)提取個(gè)位升為十位:y乘10。
逆序組合數(shù):y。*/
m=m/10;}
/*降位提取個(gè)位:m/10
不斷除10取整,屏蔽個(gè)位;
不斷將十位降為個(gè)位,再提??;
直到只剩一位數(shù),循環(huán)結(jié)束。*/
y=(n=0)?y:-y;
/*將負(fù)數(shù)的負(fù)號(hào)恢復(fù)。*/
return y;
}
③主函數(shù)
{int m1,m2;
scanf("%d%d",m1,m2);
printf("%d的逆序是%d\t",m1,fun(m1));
printf("%d的逆序是%d\t",m2,fun(m2));
return 0;
}
④思路整理
1.輸入原數(shù):n
2.求絕對(duì)值:m=|n|
3.提取個(gè)位:m%10
4.逆序組合:y=y*10+m%10
5.高位降位:m/10
6.恢復(fù)負(fù)號(hào):y=(n=0)?y:-y
1、新建一個(gè)工程和.c文件,輸入頭文件和主函數(shù)
2、聲明被調(diào)用的函數(shù),定義變量類型
3、輸入整數(shù)
4、用一個(gè)if語(yǔ)句去判斷整數(shù)是否為負(fù)數(shù),若為負(fù)數(shù)則用putchar函數(shù)輸出一個(gè)負(fù)號(hào)
5、調(diào)用一個(gè)函數(shù)
6、定義函數(shù)的返回類型和形參類型
7、通過(guò)if語(yǔ)句判斷該數(shù)是否僅剩一位數(shù),若不是則執(zhí)行else語(yǔ)句
8、通過(guò)再次調(diào)用子函數(shù)一次輸出高位的數(shù)
9、編譯執(zhí)行即可