吉大软件专硕967-2013

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_21149391/article/details/79417404

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

运行结果:


猜你喜欢

转载自blog.csdn.net/qq_21149391/article/details/79417404