吉林大学历年C语言程序设计试题及答案.docx
- 文档编号:7103893
- 上传时间:2023-01-17
- 格式:DOCX
- 页数:14
- 大小:20.60KB
吉林大学历年C语言程序设计试题及答案.docx
《吉林大学历年C语言程序设计试题及答案.docx》由会员分享,可在线阅读,更多相关《吉林大学历年C语言程序设计试题及答案.docx(14页珍藏版)》请在冰豆网上搜索。
吉林大学历年吉林大学历年C语言程序设计试题及答案语言程序设计试题及答案吉林大学历年C语言程序设计试题及答案(4)98年试题答案(辅导班讲义)二。
(1)解题思想:
用p,q,k分别纪录A,B,C,三个数组正在访问的位置。
如果,AP=Bq,那么将AP赋给ck.否则,将Bq赋给Ck.如果A先访问完,把B的剩余部分复制到C中。
同样,如果B先访问完,把A的剩余部分复制到C中。
设计函数如下:
Voidfun(inta,intb,intc)inti,p=0,q=0,k=0;while(p=m-1)&(q=n-1)if(ap=bq)ck=ap;p+;elseck=bq;q+;k+;if(p=m)for(i=q;i=n-1;i+)ck=b;k+;if(q=n)for(i=p;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;if(lengthcounter)length=counter;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;for(i=0;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;for(i=0;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;k+;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;for(i=0;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();return;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);return;/递归出口,如果所有的数都放完了,打印,返回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;jm+1;j+)cj=dj;k-;voidmain()intcm+1;intk=1;for(inti=0;im+1;i+)c=0;merge(c,0,k);voidprint(intc)intsum=0,p=0;for(inti=0;im+1;i+)sum+=c;if(sum!
=n)return;for(i=0;im+1;i+)for(intj=0;jm+1;j+)coutl2p;p+;coutl1;coutendl;四,解题思想:
按照数目的元素作为交换规则,可以得到:
aj和am-1n-1互相交换。
如果有偶数行,那么前m/2和后m/2行交换;如果有奇数行,那么第m/2的前n/2个数和后n/2个数相交换。
设计程序如下:
includevoidswapt(intamn)inttemp,i,j;for(i=0;i(m/2);i+)for(j=0;jn;j+)temp=aj;aj=am-1-in-1-j;am-1-in-1-j=temp;if(m%2!
=0)for(j=0;jlength则修改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;if(lengthcounter)length=counter;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;for(i=0;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;for(i=0;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;k+;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;for(i=0;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();return;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);return;/递归出口,如果所有的数都放完了,打印,返回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;jm+1;j+)cj=dj;k-;voidmain()intcm+1;intk=1;for(inti=0;im+1;i+)c=0;merge(c,0,k);voidprint(intc)intsum=0,p=0;for(inti=0;im+1;i+)sum+=c;if(sum!
=n)return;for(i=0;im+1;i+)for(intj=0;jm+1;j+)coutl2p;p+;coutl1;coutendl;四,解题思想:
按照数目的元素作为交换规则,可以得到:
aj和am-1n-1互相交换。
如果有偶数行,那么前m/2和后m/2行交换;如果有奇数行,那么第m/2的前n/2个数和后n/2个数相交换。
设计程序如下:
includevoidswapt(intamn)inttemp,i,j;for(i=0;i(m/2);i+)for(j=0;jn;j+)temp=aj;aj=am-1-in-1-j;am-1-in-1-j=temp;if(m%2!
=0)for(j=0;j(n/2);j+)temp=am/2j;am/2j=am/2n-1-j;am/2n-1-j=temp;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 吉林大学 历年 语言程序设计 试题 答案