國家計算機二級c語言歷年上機真題及基礎(chǔ)知識[1]new_第1頁
國家計算機二級c語言歷年上機真題及基礎(chǔ)知識[1]new_第2頁
國家計算機二級c語言歷年上機真題及基礎(chǔ)知識[1]new_第3頁
國家計算機二級c語言歷年上機真題及基礎(chǔ)知識[1]new_第4頁
國家計算機二級c語言歷年上機真題及基礎(chǔ)知識[1]new_第5頁
已閱讀5頁,還剩32頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第 37 頁 共 37 頁第一套1.填空題請補充main函數(shù),該函數(shù)的功能是:從鍵盤輸入一個字符串并保存在字符str1中,把字符串str1中下標為偶數(shù)的字符保存在字符串str2中并輸出。例如,當str1=“cdefghij”,則str2=“cegi”。注意:部分源程序給出如下。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的橫線上填入所編寫的若干表達式或語句。試題程序:#include#include#define LEN 80main() char str1LEN,str2LEN; char *p1=str1,*p2=str2; int i=0,j=0; clrscr();

2、 printf(Enter the string:n); scanf(【1】); printf(*the origial string*n); while(*(p1+j) printf(【2】,*(p1+j);j+; for(i=0;ij;i+=2)*p2+=*(str1+i); *p2=0; printf(nThe new string is:%sn,【3】);答案及評析:【1】%s,str1【2】%c【3】str2【解析】填空1:本題考查對標準輸入函數(shù)scanf()的調(diào)用格式,當輸入字符串時,格式控制字符串為%s,題目要求輸入的字符串保存在str1中,所以地址表列應為字符串的首地址,即為s

3、tr1。填空2:本題考查對標準輸出函數(shù)printf()的調(diào)用格式,當輸出為字符型變量時,格式控制字符串為%c。填空3:題目要求將str1中下標為偶數(shù)的字符保存在字符串str2中并輸出,所以printf()函數(shù)的輸出表列是str22. 改錯題在主函數(shù)中從鍵盤輸入若干個數(shù)放入數(shù)組中,用0結(jié)束輸入并放在最后一個元素中。下列給定程序中,函數(shù)fun()的功能是計算數(shù)組元素中值為負數(shù)的平均值(不包括0)。例如:數(shù)組中元素的值依次為43,-47,-21,53,-8,12,0,則程序的運行結(jié)果為-25.333333。請改正程序中的錯誤,使它能得到正確結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改

4、程序的結(jié)構(gòu)。試題程序:#include #include double fun(int x ) double sum=0.0; int c=0, i=0;/*found*/ while(xi=0) if(xi0) sum=sum+xi; c+; i+; /*found*/ sum=sumc; return sum;main() int x1000; int i=0; clrscr(); printf(nPlease enter some data(end with 0) :); do scanf(%d,&xi); while(xi+!=0); printf(%fn,fun(x);答案及評析:(

5、1)錯誤:while(xi=0) 正確:while(xi!=0)(2)錯誤:sum=sumc;正確:sum=sum/c;【解析】錯誤1:此處考查的是對循環(huán)條件的理解,當被判斷的數(shù)組元素為0時,說明這是數(shù)組的最后一個元素,此時要跳出循環(huán)。錯誤2:C語言中的除法運算符是/,而不是。3. 編程題請編寫一個函數(shù)int fun(int *s,int t,int *k),用來求出數(shù)組的最小元素在數(shù)組中的下標并存放在k所指的存儲單元中。例如,輸入如下整數(shù):234 345 753 134 436 458 100 321 135 760則輸出結(jié)果為6,100。注意:部分源程序給出如下。請勿改動主函數(shù)main和其

6、他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。試題程序:#include #include int fun(int *s,int t,int *k)main() int a10=234,345,753,134,436,458,100,321,135,760,k; clrscr(); fun(a, 10, &k); printf(%d, %dn , k, ak);答案及評析:int fun(int *s,int t,int *k) int i; *k=0; /*k所指的數(shù)是數(shù)組的下標值*/ for(i=0;isi) *k=i; /*找到數(shù)組的最小元素,把該元素的下標賦給k所指

7、的數(shù)*/ return s*k; /*返回數(shù)組的最小元素*/【解析】本題中直接使用指針變量k,但在使用時要注意對k的指針運算,此外,一開始應讓*k的值為數(shù)組中的某一下標值,即*k=0。第二套1.填空題請補充函數(shù)fun(),該函數(shù)的功能是:從a到z統(tǒng)計一個字符串中所有字母字符各自出現(xiàn)的次數(shù),結(jié)果保存在數(shù)組alf中。注意:不區(qū)分大小寫,不能使用字符串庫函數(shù)。例如,輸入:“abc+5*c”,結(jié)果為:a=2,b=1,c=2。注意:部分源程序給出如下。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的橫線上填入所編寫的若干表達式或語句。試題程序:#include#include#define

8、 N 100void fun(char *tt,int alf) int i; char *p=tt; for(i=0;i=A&*p=a&*p=z)alf*p-a+;【3】; main() char strN; char a=a; int alf26,k; clrscr(); printf(nPlease enter a char string:); scanf(%s,str); printf(n*The original string*n); puts(str); fun(str,alf); printf(n*The number of letter*n); for(k=0;k26;k+)

9、if(k%5=0)printf(n);printf(%c=%d ,a+k,alfk); printf(n);答案及評析:【1】alfi=0【2】*p+=32【3】p+【解析】填空1:數(shù)組alf26用來存放字母字符出現(xiàn)的次數(shù),在使用之前需要清零。填空2:題目要求不區(qū)分大小寫,所以可以先將所有的大寫字母都轉(zhuǎn)換為對應的小寫字母,然后一并記錄出現(xiàn)的次數(shù)。將大寫字母轉(zhuǎn)換為對應的小寫字母,只需將ASCII碼加上32就可以了。填空3:指針p指向字符串tt,通過p自加1來移動指針,訪問字符串中的所有字符。2. 改錯題下列給定程序中函數(shù)fun()的功能是:從低位開始取出長整型變量s中奇數(shù)位上的數(shù),依次構(gòu)成一個新

10、數(shù)放在t中。例如,當s中的數(shù)為4576235時,t中的數(shù)為4725。請改正程序中的錯誤,使它能得到正確結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:#include#include /*found*/int fun(long s,long *t) long s1=10; *t=s%10; while(s0) /*found*/ s=s%100; *t=s%10*s1+*t; s1=s1*10; main() long s, t; clrscr(); printf(nPlease enter s: ); scanf(%ld,&s); fun(s,&t); pr

11、intf(The result is: %ldn ,t);答案及評析:(1)錯誤:int fun(long s,long *t)正確:void fun(long s,long *t)(2)錯誤:s=s%100;正確:s=s/100;【解析】錯誤1:函數(shù)由指針來完成參數(shù)的傳遞,所以沒有返回值,應定義函數(shù)的類型為void。錯誤2:此處要注意特殊運算符號%-取余和/-整除的區(qū)別。將一個數(shù)整除100則可得到由其百位數(shù)以上的數(shù)組成的新數(shù)字,將一個數(shù)整除100取余則可得到由十位數(shù)和個位數(shù)組成的新數(shù)。3. 編程題請編寫一個函數(shù)fun(),它的功能是:求出一個4M整型二維數(shù)組中最小元素的值,并將此值返回調(diào)用函

12、數(shù)。注意:部分源程序給出如下。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。試題程序:#define M 4#include fun (int aM)main() int arr4M=11,3,9,35,42,-4,24,32,6,48,-32,7,23,34,12,-7; printf(min=%dn,fun(arr);答案及評析:fun (int aM) int i,j,min=a00; for(i=0;i4;i+) for(j=0;jaij) min=aij; /*求出二維數(shù)組的最小值*/ return min;【解析】此類求最大值或最小值的

13、C語言問題,我們可以采用逐個比較的方式。要求數(shù)組中的所有元素走動一遍,并從中找出最大、最小值,要注意一開始應使min存放數(shù)組中的第一個元素的值。可按逐行查找也可按逐列查找的方式,本題采用的是逐行查找的方式。即行下標在外層循環(huán),列下標在內(nèi)層循環(huán),因為在循環(huán)的嵌套中越在內(nèi)層循環(huán),循環(huán)變化就越快。第三套1.填空題請補充函數(shù)fun(),該函數(shù)的功能是求一維數(shù)組xN的平均值,并對所得結(jié)果進行四舍五入(保留兩位小數(shù))。例如:當x10=15.6,19.9,16.7,15.2,18.3,12.1,15.5,11.0,10.0,16.0,結(jié)果為:avg=15.030000。注意:部分源程序給出如下。請勿改動主函

14、數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的橫線上填入所編寫的若干表達式或語句。試題程序:#include#includedouble fun(double x10) int i; long t; double avg=0.0; double sum=0.0; for(i=0;i10;i+)【1】; avg=sum/10; avg=【2】; t=【3】; avg=(double)t/100; return avg;main() double avg,x10=15.6,19.9,16.7,15.2,18.3,12.1,15.5,11.0,10.0,16.0; int i; clrscr()

15、; printf(nThe original data is :n); for(i=0;i10;i+)printf(%6.1f,xi); printf(nn); avg=fun(x); printf(average=%fnn,avg);答案及評析:【1】sum+=xi【2】avg*1000【3】(avg+5)/10【解析】填空1:通過for循環(huán)求出10個數(shù)的累加和,存于變量sum中。填空2:為了實現(xiàn)四舍五入保留兩位小數(shù)的功能,應將平均值先擴大1000倍。填空3:將平均值加上5,再除以10,實現(xiàn)四舍五入的功能。2. 改錯題下列給定程序中,函數(shù)fun()的功能是:先從鍵盤上輸入一個3行3列的矩陣的

16、各個元素的值,然后輸出主對角線元素之積。請改正函數(shù)fun()中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:#include int fun() int a33,mul; int i,j; mul=1; for (i=0;i3;i+) /*found*/ for (i=0;j3;j+) scanf(%d,&aij); for(i=0;i3;i+)/*found*/ mul=mul*aij; printf(Mul=%dn,mul);main() fun();答案及評析:(1)錯誤:for (i=0;j3;j+)正確:for (j=0;j

17、3;j+)(2)錯誤:mul=mul*aij;正確:mul=mul*aii;【解析】錯誤1:循環(huán)結(jié)構(gòu)中,要給變量j賦初值0。錯誤2:主對角元素的行號和列號相等,所以參加乘法的是aii,而不是aij。3. 編程題學生的記錄由學號和成績組成,N名學生的數(shù)據(jù)已在主函數(shù)中放入結(jié)構(gòu)體數(shù)組s中,請編寫函數(shù)fun(),它的功能是:把分數(shù)最低的學生數(shù)據(jù)放在h所指的數(shù)組中。注意:分數(shù)低的學生可能不只一個,函數(shù)返回分數(shù)最低學生的人數(shù)。注意:部分源程序給出如下。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。試題程序:#include #define N 16typede

18、f struct char num10; int s ;STREC;int fun (STREC *a, STREC *b)main () STREC sN=GA005,82,GA003,75,GA002,85,GA004,78, GA001,95,GA007,62,GA008,60,GA006,85, GA015,83,GA013,94,GA012,78,GA014,97, GA011,60,GA017,65,GA018,60,GA016,74; STREC hN; int i, n; FILE *out; n=fun(s,h); printf(The %d lowest score :n,

19、n); for (i=0; in; i+) printf(%s %4dn,hi.num,hi.s); /*輸出最低分學生的學號和成績*/ printf(n); out=fopen(out19.dat, w); fprintf(out, %dn,n); for(i=0; in; i+); fprintf(out, %4dn ,hi.s); fclose(out);答案及評析:int fun (STREC *a, STREC *b) int i,j=0,min=a0.s; for(i=0;iai.s) min=ai.s; /*找出最小值*/ for(i=0;iN;i+) if(min=ai.s)

20、bj+=ai; /*找出成績與min相等的學生的記錄,存入結(jié)構(gòu)體b中*/ return j; /*返回最低成績的學生人數(shù)*/【解析】該程序使用循環(huán)嵌套,第1個for語句的作用是找出最小值。第2個循環(huán)的作用是找出與min相等的成績,也即最低成績的學生記錄,并存入b中。第四套1.填空題請補充函數(shù)fun(),該函數(shù)的功能是:分類統(tǒng)計一個字符串中元音字母和其他字符的個數(shù)(不區(qū)分大小寫)。例如,輸入aeiouAOUpqrt,結(jié)果為A:2 E:1 I:1 O:2 U:2 other:4。注意:部分源程序給出如下。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的橫線上填入所編寫的若干表達式

21、或語句。試題程序:#include#include#define N 100void fun(char *str,int bb) char *p=str; int i=0; for(i=0;i6;i+)【1】; while(*p) switch(*p)case A:case a:bb0+;break;case E:case e:bb1+;break;case I:case i:bb2+;break;case O:case o:bb3+;break;case U:case u:bb4+;break;default:【2】;【3】 main() char strN,ss6=AEIOU; int i

22、; int bb6; clrscr(); printf(Input a string: n); gets(str); printf(the string is: n); puts(str); fun(str,bb); for(i=0;i5;i+)printf(n%c:%d,ssi,bbi); printf(nother:%d,bbi);答案及評析:【1】bbi=0【2】bb5+【3】p+;【解析】填空1:數(shù)組bb6 用來存放5個元音字母和其他字符的個數(shù),在使用之前需要清零。填空2:數(shù)組元素bb5 用來存放其他字符的個數(shù),當指針p所指的字符不是元音字母時,則認為是其他字符,bb5加1。填空3:指

23、針p指向字符串str,通過p自加1來移動指針,訪問字符串中的所有字符。2. 改錯題下列給定的程序中,函數(shù)fun()的功能是:計算并輸出k以內(nèi)最大的6個能被7或11整除的自然數(shù)之和。K的值由主函數(shù)傳入,若k的值為500,則函數(shù)的值為2925。請改正程序中的錯誤,使它能得到正確結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:#include#include int fun(int k) int m=0,mc=0, j;/*found*/ while(k=2)&(mc=2)&(mc=2)&(mc6)(2)錯誤:if(k%7=0)|(k%11=0)正確:if(k%7=

24、0)|(k%11= =0)(3)錯誤:m=k;正確:m=m+k;【解析】錯誤1:C語言規(guī)定while語句后的表達式兩側(cè)必須要有圓括號。錯誤2:if語句的判斷條件應用關(guān)系運算符,而不是賦值運算符。錯誤3:根據(jù)題意,將滿足條件的數(shù)求累加和。3. 編程題請編寫一個函數(shù)fun(),它的功能是:將ss所指字符串中所有下標為偶數(shù)位置的字母轉(zhuǎn)換為小寫(若該位置上不是字母,則不轉(zhuǎn)換)。例如,若輸入ABC4efG,則應輸出aBc4efg。注意:部分源程序給出如下。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。試題程序:#include#include#include

25、void fun(char *ss)main() char tt81; clrscr(); printf(nPlease enter an string within 80 characters:n); gets(tt); printf(nnAfter changing, the stringn %s,tt); fun(tt); printf(nbecomesn %sn,tt);答案及評析:void fun(char *ss) int i; for(i=0;ssi!=0;i+) /*將ss所指字符串中所有下標為偶數(shù)位置的字母轉(zhuǎn)換為小寫*/ if(i%2=0&ssi=A&ssi=Z) ssi=s

26、si+32;【解析】從C語言的學習中我們知道,只要將小寫字母減去32則轉(zhuǎn)成大寫字母,將大寫字母加上32則轉(zhuǎn)成小寫字母。該程序是用if語句實現(xiàn)該功能轉(zhuǎn)化的。第五套1.填空題從鍵盤輸入一組無符號整數(shù)并保存在數(shù)組xxN中,以整數(shù)結(jié)束輸入,要求這些數(shù)的最大位數(shù)不超過位,其元素的個數(shù)通過變量num傳入函數(shù)fun()。請補充函數(shù)fun(),該函數(shù)的功能是:從數(shù)組xx中找出個位和十位的數(shù)字之和大于的所有無符號整數(shù),結(jié)果保存在數(shù)組yy中,其個數(shù)由函數(shù)fun()返回。例如:當xx8=123,11,25,222,42,333,14,5451時,bb4=25,42,333,5451。注意:部分源程序給出如下。請勿改

27、動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的橫線上填入所編寫的若干表達式或語句。試題程序:#include #define N 1000int fun(int xx,int bb,int num) int i, n=0; int g, s; for(i=0;i5)【2】; return【3】;main() int xxN; int yyN; int num=0,n=0,i=0; printf(Input number :n); do scanf(%u,&xxnum); while(xxnum+!=0); n=fun(xx,yy,num); printf(nyy=); for(i=0

28、;in;i+)printf(%u ,yyi);答案及評析:【1】xxi%10【2】bbn+=xxi【3】n【解析】填空1:將一個整數(shù)對10取余,則得到這個整數(shù)的個位數(shù),將一個整數(shù)除以10再對10取余,則得到這個整數(shù)的十位數(shù)。由程序可以看出,變量s保存了整數(shù)的十位數(shù),所以應該將整數(shù)的個位數(shù)保存于變量g中。填空2:當整數(shù)的個位與十位的數(shù)字之和大于5時,則將這個整數(shù)存于數(shù)組bb中,同時,變量n記錄了滿足條件的無符號整數(shù)的個數(shù)。填空3:題目要求滿足條件的無符號整數(shù)的個數(shù)由fun函數(shù)返回,所以函數(shù)返回n。2. 改錯題下列給定程序中,函數(shù)fun()的功能是:在字符串str中找出ASC碼值最小的字符,將其放

29、在第一個位置上,并將該字符前的原字符向后順序移動。例如,調(diào)用fun()函數(shù)之前給字符串輸入fagAgBDh,調(diào)用后字符串中的內(nèi)容為AfaggBDh。請改正程序中的錯誤,使它能得到正確結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:#include/*found*/void fun(char p) char min, *q; int i=0; min=pi; while (pi!=0) if (minpi) /*found*/ p=q+i; min=pi; i+; while(qp) *q=*(q-1); q-; p0=min;main() char str80

30、; printf(Enter a string: ); gets(str); printf(nThe original string: ); puts(str); fun(str); printf(nThe string after moving: ); puts(str); printf(nn);答案及評析:(1)錯誤:void fun(char p)正確:void fun(char *p)(2)錯誤:p=q+i;正確:q=p+i;【解析】錯誤:由于本題中函數(shù)的功能是對字符串進行處理,而不是對單個字符進行處理,因此,函數(shù)的參數(shù)應為字符串指針。錯誤2:使指針q指向ASCII碼最小的字符本題解答

31、需要3個步驟:(1)找到字符串中ASCII碼值最小的字符,并保存。(2)將該字符復制,并將該字符前面的字符串順次后移。(3)將ASCII碼值最小的字符賦給字符串的第1個字符。找到ASCII碼值最小的字符可以通過定義一個字符min,該字符初始時等于字符串的第1個字符,若字符串的下一個字符小于min,則將下一個字符賦給min,如此循環(huán)到字符尾,即可得到ASCII碼值最小的字符,同時令指針q指向最小字符。之后對最小字符前面的子串順次后移,可采用while語句實現(xiàn)。此題需要熟練掌握和靈活應用C語言的字符與整型變量的關(guān)系以及字符串操作。3. 編程題N名學生的成績已在主函數(shù)中放入一個帶頭節(jié)點的鏈表結(jié)構(gòu)中,

32、h指向鏈表的頭節(jié)點。請編寫函數(shù)fun(),它的功能是:找出學生的最低分,由函數(shù)值返回。注意:部分源程序給出如下。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。試題程序:#include #include #define N 8struct slist double s; struct slist *next;typedef struct slist STREC;double fun(STREC *h)STREC * creat (double *s) STREC *h,*p,*q; int i=0; h=p=(STREC*)malloc(sizeo

33、f(STREC); p-s=0; while(is=si; i+; p-next=q; p=q; p-next=NULL; return h; /*返回鏈表的首地址*/outlist(STREC *h) STREC *p; p=h; printf(head); do printf(-%2.0f ,p-s);p=p-next; /*輸出各分數(shù)*/ while(p!=NULL); printf(nn );main() double sN=56,89,76,95,91,68,75,85, min; STREC *h; h=creat(s); outlist(h); min=fun(h); print

34、f(min=%6.1fn ,min);答案及評析:double fun(STREC *h) double min=h-s; while(h!=NULL) /*通過循環(huán)找到最低分數(shù)*/ if(minh-s) min=h-s; h=h-next; return min;【解析】在本題中,h為一個指向結(jié)構(gòu)體的指針變量,若要引用它所指向的結(jié)構(gòu)體中的某一成員時,要用指向運算符-。由于是鏈表,所以要使h逐一往后移動,使用的是h=h-next。第六套1.填空題請補充main函數(shù),該函數(shù)的功能是:從一個字符串中截取前面若干個給定長度的子字符串。其中,str1指向原字符串,截取后的字符存放在str2所指的字符數(shù)

35、組中,n中存放需截取的字符個數(shù)。例如:當str1=“cdefghij”,然后輸入4,則str2=“cdef”。注意:部分源程序給出如下。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的橫線上填入所編寫的若干表達式或語句。試題程序:#include #include#define LEN 80main() char str1LEN,str2LEN; int n,i; clrscr(); printf(Enter the string:n); gets(str1); printf(Enter the position of the string deleted:); scanf(

36、【1】); for(i=0;in;i+)【2】 str2i=0; printf(The new string is:%sn,【3】);答案及評析:【1】%d,&n【2】str2i=str1i;【3】str2【解析】填空1:本題考查對標準輸入函數(shù)scanf()的調(diào)用格式,由后面的程序可以知道,變量n保存了要截取的字符數(shù),注意在n前面不要忘了取址符 &。填空2:截取前n個字符,就是將字符串str1的前n個字符依次賦給字符串str2的前n個字符。填空3:本題考查對標準輸出函數(shù)printf()的調(diào)用格式,根據(jù)題意,應輸出截取后的字符串,即字符串str2。2. 改錯題下列給定程序中,函數(shù)fun()的功能

37、是:依次取出字符串中所有的字母,形成新的字符串,并取代原字符串。請改正程序中的錯誤,使它能得到正確結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:#include #include void fun(char *s) int i,j; for(i=0,j=0; si!= 0; i+)/*found*/ if(si= A&si= a&si= A&si= a&si= A&si= a&si= z)(2)錯誤:sj= 0;正確:sj=0;【解析】錯誤1:字母包括小寫字母和大寫字母,這里是或的關(guān)系,所以用|運算符。錯誤2:字符串的結(jié)束標志符為字符,而不是字符串。3. 編

38、程題下列程序定義了NN的二維數(shù)組,并在主函數(shù)中自動賦值。請編寫函數(shù)fun(int aN),該函數(shù)的功能是:使數(shù)組右上半三角元素中的值全部置成0。例如a數(shù)組中的值為a=4 5 61 7 93 2 6,則返回主程序后a數(shù)組中的值應為0 0 01 0 03 2 0注意:部分源程序給出如下。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。試題程序:#include #include #include #define N 5int fun (int aN)main() int aNN,i,j; clrscr(); printf(*The array*n); f

39、or(i=0;iN;i+) /*產(chǎn)生一個隨機的5*5矩陣*/ for(j=0;jN;j+) aij=rand()%10; printf(%4d, aij); printf(n); fun(a); printf(THE RESULTn); for(i=0;iN;i+) for(j=0;jN;j+) printf(%4d,aij); printf(n); 答案及評析:int fun (int aN) int i,j; for(i=0;iN;i+) for(j=i;jN;j+) aij=0; /*將數(shù)組右上半三角元素中的值全部置成0*/【解析】本題旨在考查控制數(shù)組中右上半三角元素的算法,也就是兩個千

40、篇一律的循環(huán)語句,希望學習者能夠掌握消化。第七套1.填空題str是全部由小寫字母字符和空格字符組成的字符串,由num傳入字符串的長度。請補充函數(shù)fun(),該函數(shù)的功能是:統(tǒng)計字符串str中的單詞個數(shù),結(jié)果由變量num傳回。每個單詞之間都由空格隔開,并且字符串str開始不存在空格。例如:str=“how do you do”,結(jié)果為:num=4。注意:部分源程序給出如下。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的橫線上填入所編寫的若干表達式或語句。試題程序:#include#define N 80void fun(char *s,int *num) int i,n=0;

41、 for(i=0;【1】;i+) if(si=a&si=z&(si+1= |si+1=0)【2】; 【3】;main() char strN; int num=0; printf(Enter a string:n); gets(str); while(strnum)num+; fun(str,&num); printf(The number of word is :%dnn,num);答案及評析:【1】i*num【2】n+【3】*num=n【解析】填空1:*num傳入字符串的長度,所以for循環(huán)中變量i的變化范圍是從0到*num-1。填空2:如果當前判斷的字符是小寫字母,并且它的下一個字符是空

42、格或者是字符串結(jié)束標記符,則表示當前字符是一個單詞的最后一個字母,統(tǒng)計單詞數(shù)的變量n要加上1。填空3:題目要求結(jié)果由變量num傳回,所以要將n的值賦給指針num所指的單元。2. 改錯題下列給定程序中,fun()函數(shù)的功能是:根據(jù)形參m,計算下列公式的值。t=1-1/21/3-1/4(-1)(m+1)/m例如,若輸入5,則應輸出0.783333。請改正程序中的錯誤,使它能得到正確結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:#include #include /*found*/int fun(int m) double t=1.0,j=1.0; int i;/*found*/ for(i=1;im;i+) j=-1*j;t+=j/i; return t;main() int m; clrscr(); printf(nPlease enter 1 integer number: ); scanf(%d,&m); printf(nThe result is %lfn, fun(m);答案及評析:(1)錯誤:int fun(int m)正確:double fun(int m)(2)錯誤:for(i=1;im;i+)正確:for(i=2;i=m;i+)【解析】錯誤:函數(shù)的

溫馨提示

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

評論

0/150

提交評論