幫忙翻譯C語言程式
每行都要翻譯喔
#include <stdio.h>
#include <stdlib.h>
int find_k(int);
int is_prime(int);
double Euler(int);
int main(void)
{
int i;
printf("Euler(%d)=%8.5f\n",10,Euler(10));
printf("Euler(%d)=%8.5f\n",100,Euler(100));
printf("Euler(%d)=%8.5f\n",1000,Euler(1000));
printf("Euler(%d)=%8.5f\n",10000,Euler(10000));
system("pause");
return 0;
}
int is_prime(int num) /* is_prime()函數,可測試num 是否為質數 */
{
int i;
for(i=2;i<=num-1;i++)
if(num%i==0)
return 0;
return 1;
}
double Euler(int n)
{
int i=3,cnt=0;
double total=1.0;
while(cnt<n)
{
if(is_prime(i))
{
total=total*i/(4*find_k(i)+2);
cnt++;
}
i++;
}
return 2.0*total;
}
int find_k(int n)
{
int np;
np=(n-2)/4;
if(n-(4*np+2)<4*(np+1)+2-n)
return np;
else
return np+1;
}
1 個解答
- 1 0 年前最佳解答
我發現程式碼就有很多令人不解的地方,你有試著編譯過嗎
2010-12-25 11:43:33 補充:
#include /*說明會用到的函式庫*/
#include int find_k(int); /*宣告三個副程式*/
int is_prime(int);
double Euler(int); int main(void) /*主程式*/
{
int i; /*宣告一個整數(從頭到尾都沒用到)*/
printf("Euler(%d)=%8.5f\n",10,Euler(10)); /*%d=10,%8.5f=呼叫副程式並丟入10*/
printf("Euler(%d)=%8.5f\n",100,Euler(100)); /*同上解,%f是浮點數,8.5應該是要求顯示的位數吧*/
printf("Euler(%d)=%8.5f\n",1000,Euler(1000));
printf("Euler(%d)=%8.5f\n",10000,Euler(10000)); system("pause"); /*系統暫停*/
return 0; /*傳回0*/
} int is_prime(int num) /*is_prime( )副程式*/
{
int i; /*宣告一個整數,此副程式使用,不會與主程式之i重複*/
for(i=2;i<=num-1;i++) /*讓i初始值為2,i<=num-1時執行迴圈,之後讓i=i+1*/
if(num%i==0) /*讓num/i是否整除*/
return 0; /*成立就傳回0*/
return 1; /*反之則1*/
} double Euler(int n)/*Euler( )副程式*/
{
int i=3,cnt=0; /*宣告2個整數,並給予初值*/
double total=1.0; /*宣告雙倍精度浮點數=1.0*/
while(cnt/*cut*/
{
if(is_prime(i)) /*呼叫is_prime()丟入i,為1時執行迴圈*/
{
total=total*i/(4*find_k(i)+2); /*執行此運算,呼叫find_k(i)*/
cnt++; /*cnt=cnt+1*/
}
i++; /*i=i+1*/
}
return 2.0*total; /*傳回2倍total*/
} int find_k(int n)/*find_k( )副程式*/
{
int np; /*宣告整數np*/
np=(n-2)/4; /*不用說了吧*/
if(n-(4*np+2)<4*(np+1)+2-n) /*判斷此條件是否成立*/
return np; /*成立傳回np*/
else
return np+1; /*反之傳回np+1*/
紅色是我覺得奇怪之處
希望有幫助
2010-12-26 13:52:10 補充:
main裡的變數宣告,多餘的
還有is_prime裡的迴圈,讓我不是很懂