C程序设计--案例(2009年江苏大学程序设计考研试题 -- 编程题)

版权声明:本文由 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;
}
  • 代码说明
    推荐参考:
  1. https://blog.csdn.net/yandaxiaxiaolin/article/details/53337688
  2. https://blog.csdn.net/navicheung/article/details/78194048
  • 运行结果
    在这里插入图片描述

第二题

  • 题目

π 4 1 1 3 + 1 5 1 7 + . . . \frac{π}{4} ≈ 1 - \frac{1}{3} + \frac{1}{5} - \frac{1}{7 } +... 公式求π的近似值,直到最后一项的绝对值小于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)
    另外,我还想说的是,π的求法有很多,作为编程拓展知识可以学习一下吧:
  1. http://c.biancheng.net/cpp/html/2813.html
  2. https://blog.csdn.net/chisir2000/article/details/79781281
  3. https://blog.csdn.net/u013866359/article/details/41287399
  • 运行结果
    在这里插入图片描述

第三题

  • 题目

一球从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;
}
  • 代码说明
    代码本身没什么难度,推荐参考:
  1. https://blog.csdn.net/qq_39778967/article/details/80114559
  2. https://blog.csdn.net/sxhelijian/article/details/52853479
  • 运行结果

在这里插入图片描述

第四题

  • 题目

蛇形数组、倾斜遍历(蛇形填数)

  • 图解(以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;
}

  • 代码说明
    蛇形数组有很多类型,扩充阅读:
  1. https://blog.csdn.net/rabbit8848/article/details/41692621
  2. http://blog.51cto.com/11142019/1766796 (这篇也挺好的)
  • 运行结果
    在这里插入图片描述
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42887760/article/details/84454997