二級C上機考試常有算法(不含計算問題heuu)_第1頁
二級C上機考試常有算法(不含計算問題heuu)_第2頁
二級C上機考試常有算法(不含計算問題heuu)_第3頁
二級C上機考試常有算法(不含計算問題heuu)_第4頁
二級C上機考試常有算法(不含計算問題heuu)_第5頁
已閱讀5頁,還剩33頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、運用運用/和和%分離整數的各位分離整數的各位1:請編寫函數:請編寫函數fun,其功能是:將兩個兩位數的正整數,其功能是:將兩個兩位數的正整數a、b合并形成一個整數放在合并形成一個整數放在c中。合并的方式是:將中。合并的方式是:將a數的十位和數的十位和個位數依次放在個位數依次放在c數個位和十位上,數個位和十位上,b數的十位和個位數依次數的十位和個位數依次放在放在c數的百位和千位上。數的百位和千位上。例如,當例如,當a=16,b=35,調用該函數后,調用該函數后,c=5361。#includevoid fun(int a ,int b,long *c) *c=(b%10)*1000+(b/10)*

2、100+(a%10)*10+a/10; 2:數組:數組xxN保存著一組位數的無符號正整數,其元素的個數通過變量保存著一組位數的無符號正整數,其元素的個數通過變量num傳入函數傳入函數fun()。請補充函數。請補充函數fun(),該函數的功能是:從數組,該函數的功能是:從數組xx中找出中找出個位和百位的數字相等個位和百位的數字相等的所有的所有無符號整數,結果保存在數組無符號整數,結果保存在數組yy中,其個數由函數中,其個數由函數fun()返回。返回。例如:當例如:當xx8=135,78,72,32,222,424,333,141,541時,時,bb6=787,232,222,424,333,14

3、1。#include#define N 1000int fun(int xx,int bb,int num)int i,n=0;int g,b;for(i=0;i=0;-i) d=ci;printf(%c,bd);printf(n);4:請補充函數:請補充函數fun(),該函數的功能是:把一個,該函數的功能是:把一個整數轉換成字符串整數轉換成字符串,并倒序保存,并倒序保存在字符數組在字符數組str中。例如:當中。例如:當n=13572468時,時,str=86427531。#include#include#define N 80char strN;void fun(long int n)int

4、 i=0;while(n0)stri=n%10+0;n/=10;i+;stri=0;數組特殊位置元素的確定數組特殊位置元素的確定1:下列程序定義了:下列程序定義了NN的二維數組,并在主函數中賦值。請編寫函數的二維數組,并在主函數中賦值。請編寫函數fun(),函數的功能,函數的功能是:求出數組周邊元素的平方和并作為函數值返回給主函數中的是:求出數組周邊元素的平方和并作為函數值返回給主函數中的s。#define N 5int fun (int wN) int i,j,k=0; int s=0; for(i=0;iN;i+) for(j=0;jN;j+) if(i=0|i=N-1|j=0|j=N-1

5、) /*只要下標中有一個為只要下標中有一個為0或或N-1,則它一定是周邊元素,則它一定是周邊元素*/ s=s+wij*wij; /*將周邊元素求平方和將周邊元素求平方和*/ return s; /*返回周邊元素的平方和返回周邊元素的平方和*/2:下列程序定義了NN的二維數組,并在主函數中自動賦值。請編寫函數fun(int aN, int n),該函數的功能是:使數字右(左)上半三角元素中的值乘以m。#define N 5int fun(int aN, int m) int i,j; for(i=0;iN;i+) for(j=i;jN;j+) aij=aij*m;最大公約數與最小公倍數最大公約數

6、與最小公倍數1:請補充:請補充main函數,該函數的功能是:輸入兩個正整數函數,該函數的功能是:輸入兩個正整數m和和n,求這兩個數的最大公約和最小公倍數。,求這兩個數的最大公約和最小公倍數。(題盤題盤34-2 83-2)#include main()int a, b, n, m, t;printf(nInput two numbers:n);scanf (%d,%d,&n,&m);if(nm)a=m; b=n;elsea=n; b=m;while(b!=0)t=a%b;a=b;b=t;printf(greatest common divisor:%dn,a);printf(least comm

7、on multiple:%dn,n*m/a); 判斷素數判斷素數1:請編寫一個函數:請編寫一個函數void fun(int m, int k, int xx),該函數的功能是:,該函數的功能是:將大于整數將大于整數m且緊靠且緊靠m的的k個非素數存入所指的數組中。個非素數存入所指的數組中。例如,若輸入例如,若輸入15,5,則應輸出,則應輸出16,18,20,21,22。void fun(int m, int k, int xx) int i,j,n; for(i=m+1,n=0;nk;i+) /*找大于找大于m的非素數,循環的非素數,循環k次,即找出緊靠次,即找出緊靠m的的k個非素數個非素數*/

8、 for(j=2;ji;j+) /*判斷一個數是否為素數判斷一個數是否為素數*/ if(i%j=0) xxn+=i; /*如果不是素數,放入數組如果不是素數,放入數組xx中中*/ break; /*并跳出本層循環,判斷下一個數并跳出本層循環,判斷下一個數*/ char a80;int n=0;while (an!=0)/*(an)或an!=0*/n+; /*n 即為串長*/char a80;int n=0;for (;an;n+); /*(an)或an!=0*/*n 即為串長*/char *a;int n=0;gets(a);while (*a!=0)/* (*a)或*a!=0 */n+; a

9、+; /*n 即為串長*/char *a;int n=0;gets(a);for (;*a;a+)n+; /* *a!=0或*a!=0*/*n 即為串長*/字符串逆序存放字符串逆序存放1:請補充函數:請補充函數fun(),該函數的功能是:把從主函數中輸入的字符串,該函數的功能是:把從主函數中輸入的字符串str2倒置后倒置后接在字符串接在字符串str1后面。后面。例如:例如:str1=How do,str2=?od uoy,結果輸出:結果輸出:How do you do?。#define N 40void fun(char *str1,char *str2)int i=0,j=0,k=0,n;

10、char ch;char *p1=str1;char *p2=str2;while(*(p1+i)i+;while(*(p2+j)j+;n= j-;for(;k=j/2;k+,j-)ch=*(p2+k);*(p2+k)=*(p2+j);*(p2+j)=ch;*(p2+n)=0;for(;*p2;i+) *(p1+i)=*p2+;*(p1+i)=0;2:補充函數:補充函數fun(char *s),該函數的功能是把字符串中的內容逆置。,該函數的功能是把字符串中的內容逆置。例如:字符串中原有的字符串為例如:字符串中原有的字符串為abcde,則調用該函數后,串中的內容變,則調用該函數后,串中的內容變為

11、為edcba。#include#include#include#define N 81void fun(char*s)int i=0, n=strlen(s);char t;for(; in/2 ;i+)t=*(s+i); *(s+i)=*(s+n-1-i); *(s+n-1-i)=t; 字符串中特定字符或字符串的統計字符串中特定字符或字符串的統計1:請補充函數:請補充函數fun(),該函數的功能是:按,該函數的功能是:按0到到9統計一個字符串中的奇數統計一個字符串中的奇數數字字符各自出現的次數,結果保存在數組數字字符各自出現的次數,結果保存在數組num中。注意:不能使用字符串庫函中。注意:不

12、能使用字符串庫函數。數。 例如:輸入例如:輸入x=112385713.456+0.909*bc,結果為:,結果為:13,32,52,71,92。#include#define N 1000void fun(char *tt,int num)int i,j;int bb10;char *p=tt;for(i=0;i=0&*p=9) bb*p-0+; p+;for(i=1,j=0;i10;i=i+2,j+) numj=bbi;2:str是全部由小寫字母字符和空格字符組成的字符串,由是全部由小寫字母字符和空格字符組成的字符串,由num傳入字傳入字符串的長度。請補充函數符串的長度。請補充函數fun()

13、,該函數的功能是:統計字符串,該函數的功能是:統計字符串str中的單中的單詞個數,結果由變量詞個數,結果由變量num傳回。每個單詞之間都由空格隔開,并且字符傳回。每個單詞之間都由空格隔開,并且字符串串str開始不存在空格。開始不存在空格。例如:例如:str=how do you do,結果為:,結果為:num=4。#define N 80void fun(char *s,int *num)int i,n=0;for(i=0; i=a&si=z&(si+1= |si+1=0)n+;*num=n;3:請補充函數:請補充函數fun(),該函數可以統計一個長度為,該函數可以統計一個長度為n的字符串在另

14、一個字符串的字符串在另一個字符串中出現的次數。例如,假定輸入的字符串為:中出現的次數。例如,假定輸入的字符串為:asd ascasdfg asd as asd mlosd,子字符串為子字符串為asd,則應輸出,則應輸出4。20-3算法算法1:int fun(char *str,char *substr)int n; char *p,*r;n=0;while(*str)p=str; r=substr;while(*r)if(*r=*p) r+; p+;else break;if(*r=0) n+;str+;return n;算法算法2: (好理解)(好理解)int i=0,k=0,j=0,n;n

15、=strlen(str);while(ipi) q=p+i; min=pi; i+; while(qp) *q=*(q-1); q-; p0=min;循環左移算法循環左移算法1:請編寫函數:請編寫函數fun(),該函數的功能是:移動一維數組中的內容,若數組中有,該函數的功能是:移動一維數組中的內容,若數組中有n個整數,要求把下標從個整數,要求把下標從0到到p(pn-1)的數組元素平移到數組的最后。的數組元素平移到數組的最后。例如,一維數組中的原始內容為例如,一維數組中的原始內容為1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,p的值為的值為3。移動后,一維數組中的內容應

16、為。移動后,一維數組中的內容應為5,6,7,8,9,10,11,12,13,14,15,1,2,3,4。#include #define N 80void fun(int *w, int p, int n) int i,j,t; for(i=0;i=p;i+) /*循環左移循環左移p+1次次*/ t=w0; for(j=1;jn;j+) /*實現循環左移實現循環左移*/ wj-1=wj; wj-1=t; 2:請編寫函數:請編寫函數fun(),該函數的功能是:移動字符串中的內容,移動的,該函數的功能是:移動字符串中的內容,移動的規則是把第規則是把第1到第到第m個字符,平移到字符串的最后,把第個字

17、符,平移到字符串的最后,把第m+1到最后的字到最后的字符移到字符串的前部。符移到字符串的前部。例如,字符串中原有的內容為例如,字符串中原有的內容為ABCDEFGHIJK,m的值為的值為3,移動后,移動后,字符串中的內容應該是字符串中的內容應該是DEFGHIJKABC。#define N 80void fun (char *w,int m) int i,j; char t; for(i=1;i=m;i+) /*進行進行m次的循環左移次的循環左移*/ t=w0; for(j=1;wj!=0;j+) /*從第從第2個字符開始以后的每個字符都依次前移一個字符個字符開始以后的每個字符都依次前移一個字符*

18、/ wj-1=wj; wj-1=t; /*將第將第1個字符放到最后一個字符中個字符放到最后一個字符中*/ 數據的折半查找算法數據的折半查找算法1:N個有序整數數列已放在一維數組中,給定下列程序中,函數個有序整數數列已放在一維數組中,給定下列程序中,函數fun() 的功能是:的功能是:利用折半查找算法查找整數利用折半查找算法查找整數m在數組中的位置。若找到,則返回其下標值;反之,在數組中的位置。若找到,則返回其下標值;反之,則返回則返回-1。折半查找的折半查找的基本算法基本算法是:每次查找前先確定數組中待查的范圍:是:每次查找前先確定數組中待查的范圍:low和和high(lowhigh,查找結束

19、。,查找結束。#define N 10int fun(int a,int m) int low=0,high=N-1,mid; while(low=high) mid=(low+high)/2; if(mamid) low=mid+1; else return(mid); return(-1);數據的插入數據的插入1:請補充:請補充main函數,該函數的功能是:把一個整數插入到一個已經按從小函數,該函數的功能是:把一個整數插入到一個已經按從小到大排序的數組中。插入后,數組仍然有序。到大排序的數組中。插入后,數組仍然有序。#define N 10main()int i,j; int n; int

20、 bbN+1=12,23,31,44,51,63,71,79,85,95;scanf(%d,&n); printf(nn=%d ,n);for(i=0;iN;i+) printf(%4d ,bbi);for(i=0;iN;i+)if(ni ;j-) bbj=bbj-1; /*元素后移元素后移*/bbj=n; /*插入元素插入元素*/break;if(i=N)bbi=n; /*如果如果n大于所有的數大于所有的數,則插入到最后則插入到最后*/for(i=0;iN+1;i+) printf(%4d ,bbi);字符串前(后)加入字符串前(后)加入n個個*號號99-2:下列給定程序中函數:下列給定程序

21、中函數fun()的功能是:在字符串的最前端加入的功能是:在字符串的最前端加入n個個*號,形成新串,并且覆蓋原串。號,形成新串,并且覆蓋原串。注意:字符串的長度最長允許注意:字符串的長度最長允許79。void fun (char *s, int n) char a80,*p; int i; p=s; for(i=0;i=A&*(p+i)=a&*p=z)si=*p;i+ ;p+;si= 0 ;54-3:假定輸入的字符串中只包含字母和假定輸入的字符串中只包含字母和*號。請編寫函數號。請編寫函數fun(),它的功,它的功能是:刪除字符串中所有的能是:刪除字符串中所有的*號。在編寫函數時,不得使用號。在

22、編寫函數時,不得使用C語言中提供語言中提供的字符串函數。的字符串函數。例如,若字符串中的內容為例如,若字符串中的內容為*A*BC*DEF*G*,刪除后,字符,刪除后,字符串中的內容則應當是串中的內容則應當是ABCDEFG。void fun(char *a) int i,j=0; for(i=0;ai!=0;i+) if(ai!=*) aj+=ai; /*若不是要刪除的字符若不是要刪除的字符*則留下則留下*/ aj=0; /*最后加上字符串結束符最后加上字符串結束符0*/60-3:假定輸入的字符串中只包含字母和:假定輸入的字符串中只包含字母和*號。請編寫函數號。請編寫函數fun(),它的功能是:

23、將字符串中的前導,它的功能是:將字符串中的前導*號全部刪除,中間號全部刪除,中間和后面的和后面的*號不刪除。號不刪除。例如,若字符串中的內容為例如,若字符串中的內容為*A*BC*DEF*G*,刪,刪除后,字符串中的內容則應當是除后,字符串中的內容則應當是A*BC*DEF*G*。void fun (char *a)int j=0; char *p=a; while(*p=*) p+; /*指針指針p指向字符串第一個字母指向字符串第一個字母*/ while (*p) aj+=*p; p+; /*從第一個字母開始,其后的字符都放入指針從第一個字母開始,其后的字符都放入指針a所指的字符串中所指的字符串

24、中*/ aj=0; /*在字符串最后加上結束標記符在字符串最后加上結束標記符*/10-3:假定輸入的字符串中只包含字母和假定輸入的字符串中只包含字母和*號。請編寫函數號。請編寫函數fun(),它的功,它的功能是:將字符串尾部的能是:將字符串尾部的*號全部刪除,前面和中間的號全部刪除,前面和中間的*號不刪除。號不刪除。例如,若字符串中的內容為例如,若字符串中的內容為*A*BC*DEF*G*,刪除后,字符串中,刪除后,字符串中的內容則應當是的內容則應當是*A*BC*DEF*G。 void fun(char *a)char *p;p=a;while (*p)p+; /將指針將指針p后移至串尾后移至串

25、尾p-; /讓其指向最后一個字符讓其指向最后一個字符while(*p=*) p-; /從后向前找第一個不是從后向前找第一個不是*的的p+; *p=0; /在其后面加結束標志即可在其后面加結束標志即可89-3: 假定輸入的字符串中只包含字母和假定輸入的字符串中只包含字母和*號。請編寫函數號。請編寫函數fun(),它的功,它的功能是:除了尾部的能是:除了尾部的*號之外,將字符串中其他號之外,將字符串中其他*號全部刪除。形參號全部刪除。形參p已指已指向字符串中最后一個字母。在編寫函數時,不得使用向字符串中最后一個字母。在編寫函數時,不得使用C語言的字符串函語言的字符串函數。數。例如,若字符串中的內容

26、為例如,若字符串中的內容為*A*BC*DEF*G*,刪除后,字符串,刪除后,字符串中的內容應當是中的內容應當是ABCDEFG*。void fun(char *a, char *p)char *q=a;int j=0;while (*q!=0 & qp)if(*q!=*) aj+=*q; /*將將p以前所有不是以前所有不是*號的字符保留下來號的字符保留下來*/q+;while (*q)aj+=*q;q+; /*將將p以后的所有以后的所有*號保留下來號保留下來*/aj=0; /*在字符串最后加上結束標記位在字符串最后加上結束標記位*/ 15-3:假定輸入的字符串中只包含字母和假定輸入的字符串中只包

27、含字母和*號。請編寫函數號。請編寫函數fun(),它的功,它的功能是:只刪除字符串前導和尾部的能是:只刪除字符串前導和尾部的*號,串中字母之間的號,串中字母之間的*號都不刪除。號都不刪除。形參形參n給出了字符串的長度,形參給出了字符串的長度,形參h給出了字符串中前導給出了字符串中前導*號的個數,形號的個數,形參參e給出了字符串中最后給出了字符串中最后*號的個數。在編寫函數時,不得使用號的個數。在編寫函數時,不得使用C語言提語言提供的字符串函數。供的字符串函數。例如,若字符串中的內容為例如,若字符串中的內容為*A*BC*DEF*G*,刪除后,字符,刪除后,字符串中的內容則應當是串中的內容則應當是

28、A*BC*DEF*G。void fun (char *a,int n ,int h , int e) int i,j=0; for(i=h;in-e;i+) aj+=ai; /*第一個字母和最后一個字母之間的字符保留下來第一個字母和最后一個字母之間的字符保留下來*/ aj=0; /*在字符串最后加上結束標記在字符串最后加上結束標記*/58-3.假定輸入的字符串中只包含字母和假定輸入的字符串中只包含字母和*號。請編寫函數號。請編寫函數fun(),它的功能是:,它的功能是:除了串的前導和尾部的除了串的前導和尾部的*號之外,將字符串中其他號之外,將字符串中其他*號全部刪除。形參號全部刪除。形參h已指

29、向字已指向字符串中第一個字母,形參符串中第一個字母,形參p已經指向串的最后一個字母。在編寫函數時,不得使已經指向串的最后一個字母。在編寫函數時,不得使用用C語言的字符串函數。語言的字符串函數。void fun(char *a,char *h,char *p)char *q;int i=0;q=a;while (qh)ai+=*q;q+; /*復制第一個字母之前的所有復制第一個字母之前的所有*/while (qn)ai-k+n=0; /*第三步第三步:截掉多于的截掉多于的*,用加結束標志用加結束標志 的方式實現的方式實現*/1-3 1-3 假定輸入的字符串中只包含字母和假定輸入的字符串中只包含字母和* *號號, ,編寫函數編寫函數fun,fun,功功能是能是: :使字符串中前導使字符串中前導* *號不得多于號不得多于m m個,若多于個,若多于m m個,則個,則刪除多余的刪除多余的* *號;若少于或等于號;若少于或等于m m個,則什么也不做;串個,則什么也不做;串中間和尾部的中間和尾部的* *號不刪除。號不刪除。解題思路解題思路: :1.1.首先計算串的前導首先計算串的前導* *的個數的個數, ,計數計數; ;2.2.根據計數結果判斷對根據計數結果判斷對* *的截取的截取; ;3.3.將剩余字符將剩余字符( (從第

溫馨提示

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

最新文檔

評論

0/150

提交評論