C 程式例題問題疑惑,求大神解答,不勝感激

2022-03-05 22:41:13 字數 2835 閱讀 2588

1樓:

這個程式是求一組數字的階乘,對於每個數的階乘,其計算過程是這樣的:

首先,給存放結果的變數s一個初始值1,s=1

第二,給控制變數k賦初值1,準備進行n階計算

第三,判斷控制變數k<=n?是則進入下步,不是則跳至第六步

第四,讓s儲存其與控制變數k的乘積,這樣,第一次s=1,k=1,第二次k=2,s=1*2=2

第三次k=3,s=2*3,......一直到n,這樣s裡就存了從1到n有乘積。

第五,控制變數正加1,即k=k+1,轉到第三步。

第六,輸出計算階乘的結果。

可以看出,對每個數的階乘,首先要令s有一個初始值,如果按你所說,將s的賦值操作放在外迴圈,那麼就無法使每次計算一個新的數階乘時讓s有一個初始值1.

事實上下面那處程式就是錯在這裡。由於在計算第一個數的階乘之後,s即將儲存上一個數的階乘的結果,作為始值參與到下一個數的階乘計算中來。

你看,正確: 錯誤:

1!=1 1!=1

2!=2 2!=2

3!=6 3!12 (因為初值為2,所以計算成2*1*2*3=12)

4!=24 4!=288(因為初值為12,所以計算為12*1*2*3*4=288

2樓:

不行的//如果放外面的話就會把上一次結果給統計進來了,所以就不對。

intmain()

return 0;}

3樓:匿名使用者

正確答案每次都for迴圈都將s置1,而你的s保留的是上次迴圈的結果,第一次迴圈:n=1,k=1,s=1,result=1第二次迴圈:n=2,第一次子迴圈s=1=s(1)*k(1);二次子迴圈:

s=2=s(1)*k(2);

第三次迴圈:n=3,第一次子迴圈s=2=s(2)*k(1);二次:s=4=s(2)*k(2);三次:s=12=s(4)*k(3);

第四次迴圈:這次s的初始值是12哦,有興趣自己推算吧!

.....

括號裡是該變數的值。

明白了吧!

4樓:

肯定不行啊。你s移到外面之後,算下一個數的階乘的時候,s的初值是上一個數的階乘的值了。比如你輸出的3!

=12了,為什麼?就是因為s的初值這時變成2的階乘的值2了,多乘了這個。

你算某個數比如n,當然是從1開始乘1*2*3*...n。而s移到外面之後相當於從上一次算的s的結果開始乘了,相當於n!

=s*1*2**..n,這個結果怎麼會對呢。所以在進入第二重迴圈之前s都要重新賦值為1

求c++大神提供解題思路,不勝感激。

5樓:匿名使用者

不是讓你私信我了麼?

6樓:文帝寶寶

**,希望對你有幫助。

c++大神進解題思路

分享| 2015-01-03 20:01hjvbhjvgf | 瀏覽 134 次 懸賞:100

程式語言

#include

#define size 100

int main()

}}for(i=0;i0)

printf(" ");

printf("%d",a[i]);

}printf("\n");//以上是用冒泡法對輸入資料的升序排列

scanf("%d",&m);//輸入執行的次數

for(i=0;ia[mid]) s=mid+1;//比中間值大

else e=mid-1;//比中間值小

}if(s>e) mid=-1;

printf("%4d",mid+1);

}printf("\n");

}return0;

}重要行後面加註釋

scanf("%d",&t);//輸入一個值t,表示迴圈次數,即有多少組測試資料

for(int i=0;i

#define size 100

int main()

}}for(i=0;i0)

printf(" ");

printf("%d",a[i]);

}printf("\n");//以上是用冒泡法對輸入資料的升序排列

scanf("%d",&m);//輸入需要查詢的整數的個數

for(i=0;ia[mid]) s=mid+1;//比中間值大,開始下標變成中間值加1

else e=mid-1;//比中間值小,最尾下標變成中間值減1

}if(s>e) mid=-1;//如果列表裡面有這個數字的話,肯定不會s>e,走到這裡,表示那個數根本沒有,返回提示0

printf("%4d",mid+1);//mid是陣列的下標,如果要表示第幾個需要加1

}printf("\n");

}return 0;}

c語言,大神來詳細的解答,不勝感激!

7樓:

有 3 個 scanf,從上到下對應的輸入方式分別是:

整數;整數

單精度浮點數(小數形式)

x=雙精度浮點數(小數形式)

c++程式題 求助大神,謝謝 50

8樓:匿名使用者

實驗結果還用說嗎bai?輸入學號姓

du名年齡,輸出學生基zhi本資訊+學號dao姓名年齡專。。。。。

類外定義成員函式:

屬類內宣告:

void init();

void disp();

類外定義類成員函式:

void student::init()

void student::disp()

C語言問題,求大神,C語言問題,求大神解答!

include int main char str 2000 gets str gets str int i 0 while i 2000 bool bb false for int i 0 i n i if bb printf mmm n return 0 先給你改好的 吧,沒做大手術,按你的思路...

C語言問題,求解答,C語言問題,求大神解答

f函式中的a每次使用外面傳入的2,b是區域性變數,後每次都是1,c是靜態變數,函式每次執行會在上次值 1 所以最後執行三次,輸出為789 程式的輸出是 789 c語言問題,求解答 執行abc a 1 首先進行巨集代換過程,是把 a 1去替代 定義的巨集函式 x x 中的x,即得到式子 a 1 a 1...

C語言讀程式題,求大神解答,C語言程式設計題目,求大神解析!

第五行,分別p0 ch0 p1 ch1 可以把ch看成兩個字元陣列,每個屬於長度5也就是p 0 1234 p 1 5678 至於下面兩個for的i和j迴圈,回顧下語法for 初始化 條件 語句 p 0 0 1 s 0 1 0 1 p 0 2 3 s 10 3 0 13 p 1 0 5 s 130 5...