1.输出s的值,精度1e-6.
#include <stdio.h>
int main() {
float flag=1.0;
float sum=0;
for(int i=1; flag>1e-6; i++) {
flag = 1.0 / ((2.0 * i - 1) * (2.0 * i - 1));
sum+=flag;
}
printf("%f",sum);
}
2.输出魔方阵,所谓魔方阵是指这样的仿真,他的每一行,每一列和对角线之和均相等,要输出自然数构成的魔方阵,例如:
8 | 1 | 6 |
3 | 5 | 9 |
4 | 9 | 2 |
#include <stdio.h>
#define N 16
int main() {
int a[N][N]= {0},i,j,k,n;
scanf("%d",&n);
i=n+1;
j=n/2+1;
a[1][j]=1;
for(k=2; k<=n*n; k++) {
i--;
j++;
if(i<1&&j>n) {
i+=2;
j--;
} else {
if(i<1) i=n;
if(j>n) j=1;
}
if(a[i][j]==0)
a[i][j]=k;
else {
i+=2;
j--;
a[i][j]=k;
}
}
for(i=1; i<=n; i++) {
for(j=1; j<=n; j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
3.有一个分数序列,求这个数列的前20项之和
#include <stdio.h>
int main() {
float flag=1.0;
float sum=0.0;
float up=2.0;
float down=1.0;
for(int i=0; i<20; i++) {
flag=up/down;
sum+=flag;
float temp=down;
down = up;
up=up+temp;
}
printf("%f",sum);
}
4.编写程序,顺序生成如下的前100项
序列的第一项,第二项分别为2和3,序列后续项按如下的方法生成
若序列的最后两项的乘积为一位数,则此一位数即为后续项
若序列的最后两项的乘积为两位数,则此两位数的十位数字和各位数字分别为后继的连续两项
#include <stdio.h>
int main() {
int first=2;
int second=3;
int count=2;
printf("No.%d = %d\n",count-1,first);
printf("No.%d = %d\n",count,second);
while(count<100) {
int flag=first*second;
if(flag<10) {
first=second;
second=flag;
} else {
first=flag/10;
second=flag%10;
}
count+=2;
printf("No.%d = %d\n",count-1,first);
printf("No.%d = %d\n",count,second);
}
}
5.编写程序,输出如下序列的前100项,该序列的第一项为0,第二项为1,以后的奇数项为其前两项之和,偶数项为其两项之差
#include <stdio.h>
int main() {
int arr[100];
arr[1]=0;
arr[2]=1;
int count=2;
while(count<=100) {
count++;
if((count%2)==1)
arr[count] = arr[count-2]+arr[count-1];
else
arr[count] = arr[count-2]-arr[count-1];
}
for(int i=1; i<=100; i++)
printf("No.%d = %d\n",i,arr[i]);
}
6.编写程序计算调和级数的前N项和,要求结果是一个准确的分数形式
#include <stdio.h>
int z1=1,z2=1;
int xiangchu(int a,int b) {
if(a<b) {
int temp=a;
a=b;
b=temp;
}
while(b!=0) {
int temp=a%b;
a=b;
b=temp;
}
return a;
}
void fun(int x1,int x2,int y1,int y2) {
z1=x1*y2+x2*y1;
z2=x2*y2;
int max=xiangchu(z1,z2);
z1/=max;
z2/=max;
}
int main() {
int n;
scanf("%d",&n);
if(n==1) printf("1/1");
else {
for(int i=2; i<=n; i++)
fun(z1,z2,1,i);
printf("%d/%d",z1,z2);
}
return 0;
}
7.编写函数,实现按照如下公式计算的功能
#include <stdio.h>
int fun(int n){
int result=1;
for(int i=n;i>0;i--)
result*=i;
return result;
}
float fn(int n){
float result=0;
for(int i=0;i<n;i++){
float flag=1.0*(i+2)/((i+3)*fun(i));
result+=flag;
}
return result;
}
int main() {
float result = fn(6);
printf("%f",result);
return 0;
}
8.试写一个函数f,使得它计算sinx的近似值,其计算过程是i从1开始计算Si(x),直到|Si(x)=Si-1(x)|<0.00005,并把Si的值作为sinx的近似值返回,其中
#include <stdio.h>
#include <math.h>
int fun(int n) {
int result=1;
for(int i=n; i>0; i--)
result*=i;
return result;
}
float fn(int x) {
float result=0;
float f = 1;
float flag = x;
for(int i=1; flag>5e-5; i+=2) {
flag=pow(x,i)/fun(i);
result+=f*flag;
f=-f;
}
return result;
}
int main() {
float result = fn(1);
printf("%10.8f",result);
return 0;
}
9.编写一个函数,计算以下公式,当第K项满足小于等于计算结束
#include <stdio.h>
#include <math.h>
int fun(int n) {
int result=1;
for(int i=n; i>0; i--)
result*=i;
return result;
}
float fn(int x) {
float result=0;
float f = 1;
float flag = x;
for(int i=1; flag>1e-3; i+=1) {
flag=pow(x,i)/fun(i);
result+=f*flag;
f=-f;
}
return result;
}
int main() {
float result = fn(1);
printf("%10.8f",result);
return 0;
}
10.编写函数,计算数列的前n项和
#include <stdio.h>
float fn(int n) {
float f = 1.0;
float result=0;
for(int i=1;i<=n;i++){
float flag=1.0/i;
result+=flag*f;
f=-f;
}
return result;
}
int main() {
float result = fn(2);
printf("%10.8f",result);
return 0;
}
11.编写函数,计算如下多项式的第n项值
#include <stdio.h>
float fn(int x,int n) {
float first = 1;
float second = 2*x;
float third;
if(n==0)
return first;
else if(n==1)
return second;
for(int i=2; i<=n; i++) {
third =2*x*second-2*(i-1)*first;
first=second;
second=third;
}
return third;
}
int main() {
float result = fn(1,2);
printf("%10.8f",result);
return 0;
}
12.已知,编写程序,求sinx的近似值,要求误差小于
#include <stdio.h>
#include <math.h>
int fun(int n) {
int result=1;
for(int i=n; i>0; i--)
result*=i;
return result;
}
float fn(int x) {
float result=0;
float f = 1;
float flag = x;
for(int i=1; flag>1e-8; i+=2) {
flag=pow(x,i)/fun(i);
result+=f*flag;
f=-f;
}
return result;
}
int main() {
float result = fn(1);
printf("%10.8f",result);
return 0;
}
13.给定一个正整数N,由所有分母小于或等于N的最简真分数按从小到大组成一个序列,例如,N=5,1/5 1/4 2/5 1/2 3/5 2/3 3/4 4/5,编写一个程序,输入一个正整数,输出上述序列
#include <stdio.h>
struct struct_result {
int up;
int down;
float result;
};
int gcd(int a,int b) {
if(a<b) {
int temp=a;
a=b;
b=temp;
}
while(b!=0) {
int temp=a%b;
a=b;
b=temp;
}
return a;
}
void sort(struct struct_result *arr,int count) {
for(int i=0; i<count-1; i++)
for(int j=0; j<count-i-1; j++)
if(arr[j].result>arr[j+1].result) {
struct struct_result res = arr[j];
arr[j]=arr[j+1];
arr[j+1] = res;
}
}
int main() {
int n,count=0;
struct struct_result arr[100];
scanf("%d",&n);
for(int i=2; i<=n; i++)
for(int j=1; j<i; j++)
if(gcd(i,j)==1) {
struct struct_result res;
res.up=j;
res.down=i;
res.result=1.0f*j/i;
arr[count++]=res;
}
sort(arr,count);
for(int i=0; i<count; i++)
printf("%d/%d\t",arr[i].up,arr[i].down);
return 0;
}