吉大軟體專碩967-2013
阿新 • • 發佈:2018-11-01
一、已知sinx=x-x^3/3!+x^5/5!-x^7/7!+.....。編寫程式,求sinx的近似值,要求誤差小於10^-5(看不清,猜測)。
很簡單..
#include<stdio.h> #include<math.h> int main(){ double sin(double x); double x; printf("Please input x:"); scanf("%lf",&x); double sinx = sin(x); printf("sin(%.5f)=%.8f\n",x,sinx); } double sin(double x){ double item,sinx=0; int n=1; item = x; sinx = x; while(fabs(item) > 1e-5){ n += 2; item *= -x*x/n/(n-1); sinx += item; } return sinx; }
執行結果:
驗證結果是正確的:
二、10個評委給選手評分,原則為:分值為6到100,去掉一個最高分,去掉一個最低分,其餘8個分數相加,再除以8,即為選手的最終得分。編寫一個程式,輸入10個評分,給出選手的最終得分。
思路:找到最大,最小的,累加除了這兩個數以外的分數,求均值
#include<stdio.h> #define N 10 int main(){ double Average(double score[N]); double find_min(double *score); double find_max(double *score); double score[N]; int i; double n; for(i=0;i<N;i++){ printf("請輸入第%d個分數:",i+1); scanf("%lf",&n); if(n>100||n<6){ i--; printf("請輸入6-100之間的分數\n"); }else score[i]=n; } printf("平均分=%f\n",Average(score)); } double Average(double score[N]){ int i; double add = 0; double min,max; max = find_max(score); min = find_min(score); for(i=0;i<N;i++) if(score[i]!=min&&score[i]!=max) add += score[i]; return add/8; } double find_min(double *score){ double min=score[0]; int i; for(i=1;i<10;i++) if(min<score[i]) min = score[i]; return min; } double find_max(double *score){ double max=score[0]; int i; for(i=1;i<10;i++) if(max>score[i]) max = score[i]; return max; }
三、一個正整數用幾個質數相乘的形式表示出來,叫做分解質因數。編寫程式,輸入一個正整數,輸出該正整數分解質因數的形式。例如,輸入90,輸出90=2*3*3*5.
#include<stdio.h> int main(){ int isPrime(int n); int *Factorization(int n); int i,n; printf("enter n:"); scanf("%d",&n); int *f = Factorization(n); printf("result: %d=%d",n,f[0]); for(i=1;f[i]>0;i++){ printf("*%d",f[i]); } printf("\n"); } int *Factorization(int n){ int *fac = (int *)malloc(10 * sizeof(int)); int i,j=0; while(n >1){ for(i=2;i<=n;i++){ if(isPrime(i) && (n%i==0)){ fac[j] = i; j++; n = n/i; break; } } } fac[j] = 0; return fac; } int isPrime(int n){ int i; int isPrime = 1; if(n > 2) for(i=2;i<=sqrt(n);i++){ if(n % i == 0){ isPrime = 0; break; } } return isPrime; }
執行結果:
四、給定一個正整數N,由所有分母小於或等於N的最簡真分數按從小到大組成一個序列,例如,N=5:
1/5 1/4 1/3 2/5 1/2 3/5 2/3 3/4 4/5
編寫一個程式,輸入一個正整數,輸出上述序列。
注: 真分數:分子<分母 , 最簡:分子、分母的最大公約數是1
#include<stdio.h>
int main(){
int max_CommonDivisor(int x,int y);
int n,i,j;
printf("Please input N:");
scanf("%d",&n);
for(i=n;i>=2;i--)
for(j=1;j<i;j++)
if(max_CommonDivisor(i,j)==1)
printf("%d/%d\t",j,i);
printf("\n");
return 0;
}/*求x,y的最大公約數*/
int max_CommonDivisor(int x,int y){
int max,min,t;
if(x>y){
max = x;
min = y;
}else{
max = y;
min = x;
}
while(max % min != 0){
t = min;
min = max % min;
max = t;
}
return min;
}
執行結果: