版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}
运行结果: