吉林大学历年C语言程序设计试题及答案Word文档下载推荐.docx
- 文档编号:20197753
- 上传时间:2023-01-17
- 格式:DOCX
- 页数:14
- 大小:20.60KB
吉林大学历年C语言程序设计试题及答案Word文档下载推荐.docx
《吉林大学历年C语言程序设计试题及答案Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《吉林大学历年C语言程序设计试题及答案Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。
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;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 吉林大学 历年 语言程序设计 试题 答案
![提示](https://static.bdocx.com/images/bang_tan.gif)