/* 3.9 求派的值*/
#include "stdio.h"
void main()
{
int n;
double sum=0;
for(n=1;n<=10000;n++)
{
sum=sum+1.0/(4*n-3)-1.0/(4*n-1);
}
printf("pi的值為%lf\n",4*sum);
}
/* 3.9 求派的值*/
#include<stdio.h>
void main()
{
double i=1, s=1.0, t=1.0;
do
{
t=t*(-1)*((2*i-1)/(2*i+1));
s=s+t;
i++;
}while (i<=10000000);
printf("pi=%.8lf\n",s*4);
}
/* 3.10 求最大公約數和最小公倍數 輾轉相除法:見下面的介紹。 gcd(m,n)=gcd(n,r) */
#include "stdio.h"
void main()
{
int m,n,r,original_m,original_n;
printf("輸入m和n,樣本 6 8\n");
scanf("%d%d",&m,&n);
original_m=m;
original_n=n;
r=m%n;
while(r!=0)
{
m=n;
n=r;
r=m%n;
}
printf("最大公約數為%d,最小公倍數為%d\n",n,original_m*original_n/n);
}
用輾轉相除法求兩個數的最大公約數的步驟如下:
先用小的一個數除大的一個數,得第一個餘數;
再用第一個餘數除小的一個數,得第二個餘數;
又用第二個餘數除第一個餘數,得第三個餘數;
這樣逐次用後一個數去除前一個餘數,直到餘數是0為止。那麼,最後一個除數就是所求的最大公約數(如果最後的除數是1,那麼原來的兩個數是互質數)。
例如求1515和600的最大公約數,
第一次:用600除1515,商2餘315;
第二次:用315除600,商1餘285;
第三次:用285除315,商1餘30;
四次:用30除285,商9餘15;
第五次:用15除30,商2餘0。
1515和600的最大公約數是15。
輾轉相除法是求兩個數的最大公約數的方法。如果求幾個數的最大公約數,可以先求兩個數的最大公約數,再求這個最大公約數與第三個數的最大公約數。這樣依次下去,直到最後一個數為止。最後所得的一個最大公約數,就是所求的幾個數的最大公約數。
/* 3.11 Sn=a+aa+aaa+...+aaa...a */
#include <stdio.h>
void main( )
{
int a,n,i;
long sum=0, item;
printf("請輸入整數n(n>=1且n<=9)\n");
scanf("%d",&n);
printf("請輸入一位元字a(1-9)\n");
scanf("%d",&a);
item=a;
sum=a;
for(i=1;i<n;i++ )
{
item=item*10+a;
sum=sum+item;
}
printf("sum=%ld\n",sum);
}
/* 3.12 分數序列求和,前20項。 2/1+3/2+5/3+8/5+...... */
#include <stdio.h>
void main( )
{
int i;
float sum=0, item,fenzi=2,fenmu=1,jiufenmu;
for(i=1;i<=20;i++ )
{
item=fenzi/fenmu;
jiufenmu=fenmu;
printf("%f/%f ;\n",fenzi,fenmu);
sum=sum+item;
fenmu=fenzi;
fenzi=fenzi+jiufenmu;
}
printf("sum=%f\n",sum);
}
/* 3.13 2-999之間所有同構數 例.... 5×5=25 */
#include "stdio.h"
void main()
{
int i;
printf("2-999之間所有同構數:");
for(i=2;i<=999;i++)
{
if(i>=2 && i<=9)
if(i*i%10 == i)
printf("%4d",i);
if(i>=10 && i<=99)
if(i*i%100 == i)
printf("%4d",i);
if(i>=100 && i<=999)
if(i*i%1000 == i)
printf("%4d",i);
}
}
/* 3.14 輸入10個數字,輸出所有負數,及負數的和(要求不用數組) */
#include "stdio.h"
#include "math.h"
void main()
{
int i;
float x,sum=0;
printf("\n請輸入十個數字,並按斷行符號鍵\n");
for(i=0;i<=9;i++)
{
scanf("%f",&x);
if(x<0)
{
printf("%f",x);
sum=sum+x;
}
}
printf("\n所有負數之和為:%f",sum);
}
/* 例 3.15 任意輸入n個數,輸出其中最大數和最小數,並輸出他們在序列中的位置*/
#include "stdio.h"
#include "math.h"
void main()
{
int i,n,max_location=1,min_location=1;
float x,max=0,min=0;
printf("你想輸入幾個數字(輸入一個整數後按斷行符號)");
scanf("%d",&n);
printf("\n請輸入%d個數字,並按斷行符號鍵\n",n);
scanf("%f",&x);
max=x;
min=x;
for(i=2;i<=n;i++)
{
scanf("%f",&x);
if(x>max)
{
max=x;
max_location=i;
}
if(x<min)
{
min=x;
min_location=i;
}
}
printf("\n最大數為%f,位置為:%d\n",max,max_location);
printf("\n最小數為%f,位置為:%d\n",min,min_location);
}