1樓:匿名使用者
第一種方法:
#include
#include
#include
void main()
;struct timeval tv_begin, tv_end;
for(int n = 2; n <= 23; n += 3)
for(int i = 1; i <= n; i++)
gettimeofday(&tv_end, null);
for(int n = 0; n < 8; n++)
printf("n = %d, result = %.20f\n", n*3+2, result[n]);
printf("time = %dus\n", tv_end.tv_usec - tv_begin.tv_usec);
}第一種方法的執行結果:
n = 2, result = 1.50000000000000000000
n = 5, result = 1.71666666666666678509
n = 8, result = 1.71827876984127003723
n = 11, result = 1.71828182619849312296
n = 14, result = 1.71828182845822996505
n = 17, result = 1.71828182845904531284
n = 20, result = 1.71828182845904553488
n = 23, result = 1.71828182845904553488
time = 112us
第二種方法:
#include
#include
#include
void main()
;struct timeval tv_begin, tv_end;
for(int n = 2; n <= 23; n += 3)
}gettimeofday(&tv_end, null);
for(int n = 0; n < 8; n++)
printf("n = %d, result = %.20f\n", n*3+2, result[n]);
printf("time = %dus\n", tv_end.tv_usec - tv_begin.tv_usec);
}第二種方法執行結果:
n = 2, result = 1.50000000000000000000
n = 5, result = 1.71666666666666678509
n = 8, result = 1.71827876984127003723
n = 11, result = 1.71828182619849312296
n = 14, result = 1.71828182845822996505
n = 17, result = 1.71828182845904531284
n = 20, result = 1.71828182845904553488
n = 23, result = 1.71828182845904553488
time = 25us
第三種方法:
#include
#include
#include
void main()
gettimeofday(&tv_end, null);
printf("time = %dus\n", tv_end.tv_usec - tv_begin.tv_usec);
}第三種方法執行結果:
n = 8, result = 1.50000000000000000000
n = 17, result = 1.71666666666666678509
n = 26, result = 1.71827876984127003723
n = 35, result = 1.71828182619849312296
n = 44, result = 1.71828182845822996505
n = 53, result = 1.71828182845904531284
n = 62, result = 1.71828182845904553488
n = 71, result = 1.71828182845904553488
time = 475us
注:第三種方法結果中的time無參考價值,該方法按照你題目的要求再迴圈中放入了printf函式做輸出,占用大量時間。前兩種方法都是將結果先放入陣列中,最後再輸出結果,printf函式的執行時間不在計算之內,能有效的評價演算法的時間複雜度。
這三種方法的時間複雜度應該是遞減的,第三種方法排除掉printf函式的影響後time的值大約為8us(微秒)
2樓:匿名使用者
也可以通過遞迴繞過迴圈,而且這有很多好處
採用遞迴求階乘繞過記憶體迴圈
採用遞迴求 e(n) 繞過第二層迴圈
下面的** vs2010 通過,裡面加了簡單的計時功能,我把迴圈次數都增大到 300 是為了讓計算機處理起來費時,好讓對比效果明顯(不增加的話三種方法都在幾個 ms 內完成,計時函式計算不出差別)
多執行幾次程式,得到最終結果,小規模下 執行效率 方法一 > 方法二 > 方法三
大規模下執行效率 方法三 > 方法二 > 方法一
**簡潔度 方法三 > 方法二 > 方法一
演算法難度 方法三 > 方法二 > 方法一
可擴充套件性 & 可維護性 方法三 > 方法二 > 方法一
#include
#include
#include
#define cishu 50
#define topnum 50
long double fac(long double x) // 遞迴求階乘
long double eval(long double x) // 遞迴求 e(n)
int main()
sum += (1 / nfac);
} if (n < 24)
} }
t1 = gettickcount() - timecount; // 計時結束
// 方法二
timecount = gettickcount(); // 計時開始
for (size_t n = 0; n != cishu; n++)
if (n < 24)}}
t2 = gettickcount() - timecount; // 計時結束
// 方法三
timecount = gettickcount(); // 計時開始
for (size_t n = 0; n != cishu; n++)}}
t3 = gettickcount() - timecount; // 計時結束
std::cout << sum << "\n\n 方法一用時: " << t1 << std::endl;
std::cout << sum << "\n\n 方法二用時: " << t2 << std::endl;
std::cout << sum << "\n\n 方法三用時: " << t3 << std::endl;
return 0;}
3樓:匿名使用者
(1)使用如下輪廓的三重迴圈來實現:
double e[8]=;
for(int n=2; n<=23; n+=3) //求出多個不同的e
cout<<"e("< }(2)去掉最內層用來求階乘的迴圈,而改為使用二重迴圈的實現方法: double e[8]=; for(int n=2; n<=23; n+=3) //求出多個不同的e cout<<"e("< }(3) double k=0,temp=1; for(int n=1; n<=23; n++) //從第1項開始,一共(最多)累加23項 執行速度為1<2<3; 4樓:匿名使用者 #include using namespace std; int main() cout< }for(n=2; n<=23; n+=3) //求出多個不同的e cout< }result=0; temp=1; for(n=1; n<=23; n++) //求出多個不同的e} c++迴圈類的一道題 5樓:匿名使用者 遞迴演算法。 不是將n的值加1了,而是沿原路返回計算。 m=n*f(n-1);// cout<<"離開n="< 每次執行f(n-1)時下面的這條語句就沒執行,當n減到1了,開始執行下面這條語句,效果看起來好像是n加1。 乙個比較簡單的迴圈語句題 c++ 6樓:璀璨叵儍瀦 i = j j賦值給i i==j i等於j 第一次迴圈 i = j 此時 i等於5,5為真值第二次迴圈 i=j 此時 i等於4, 4為真值當第5次時 i=j i 為 0 , 0為假值迴圈結束 一道c++的選擇題 (關於迴圈次數) 7樓: 所有表示式都有個值、賦值表示式的值就是被賦的值,也就是等號右邊的值這裡是i=j=5!只要是整數都可以判斷真假,c,cxx,0為假,一切其他值為真!浮點數暫時還不知道行不行! 8樓:匿名使用者 你需要了解一下賦值語句作為判斷條件時是個什麼情況。 這題的答案是b,實際上相當於j遞減到0後終止迴圈。 9樓:匿名使用者 沒有跳出條件. i=0進去,j=5進去的. i = 1,j=4; i=2,j=3; i=3,j=2; i=4,j=1; i=5,j=0; 跳出條件按這題的條件判斷就是i=j; 只要i!=j,就一直迴圈, 當然,我還沒學c++呢,我現在只學到c的結構部分.你中間那句我看不懂,反正我就看跳出條件.for中的 跳出條件,和for裡面i++,j--; 10樓:匿名使用者 b,5次,你說的沒有錯,第二個表示式是判斷執行條件的。 但是你要搞清楚第二個表示式是哪個,在你這裡 i=j;作為第二個表示式。 你的第乙個表示式是個逗號表示式 int i=0,j=5;作為乙個整體,屬於一句話。只有分號才是一句話結束的標誌。你的第三句話是個空語句。 因為你的判斷語句為i=j;這條語句的值等於i的值。由於開始的時候j=5,迴圈體內j--,所以第五次的時候j會變成0,然後判斷i=j=0,非零為真,零值為假。此時迴圈結束。 的優先順序比 的優先順序高些,所以是先自加,然後取餘,最後才是比較 還有乙個要提醒的是,mian 函式前面一定要帶上int,當然void也可以通過編譯,但是void不符合標準,這些雖然是小問題也是要注意的,另外你的第一行 就錯了,應該是 include 夜 逍遙 if x 2 0 等價於 if x ... 看了介面有返回值,就不敢直接動輸入 用了複製和記憶體釋放,然而我想多了.include char fun char str for i 0 i s str,text free text return 0 ggoi romndno good morningprocess returned 0 0x0 ... order.h中的 void mintomax int a order.c中的 include order.h void mintomax int a main.c中的 include include order.h void main printf n 瑜琅 name main.c author ...c語言for迴圈 一道題求解析,C語言for迴圈 一道題求解析
一道C 程式設計題,一道c 程式設計題
一道C語言程式設計題,一道C語言程式設計題