c語言國二考試編程題答案65頁_第1頁
c語言國二考試編程題答案65頁_第2頁
c語言國二考試編程題答案65頁_第3頁
c語言國二考試編程題答案65頁_第4頁
c語言國二考試編程題答案65頁_第5頁
已閱讀5頁,還剩60頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、1m個人的成績存放在score數組中,請編寫函數fun,它的功能是:將低于平均分的人數作為函數值返回,將低于平均分的分數放在below所指的數組中。例如,當score數組中的數據為10、20、30、40、50、60、70、80、90時,函數返回的人數應該是4,below中的數據應為10、20、30、40。第一個for循環用來計算score數組中分數的總和,然后用aver/=m求出平均值,第二個循環用來找出小于平均分的元素,并放到數組below中,這里要注意j的遞增方式。#include #include #include int fun(int score,int m,int below) i

2、nt i,j=0,aver=0; for(i=0;im;i+) aver+=scorei; aver/=m; for(i=0;im;i+) if(scoreiaver) belowj+=scorei; return j;main( ) int i,n,below9; int score9=10,20,30,40,50,60,70,80,90; n=fun(score,9,below); printf(nbelow the average score are :); for(i=0;in;i+) printf(%4d,belowi);2請編寫函數fun,它的功能是:求出1到1000之內能被7或1

3、1整除、但不能同時被7和11整除的所有整數并將它們放在a所指的數組中,通過n返回這些數的個數。該題關鍵就是如何表示能被7或11整除,但不能同時被7和11整除。用(i%7=0) | (i%11=0)來表示能被7或11整除,用 !(i%7=0) & (i%11=0)來表示不能同時被7和11整除。#include #include void fun(int *a,int *n) int i,m=0;for(i=1;i1000;i+)if(i%7=0) | (i%11=0) & !(i%7=0) & (i%11=0) am=i;m+=1;*n=m; main( ) int aa1000,n,k;clr

4、scr( );fun(aa,&n);for(k=0;kn;k+)if(k+1)%10=0) printf(n);else printf(%d,aak);3請編寫函數void fun(int x,int pp,int *n),它的功能是:求出能整除x且不是偶數的各整數,并按從小到大的順序放在pp所指的數組中,這些除數的個數通過形參n返回。例如,若x中的值為30,則有4個數符合要求,它們是1,3,5,15。由于要求的數不能是偶數故編程時從1開始循環而步長為2這樣正好保正i永遠的奇數。這里也要注意存放結果的數組pp的下標變化方式。#include #include void fun(int x,in

5、t pp,int *n) int i,j=0; for( i=1;i=x;i=i+2) if(x%i=0) ppj+=i; *n=j; main( ) int x,aa1000,n,i; printf(n please enter an integer number:n); scanf(%d,&x); fun(x,aa,&n); for(i=0;in;i+) printf(%d ,aai);4請編寫一個函數void fun(char *tt,int pp),統計在字符串中a到z26個字母各自出現的次數,并依次放在pp所指數組中。例如,當輸入字符串abcdefgabcdeabc后,程序的輸出結果

6、應該是:3 3 3 2 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0本題采用的是字母的ASCII碼值與數組pp下標的對應轉換關系分別求出對應字母的個數。第一個for是給pp賦初值0,第二個for用于控制在字符串內從頭到尾移動。由于字母a的ASCII碼值為97而它的個數要放在pp0中,而a-97的值正好為0。#include #include void fun(char *tt,int pp) int i; for(i=0;i26;i+) ppi=0; for(;*tt;tt+) if(*tt=a) pp*tt-97+;main( ) char aa10

7、00; int bb26,k; clrscr( ); printf(nPlease enter a char string:); scanf(%s,aa); fun(aa,bb); for(k=0;k26;k+) printf(%d,bbk); printf(n); 5請編寫一個函數void fun(int m,int k,int xx),該函數的功能是:將大于整數m且緊靠m 的k個素數存入xx所指的數組中。例如,若輸入:17,5,則應輸出:19,23,29,31,37。本題中的for循環用來判斷一個數是否為素數,由于個數只能是k個所以用dowhile循環來控制。#include #inclu

8、de void fun(int m,int k,int xx) int i,j=0,p=m+1; do for( i=2;i=p) xxj+=p; p+; while(jk); main( ) int m,n,zz1000; printf(n please enter two integers:); scanf(%d%d,&m,&n); fun( m,n,zz); for(m=0;mn;m+) printf(%d ,zzm);6請編寫一個函數void fun(char a,char b,int n),其功能是:刪除一個字符串中指定下標的字符。其中,a指向原字符串,刪除后的字符串存放在b所指的數

9、組中,n中存放指定的下標。例如,輸入一個字符串World,然后輸入3,則調用該函數后的結果為Word。#include #include #define LEN 20void fun (char a,char b ,int n) int i,k=0; for(i=0;ai!=0;i+) if(i!=n) bk+=ai; bk=0;main( ) FILE *wf ; char strlLEN,str2LEN; int n; printf (Enter the string:n) ; gets(strl); printf (Enter the position deleted:); scanf

10、(%d,&n); fun(strl,str2,n); printf (The new string is:%s n,str2); wf=fopen(out.dat,w); fun(world,str2,3); fprintf(wf,%s,str2); fclose(wf);7請編寫一個函數int fun(int *s,int t,int *k),用來求出數組的最大元素在數組中的下標并存放在k所指的存儲單元中。例如,輸入如下整數:876 675 896 101 301 401 980 431 451 777則輸出結果為:6,980。#include #include int fun(int *s

11、,int t,int *k) int i,max; max=s0; for( i=0;imax) max=si;*k=i; main( ) int a10=876,675,896,101,301, 401,980,431,451,777,k; fun(a,10,&k); printf(%d,%dn,k,ak);8編寫函數fun,函數的功能是:根據以下公式計算s,計算結果作為函數值返回;n通過形參傳入。s=1+1/(1+2)+1/(1+2+3)+.+1/(1+2+3+4+.+n),例如:若n的值為11時,函數的值為1.833333。#include float fun(int n) int i,

12、sum=1; float s=1; for(i=2;i=n;i+) sum=sum+i; s=s+1.0/sum; return s; long chsdc(int n) int i,s; s=0; for(i=0;in。p=m!/n!(m-n)!。例如:m=12,n=8時,運行結果為495.000000。#include #include float fun( int m,int n) int i,j,k; long int t=1,s=1,p=1; float q; for(i=1;i=m;i+) t*=i; for(j=1;j=n;j+) s*=j; for(k=1;k=m-n;k+)

13、p*=k; q=(float)t/s/p; return q;main( ) printf(np=%lfn,fun(12,8);10編寫函數fun,它的功能是:利用以下所示的簡單迭代方法求方程cos(x)-x=0的一個實根。Xn+1=cos(Xn)迭代步驟如下:(1)取x1初值為0.0;(2)x0=x1,把x1的值賦給x0;(3)x1=cos(x0),求出一個新的x1; (4)若x0-x1的絕對值小于0.000001,則執行步驟(5),否則執行步驟(2);(5)所求x1就是方程cos(x)-x=0的一個實根,作為函數值返回。 程序將輸出結果Root=0.739085。 #include #in

14、clude #include float fun() float x0,x1=0; do x0=x1; x1=cos(x0); while( fabs(x0-x1)1e-006); return x1;main( ) printf(root=%fn,fun();11下列程序定義了NN的二維數組,并在主函數中自動賦值。請編寫函數fun(int aN),該函數的功能是:使數組左下半三角元素中的值全部置成0。例如:a數組中的值為該題的關鍵是如何表示出左下半角的元素,當從上往下到第i行時只有左邊的i個元素要置為0(每行總是如此)。用外層for來控制行而內嵌的for來控制每行的左邊元素,故而在內嵌for

15、中j最大只能循環到i(即表示出第i行左邊的i個元素)。197 097a=238008456 ,則返回主程序后a數組中的值應為000 。#include#include#include #define N 5 int fun(int aN) int i,j; for(i=0;iN;i+) for(j=0;j=i;j+) aij=0; main( ) int aNN,i,j; printf(* The array *n); for(i=0;iN;i+) for(j=0;jN;j+) aij=rand( )%10; printf(%4d,aij); fun(a); printf(The result

16、n); for(i=0;iN;i+) for(j=0;jN;j+) printf(%4d,aij);12下列程序定義了NN的二維數組,并在主函數中賦值。請編寫函數fun,函數的功能是:求出數組周邊元素的平均值并作為函數值返回給主函數中的s。例如:若a數組中的值為則返回主程序后s的值應為3.375。注意不能重復計算,第一個for循環求出第一列與最后一列的和,第二個for循環求出第一行與最后一行(已除去兩頭元素),要注意第二個for中起始為1,最后為N-2。#include #include #include #define N 5 double fun (int wN) int i,t=0; d

17、ouble s=0; for(i=0;iN;i+) s+=wi0+wiN-1;t+=2; for(i=1;iN-1;i+) s+=w0i+wN-1i;t+=2; s=s/t; return s;main( ) int aNN=0,1,2,7,9,1,9,7,4,5,2,3,8,3,1,4,5,6,8,2,5,9,1,4,1;int i,j;double s; printf(* The array *n); for(i=0;iN;i+) for(j=0;jN;j+) printf(%4d,aij); s=fun(a); printf(* The result *n); printf(The su

18、m is %lfn,s);13請編一個函數void fun(int ttMN,int ppN),tt指向一個M行N列的二維數組,求出二維數組每列中最小元素,并依次放入pp所指一維數組中。二維數組中的數已在主函數中賦予。該題用for(i=0;iN;i+)來控制一列一列地找,而內嵌循環for(j=0;jM;j+)用于控制同列內元素的比較。多重循環的嵌套總是最里層循環變化最快,即外層循環改變一個值,內層循環就要循環完一次,對于多重循環一定要好好去體會和理解,在多數題目中都要用到多重循環(一般為二重)。#include conio.h #include stdio.h#define M 3 #defi

19、ne N 4 void fun(int ttMN,int ppN) int i,j; for(i=0;iN;i+) pp=tt0i; for(j=0;jM;j+) if(ttjippi) ppi=ttji; main( ) int tMN=22,45,56,30,19,33,45,38,20,22,66,40; int pN,i,j,k; printf(the original data is:n); for(i=0;iM;i+) for(j=0;jN;j+) printf(%6d,tij); fun(t,p); printf(nthe result is:n); for(k=0;kN;k+)

20、 printf(%4d,pk);14請編寫函數fun,函數的功能是求出二維數組周邊元素之和,作為函數值返回。二維數組中的值在主函數中賦予。例如:若二維數組中的值為1 3 5 7 9 2 9 9 9 46 9 9 9 81 3 5 7 0 則函數值為61。該題的第一個for循環是計算矩陣的最上一行和最下一行的總和,第二個for是計算除兩頭元素以外的最左一列和最右一列的元素的和,最后sum就是周邊元素的和。#include #include #define M 4 #define N 5int fun(int aMN) int sum=0,i; for(i=0;iN;i+) sum+=a0i+aM

21、-1i; for(i=1;iM-1;i+) sum+=ai0+aiN-1; return sum; main( ) int aaMN=1,3,5,7,9,2,9,9,9,4,6,9,9,9,8,1,3,5,7,0; int i,j,y; printf(The original data is :n); for(i=0;iM;i+) for(j=0;jN;j+) printf(%6d,aaij);y=fun(aa);printf(nThe sum:%dn,y);15請編寫一個函數 unsigned fun(unsigned w),w是一個大于10的無符號整數,若w是n(n2)位的整數,則函數求出

22、w的后n-1位的數作為函數值返回。例如:w值為5923,則函數返回923;若w值為923,則函數返回23。由于unsigned型整數在0-65535這間,只要它大于10000則對10000求余即得出后面4位,否則如果大于1000則對1000求余得出后3位數,這樣一層一層往小的判斷。由于return的作用除了返回值以外,還有當執行到return時就跳出該程序,所以可以連續的用if語句。#include #include unsigned fun( unsigned w ) if(w=10000) return w%10000; if(w=1000) return w%1000; if(w=100

23、) return w%100; return w%10;main( ) unsigned x; printf( enter a integer number: ); scanf( %u,&x); if(x10) printf(data error!); else printf (the result:%un,fun(x);16請編一個函數float fun(double h),函數的功能是對變量h中的值保留2位小數,并對第三位進行四舍五入(規定h中的值為正數)。例如:若h值為8.32433,則函數返回8.32;若h值為8.32533,則函數返回8.33。h乘以1000后正好是原小數點后第三位做

24、了新數的個位數,然后再進行加5運算時。如原小數點后第三位為4及以下則加5后還是不能進一位(即四舍),如是5及以上則加5后該位就要向前進一位數(即五入)。進行加5運算后除10再賦給一個整型變量此時就只有原小數點第二位及以前各位保留在整型變量中,最后再對整型變量除100,這樣又出現了兩位小數。該題中,進行四舍五入后一定要賦給一個整型變量才能將不用部分徹底變成0。#include #include float fun(float h) long t; h=h*1000; t=(h+5)/10; return (float)t/100;main( ) float a; printf(Enter a:)

25、; scanf(%f,&a); printf(The original data is:); printf(%fnn,a); printf(The result :%6.2fn,fun(a);17請編一個函數fun(char *s),該函數的功能是把字符串中的內容逆置。例如:字符串中原有的字符串為abcdefg,則調用該函數后,串中的內容為gfedcba。該題的算法是先分別找出字符串的兩頭,然后同時逐一往中間移動,每移動一次都進行兩字符的位置對換,直到中間字符(用s+is+n-1-i來控制)。由于s+i中一個地址,因此要注意把它的內容取出再進行換位。#include #include #inc

26、lude #define N 81 fun(char *s) int i=0,t,n=strlen(s); for(;s+is+n-1-i;i+) t=*(s+i);*(s+i)=*(s+n-1-i);*(s+n-1-i)=t;main( ) char aN;printf(Enter a string:); gets(a);printf(The original string is:);puts(a);fun(a);printf(n);printf(The string after modified:);puts(a); 18.編寫程序,實現矩陣(3行3列)的轉置(即行列互換)。例如,若輸入下

27、面的矩陣: 100 200 300 則程序輸出100 400 700400 500 600 200 500 800700 800 900 300 600 900這題的關鍵在于進行行列下標轉換的算法,由矩陣的對稱性我們不難看出在進行行列互換時aj在好是與aji互換,因而只要我位讓程序走完矩陣的左上角即可(用for(i=0;i2;i+)再套for(j=i+1;j3;j+)來完成左上角的走動。#include #include int fun(int array33) int i,j,t;for(i=0;i2;i+)for(j=i+1;j3;j+)t=arrayij;arrayij=arrayji;

28、arrayji=t;main( ) int i,j;int array33=100,200,300,400,500,600,700,800,900;clrscr();for(i=0;i3;i+)for(j=0;j3;j+)printf(%7d,arrayij);printf(n);fun(array);printf(Converted array:n);for(i=0;i3;i+)for(j=0;j3;j+)printf(%7d,arrayij);printf(n);19.編寫函數fun,該函數的功能是:從字符串中刪除指定的字符。同一字母的大、小寫按不同字符處理。例如:若程序執行時輸入字符串為

29、:turbo c and borland c+ 從鍵盤上輸入字符n,則輸出后變為:turbo c ad borlad c+ 如果輸入的字符在字符串中不存在,則字符串照原樣輸出。注:該題的算法是讓i控制一個一個字符往后走,在移動過程中如果si不是要刪的字符,則將其按順序放到新串中(新串亦是用s來做,只是用k來控制新串的下標,由于要刪除一些元素,因此新串的下標總是比原下標i要慢。因而可用此法即同一字符串變量的方法。#include #include int fun(char s,int c)int i,k=0;for(i=0;si;i+)if(si!=c) sk+=si; sk=0;main( )

30、 static char str=turbo c and borland c+;char ch;clrscr();printf( :%sn,str);printf( :);scanf(%c,&ch);fun(str,ch);printf(str=%sn,str);20.編寫函數int fun(int lim,int aaMAX),該函數的功能是求出小于或等于lim的所有素數并放在aa數組中,該函數返回所求出的素數的個數。注:循環for(i=2;i=k)用于判斷在上一個for()循環中i能否走到k,如果能則表示在2到k-1的數都不能整除k,即k為素數。#include #include #def

31、ine MAX 100int fun( int lim, int aaMAX) int i,j=0,k; for( k=2; klim; k+) for( i=2; i=k) aaj+=k; return j;main( ) int limit,i,sum;int aaMAX; printf(n input a integer number:); scanf( %d,&limit); sum=fun(limit,aa); for(i=0; isum; i+) if(i%10=0&i!=0) printf(n); printf(%5d, aai);21.編寫函數fun,對長度為7個字符的字符串,

32、除首、尾字符外,將其余5個字符按ASCII碼降序排列。例如,若原來的字符串為CEAedca,則排序后輸出為CedcEAa。/*該題采用的排序法是選擇法進行降序排序,算法是用外for()循環從字符串的前端往后端走動,每走動一個字符都用內嵌的for()循環在該字符后找出最小的字符與該字符進行換位。直到外for()循環走到最后一個字符。此外,此題還要注意把首尾字符除開,即在最外層for()循環中從1開始,只到num-2即可。*/#include #include #include int fun(char *s,int num) int i,j,t; for(i=1;inum-2;i+) for(j

33、=i+1;jnum-1;j+) if(sisj) t=si;si=sj;sj=t;main( ) char s10; printf(輸入7個字符的字符串:); gets(s); fun(s,7); printf(n%s,s);22.N名學生的成績已在主函數中放入一個帶頭節點的鏈表結構中,h指向鏈表的頭節點。請編寫函數fun,它的功能是:找出學生的最高分,由函數值返回。#include #include #define N 8struct slist double s; struct slist *next;typedef struct slist STREC;double fun( STREC

34、 *h ) double max ; int i ; max=h-s; for(i=0 ; ismax) max=(h+i)-s; return max;STREC * creat( double *s) STREC *h,*p,*q; int i=0; h=p=(STREC*)malloc(sizeof(STREC);p-s=0; while(is=si; i+; p-next=q; p=q; p-next=0; return h;outlist( STREC *h) STREC *p; p=h-next; printf(head); do printf(-%2.0f,p-s); p=p-n

35、ext; while(p!=0); printf(nn);main( ) double sN=85,76,69,85,91,72,64,87, max; STREC *h; h=creat(s); outlist(h); max=fun( h ); printf(max=%6.1fn,max);23.請編寫函數fun,該函數的功能是:判斷字符串是否為回文?若是則函數返回1,主函數中輸出YES,否則返回0,主函數中輸出N0。回文是指順讀和倒讀都一樣的字符串。例如,字符串LEVEL是回文,而字符串123312就不是回文。#include #define N 80int fun(char *str)

36、int i,n=0,fg=1; char *p=str; while (*p) n+; p+; for (i=0;in/2;i+) if (stri=strn-1-i); else fg=0;break; return fg;main( ) char sN ; printf(Enter a string: ) ; gets(s) ; printf(nn) ; puts(s) ; if(fun(s) printf( YESn) ; else printf( NOn) ;24.請編寫一個函數fun,它的功能是:將一個數字字符串轉換為一個整數(不得調用C語言提供的將字符串轉換為整數的函數)。例如,若

37、輸入字符串“-1234”,則函數把它轉換為整數值-1234。#include #include long fun ( char *p) long s=0,t; int i=0,j,n=strlen(p),k,s1; if(p0=-) i+; for(j=i;j=n-1;j+) t=pj-0; s1=10; for (k=j;kn-1;k+) t*=s1; s+=t; if(p0=-) return -s; else return s;main( ) char s6;long n; printf(Enter a string:n) ; gets(s); n=fun(s); printf(%ldn

38、,n);25.請編寫一個函數fun,它的功能是:比較兩個字符串的長度,(不得調用C語言提供的求字符串長度的函數),函數返回較長的字符串。若兩個字符串長度相同,則返回第一個字符串。例如,輸入:beijing shanghai(為回車鍵),函數將返回shanghai。#include char *fun ( char *s, char *t) char *ss=s, *tt=t; while(*ss)&(*tt) ss+; tt+; if(*tt) return(t); else return(s); main( ) char a20,b10,*p,*q; int i; printf(Input

39、1th string:) ; gets( a); printf(Input 2th string:) ; gets( b); printf(%sn,fun (a, b ); 26.請編寫一個函數fun,它的功能是:根據以下公式求的值(要求滿足精度0.0005,即某項小于0.0005時停止迭代):X/2=1+1/3+12/35+123/357+1234/3579+.+123.n/357(2n+1)程序運行后,如果輸入精度0.0005,則程序輸出為3.14。#include #include double fun ( double eps) double s; float n,t,pi; t=1;

40、pi=0;n=1.0;s=1.0; while(fabs(s)=eps) pi+=s; t=n/(2*n+1); s*=t; n+; pi=pi*2; return pi;main( ) double x; printf(Input eps:) ; scanf(%lf,&x); printf(neps=%lf, PI=%lfn, x, fun(x); 27.請編寫一個函數fun,它的功能是:求出1到m之內(含m)能被7或11整除的所有整數放在數組a中,通過n返回這些數的個數。例如,若傳送給m的值為50,則程序輸出:7 11 14 21 22 28 33 35 42 44 49 #include

41、 #include #define M 100void fun ( int m, int *a , int *n ) int i,k; *n=0; for(i=1,k=0; i=m; i+) if(i%7=0)|(i%11=0) ak+=i; (*n)+; main( ) int aaM, n, k; fun ( 50, aa, &n ); for ( k=0; kn; k+ ) if(k+1)%20=0) printf(n); else printf( %4d, aak ); printf(n) ;28.請編寫一個函數fun,它的功能是:找出一維整型數組元素中最大的值和它所在的下標,最大的值

42、和它所在的下標通過形參傳回。數組元素中的值已在主函數中賦予。主函數中x是數組名,n是x中的數據個數,max存放最大值,index存放最大值所在元素的下標。#include #include void fun(int a, int n , int *max, int *d ) int i; *max=a0; *d=0; for(i=0;i*max) *max=ai; *d=i;main( )int i, x20, max , index, n=10; for (i=0;in;i+) xi=rand()%50; printf(%4d, xi) ; printf(n); fun( x, n , &m

43、ax, &index); printf(Max =%5d , Index =%4dn,max, index ); 29.請編寫一個函數fun,它的功能是:將ss所指字符串中所有下標為奇數位置上的字母轉換為大寫(若該位置上不是字母,則不轉換)。例如,若輸入abc4Efg,則應輸出aBc4EFg。#include#include#includevoid fun(char *ss) int i; for(i=0;ssi!=0;i+) if(i%2=1&ssi=a&ssi=z) ssi=ssi-32; main( ) FILE *wf; char tt81,s10=abc4Efg; printf(nPlease enter an string within 80 characters:n); gets(tt); printf(nnAfter changing, the stringn%s,tt); fun(tt); printf(nbecomesn%sn,tt); wf=fopen(out.dat,w); fun(s); fprintf(wf,%s,s); fclose(wf);30.請編寫一個函數fun,它的功能是:求出個2M整型二維數組中最大元素的值,并將此值返回調用函數。#define M 4#include fun (int aM ) in

溫馨提示

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

評論

0/150

提交評論