1. 程式人生 > >吉大軟體專碩967-2013

吉大軟體專碩967-2013

一、已知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;
}

執行結果: