吉林大學(xué)歷年C語(yǔ)言程序設(shè)計(jì)試題及答案_第1頁(yè)
吉林大學(xué)歷年C語(yǔ)言程序設(shè)計(jì)試題及答案_第2頁(yè)
吉林大學(xué)歷年C語(yǔ)言程序設(shè)計(jì)試題及答案_第3頁(yè)
吉林大學(xué)歷年C語(yǔ)言程序設(shè)計(jì)試題及答案_第4頁(yè)
吉林大學(xué)歷年C語(yǔ)言程序設(shè)計(jì)試題及答案_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、吉林大學(xué)歷年C語(yǔ)言程序設(shè)計(jì)試題及答案(4)98年試題答案(輔導(dǎo)班講義) 二。(1)解題思想:用p,q,k分別紀(jì)錄A,B,C,三個(gè)數(shù)組正在訪問(wèn)的位置。如果,AP <=Bq,那么將AP賦給ck.否則,將Bq賦給Ck.如果A先訪問(wèn)完,把B的剩余部分復(fù)制到C中。同樣,如果B先訪問(wèn)完,把A的剩余部分復(fù)制到C中。 設(shè)計(jì)函數(shù)如下: Void fun (int a,int b,int c)   int i,p=0,q=0,k=0; while(p <=m-1)&&(q <=n-1)    if(ap <=bq) ck=ap; p+; els

2、e ck=bq; q+; k+; if(p=m) for(i=q;i <=n-1;i+) ck=b; k+; if(q=n) for(i=p;i <=n-1;i+) ck=a; k+; (2)解題思想:從數(shù)組的第一個(gè)元素a0開(kāi)始訪問(wèn),用一個(gè)變量p來(lái)紀(jì)錄當(dāng)前平臺(tái)的整數(shù)值,用length紀(jì)錄最長(zhǎng)平臺(tái)的長(zhǎng)度,用counter動(dòng)態(tài)紀(jì)錄每一個(gè)平臺(tái)的長(zhǎng)度。如果某一個(gè)平臺(tái)訪問(wèn)完以后counter >length則修改length. 設(shè)計(jì)函數(shù)如下: int fun(int a,int n)    int length=1,counter=1; int p=a0; for(

3、int k=1;k<n;K+)   if(ak=p) counter+;   else  p=ak;    if(length <counter)  length=counter;          counter=1;  if(length <counter)  length=counter; return length; (3)解題思想:從數(shù)組的第一個(gè)元素a0開(kāi)始訪問(wèn),每訪問(wèn)到一個(gè)零,則從后面找到一個(gè)非零元素與其交

4、換。若找不到,那么程序結(jié)束。 設(shè)計(jì)函數(shù)如下: void fun(int a,int n)    int i,j,p; for(i=0;i <n;i+)  if(a=0)    for(j=i;j <n;j+)       if(aj!=0)  p=j;break;    if(j=n-1) return;           a=ap;   ap=0; 三

5、,解法一, 解題思想:用一個(gè)數(shù)組a200來(lái)存放集合的元素,并且設(shè)a0=1.每次都從集合中選取最小的元素輸出。如果輸出的數(shù)量達(dá)到100個(gè),則結(jié)束程序。否則產(chǎn)生兩個(gè)數(shù)y,z,并把y,z插入到集合中去(這里插入應(yīng)該按照從小到大的順序排序,以保證每次都選取最小的元素。)在插入的過(guò)程中還應(yīng)該保證集合中沒(méi)有相同的元素(集合的互異性)。 設(shè)計(jì)程序如下: #include <iostream.h > int a200; void insert(int k)   int i ;  for(i=0;i <200;i+)     

6、0; if(a=k) return;  for(i=199;i >=0;i-)       if(a=0) continue;    if(k <a) ai+1=a;        else ai+1=k; return;     void main()   int count=0,n,i,y,z;    a0=1;    for(i=0;i <200;i+)  

7、60;  n=aj;        cout < <n < <"  "    count+;        if(count%10=0) cout < <endl;    if(count=100)  return;    y=2*n+1;    z=3*n+1;    insert(y);

8、   insert(z);   解法2,解題思想:按照自然數(shù)的順序連續(xù)地產(chǎn)生數(shù)k,判斷它是否屬于集合M.如果是輸出這個(gè)數(shù),計(jì)數(shù)器count加一。如果不是則連續(xù)。其中判斷使用一個(gè)遞歸函數(shù)實(shí)現(xiàn)。 設(shè)計(jì)程序如下: #include  <iostream.h > int judge(int k)    int t; if(k=1) return 1; if(k-1)%2=0&&judge(k-1)/2) return 1; if(k-1)%3=0&&judge(k-1)/3) return 1; r

9、eturn 0; void main()    int k=1,count=0;  while(count <100)  if(judge(k)     cout < <k < <"  "    count+  if(count%10=0) cout < <endl;    k+;  99年試題答案 一,(2)解題思想:平面上任意三點(diǎn)只要不共線,則一定能構(gòu)造出一個(gè)三角形。所以只要k1=(y2-y

10、1)/(x2-x1)和k2=(y3-y2)/(x3-x2)不相等或互為相反數(shù)就可以構(gòu)成三角形。 設(shè)計(jì)函數(shù)如下: #define  MAX 3.4e37 typedef struct   int x; int y; PointType100; int Triangle(PointType Points)    int i,j,k,count=0; float K1,K2; for(i=0;i <100;i+)  for(j=i+1;j <100;j+)    for(k=j+1;k <100;k+) 

11、;      if(Pointsj.x=Points.x)      else K1=(Pointsj.y-Points.y)*1.0/(Pointsj.x-Points.x);      if(Pointsj.x=Pointsk.x)  K2=MAX;      else K2=(Pointsj.y-Pointsk.y)*1.0/(Pointsj.x-Pointsk.x);     

12、if(K1=K2) continue;     return count;       二。解題思想:對(duì)于點(diǎn)N1,設(shè)它鄰接到a,b,c.,那么只要求出a,b,c.,到N2的所有路徑。遞歸地調(diào)用這個(gè)過(guò)程,就可以求出解。 設(shè)計(jì)程序如下: #include <iostream.h > struct node    int x; struct node *next; ; node *head; void print()    node *p=head;  

13、60;  while(p!=NULL)    cout < <p- >x < <"  "    p=p- >next;   cout < <endl; void del()    node *p=head; head=head- >next; delete p; void insert(int i )    node *p=new node; p- >x=i; p- >next=head; head=

14、p; void paths(int a1010,int N1,int N2)    if(N1=N2) print(); return; for(int i=0;i <10;i+)  if(aN1=1)   insert(i);   paths(a,i,N2);   del();  三,解題思想:設(shè)表l1和l2分別有m,n個(gè)元素。那么這個(gè)保序合并的過(guò)程就是把n個(gè)元素往m+1個(gè)位置插入的過(guò)程,其中插入的順序必須保持原有的順序。由組合數(shù)學(xué)的知識(shí)可以知道,這種插入一共有(m+n)!/m!*n!種排序方法?,F(xiàn)在我們用一個(gè)數(shù)組c

15、m+1來(lái)記錄這m+1個(gè)位置的元素的個(gè)數(shù),那么只要記錄先來(lái)cm+1的具體數(shù)值就可以唯一確定l1 和l2的保序合并表,打印的時(shí)候只需要根據(jù)cm+1打印即可。 設(shè)計(jì)程序如下: #include  <iostream.h > const int m=3; const int n=3; char l1m='1','2','3' char l2n='a','b','c' void merges(int c,int p; int k)    int i,j; if(k=n

16、+1) print(c);return; /遞歸出口,如果所有的數(shù)都放完了,打印,返回 for(j=0;j <m+1;j+)  dj=cj; cp=cp+1;/p 位置放下一個(gè)數(shù) k+; for(i=p;i <m+1;i+)  merge(c,i,k);  for(j=0;j <m+1;j+)  cj=dj;  k-; void main()    int cm+1; int k=1; for(int i=0;i <m+1;i+)  c=0; merge(c,0,k); void print

17、(int c)    int sum=0,p=0; for(int i=0;i <m+1;i+) sum+=c; if(sum!=n) return; for(i=0;i <m+1;i+)  for(int j=0;j <m+1;j+)   cout < <l2p; p+;   cout < <l1;  cout < <endl; 四, 解題思想:按照數(shù)目的元素作為交換規(guī)則,可以得到:aj和am-1n-1互相交換。如果有偶數(shù)行,那么前m/2和后m/2行交換;如果有奇數(shù)行,

18、那么第m/2的前n/2個(gè)數(shù)和后n/2個(gè)數(shù)相交換。 設(shè)計(jì)程序如下: include  <iostream.h > void swapt(int amn)    int temp ,i,j;     for(i=0;i <(m/2);i+)    for(j=0;j <n;j+)       temp=aj;            aj=am-1-

19、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;  紀(jì)錄每一個(gè)平臺(tái)的長(zhǎng)度。如果某一個(gè)平臺(tái)訪問(wèn)完以后counter >length則修改length. 設(shè)計(jì)函數(shù)如下: int fun(int a,int n)  

20、  int length=1,counter=1; int p=a0; for(int k=1;k<n;K+)   if(ak=p) counter+;   else  p=ak;    if(length <counter)  length=counter;          counter=1;  if(length <counter)  length=counter; return length; (3

21、)解題思想:從數(shù)組的第一個(gè)元素a0開(kāi)始訪問(wèn),每訪問(wèn)到一個(gè)零,則從后面找到一個(gè)非零元素與其交換。若找不到,那么程序結(jié)束。 設(shè)計(jì)函數(shù)如下: void fun(int a,int n)    int i,j,p; for(i=0;i <n;i+)  if(a=0)    for(j=i;j <n;j+)       if(aj!=0)  p=j;break;    if(j=n-1) return;      

22、     a=ap;   ap=0; 三,解法一, 解題思想:用一個(gè)數(shù)組a200來(lái)存放集合的元素,并且設(shè)a0=1.每次都從集合中選取最小的元素輸出。如果輸出的數(shù)量達(dá)到100個(gè),則結(jié)束程序。否則產(chǎn)生兩個(gè)數(shù)y,z,并把y,z插入到集合中去(這里插入應(yīng)該按照從小到大的順序排序,以保證每次都選取最小的元素。)在插入的過(guò)程中還應(yīng)該保證集合中沒(méi)有相同的元素(集合的互異性)。 設(shè)計(jì)程序如下: #include <iostream.h > int a200; void insert(int k)   int i ;  for(i

23、=0;i <200;i+)       if(a=k) return;  for(i=199;i >=0;i-)       if(a=0) continue;    if(k <a) ai+1=a;        else ai+1=k; return;     void main()   int count=0,n,i,y,z;    a0=1;

24、    for(i=0;i <200;i+)     n=aj;        cout < <n < <"  "    count+;        if(count%10=0) cout < <endl;    if(count=100)  return;    y=2*n+1; &

25、#160;  z=3*n+1;    insert(y);    insert(z);   解法2,解題思想:按照自然數(shù)的順序連續(xù)地產(chǎn)生數(shù)k,判斷它是否屬于集合M.如果是輸出這個(gè)數(shù),計(jì)數(shù)器count加一。如果不是則連續(xù)。其中判斷使用一個(gè)遞歸函數(shù)實(shí)現(xiàn)。 設(shè)計(jì)程序如下: #include  <iostream.h > int judge(int k)    int t; if(k=1) return 1; if(k-1)%2=0&&judge(k-1)/2) return 1; i

26、f(k-1)%3=0&&judge(k-1)/3) return 1; return 0; void main()    int k=1,count=0;  while(count <100)  if(judge(k)     cout < <k < <"  "    count+  if(count%10=0) cout < <endl;    k+;  99年試題答案 一,(

27、2)解題思想:平面上任意三點(diǎn)只要不共線,則一定能構(gòu)造出一個(gè)三角形。所以只要k1=(y2-y1)/(x2-x1)和k2=(y3-y2)/(x3-x2)不相等或互為相反數(shù)就可以構(gòu)成三角形。 設(shè)計(jì)函數(shù)如下: #define  MAX 3.4e37 typedef struct   int x; int y; PointType100; int Triangle(PointType Points)    int i,j,k,count=0; float K1,K2; for(i=0;i <100;i+)  for(j=i+1;j <100;

28、j+)    for(k=j+1;k <100;k+)       if(Pointsj.x=Points.x)      else K1=(Pointsj.y-Points.y)*1.0/(Pointsj.x-Points.x);      if(Pointsj.x=Pointsk.x)  K2=MAX;      else K2=(Pointsj.y-Pointsk.y)*1.0/(Po

29、intsj.x-Pointsk.x);      if(K1=K2) continue;     return count;       二。解題思想:對(duì)于點(diǎn)N1,設(shè)它鄰接到a,b,c.,那么只要求出a,b,c.,到N2的所有路徑。遞歸地調(diào)用這個(gè)過(guò)程,就可以求出解。 設(shè)計(jì)程序如下: #include <iostream.h > struct node    int x; struct node *next; ; node *head; void

30、 print()    node *p=head;     while(p!=NULL)    cout < <p- >x < <"  "    p=p- >next;   cout < <endl; void del()    node *p=head; head=head- >next; delete p; void insert(int i )    node *p=

31、new node; p- >x=i; p- >next=head; head=p; void paths(int a1010,int N1,int N2)    if(N1=N2) print(); return; for(int i=0;i <10;i+)  if(aN1=1)   insert(i);   paths(a,i,N2);   del();  三,解題思想:設(shè)表l1和l2分別有m,n個(gè)元素。那么這個(gè)保序合并的過(guò)程就是把n個(gè)元素往m+1個(gè)位置插入的過(guò)程,其中插入的順序必須保持原有的順序。由組合

32、數(shù)學(xué)的知識(shí)可以知道,這種插入一共有(m+n)!/m!*n!種排序方法?,F(xiàn)在我們用一個(gè)數(shù)組cm+1來(lái)記錄這m+1個(gè)位置的元素的個(gè)數(shù),那么只要記錄先來(lái)cm+1的具體數(shù)值就可以唯一確定l1 和l2的保序合并表,打印的時(shí)候只需要根據(jù)cm+1打印即可。 設(shè)計(jì)程序如下: #include  <iostream.h > const int m=3; const int n=3; char l1m='1','2','3' char l2n='a','b','c' void merges(int c,int p; int k)    int i,j; if(k=n+1) print(c);return; /遞歸出口,如果所有的數(shù)都放完了,

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論