吉林大学历年C语言程序设计试题及答案Word文档下载推荐.docx

上传人:b****6 文档编号:20197753 上传时间:2023-01-17 格式:DOCX 页数:14 大小:20.60KB
下载 相关 举报
吉林大学历年C语言程序设计试题及答案Word文档下载推荐.docx_第1页
第1页 / 共14页
吉林大学历年C语言程序设计试题及答案Word文档下载推荐.docx_第2页
第2页 / 共14页
吉林大学历年C语言程序设计试题及答案Word文档下载推荐.docx_第3页
第3页 / 共14页
吉林大学历年C语言程序设计试题及答案Word文档下载推荐.docx_第4页
第4页 / 共14页
吉林大学历年C语言程序设计试题及答案Word文档下载推荐.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

吉林大学历年C语言程序设计试题及答案Word文档下载推荐.docx

《吉林大学历年C语言程序设计试题及答案Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《吉林大学历年C语言程序设计试题及答案Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。

吉林大学历年C语言程序设计试题及答案Word文档下载推荐.docx

ilength则修改length.设计函数如下:

intfun(inta,intn)intlength=1,counter=1;

intp=a0;

for(intk=1;

kn;

K+)if(ak=p)counter+;

elsep=ak;

if(lengthcounter)length=counter;

counter=1;

returnlength;

(3)解题思想:

从数组的第一个元素a0开始访问,每访问到一个零,则从后面找到一个非零元素与其交换。

若找不到,那么程序结束。

voidfun(inta,intn)inti,j,p;

for(i=0;

in;

i+)if(a=0)for(j=i;

jn;

j+)if(aj!

=0)p=j;

break;

if(j=n-1)return;

a=ap;

ap=0;

三,解法一,解题思想:

用一个数组a200来存放集合的元素,并且设a0=1.每次都从集合中选取最小的元素输出。

如果输出的数量达到100个,则结束程序。

否则产生两个数y,z,并把y,z插入到集合中去(这里插入应该按照从小到大的顺序排序,以保证每次都选取最小的元素。

)在插入的过程中还应该保证集合中没有相同的元素(集合的互异性)。

设计程序如下:

#includeinta200;

voidinsert(intk)inti;

i=0;

i-)if(a=0)continue;

if(ka)ai+1=a;

elseai+1=k;

return;

voidmain()intcount=0,n,i,y,z;

a0=1;

i200;

i+)n=aj;

coutn;

count+;

if(count%10=0)coutendl;

if(count=100)return;

y=2*n+1;

z=3*n+1;

insert(y);

insert(z);

解法2,解题思想:

按照自然数的顺序连续地产生数k,判断它是否属于集合M.如果是输出这个数,计数器count加一。

如果不是则连续。

其中判断使用一个递归函数实现。

#includeintjudge(intk)intt;

if(k=1)return1;

if(k-1)%2=0&

judge(k-1)/2)return1;

if(k-1)%3=0&

judge(k-1)/3)return1;

return0;

voidmain()intk=1,count=0;

while(count100)if(judge(k)coutk;

count+if(count%10=0)coutendl;

99年试题答案一,

(2)解题思想:

平面上任意三点只要不共线,则一定能构造出一个三角形。

所以只要k1=(y2-y1)/(x2-x1)和k2=(y3-y2)/(x3-x2)不相等或互为相反数就可以构成三角形。

#defineMAX3.4e37typedefstructintx;

inty;

PointType100;

intTriangle(PointTypePoints)inti,j,k,count=0;

floatK1,K2;

i100;

i+)for(j=i+1;

j100;

j+)for(k=j+1;

k100;

k+)if(Pointsj.x=Points.x)elseK1=(Pointsj.y-Points.y)*1.0/(Pointsj.x-Points.x);

if(Pointsj.x=Pointsk.x)K2=MAX;

elseK2=(Pointsj.y-Pointsk.y)*1.0/(Pointsj.x-Pointsk.x);

if(K1=K2)continue;

returncount;

二。

解题思想:

对于点N1,设它邻接到a,b,c.,那么只要求出a,b,c.,到N2的所有路径。

递归地调用这个过程,就可以求出解。

设计程序如下:

#includestructnodeintx;

structnode*next;

node*head;

voidprint()node*p=head;

while(p!

=NULL)coutxnext;

coutnext;

deletep;

voidinsert(inti)node*p=newnode;

p-x=i;

p-next=head;

head=p;

voidpaths(inta1010,intN1,intN2)if(N1=N2)print();

for(inti=0;

i10;

i+)if(aN1=1)insert(i);

paths(a,i,N2);

del();

三,解题思想:

设表l1和l2分别有m,n个元素。

那么这个保序合并的过程就是把n个元素往m+1个位置插入的过程,其中插入的顺序必须保持原有的顺序。

由组合数学的知识可以知道,这种插入一共有(m+n)!

/m!

*n!

种排序方法。

现在我们用一个数组cm+1来记录这m+1个位置的元素的个数,那么只要记录先来cm+1的具体数值就可以唯一确定l1和l2的保序合并表,打印的时候只需要根据cm+1打印即可。

#includeconstintm=3;

constintn=3;

charl1m=1,2,3;

charl2n=a,b,c;

voidmerges(intc,intp;

intk)inti,j;

if(k=n+1)print(c);

/递归出口,如果所有的数都放完了,打印,返回for(j=0;

jm+1;

j+)dj=cj;

cp=cp+1;

/p位置放下一个数k+;

for(i=p;

im+1;

i+)merge(c,i,k);

for(j=0;

j+)cj=dj;

k-;

voidmain()intcm+1;

intk=1;

i+)c=0;

merge(c,0,k);

voidprint(intc)intsum=0,p=0;

i+)sum+=c;

if(sum!

=n)return;

i+)for(intj=0;

j+)coutl2p;

coutl1;

coutendl;

四,解题思想:

按照数目的元素作为交换规则,可以得到:

aj和am-1n-1互相交换。

如果有偶数行,那么前m/2和后m/2行交换;

如果有奇数行,那么第m/2的前n/2个数和后n/2个数相交换。

includevoidswapt(intamn)inttemp,i,j;

i(m/2);

i+)for(j=0;

j+)temp=aj;

aj=am-1-in-1-j;

am-1-in-1-j=temp;

if(m%2!

=0)for(j=0;

jlength则修改length.设计函数如下:

j(n/2);

j+)temp=am/2j;

am/2j=am/2n-1-j;

am/2n-1-j=temp;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1