兩個c語言小程式求大蝦給詳細解釋

2021-03-08 18:04:30 字數 1670 閱讀 8420

1樓:匿名使用者

(9)if(*s1 = *s2) 這個條件是沒有問題的,因為等號表示式返回的是賦值後的值!賦值後的值只要不為0(對於字元型的話就是'\0',也就是字串的結束符),即為真,當這個值為真的時候,這個函式遞迴呼叫,一直到將需要複製的字串複製完為止。

所以,if(*s1 = *s2)這個語句等價於這兩個語句:

*s1 = *s2;

if(*s1)// 判斷是否為'\0'(這個字元值為0),如果是,說明字串已經複製完了

再結合這道題簡單的講吧。

main函式裡面,傳的是引數分別是a+3, b。(a+3是一個指向字元a[3]的指標,b是字元b[0]的指標,)

在sf函式裡面,「if(*s1=*s2)」,*s2的值為x, 所以if的條件為真。所以if後面接著又遞迴呼叫一次,而且引數指向下一個字元的地址!第二次呼叫*s2的值為y,條件也為真,又遞迴呼叫一次。

第三次情況一樣,不多說。第四次遞迴呼叫時,*s2='\0'了,條件為假,函式執行結束,逐級返回,一直到main, main用puts輸出了a的值。(a是有正常結束符的,因為第四次呼叫的時候雖然條件為假,但是這個條件為假(0)其實也是a的值,也就是a也有了正常的字串結束符)

(10)第十題好長啊!我邊看邊寫! 下面連**也貼上來,我在旁邊做註釋,看不懂再交流吧~

#include

struct node;

main()

,,,,};

int k,j,max,maxcode,head,sign,last;

for(k=0;k<5;k++)

printf("%2d",chain[k].x);/*第一個printf輸出每個結構體中的x,這個應該沒有問題 */

/*這個外層for迴圈結束以後,將形成一個從大到小的連結串列,

這個連結串列以結構體陣列chain的下標head為頭結點,尾指標為-2(陣列訪問下標)*/

for(k=0;k<5;k++)

else if(chain[j].x>max)/*否則判斷該結構體的值(x)是否大於已標記的最大值,如果是,用當前值替代,否則不執行*/

}if(k==0)/*外層for第一次執行,初始化head和last,*/

else/*否則,將元素新增到連結串列中*/

chain[last].next=maxcode;

/*將last指向新新增到該連結串列的節點下標*/

last=maxcode;

/*將尾結點的下一節點標記為-2*/

chain[maxcode].next=-2;

}printf("\n%2d\n",chain[head].x);/*head是頭結頭的下標,記錄的是最大的數,輸出自然是5啦*/

j=head;

while(j!=2)

}/*同學,寫到這裡我不得不抱怨一下啦,這麼長的程式,建議下次提問的時候,自己先編譯跑跑看,用tc或者win-tc都不錯。做為程式設計師,也特別提醒下你,縮排、排版也是不得不注意的,不然以後當你看到這樣的**的時候,就知道什麼叫頭痛啦~~~還好這裡的**篇幅還不算長結構還不算複雜~~*/

2樓:匿名使用者

第一個程式你確定是輸出10嗎??

第二個你給的結果肯定是對的嗎?

本來想解釋一下,但我推算了一下,答案和你不一樣啊,糾結.....

如果你沒有實際執行,先執行一下給個正確結果出來看看,我這沒環境執行.

幫忙寫兩個C語言程式

呵呵,今天剛看到你增加的要求,下面是增加註釋後的程式,都是可單獨執行的 第1題 include define n 50 字串的最大長度,可以根據需要修改int ispalindrome char s return 1 void main 第2題 include define m 10 陣列的最大長度...

C語言程式設計問題,求大神指教編寫程式,輸入兩個正整數m和n

include int main double sum int m,int n return s float sum 0 for i m i n i 用c語言編寫程式,輸入兩個正整數m和n,計算m n include void main for i 1 i n i sum0 sum1 sum2 pr...

C語言程式設計以下程式求出兩個整數中較大的數,請填空謝謝

第一個空是int z 第二個空是return z int z return z 求c語言程式設計 輸入任意兩個整數,得出最大的數 include void main else include int main void c語言求兩個整數中的較大者,怎麼編寫 定義int a,b,c 時你多了個逗號 賦...