首先假設(shè)合并函數(shù)的功能:將兩個(gè)兩位數(shù)的整數(shù) a、b 合并成一個(gè)整數(shù)放在 c 中。合并的方
“真誠服務(wù),讓網(wǎng)絡(luò)創(chuàng)造價(jià)值”是我們的服務(wù)理念,成都創(chuàng)新互聯(lián)公司團(tuán)隊(duì)10年如一日始終堅(jiān)持在網(wǎng)站建設(shè)領(lǐng)域,為客戶提供優(yōu)質(zhì)服。不管你處于什么行業(yè),助你輕松跨入“互聯(lián)網(wǎng)+”時(shí)代,PC網(wǎng)站+手機(jī)網(wǎng)站+公眾號+成都微信小程序。
式是:將 a 的十位和個(gè)位數(shù)依次放在 c 數(shù)千位和十位上,b 數(shù)的十位和個(gè)位數(shù)依次放在 c 數(shù)的個(gè)位和百位上。
實(shí)現(xiàn)方法如下:
int?fun(int?a,int?b){
int?c=a%10;
c=(a/10)*100+c;
c=(b%10)*10+c;
c=(b/10)*1000+c;
return?c;
}
先說結(jié)果:fun函數(shù)其實(shí)是用來將兩個(gè)字符串輪流交叉合并。
也就是說,若a[]=dfg,b[]=678,則fun(a,b)后,a[]=d6f7g8
對于一些特殊情況,
1.當(dāng)strlen(a)strlen(b),如a[]=dfg,b[]=67899,則運(yùn)行后a[]=d6f7g899,不用再交叉,直接補(bǔ)上多出來的b字符串的部分99
2.當(dāng)strlen(a)strlen(b),如a[]=dfghjk,b[]=678,則運(yùn)行后a[]=d6f7g8hjk,不用再交叉,直接補(bǔ)上多出來的來自a字符串的部分hjk
以下是分析:
先看內(nèi)層循環(huán)for(k=strlen(s1);k=i;k--) s1[k+1]=s1[k];
這實(shí)際上就是將字符串s1從s1[i]開始到末尾依次后移1位,這樣s1[i]的位置就空出(這里的空出其實(shí)是有值的,但由于已經(jīng)令s1[i+1]=s1[i],所以s1[i]相當(dāng)于空出)以便插入s2[j]到sa[i]
s1[i]=s2[j];
j++;i++;
if(s1[i]) i++;
這一段,實(shí)際上是在執(zhí)行插入賦值,每一次賦值后,i,j分別順移一位,其實(shí)你可能也注意到了,s1其實(shí)應(yīng)該要移兩位,因?yàn)橐晃皇潜A魋1的下一位,s2要插的位置是s1的下下位
所以,他有兩個(gè)i++(i對應(yīng)的是s1的序號),
但是他前面有個(gè)條件if(s1[i])
這個(gè)條件主要是針對s1比s2長設(shè)置的,當(dāng)s2還有值沒有插入,而s1已經(jīng)到字符串尾部,即有s1[i]=0(注意,這里的0不是指數(shù)值0,而是char=0,也就是空"\0"),此時(shí),i就不用+2,+1即可,因?yàn)閟2[j]只要插入到下一位,不用下下位
如果沒有這個(gè)條件,則每次都加入到下下為的話,由于s1序列中的\0沒有被s2覆蓋,則輸出時(shí),到這個(gè)\0就已經(jīng)截止,如上面的特殊情況1,輸出就是a[]=d6f7g8,而不會(huì)是a[]=d6f7g899
然后外層循環(huán)就是為了保證s2序列全部遍歷
終于完了。。。嗯,不懂可以追問
這里是借用第三個(gè)數(shù)組。
原理:先將兩個(gè)數(shù)組復(fù)制到第三個(gè)數(shù)組中,然后對第三個(gè)數(shù)組排序
如果不使用第三個(gè)函數(shù),那么下面這個(gè)函數(shù)一樣可以做到,不過函數(shù)聲明就要改成:
char* fun(char *dest, char *str, char *dest)
/*------------------------------函數(shù)--------------------------------*/
char* fun(char *str1,char *str2,char *dest) //前提,目標(biāo)數(shù)組能偶容納兩個(gè)數(shù)組
{
char *tmp=dest;
char *tmp_dest=dest;
if(!dest)
return NULL;
while(*str1) //將str1復(fù)制進(jìn)dest
*tmp++=*str1++;
while(*str2) //將str2復(fù)制進(jìn)dest
*tmp++=*str2++;
tmp_dest--; //
while(*++tmp_dest) //選擇排序法
{
char *tmp_px=NULL;
tmp=tmp_dest;
while(*++tmp) //找到后面一串的最值
{
if(*tmp_dest*tmp)
tmp_px=tmp;
}
if(!tmp_px)
{
char ch=*tmp_dest;
*tmp_dest=*tmp_px;
*tmp_px=ch;
}
}
return dest;
}
代碼如下:
#include stdio.h
int fun(int a,int b){
int c=10*(b%10)+(a/10)+1000*(b/10)+100*(a%10);
return c;
}
int main() {
int a;
int b;
printf("請輸入第一個(gè)兩位數(shù)a:");
scanf("%d",a);
printf("請輸入第二個(gè)兩位數(shù)b:");
scanf("%d",b);
int c=fun(a,b);
printf("結(jié)果為:%d",c);
return 0;
}
擴(kuò)展資料
C語言自定義函數(shù)
強(qiáng)調(diào)一點(diǎn),C語言不允許函數(shù)嵌套定義;也就是說,不能在一個(gè)函數(shù)中定義另外一個(gè)函數(shù),必須在所有函數(shù)之外定義另外一個(gè)函數(shù)。main() 也是一個(gè)函數(shù)定義,也不能在 main() 函數(shù)內(nèi)部定義新函數(shù)。
注意:main 是函數(shù)定義,不是函數(shù)調(diào)用。當(dāng)可執(zhí)行文件加載到內(nèi)存后,系統(tǒng)從 main 函數(shù)開始執(zhí)行,也就是說,系統(tǒng)會(huì)調(diào)用我們定義的 main 函數(shù)。
怎么合并呢?
連接:?如65,23,合并為6523還是2365,還是6253,還是2635呢?
/*
請輸入兩個(gè)兩位正整數(shù)(任意一個(gè)為0則結(jié)束): 45 12
45和12的組合結(jié)果為 : 1524
請輸入兩個(gè)兩位正整數(shù)(任意一個(gè)為0則結(jié)束): 36 20
36和20的組合結(jié)果為 : 2603
請輸入兩個(gè)兩位正整數(shù)(任意一個(gè)為0則結(jié)束): 0 0
Press any key to continue
*/
#include stdio.h
int main() {
int a,b,n;
while(1) {
printf("請輸入兩個(gè)兩位正整數(shù)(任意一個(gè)為0則結(jié)束): ");
scanf("%d%d",a,b);
if(a == 0 || b == 0) break;
n = 1000 * (b / 10); // 取b的十位放到千位上
n += 100 * (a % 10); // 取a的個(gè)位放到百位上
n += 10 * (b % 10); // 取b的個(gè)位放到十位上
n += a/10; // 取a的十位放到個(gè)位上
printf("%d和%d的組合結(jié)果為 : %d\n",a,b,n);
}
return 0;
}
新聞名稱:c語言fun函數(shù)兩束合并 c語言字符串合并函數(shù)
鏈接分享:http://www.rwnh.cn/article6/hheoog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、響應(yīng)式網(wǎng)站、靜態(tài)網(wǎng)站、網(wǎng)站營銷、網(wǎng)站制作、網(wǎng)站導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)