1樓:密碼忘記了
遞迴呼叫, 結果是輸出陣列中所有數的和, 對這個例子結果是6.
if(n>1) return a[0]+f(&a[1],n-1); 這句話表示如果n>1, 就以該陣列第二個數為輸出作為一個新陣列,n-1為新的n,遞迴呼叫該函式,將返回值和當前輸入陣列的第一個元素加起來的和作為返回值。
else return a[0];表示n為1時,直接返回陣列第一個元素。
所以整個程式功能是返回一個陣列所有數字之和。
具體執行步驟:
第一次執行f(int a, int n), a是, n為3這時n>1, 於是計算a[0](1)+ f(,2)類似的f(,2)= 2+ f(,1)=2+3=5於是最外層f返回6
2樓:紀景明枚書
輸出結果:cdeab
分析:只要你理解了move函式的作用你就能明白整個過程:
第一次迴圈呼叫move(char
*str,int
n)這一函式給它的引數是
s與s的長度(就是你輸入的abcde的長度5),第一步執行temp=str[5-1]=str[4],而str[4]的值為'e',所以temp的值為'e',接著執行for(i=n-1;
i>0;i--)
str[i]=str[i-1];
這個迴圈是把從str[1]開始的所有陣列的元素都後移一位,即str[2]成了str[1],str[3]成了str[2]等等,迴圈執行完後執行str[0]=temp;,也就是把e賦值給了
str[0]。所以abcde被move函式處理一次後就成了eabcd,如果再被處理一次後就被變成deabc等等也就是說move函式每呼叫一次就把相應的字串迴圈右移一位
c語言問題,詳細解答一下,謝謝~~~
3樓:聽不清啊
輸出結果是
cdeab
函式move(char *str,int n)的作用是把長度為n字串的尾字元,前移到串首。
在main()函式中連續呼叫了n次,即把字串末尾的n個字元前移到串首。
4樓:匿名使用者
輸出結 果:cdeab
分析:只要你理解了move函式
的作用你就能明白整個過程:
第一次迴圈呼叫move(char *str,int n)這一函式給它的引數是 s與 s的長度(就是你輸入的abcde的長度5),第一步執行temp=str[5-1]=str[4],而str[4]的值為'e',所以temp的值為'e',接著執行for(i=n-1; i>0;i--) str[i]=str[i-1]; 這個迴圈是把從str[1]開始的所有陣列的元素都後移一位,
即str[2]成了str[1],str[3]成了str[2]等等,迴圈執行完後執行str[0]=temp;,也就是把e賦值給了
str[0]。所以abcde被move函式處理一次後就成了 eabcd,如果再被處理一次後就被變成deabc等等
也就是說move函式每呼叫一次就把相應的字串迴圈右移一位
5樓:匿名使用者
#include
#include
void move(char *str, int n)int main()
樓主的意思 是移動字串麼?
注意scanf(“ ”); 引號中的書寫形式,不能有“,”
c語言問題,希望高手能夠幫忙解答一下,謝謝了。
6樓:鈍角111度
#include
int main()
printf("%d\n",a);
return 0;}
7樓:濮方雅
在while裡死迴圈了,你要加上一句在while的花括號裡面
c=a*b;
8樓:匿名使用者
因為你++a之後,c的值根本沒變,程式一直處於死迴圈中。加上c=a*b;吧。
9樓:匿名使用者
因為c永遠不會大於10000所以死迴圈。一直在計算。。
10樓:m_奮鬥
這個while是個死迴圈可好啊,c=a*b加到迴圈體就好了啊。
下面有一些關於c語言問題,希望大夥兒侃侃,最好解釋詳細,謝謝呢?
11樓:匿名使用者
第一題:3
這是一道位運算,a&0377等同於011&011111111的運算,這兩個與一下值為011,也就是3
第二題:11
這也是位運算,先把3,10,15化為二進位制,依次為:011,1010,1111.a|b&c先執行b&c得到1010,再跟a或運算(一位一位或)得到1011,也就是11.
第三題: d) h/2*(a+b)
h/2等於1,而代數中等於1.5.這是因為h為整型,h/2後也是整形,0.5捨去.
第四題:20 0
以上格式寫得讓人誤會,我重寫一下,你就會明白.
main() ,固if語句範圍只有第一個;為此
x=y;y=t;
printf("%d,%d\n",x,y);
}第五題:8 4
void f(int y,int*x) x是按地址傳,而y是按值傳,當值傳到函式裡時,*x可以改變x的值,而y不能返回.保持原來的值...
第六題:
這是c語言的記憶體動態分配,不是很掌握,沒有把握,希望其它好心人幫忙一下補齊.
第七題:efgh
這道我簡單說下,語言點太多,要是不明白,發訊息給我,我就這題說詳細.
return s+strlen(s)/2,返回的是一個指標,s指向首元素a,strlen(s)/2=4,固返回的指標指向第五個元素e.主函式中的 printf列印從第五個元素之後的字串.
第八題:6
這是一道遞規呼叫.主函式傳給函式時f()時,a=a[3]首元素是1;返回1+f(&a[1],2);f(&a[1],2)在呼叫函式時a=a[1],但此時首素是2而不是1;返回1+2+f(&a[1],1);最後呼叫函式,a=a[2],首元素為3,也只有一個;返回1+2+3,得到6
第九題:double max,&y
這題不需要解釋吧....還是簡單講一下,第一個空是函式宣告;要與定義的函式相符,第二個空,輸入時要加&,為什麼呢?我們要把輸入的值傳給變數對應的地址,固用地址符&
最後一題:14
位運算;12|012化簡得到:001100|001010=001110,換算成10進製得到14
其中注意,012是八進位制,1對應001,2對應010,一整個001010,因為兩個要等長,固補0;
哇,一口氣做完,真是夠累的...好久沒這麼做了...
呵呵,又來了;
我補充一下第六題,我看一下書,明白了.
p=(double *) malloc(3*sizeof(double));
12樓:
我說老兄,你到底學過程式設計沒有?
c語言問題,求詳細解答,謝謝
13樓:
break就是跳出一層迴圈,如果你在三層他就跳到二層,二層就跳到一層;
continue不跳出迴圈,而是如果你在一個迴圈的第i次中遇到了一個continue,他就不管continue後面的語句,直接執行第i+1次迴圈,還是這一層迴圈。
14樓:
個人理解
break:跳出當前所在迴圈體(指的是for\while語句一個整套迴圈結構)
continue: 結束本次迴圈,不跳出當前迴圈體,繼續下次迴圈b、break語句只能跳出最內層迴圈 其實說的就是迴圈體的意思 自己懂了意思最好
C語言問題求大神解答,求大神解答一下C語言問題?
水晶扇 a b 2,n b 4 1 計算 裡面的,b 2,n n b 5 2 1,逗號表示式返回最後一個表示式的值 賦值表示式的值就是被賦給的值,即1 所以括號裡面結果為1 2 計算a 1 4,先計算等號右邊的值 5 則a 5,等價於a a 5 12 5 2 樓主你好。b 2,n b 其實就是兩條語...
c語言問題。急求詳細解答,C語言問題。急求詳細解答!!
與影 第一個呼叫把i 2的值傳遞給fun2的形參,而形參變數只有在被呼叫時才分配記憶體單元,在呼叫結束時,即刻釋放所分配的記憶體單元。因此,形參只在函式內部有效。函式呼叫結束返回主呼叫函式後則不能再使用該形參變數,所以呼叫結束後i的值並未改變。雖然fun2的返回值是處理後的i,但是由於並未將函式呼叫...
c語言問題,小白求詳細解答,C語言問題 小白求解答
結果是a how are you 第一次開啟檔案,以 w 方式建立乙個新檔案,寫入how 第二次開啟檔案,以 a 方式追加資訊到檔案,寫入are you c語言問題 小白求解答 問 r,s,t 三個集的關係。t 由 r,s 得出。答,r,s,2 個集 之差 得 t.理由 把 r 裡與 s 相同 的 ...