版权声明:本文由 Micheal 超 博客 创作,转载请附带链接,有问题欢迎交流。 https://blog.csdn.net/qq_42887760/article/details/84454997
题目(总):
解答(答案为博主自已所写,并非最优代码,仅供参考)
第一题
- 题目
用递归方法求n阶勒让德多项式的值,递归公式为
n=0 pn(x) =1
n=1 pn(x) =x
n>1 pn(x) =((2n-1)x pn-1(x) -(n-1)* pn-2(x))/n
- 参考代码(答案并非最优代码,仅供参考)
#include<stdio.h>
float p(int,float);
int main(){
float result;
result=p(5,2.4);
printf("P5(2.4)=%f \n",result);
return 0;
}
float p(int n,float x){
if(n==0)
return 1;
else if(n==1)
return x;
else if(n>1)
return ((2*n-1)*x*p(n-1,x)-(n-1)*p(n-2,x))/n;
else
return 0;
}
- 代码说明
推荐参考:
- 运行结果
第二题
- 题目
用 公式求π的近似值,直到最后一项的绝对值小于10^6为止。
- 参考代码(答案并非最优代码,仅供参考)
#include<stdio.h>
#include<math.h>
int main(){
int i=1,sign=1;
double pi=0,sum=0,temp_value=1/i;
while(fabs(temp_value)>=1E-6){
sum+=temp_value;
i+=2;
sign*=-1;
temp_value=(double)sign/i;//此处务必加上一个double,否则sign/i将为int型数据
}
pi=sum*4;
printf("π的值为:%10.8lf \n",pi);
return 0;
}
- 代码说明
注意一下
1)数据类型之间的强制转化问题。
2)math.h里面 fabs(double x) 和abs(int x)函数的使用。
3)注意终止条件的判断的写法:while(fabs(temp_value)>=1E-6)
另外,我还想说的是,π的求法有很多,作为编程拓展知识可以学习一下吧:
- 运行结果
第三题
- 题目
一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下。求它在第十次落地时,共经过多少米?第十次反弹多高?
- 参考代码(答案并非最优代码,仅供参考)
#include<stdio.h>
int main(){
float height=100,sum=0;
int n=10;
for(int i=0;i<n;i++){
sum+=2*height;
height/=2;
}
sum-=100;
printf("第%d落地,共经过%f米;反弹高度为%f米\n",n,sum,height);
return 0;
}
- 代码说明
代码本身没什么难度,推荐参考:
- 运行结果
第四题
- 题目
蛇形数组、倾斜遍历(蛇形填数)
- 图解(以4维为例)
- 参考代码(答案并非最优代码,仅供参考)
#include<stdio.h>
#define MAX 100
int main(){
int a[MAX][MAX];
int n,i,j,k=1;//n表示数组维数;i,j为变量;k为填充数
printf("请输入n的值:");
scanf("%d",&n);
i=n-1;j=0;//设置初始值
bool flag=true;//true:表示从左上到右下;false相反
do{
a[i][j]=k;
k++;
if(flag){
i--;j--;
}else{
i++;j++;
}
if(i<0){//上侧边
j=j+2;i++;
flag=!flag;
}else if(j>n-1){//右侧边
i=i-2;j--;
flag=!flag;
}else if(i>n-1){//下侧边
i--;
flag=!flag;
}
else if(j<0){//左侧边
j++;
flag=!flag;
}else{};
}while(k<=n*n);
for(i=0;i<n;i++){//输出函数
for(j=0;j<n;j++)
printf("%4d",a[i][j]);
putchar(10);
}
return 0;
}
- 代码说明
蛇形数组有很多类型,扩充阅读:
- 运行结果