吉大c语言程序设计作业一,吉林大学历年C语言程序设计试题及答案.doc

吉林大学历年C语言程序设计试题及答案

吉林大学历年C语言程序设计试题及答案(5)END

2000年试题答案

一、(1)解题思想: 用5个数 a,b,c,d,e,来回替换,最终f(n)算出。

设计程序如下:

int F(int n)

{ if(n <=5) return n ;

int temp,a=1;b=2;c=3;d=4;e=5;

for(int i=6;i <=n;i++) {

temp=e-c-a; a=b; b=c; c=d; d=e; e=temp; }

return e;

}

(2)解题思想: 根据园相切的定义: 圆心之间的距离等于半径之和或半径之差,判断一下即可。设圆心坐标和园的半径已经存在数组x[100],y[100],r[100]中。注意,相切包括内切和外切。

设计程序如下:

#include

#include

struct node

{ int m ; int n ;

node *next; };

double d(int i,int j)

{ return sqrt((x-x[j])*(x-x[j])+(y-y[j])*(y-y[j])); }

node *fun(void)

{ node *head=NULL;

node *p;

for(int i=0;i for(int j=i+1;j

if((d(i,j)==r+r[j])||(d(i,j)==r-r[j])||(d(i,j)==r[j]-r)) {

p=new node;

p- >m=i;

p- >n=j;

p- >next=head;

head=p; }

return head;

}

(3) #include

const int N=10;

int fun()

{ int i,j,k,a[N][N],b[N][N],m,s,p;

for(i=0;i for(j=0;j for(i=0;i for(j=0;j

p=1;

for(i=0;i m=1; for(j=0;j s=0;

for(k=0;k <10;k++) s+=a[k]*b[k][k];

p*=b*(m+s); }

return p;

}

(4)解题思想:根据题目要求把数组a和b扫描一次,即可求c。

#include

const int m=3,n=4;

void fun(float a[],float b[],float c[])

{ float p;

p=0;

for(int k=0;k

p=0;

for(int i=0;i <=m;i++)

for(int j=0;j <=n;j++)

if(i+j==k) p+=a*b[j];

c[k]=p; }

}

二、解题思想:这实际上是积分过程的模拟,在区间[o,N]上,可以先划分出N个小区间,如果不能满足题目的精确度,则继续划分成2×N个区间,那么当区间个数足够多时,总可以满足精确度要求。在判断误差时,可以使用积分大和与积分小和相减的方法。

设计程序如下:

#include

#include

double function(int N,double e)

{ double s1=0,s2=10;

float M=N;

while (fabs(s2-s1) >=e) {

s1=0;s2=1;

for(int i=0;i

s1=F(i*N/M)*N/M+s1;

s2=F((i+1)*N/M)*N/M+s2; }

N=M*2; }

return s1;

}

三、解题思想:用直接插入排序法进行集合的并运算,可以保证集合中没有相同的元素。其中集合元素产生时用到了函数指针。

#include

typedef int(*MenuFun)(int);

int F1(int x){return x*x+1;}

int F2(int x){return 2*x*x+1;}

int F3(int x){return 3*x*x+1;}

int F4(int x){return 4*x*x+1;}

int F5(int x){return 5*x*x+1;}

int F6(int x){return 6*x*x+1;}

int F7(int x){return 7*x*x+1;}

int F8(int x){return 8*x*x+1;}

int F9(int x){return 9**x+1;}

int F10(int x){return 10*x*x+1;}

MenuFun F

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值