采用函數(shù)進(jìn)行字符串逆序輸出,過(guò)程為:
成都創(chuàng)新互聯(lián)專注于德欽企業(yè)網(wǎng)站建設(shè),自適應(yīng)網(wǎng)站建設(shè),成都做商城網(wǎng)站。德欽網(wǎng)站建設(shè)公司,為德欽等地區(qū)提供建站服務(wù)。全流程按需設(shè)計(jì),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
定義函數(shù),參數(shù)為字符串指針
定義局部變量指針t指向原字符串
移動(dòng)t指針到字符串尾
向移動(dòng)t指針,直到回到原指針頭,輸出各位置字符。
參考代碼:
代碼里有一些問(wèn)題,看注釋。
#includestdio.h
int?nixu?(int?n,int?a[]);
void?main()
{
int?a[10],i;
printf("please?input?10?numbers\n");
for(i=0;?i10;?i++)
scanf("%d",a[i]);????/*數(shù)組10個(gè)元素,最大下標(biāo)只能到9,a[10]越界;另外a[i]才是需要輸入的元素,而不是恒定某一個(gè)元素*/
nixu?(10,?a);
for(i=0;?i10;?i++)????/*輸出數(shù)組同樣也要循環(huán)*/
printf("%d??",a[i]);????/*數(shù)組10個(gè)元素,最大下標(biāo)只能到9,a[10]越界*/
}
int?nixu?(int?n,?int?a[])????/*函數(shù)定義參數(shù)不能和局部變量重名*/
{
int?i,k=(n-1)/2,t;????/*運(yùn)算符/比-優(yōu)先級(jí)高,要加括號(hào)*/
for(i=0;?i=k;?i++)
{????/*逆序過(guò)程只要一重循環(huán)就可以了*/
t=a[i];
a[i]=a[n-i-1];????/*尾部對(duì)應(yīng)的數(shù)組下標(biāo)要找對(duì)*/
a[n-i-1]=t;
}
return?0;????/*返回隨便一個(gè)值就可以,調(diào)用的地方不需要函數(shù)返回值,不能返回?cái)?shù)組首地址*/
}
逆序輸出有很多種,具體的實(shí)現(xiàn)方法取決于你題目的要求
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
int main()
{
int n,m,a,b,c;
scanf("%d",n);
a=n/100;
b=(n/10)%10;
c=n%10;
m=c*100+b*10+a;
printf("輸出:%d",m);
}
擴(kuò)展資料:
C語(yǔ)言isupper()函數(shù):判斷一個(gè)字符是否是大寫(xiě)字母
C語(yǔ)言isspace()函數(shù):判斷一個(gè)字符是否是空白符
C語(yǔ)言isprint()函數(shù):判斷一個(gè)字符是否是可打印字符
C語(yǔ)言islower()函數(shù):判斷一個(gè)字符是否是小寫(xiě)字母
C語(yǔ)言ldexp()函數(shù):返回x乘以2的exponent次方(次冪)的值
C語(yǔ)言labs()函數(shù):求整數(shù)的絕對(duì)值(針對(duì)long類型)
C語(yǔ)言isgraph()函數(shù):判斷一個(gè)字符是否是圖形字符
參考資料來(lái)源:百度百科-c語(yǔ)言
參考資料來(lái)源:百度百科-C語(yǔ)言函數(shù)