1樓:密碼忘記了
遞迴呼叫, 結果是輸出陣列中所有數的和, 對這個例子結果是6.
if(n>這句話表示如果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 這個printf每次會輸出一串,肯定不行了b fun函式傳入引數其實是字串指標,fun s 1 傳入的是char型別,好歹也得char 的指標型別啊 c 和a一樣 每次必定輸出一個字串。我們應該每次輸出一個字元。那就d吧 關於d,fun s 1 肯定傳入...
C語言問題,求詳細解釋下,謝謝了
擁雲莊主 這個 表示的是輸出所佔的寬度。在這裡表示的是空格佔a 1個寬度,不足寬度用空格補齊 例如 printf s n 10,3,hello 表示的是右對齊 輸出寬度為10,不足10個字元空格補齊,限制輸出3個字元,所以,輸出是 7個空格 hel printf s n 10,hello 則輸出是 ...
C求高手解答謝謝,請高手解答c語言問題,謝謝!
employee char name 10 char address 20 char city 20 char youbian 6 name 10 abc address 20 abc city 10 abc youbian 6 000000 cout 初始化完成 建構函式用初始化連結串列應在類內,...