全國計算機二級C語言上機答案_第1頁
全國計算機二級C語言上機答案_第2頁
全國計算機二級C語言上機答案_第3頁
全國計算機二級C語言上機答案_第4頁
已閱讀5頁,還剩102頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

L3 5 7…+ 〃+1)一22426 ()L3 5 7…+ 〃+1)一22426 ()")2直到Mx”)]<10-3,并且把計算結果作為函數(shù)值返回。例如,若形參e的值為le—3,則函數(shù)返回值為0.551690?!緟⒖即鸢浮?1)3.0或(double)3(2)> (3)(t+1)【解題思路】填空1:變量x定義為double類型,而運算符"/"后面是整型數(shù),所以給x賦值時,需要注意數(shù)據(jù)類型,此處不能將3.0寫成3。填空2:while循環(huán)語句的循環(huán)條件,根據(jù)題意確定循環(huán)變量應大于le-3,因此此處應填"〉Ha填空3:表達式的通項是(2]下列給定程序中函數(shù)fun的功能是:求出如下分數(shù)序列的前n項之和。和值通過函數(shù)值返回。23581321T,2,3,5,T,i3,例如,若n=5,則應輸出8.391667?!緟⒖即鸢浮?1)doublefun(intn)(2)s=s+(double)a/b;【解題思路】(1)由語句"retum(s)"和變量s定義為double數(shù)據(jù)類型可知,該函數(shù)定義時其類型標識符為double類型。(2)注意數(shù)據(jù)類型double的書寫格式。請編寫函數(shù)ftm,其功能是:找出2xM整型二維數(shù)組中最大元素的值,并將此值返回調(diào)用函數(shù)?!緟⒖即鸢浮縤ntfun(inta[][M])(intij,max=a[0][0];fbr(i=0;i<2;i-H-)fbr(j=Oa<M;j-H-)if(max<a[i][j])max=a[i][j];returnmax;)【解題思路】此類求最大值或最小值的問題,我們可以采用逐個比較的方式,要求對數(shù)組中所有元素遍歷一遍,并且從中找出數(shù)組最大值或最小值。首先定義變量max存放數(shù)組中的第一個元素的值,然后利用for循環(huán)逐個找出數(shù)組中的元素,并與max比較,如果元素值大于max,則將該值賦

于max,循環(huán)結后max的值即為數(shù)組最大值,最后將該值返回。下列給定程序中,函數(shù)fun的功能是:計算如下公式前n項的和并作為函數(shù)值返回。1x33x55x7(2xn-l)x(2xn+l)=—r-+——+——+…+ ——; 22 4- 62 (2xn)例如,當形參n的值為10時,函數(shù)返回值為9.612558?!緟⒖即鸢浮?1)0 (2)n(3)(t*t)【解題思路】填空1:程序開始定義了變量s,但沒有對其進行初始化,根據(jù)公式及后面的程序可知變量s用來存儲公式的前n項和,因此該變量應初始化為0。填空2:通過for循環(huán)語句將表達式各項進行累加,結果存于變量s中,循環(huán)變量i的取值范圍為1?n。填空3:根據(jù)題目要求確定表達式通項,前而已定義t=2.0]5、下列給定程序中函數(shù)ftm的功能是:統(tǒng)計substr所指的子符串在str所指的字符串中出現(xiàn)的次數(shù)。例如,若字符串為aaasIkaaas,子字符串為as,則應輸出2。【參考答案】(l)fbr(i=0;str[i];i++)(2)if(substr[k+l]==-O')【解題思路】我們先看循環(huán)條件for(i=0,str[i],i++),不難發(fā)現(xiàn)此處fbr循環(huán)語句的格式有誤,其中表達式之間應以";”相隔;同時很容易發(fā)現(xiàn)if條件語句處的關鍵字書寫錯誤。6、編寫函數(shù)fun,其功能是:根據(jù)以下公式求兀的值(要求精度0.0005,即某項小于0.0005時停止迭代)。lx2x…X”

3x5x…x(2〃+lx2x…X”

3x5x…x(2〃+l)33x53x5x7 3x5x7—=1+-++ + +33x53x5x7 3x5x7程序運行后,若輸入精度0.0005,則程序應輸出為3.14…?!緟⒖即鸢浮縟oubles=1.0,sl=1.0;intn=l;while(sl>=eps){sl=sl*n/(2*n+l);doubles=1.0,sl=1.0;intn=l;while(sl>=eps){sl=sl*n/(2*n+l);s=s+sl;n++;/*當某項大于精度要求時,繼續(xù)求下一項*//*求多項式的每一項*//*求和*/return2*s;【解題思路】首先應該定義double類型變量,并且賦初值,用來存放多項式的某一項和最后的總和。從第2項開始以后的每一項都是其前面一項乘以n/(2]給定程序中,函數(shù)fun的功能是:統(tǒng)計形參s所指的字符串中數(shù)字字符出現(xiàn)的次數(shù),并存放在形參t所指的變量中,最后在主函數(shù)中輸出。例如,若形參s所指的字符串為abcdef35adgh3kjsdf7,則輸出結果為4?!緟⒖即鸢浮縮[i]⑵'9' (3)*t=n【解題思路】填空1:通過for循環(huán)語句,來判斷是否到字符串結尾,變量i用來存放字符串數(shù)組下標,則應填入s[i]。填空2:題目要求判斷數(shù)字字符,所以此處應填入'9'。填空3:將數(shù)字字符個數(shù)存入變量t中,這里需注意變量t是指針變量。下列給定程序中函數(shù)fun的功能是:實現(xiàn)兩個變量值的交換,規(guī)定不允許增加語句和表達式。例如,變量a中的值原為8,b中的值原為3,程序運行后a中的值為3,b中的值為8。【參考答案】(l)t=*x;*x=y;(2)retum(t);或returnt;【解題思路】首先,定義變量t作為中間變量,然后進行數(shù)據(jù)交換,注意參數(shù)x是指針變量,交換時應使用*X,最后確定返回值,根據(jù)代碼b=fun(8a,b)可以知道返回值將賦給變量b,而b中應存放交換前**中的值,所以函數(shù)應返回變量t編寫函數(shù)fun,其功能是:求出1到1000之間能被7或11整除,但不能同時被7和11整除的所有整數(shù),并將其放在a所指的數(shù)組中,通過n返回這些數(shù)的個數(shù)。【參考答案】voidfiin(int*a,int*n)(intij=0;for(i=l;i<=1000;i++) /*求1到1000之內(nèi)能被7或11整除、但不能同時被7和11整除的所有整數(shù),并放入數(shù)組a中*/if((i%7==0||i%ll==0)&&i%77!=0)a[j++]=i:*n=j;}【解題思路】該題需要運用循環(huán)判斷結構來實現(xiàn),其中循環(huán)語句比較容易,只要確定循環(huán)變量的范圍即可,下面我們來看判斷語句,題目要求找出能被7或11整除,但不能同時被7和11整除的所有整數(shù)。能同時被7和11整除的整數(shù)一定能被77整除,且不能被77整除的數(shù)不一定就是能被7或11整除的數(shù)所以可得出程序中的if()語句。注意:(i%7==0||i%ll==0)兩邊必須要有小括號。10、下列給定程序中,函數(shù)fun的功能是:把形參a所指數(shù)組中的奇數(shù)按原順序依次存放到a[0]、a[l],a[2] 中,把偶數(shù)從數(shù)組中刪除,奇數(shù)個數(shù)通過函數(shù)值返回。例如:若a所指數(shù)組中的數(shù)據(jù)最初排列為:9、1、4、2、3、6、5、8、7,刪除偶數(shù)后a所指數(shù)組中的數(shù)據(jù)為:9、1、3、5、7,返回值為5。【參考答案】(1)1 (2)j++ (3)j【解題思路】填空1:根據(jù)題目要求,需要進行奇偶數(shù)的判定,我們可以通過if條件語句來判斷數(shù)組元素是否是奇數(shù),如果元素不能被2整除,則為奇數(shù),所以填入if(a[i]%2==l)。填空2:將為奇數(shù)的元素重新存放到數(shù)組的前面,同時下標增1。填空3:函數(shù)返回值需要返回數(shù)組中奇數(shù)的個數(shù),因此返回變量j。下列給定程序中函數(shù)ftm的功能是:求兩個非零正整數(shù)的最大公約數(shù),并作為函數(shù)值返回。例如,若numl和num2分別為49和21,則輸出的最大公約數(shù)為7;若numl和num2分別為27和81,則輸出的最大公約數(shù)為27?!緟⒖即鸢浮縯=a;a=b;b=t;retum(b);或returnb;【解題思路】求最大公約數(shù)算法一般采用輾轉相除法。輾轉相除法的算法為:首先將m除以n(m>n)得余數(shù)r,再用余數(shù)r去除原來的除數(shù),得到新的余數(shù),重復此過程直到余數(shù)為0時停止,此時的除數(shù)就是m和n的最大公約數(shù)。程序首先判斷參數(shù)a和b的大小,如果a<b則進行交換,這里是一個數(shù)學邏輯錯誤,應先將a的值賦給中間變量t,再將b的值賦給a,最后將t的值賦給b。當余數(shù)r為0時,除數(shù)b即為所求的最大公約數(shù),所以函數(shù)應返回b。規(guī)定輸入的字符串中只包含字母和*號。編寫函數(shù)firn,其功能是:刪除字符串中所有的*號。編寫函數(shù)時,不得使用C語言提供的字符串函數(shù)。例如,字符串中的內(nèi)容為:****A*BC*DEF*G*******,刪除后字符串中的內(nèi)容應當是:ABCDEFG?【參考答案】voidfun(char*a)intij=0;fbr(>=O;a[i]!='\O';i++)ifi[a[i]!='*')a[j++]=a[i]; /*若不是要刪除的字符'*'則留下*/a[j]=\0';【解題思路】用循環(huán)操作從字符串的開始往后逐個進行比較,若不是要刪除的字符(用if(a[i]!=")來控制)則保留。變量i和j用來表示原字符串的下標和刪除*號后新字符串的下標。注意下標變量j要從0開始,最后還要加上字符串結束標識,0,。下列給定程序中,函數(shù)fun的功能是:將形參n中,各位上為偶數(shù)的數(shù)取出,并按原來從高位到低位相反的順序組成一個新數(shù),作為函數(shù)值返回。例如,輸入一個整數(shù)27638496,函數(shù)返回值為64862?!緟⒖即鸢浮?1)0 (2)10*x(3)n/10【解題思路】填空1:定義變量t用來存放數(shù)值幾的各個位數(shù)值,此處判斷t是否為偶數(shù),即對2求余結果是否為0。填空2:將t作為x的個位數(shù),原來x的各個位上升1位,即x=10]下列給定程序中函數(shù)fun的功能是:將長整型數(shù)中各位上為奇數(shù)的數(shù)依次取出,構成?個新數(shù)放在t中。高位仍在高位,低位仍在低位。例如,當s中的數(shù)為87653142時,t中的數(shù)為7531?!緟⒖即鸢浮?l)*t=0;(2)if(d%2!=0)或if(d%2==l)【解題思路】(1)由函數(shù)定義可知,變量t是指針變量,所以對t進行賦初值0是不對的。因為t指向的是存放新數(shù)的變量,所以此處應給新數(shù)賦初值0,即*t=0。(2)變量d表示數(shù)s各個位上的數(shù),此處的if條件應為判斷d是否為奇數(shù)。15編寫函數(shù)fun,其功能是:實現(xiàn)兩個字符串的連接(不要使用庫函數(shù)strcat),即把p2所指的字符串連接到pl所指的字符串的后面。例如,分別輸入下面兩個字符串:FirstString SecondString程序輸出:FirstString SecondString【參考答案】voidfun(charpl[],charp2[]){ inti,j;fbr(i=0;pl[i]!=W;i++);fora=0;p2[j]!=^';j++)pl[i++]=p2[j];pl[i]=W;)【解題思路】本題用兩個循環(huán)完成操作,第1個循環(huán)的作用是求出第1個字符串的長度,即將i指到第1個字符串的末尾。第2個循環(huán)的作用是將第2個字符串的字符連到第1個字符串的末尾。最后在第1個字符串的結尾加上字符串結束標識,01下列給定程序中,函數(shù)ftm的功能是:把形參a所指數(shù)組中的最小值放在元素a[0]中,接著把a所指數(shù)組中的最大值放在a[l]元素中;再把a所指數(shù)組元素中的次小值放在a[2]中,把a所指數(shù)組元素中的次大值放在a[3],以此類推。例如,若a所指數(shù)組中的數(shù)據(jù)最初排列為:9、1、4、2、3、6、5、8、7;則按規(guī)則移動后,數(shù)據(jù)排列為:1、9、2、8、3、7、4、6、5。形參n中存放a所指數(shù)組中數(shù)據(jù)的個數(shù)。規(guī)定fun函數(shù)中的max存放當前所找的最大值,px存放當前所找最大值的下標?!緟⒖即鸢浮?1)a[i](2)aU](3)a[j]【解題思路】填空1:for循環(huán)語句循環(huán)體中將數(shù)組元素a[i]賦值給變量max和變量min。填空2:通過一次fbr循環(huán),找到數(shù)組中的最大值,if語句的條件表達式是max<a[j]。填空3:同理,此處if語句的條件表達式是min>a[j]。下列給定程序中函數(shù)fun的功能是:用遞歸算法計算斐波拉契數(shù)列中第n項的值。從第1項起,斐波拉契數(shù)列為:1、1、2、3、5,8、13、21 例如,若給n輸入7,則該項的斐波拉契數(shù)值為13。【參考答案】(1)去掉分號case1:case2:return1;【解題思路】C語言中,switch語句之后不能有分號,并且case語句常量后應用的是冒號。某學生的記錄由學號、8門課程成績和平均分組成,學號和8門課程的成績已在主函數(shù)中給出,請編寫函數(shù)fim,其功能是:求出該學生的平均分,并放入記錄的ave成員中。例如,學生的成績是:85.5,76,69.5,85,91,72,64.5,87.5,則他的平均分應為78.875。【參考答案】oidfun(STREC*a)(doubleave=0.0;inti;fbr(i=0;i<N;i++)a->ave=a->ave+a->s[i];/*求各門成績的總和*/a->ave/=N;/*求平均分*/【解題思路】本題考查自定義形參的相關知識點,程序流程是這樣的:在fun()函數(shù)中求出平均分后,返回到主函數(shù)時平均分也要帶回,所以只能定義一個指針類型的形參STREC*a,此時,引用成員的方式可以使用指向運算符,即a—>ave和a->s[i],當然也可用(*a).ave和(*2).s[i]。下列給定程序中,函數(shù)fun的功能是進行數(shù)字字符轉換。若形參ch中是數(shù)字字符‘0'?'9",則將'0'轉換成'9','1'轉換成'8','2'轉換成'7' '9'轉換成'0';若是其它字符則保持不變:并將轉換后的結果作為函數(shù)值返回?!緟⒖即鸢浮縞har(2)ch<='9'(3)'O'【解題思路】填空1:函數(shù)定義時,類型標識符指明了本函數(shù)的類型,函數(shù)的類型實際上是函數(shù)返回值的類型,所以此處應該填入char。填空2:通過if條件語句判斷字符串中字符是否是數(shù)字字符,既大于等于字符'0',同時小于等于字符'9'。填空3:return語句完成函數(shù)返回操作,要實現(xiàn)字符轉換,應填入return夕一(ch—。)。下列給定程序中函數(shù)fun的功能是:將p所指字符串中的所有字符復制到b中,要求每復制三個字符之后插入一個空格。例如,若給a輸入字符串:ABCDEFGKHIJK,調(diào)用函數(shù)后,字符數(shù)組b中的內(nèi)容為:ABCDEFGHIJK?!緟⒖即鸢浮縝[k]=*p;b[k]=r';k++;【解題思路】(1)題目中p是指針型變量作函數(shù)參數(shù),因此給b[k]賦值時出現(xiàn)錯誤。(2)題目要求賦值3個字符后加一個空格,所以應該是先給b[k]賦值空格,然后變量k再加N名學生的成績已在主函數(shù)中放入一個帶頭節(jié)點的鏈表結構中,h指向鏈表的頭節(jié)點。請編寫函數(shù)fun,其功能是:求出平均分,并由函數(shù)值返回。例如,若學生的成績是:8576698591726487,則平均分應當是:78.625?!緟⒖即鸢浮縟oublefun(STREC*h){doubleave=0.0;STREC*p=h->next;while(p!=NULL){ave=ave+p->s;p=p->next;returnave/N;)【解題思路】題目要求求鏈表中數(shù)據(jù)域的平均位,應首先使用循環(huán)語句遍歷鏈表,求各結點數(shù)據(jù)域中數(shù)值的和,再對和求平均分。遍歷鏈表時應定義一個指向結點的指針p,因為"頭結點"中沒有數(shù)值,所以程序中讓p直接指向"頭結點"的下一個結點,使用語句STREC*p=h->next?下列給定程序中,函數(shù)fun的功能是:求ss所指字符串數(shù)組中長度最短的字符串所在的行下標,作為函數(shù)值返回,并把其串長放在形參n所指的變量中。ss所指字符串數(shù)組中共有M個字符串,且串長<N?!緟⒖即鸢浮縈(2)< (3)k【解題思路】填空1:題目指出SS所指字符串數(shù)組中共有M個字符串,所以fbr循環(huán)語句循環(huán)條件是i<M。填空2:要求求長度最短的字符串,*n中存放的是已知字符串中長度最短的字符串的長度,這里將當前字符串長度與*n比較,若小于*n,則將該長度值賦給*n,因此if語句的條件表達式為len<*n?填空3:將最短字符串的行下標作為函數(shù)值返回,變量k儲存行下標的值。下列給定程序中函數(shù)fiin的功能是:將tt所指字符串中的小寫字母全部改為對應的大寫字母,其它字符不變。例如,若輸入"Ab,cD",則輸出"AB,CD"?【參考答案】(l)ifi[(tt[i]>=a,)&&(tt[i]<='z')(2)tt[i]-=32;【解題思路】(1)分析本題可知,要判斷字符是否為小寫字母,即判斷其是否在a?z之間,所以這里需要進行連續(xù)的比較,用&&。(2)從ASCII碼表中可以看出,小寫字母的ASCII碼值比對應大寫字母的ASCII值大32。將字符串中的小寫字母改為大寫字母的方法是:從字符串第一個字符開始,根據(jù)ASCH碼值判斷該字母是不是小寫字母,若是,則ASCH碼值減32即可。編寫函數(shù)fun,其功能是:將所有大于1小于整數(shù)m的非素數(shù)存入xx所指數(shù)組中,非素數(shù)的個數(shù)通過k返回。例如,若輸入17,則應輸出:46891012141516?!緟⒖即鸢浮縱oidfun(intm,int*k,intxx[]){intij,n=0;for(i=4;i<m;i++)/*找出大于1小于整數(shù)m的非素數(shù)*/{for(j=2;j<i;j++)if(i%j==O)break;if(j<i)xx[n++]=i;)*k=n; /*返回非素數(shù)的個數(shù)*/}【解題思路】題目要求將1?m之間的非素數(shù)存入數(shù)組中,應使用循環(huán)判斷結構。循環(huán)語句用來遍歷1?m之間的每個數(shù),判斷語句用來判斷該數(shù)是否素數(shù),若不是素數(shù),則將其存入數(shù)組中。這道題目是考查一個數(shù)是否為素數(shù)的簡單延伸,只要掌握了判斷素數(shù)的方法,問題便能順利解決。下列給定程序中,函數(shù)fun的功能是:將s所指字符串中的所有數(shù)字字符移到所有非數(shù)字字符之后,并保持數(shù)字字符串和非數(shù)字字符串原有的次序。例如,s所指的字符串為def35adh3kjsdf7,執(zhí)行后結果為defhdhajsdf3537?!緟⒖即鸢浮?Dj++或j+=l或++或)可+1⑵s[i]=tl[i](3)j【解題思路】填空1:根據(jù)函數(shù)fiin中的內(nèi)容可知,數(shù)組tl存儲了s中的非數(shù)字字符,數(shù)組t2存儲了s中的數(shù)字字符,為了存儲下一個數(shù)字字符,下標j要進行加1操作。填空2:將s串中的數(shù)字與非數(shù)字字符分開后,要先將非數(shù)字字符放入字符串s中,因此填入s[i]填空3:最后將數(shù)字字符加到s串之后,并且i要小于數(shù)字的個數(shù)j。下列給定程序中函數(shù)fim的功能是:用冒泡法對6個字符串進行升序排列。請改正程序中的錯誤,使它能得出正確的結果?!緟⒖即鸢浮?l)for(j=i+1;j<6;j++)(2)*(pstr+i)=*(pstr+j);【解題思路】(1)此處考查for語句的格式,各表達式之間應用";"割開。(2)此處考查用指針表示數(shù)組元素的方法,*(pstr+l)表示pstr所指向數(shù)組的第I個元素,同理*(pstr+j)表示pstr所指向數(shù)組的第j個元素。編寫函數(shù)fun,其功能是:求ss所指字符串中指定字符的個數(shù),并返回此值。例如,若輸入字符串123412132,輸入字符為1,則輸出3?!緟⒖即鸢浮縤ntfun(char*ss,charc)(inti=0;fbr(;*ss!=I\0';ss++)iR*ss==c)i++;/*求出ss所指字符串中指定字符的個數(shù)*/returni;}【解題思路】從字符串中查找指定字符,需要使用循環(huán)判斷結構,循環(huán)語句用來遍歷字符串,循環(huán)條件為字符串沒有結束,即當前字符不是-O',判斷語句用來判斷當前字符是否為指定字符。最后返回指定字符的個數(shù)。下列給定程序中,函數(shù)fun的功能是:將s所指字符串中的所有數(shù)字字符移到所有非數(shù)字字符之后,并保持數(shù)字字符串和非數(shù)字字符串原有的次序。例如,s所指的字符串為def35adh3kjsdf7,執(zhí)行后結果為defadhajsdf3537?!緟⒖即鸢浮竣舑++或j+=l或++或上可+1⑵s[i]=tl[i] (3)j【解題思路】填空1:根據(jù)函數(shù)firn中的內(nèi)容可知,數(shù)組tl存儲了s中的非數(shù)字字符,數(shù)組t2存儲了s中的數(shù)字字符,為了存儲下一個數(shù)字字符,下標j要進行加1操作。填空2:將s串中的數(shù)字與非數(shù)字字符分開后,要先將非數(shù)字字符放入字符串s中,因此填入s[i]=tl[i]o填空3:最后將數(shù)字字符加到s串之后,并且i要小于數(shù)字的個數(shù)j。29、下列給定程序中函數(shù)fun的功能是:用冒泡法對6個字符串進行升序排列。【參考答案】(Dfor(j=i+1;j<6;j++)(2)*(pstr+i)=*(pstr+j);【解題思路】(1)此處考查for語句的格式,各表達式之間應用";"割開。(2)此處考查用指針表示數(shù)組元素的方法,*(pstr+I)表示pstr所指向數(shù)組的第I個元素,同理*(pstr+j)表示pstr所指向數(shù)組的第j個元素。編寫函數(shù)fun,其功能是:求ss所指字符串中指定字符的個數(shù),并返回此值。例如,若輸入字符串123412132,輸入字符為1,則輸出3?!緟⒖即鸢浮縤ntfiin(char*ss,charc){inti=0;fbr(;*ss!='\0';ss-H-)if^*ss===c)i++;/*求出ss所指字符串中指定字符的個數(shù)*/returni;【解題思路】從字符串中查找指定字符,需要使用循環(huán)判斷結構,循環(huán)語句用來遍歷字符串,循環(huán)條件為字符串沒有結束,即當前字符不是、0',判斷語句用來判斷當前字符是否為指定字符。最后返回指定字符的個數(shù)。下列給定程序中已建立一個帶頭結點的單向鏈表,鏈表中的各結點按結點數(shù)據(jù)域中的數(shù)據(jù)遞增有序鏈接。函數(shù)fim的功能是:把形參x的值放入一個新結點并插入鏈表中,使插入后各結點數(shù)據(jù)域中的數(shù)據(jù)仍保持遞增有序?!緟⒖即鸢浮?Dx(2)p (3)s【解題思路】填空1:將形參x賦值給結點的數(shù)據(jù)域。填空2和填空3:將新的結點和原有鏈表中結點進行比較。下列給定程序中函數(shù)firn的功能是:計算正整數(shù)num各位上的數(shù)字之積。例如,若輸入252,則輸出應該是20。若輸入202,則輸出應該是0?!緟⒖即鸢浮?l)longk=l;(2)num/=10;【解題思路】(l)k用來存放各位數(shù)字的積,初始值應為1。(2)這里是一個符號錯誤,除號用"/"來表示。33、編寫函數(shù)fun,其功能是:計算n門課程的平均分,結果作為函數(shù)值返回。例如:若有5門課程的成績是:90.5,72,80,61.5,55,則函數(shù)的值為:71.80。【參考答案】floatfun(float*a,intn)(inti;floatav=0.0;fbr(i=0;i<n;i++)/*求分數(shù)的總和*/av=av+a[i];return(av/n);/*返回平均值*/}【解題思路】本題較簡單,只需用一個循環(huán)語句就可變成數(shù)組元素的求和,再將和除以課程數(shù)即可。需要注意的是本題對指針的操作,當指針變量指向一個數(shù)組時,用該指針變量引用數(shù)組元素,引用方式與數(shù)組的引用方式相同。如本題中a指向了score,所以通過a引用score中的元素時可以用下標法,也可以用指針運算法,a[i]和*(a+i)具有相同的作用。下標運算實際上是從當前地址開始往后取出地址中的第幾個元素,當前地址下標為0。例如,若有intcc[10],*p=cc+5;,即p指向了cc的第5個元素,則p[0]的作用與cc[5]相同;p[3]的作用是取出從當前地址(即p所指地址)開始往后的第3個元素,它與cc[8]相同;p[-2]的作用是取出從當前地址開始往前的第2個元素,它與cc[3]相同,但不提倡使用"負"的下標。34、下列給定程序中,函數(shù)fun的功能是:將形參a所指數(shù)組中的前半部分元素中的值與后半部分元素中的值對換。形參n中存放數(shù)組中數(shù)據(jù)的個數(shù),若n為奇數(shù),則中間的元素不動。例如:若a所指數(shù)組中的數(shù)據(jù)為:1、2、3、4、5、6、7、8、9,則調(diào)換后為:6,7、8、9、5、1、2、3、4?!緟⒖即鸢浮?1)1 (2)i(3)a[p+i]或*(a+p+i)【解題思路】填空1:該處是判斷數(shù)組元素的個數(shù)是奇數(shù)還是偶數(shù),為奇數(shù)時要使當前位置加1,以使p指向數(shù)組中間位置。填空2和填空3:這里是一個比較常見的數(shù)組位置調(diào)換程序,應填入i和a[p+i]。35、下列給定程序中函數(shù)fbn的功能是:把從主函數(shù)中輸入的3個數(shù),最大的數(shù)放在a中,中間的數(shù)放在b中,最小的數(shù)放在c中。例如,若輸入的數(shù)為:551234,輸出的結果應當是:a=55.O,b=34.0,c=12.0?【參考答案】(1)floatk;⑵*c)【解題思路】(1)觀察程序中的k,在賦值語句中,k是以變量的形式進行賦值而非指針,所以將k定義為指針是錯誤的。(2)此處if語句是為了將小于*c的值放入*c中,所以改為iR*a<*c)z學生的記錄由學號和成績組成,N名學生的數(shù)據(jù)已放入主函數(shù)中的結構體數(shù)組s中,請編寫函數(shù)fun,其功能是:把分數(shù)最高的學生數(shù)據(jù)放在b所指的數(shù)組中。注意:分數(shù)最高的學生可能不止一個,函數(shù)返回分數(shù)最高的學生的人數(shù)?!緟⒖即鸢浮縤ntfun(STREC*a,STREC*b)intij=O,max=a[O].s;/*找出最大值*)for(i=0;i<N;i++)if(max<a[i].s)max=a[i].s;for(i=0;i<N;i++)if(max==a[i].s)b[j++]=a[i];/*找出成績與max相等的學生的記錄,存入結構體b中*/returnj;/*返回最高成績的學生人數(shù)*/【解題思路】該程序使用兩個循環(huán)判斷語句,第1個循環(huán)判斷語句的作用是找出最大值。第2個循環(huán)判斷語句的作用是找出與max相等的成績(即最高成績)的學生記錄,并存入b中。下列給定程序中,函數(shù)fun的功能是:從形參ss所指字符串數(shù)組中,刪除所有串長超過k的字符串,函數(shù)返回剩余字符串的個數(shù)。ss所指字符串數(shù)組中共有N個字符串,且串長小于M?!緟⒖即鸢浮縉(2)k(3)ss[i]【解題思路】填空1:for循環(huán)語句作用是遍歷字符串數(shù)組中的每一個字符串,所以循環(huán)變量i的循環(huán)條件是i<N.填空2:題目要求刪除串長度小于k的字符串,所以if條件語句的條件表達式是len<=k。填空3:通過字符串拷貝函數(shù)將串長不大于k的字符串另存,并記錄個數(shù)。下列給定程序中函數(shù)fiin的功能是:逐個比較p、q所指兩個字符串對應位置上的字符,并把ASCII值大或相等的字符依次存放到c所指的數(shù)組中,形成一個新的字符串。例如,若主函數(shù)中a字符串為aBCDeFgH,b字符串為ABcd,則c中的字符串應為aBcdeFgHo【參考答案】intk=0;(2)while(*p||*q)【解題思路】(1)變量k存放數(shù)組c的下標,因此應初始化為0。while循環(huán)語句的循環(huán)條件是判斷兩個字符串是否到達結尾。規(guī)定輸入的字符串中只包含字母和*號。請編寫函數(shù)firn,其功能是:除了字符串前導的*號之外,將串中其它*號全部刪除。在編寫函數(shù)時,不得使用C語言提供的字符串函數(shù)。例如,字符串中的內(nèi)容為:****A*BC*DEF*G*******,刪除后,字符串中的內(nèi)容應當是:****ABCDEFGo【參考答案】voidfun(char*a)(inti=0;char*p=a;while(*p&&*p=***){a[i]=*p;i++;p++;}while(*p)(if(*p!='*'){a[i]=*p;i++;}p++;)a[i]=^';)【解題思路】函數(shù)firn的功能:除了字符串前導的*號之外,將串中其他*號全部刪除。解答本題,(1)定義一個臨時指針P,初始指向原串首地址;(2)利用循環(huán)語句把字符串前導*號拷貝到原串;(3)繼續(xù)移動指針,把串中和串尾的非*號字符拷貝到原串;(4)為修改后的字符串賦結束字符'\0'。下列給定程序中,函數(shù)fun的功能是:把形參s所指字符串中下標為奇數(shù)的字符右移到下一個奇數(shù)位置,最右邊被移出字符串的字符繞回放到第一個奇數(shù)位置,下標為偶數(shù)的字符不動(注:字符串的長度大于等于2)。例如,形參s所指字符串為abcdefjgh,執(zhí)行結果為ahcbedgf?!緟⒖即鸢浮? (2)s[k]或*(s+k) (3)c【解題思路】填空1:函數(shù)firn中變量n統(tǒng)計字符的長度,假如長度為偶數(shù),則卜=11-1:假如長度為奇數(shù),則k=n-2,使得下標為奇數(shù)的最后一個元素有效(不是K0,)。填空2:了解變量k的作用后,則將最右邊的奇數(shù)位置的數(shù)賦值給變量c。填空3:將最后一個下標為奇數(shù)的元素移到第一個奇數(shù)位置。下列給定程序中fun函數(shù)的功能是:求表達式s=aa...aa-...—aaa-aa-a(此處aa...aa表示n個a,a和n的值在1至9之間)例如,a=3,n=6,則以上表達式為:s=333333—33333—3333—333—33—3其值是296298。a和n是fun函數(shù)的形參,表達式的值作為函數(shù)值傳回main函數(shù)?!緟⒖即鸢浮?1)longs=0,t=0;(2)t=t/10;【解題思路】t用來存放每次循環(huán)后的多位數(shù),第一次循環(huán)時,t應當是個位數(shù),所以t的初始值應為0。(2)根據(jù)題意,這里不需要求余數(shù),而是要去掉個位數(shù),重新組合一個數(shù),因此應用除法運算。編寫函數(shù)voidfun(char*tt,intpp[]),統(tǒng)計在tt所指的字符串中'a'到'z'26個小寫字母各自出現(xiàn)的次數(shù),并依次放在pp所指的數(shù)組中。例如,當輸入字符串a(chǎn)bcdefgabcdeabc后,程序的輸出結果應該是:33322110000000000000000000【參考答案】voidfun(char*tt,intpp[])inti;fbr(i=0;i<26;i-H-)pp[i]=O; /*初始化pp數(shù)組各元素為0*/for(;*tt!='\0':tt++)if(*tt>='a'&&*tt<='z)pp[*tt-'a*]++;}【解題思路】要求統(tǒng)計在tt所指字符串中'a'到'z'26個小寫字母各自出現(xiàn)的次數(shù),并依次放在pp所指數(shù)組中。首先for循環(huán)語句體中初始化pp數(shù)組中分別用來統(tǒng)計26個字母的個數(shù)。再使用循環(huán)判斷語句對tt所指字符串中的字符進行逐一比較操作,同時存入相對應的pp數(shù)組中。下列給定程序中,函數(shù)fun的功能是:在形參ss所指字符串數(shù)組中查找與形參t所指字符串相同的串,找到后返回該串在字符串數(shù)組中的位置(即下標值),若未找到則返回一1。ss所指字符串數(shù)組中共有N個內(nèi)容不同的字符串,且串長小于M。【參考答案】(DN(2)i (3)-1【解題思路】填空1:變量i是循環(huán)變量,它的取值范圍是在0到N之間。填空2:如果ss所指字符串數(shù)組中的字符串和t所指字符串相同的話,則返回其下標值,即returnN—1;否則返回一1,即return—1。填空3:在main函數(shù)中輸出最后結果,判斷函數(shù)返回值n,如果n=0,說明沒有找到,否則輸出n。下列給定程序中函數(shù)fun的功能是:從整數(shù)1到55之間,查找能被3整除且有一位上的數(shù)值是5的數(shù),把這些數(shù)放在b所指的數(shù)組中,這些數(shù)的個數(shù)作為函數(shù)值返回。規(guī)定函數(shù)中al放個位數(shù),a2放十位數(shù)?!緟⒖即鸢浮?l)a2=k/10;(2)retumi;【解題思路】a2存放十位數(shù),所以是a2=k/10,此處是一個書寫錯誤。(2)根據(jù)題意,要返回能被3整除的數(shù)的個數(shù),從循環(huán)體中可以知道其個數(shù)是由i來計算的,所以返回的是i。規(guī)定輸入的字符串中只包含字母和I*號。請編寫函數(shù)fun,其功能是:將字符串尾部的*號全部刪除,前面和中間的*號不動。例如,字符串中的內(nèi)容為:****A*BC*DEF*G*******,刪除后,字符串中的內(nèi)容應當是:****A*BC*DEF*G。在編寫函數(shù)時,不得使用C語言提供的字符串函數(shù)?!緟⒖即鸢浮縱oidfun(char*a){while(*a!=^')a++;a--;/*指針a指向字符串的尾部*/while(*a==,*')a-;/*指針a指向最后一個字母*/*(a+1)\0";/*在字符串最后加上結束標志符*/}【解題思路】對于一個字符串耍刪除其尾部的*號,只需要在最后一個不是*號的字符后面加上結束符號具體操作為:首先找到字符串的結尾,然后從最后一個字符開始往前逐個判斷是否為*號,直到找到非*號字符為止,最后在該字符后面加上結束符號'\0'。下列給定程序中已建立了一個帶頭結點的單向鏈表,在main函數(shù)中將多次調(diào)用fun函數(shù),每調(diào)用一次,輸出鏈表尾部結點中的數(shù)據(jù),并釋放該結點,使鏈表縮短?!緟⒖即鸢浮?1)next (2)t->data(3)t【解題思路】填空1:因為是鏈表操作,所以要使t逐一往后移動,語句為t=t—>next。填空2:輸出鏈表結點的數(shù)據(jù)域,HPt->data.填空3:使用free函數(shù)將t所指向的內(nèi)存空間釋放。釋放內(nèi)存空間函數(shù)free調(diào)用形式:free(void*p);。功能:釋放p所指向的一塊內(nèi)存空間,p是一個任意類型的指針變量,它指向被釋放區(qū)域的首地址。被釋版區(qū)應是由malloc或calloc函數(shù)所分配的區(qū)域。47、下列給定程序中函數(shù)fun的功能是:將字符串中的字符逆序輸出,但不改變字符串中的內(nèi)容。例如,若字符串為abed,則應輸出:deba.【參考答案】(l)voidfiin(char*a)(2)printf("%c",*a);【解題思路】(1)定義函數(shù)時形參的類型要與調(diào)用函數(shù)中實參的類型一致,主函數(shù)中fun傳遞的是字符串s的首地址,所以此處形參應為指針類型。(2)根據(jù)printf函數(shù)格式,很容易找到錯誤之處。編寫函數(shù)fun,其功能是:比較字符串的長度,(不得使用C語言提供的求字符串長度的函數(shù)),函數(shù)返回較長的字符串。若兩個字符長度相同,則返回第一個字符串。例如,輸入beijing<CR>shanghai<CR>(<CR>為回車鍵),函數(shù)將返回shanghai?!緟⒖即鸢浮縞har*fun(char*s,char*t){intij;fbr(i=O;s[i]!=[0';]++);/*求字符串的長度*/for(j=0;t[j]!='\0';j++):;rf;z= /*卜上鉆廟小十舛由M府*/returnt;/*函數(shù)返回較長的字符串,若兩個字符串長度相等,則返回第1個字符串*/elsereturns;}【解題思路】本題中,第1個fbr循環(huán)的作用是求出s串的字符個數(shù)i,第2個for循環(huán)的作用是求出t串的字符個數(shù)j,因為任何循環(huán)都要控制一條語句,所以在每一個for循環(huán)語句后面加上一個分號以結束循環(huán)。下列給定程序中,函數(shù)fun的功能是:逆置數(shù)組元素中的值。例如:若a所指數(shù)組中的數(shù)據(jù)為:1、2、3、4、5、6、7、8、9,則逆置后依次為:9、8、7,6、5、4、3、2、1。形參n給出數(shù)組中數(shù)據(jù)的個數(shù)。【參考答案】n/2 (2)i(3)a[n-i-l]【解題思路】填空1:逆置數(shù)組元素中的值,將a[0]與a[n—l]對換位置,依此類推,那么需要對換n/2次。填空2:將a[0]與a[n—1]對換位置,a[l]與a[n-2]對換位置,依次類推,則a[i]=a[n—I-i]。填空3:普通的調(diào)換位置程序,顯然填入-下列給定程序中函數(shù)fun的功能是:將一個由八進制數(shù)字字符組成的字符串轉換成與其面值相等的十進制整數(shù)。規(guī)定輸入的字符串最多只能包含5位八進制數(shù)字字符。例如,若輸入77777,則輸出32767。【參考答案】(l)n=*p-'0';(2)n=n*8+*p-'0’;【解題思路】(1)"0"和"1"是字符串中的數(shù)字字符,為了進行數(shù)字運算,必須要將數(shù)字字符轉換為數(shù)字,用數(shù)字字符減去字符'0'的ASCII碼,就得到對應的數(shù)字。題中給出的是"o",不是"0"。(2)要在一個八進制數(shù)的最后加上一位,原來各個位上的數(shù)上升一位,只需將原數(shù)乘以8再加上個位數(shù)。學生的記錄由學號成績組成,N名學生的數(shù)據(jù)已放入主函數(shù)中的結構體數(shù)組s中,請編寫函數(shù)fun,其功能是:函數(shù)返回該學號的學生數(shù)據(jù),指定的學號在主函數(shù)中輸入。若沒找到指定學號,在結構體變量中給學號置空串,給成績置一1,作為函數(shù)值返回。(用于字符串比較的函數(shù)是strcmp)0【參考答案】STRECfun(STREC*a,char*b){inti;STRECstr={"\O",-l);/*若沒找到指定的學號,在結構體變量中給學號置空串,給成績置一1*/for(i=0;i〈N;i++)if(strcmp(a[i].num,b)==0)/*找到指定學號的學生數(shù)據(jù)*/str=a[i];str=a[i];returnstr;/*返回學生記錄*/}【解題思路】本程序一開始先使結構體變量str中的學號為空串,成績?yōu)橐?。循環(huán)體的功能是搜索所有學生的學號,并判斷是否有學號與b所指字符串相同(即找到),若找到則給str重新賦值(str=a[i]),若沒找到則str成員的值還是原有值(即未找到時學號返回空串,成績返回一1)。下列給定程序的功能是:調(diào)用函數(shù)firn將指定源文件中的內(nèi)容復制到指定的目標文件中,復制成功時函數(shù)返回1,失敗時返回0。在復制的過程中,把復制的內(nèi)容輸出到屏幕。主函數(shù)中源文件名放在變量sfnamc中,目標文件名放在變量tfhame中?!緟⒖即鸢浮?r" (2)fs(3)ft【解題思路】填空1:本題考查對文件操作的掌握。打開一個文件的調(diào)用方式是,fs=fopen(文件名,使用文件方式),以只讀的方式打開文件,所以文件使用方式為"r"。填空2:while循環(huán)語句中,循環(huán)條件通過命。2函數(shù)來檢測是否到文件結尾。填空3:中utc()函數(shù)用于將一個字符寫到磁盤文件上去,調(diào)用形式為:fjjutc(要輸出的字符,文件指針)。下列給定程序中函數(shù)fun的功能是:將長整型數(shù)中各位上為偶數(shù)的數(shù)依次取出,構成一個新數(shù)放在t中。高位仍在高位,低位仍在低位。例如,當s中的數(shù)為87653142時,t中的數(shù):86420【參考答案】⑴iRd%2==0)(2)s/=10;【解題思路】(1)分析程序,在if的條件表達式中,不應該出現(xiàn)賦值運算符”=",應使用"=="運算符。(2)這里是一個運算符的錯誤,表示除法的運算符是編寫函數(shù)fun,其功能是:將兩個兩位數(shù)的正整數(shù)a、b合并成一個整數(shù)放在c中。合并的方式是:將a數(shù)的十位和個位數(shù)依次放在c數(shù)的十位和千位上,b數(shù)的十位和個位數(shù)依次放在c數(shù)的百位和個位上。例如,當a=45,b=12時,調(diào)用該函數(shù)后,c=5142。【參考答案】voidfiin(inta,intb,long*c)(*c=b%10+(a/10)*10+(b/10)*100+(a%10)*1000;)【解題思路】本題中主要的問題是如何取出a和b的個位數(shù)和十位數(shù),取出后如何表示成c中相應的位數(shù)。由于a和b都是只有兩位的整數(shù),所以分別對它們除10可得到它們的十位數(shù),分別用10對它們求余可得到它們的個位數(shù)。得到后對應乘以1000、100、10、1就可得到c的千位數(shù)、百位數(shù)、十位數(shù)和個位數(shù)。注意:使用c時要進行指針運算。下列給定程序中,函數(shù)fun的功能是:有N*N矩陣,根據(jù)給定的m(m<=N)值,將每行元素中的值均向右移動m個位置,左位置為0。例如,N=3,m=2,有下列矩陣TOC\o"1-5"\h\z2 34 5 67 8 9程序執(zhí)行結果為0 0 10 0 40 0 7【參考答案】(l)i++ (2)m (3)m【解題思路】填空1:循環(huán)語句中,循環(huán)變量i增量為1。填空2:將每行元素中的值均右移m個位置,所以數(shù)組元素的下標是填空3:此for循環(huán)語句實現(xiàn)左邊元素置0操作,所以j的取值范圍是0到m。下列給定程序中函數(shù)fun的功能是:計算并輸出high以內(nèi)最大的10個素數(shù)的和。high的值由主函數(shù)傳給fun函數(shù)。例如,若high的位為100,則函數(shù)的值為732?!緟⒖即鸢浮?l)while((high>=2)&&(n<10))(2)yes=0;break;【解題思路】while循環(huán)條件丟掉一個括號。另一處是很簡單的程序語法錯誤,沒有加分號。編寫函數(shù)fun,其功能是:利用下面的簡單迭代方法求方程cos(x)-x=0的一個實根。xn+i=cos(x?)迭代步驟如下:⑴取xl初值為0.0;(2)x0=xl,將xl的值賦給x0;(3)x1=cos(x0)>求出一個新的xl;(4)若xO-xl的絕對值小于0.000001,執(zhí)行步聚(5),否則執(zhí)行步聚(2);(5)所求xl就是方程cos(x)—x=0的一個實根,作為函數(shù)值返回。程序將輸出結果Root=0.7390860【參考答案】doublefun()(doublexO,xl;xl=0.0;do(xO=xl;xl=cos(xO);}while(fabs(xO-xl)>=1e-6);returnxl;)【解題思路】用迭代方法求方程的一個實根,題目已經(jīng)給出了算法,只要按照算法用合適的程序表達,就可以解題了。下列給定程序中,函數(shù)fun的功能是:有N*N矩陣,根據(jù)給定的m(m<=N)值,將每行元素中的值均向右移動m個位置,左位置為0。例如,N=3,m=2,有下列矩陣TOC\o"1-5"\h\z2 34 5 67 8 9程序執(zhí)行結果為0 0 10 0 40 0 7【參考答案】(l)i++ (2)m (3)m【解題思路】填空1:循環(huán)語句中,循環(huán)變量i增量為1。填空2:將每行元素中的值均右移m個位置,所以數(shù)組元素的下標是填空3:此for循環(huán)語句實現(xiàn)左邊元素置0操作,所以j的取值范圍是0到m。下列給定程序中函數(shù)fbn的功能是:計算并輸出high以內(nèi)最大的10個素數(shù)的和。high的值由主函數(shù)傳給fun函數(shù)。例如,若high的值為100,則函數(shù)的值為732。【參考答案】(l)while((high>=2)&&(n<10))(2)yes=0;break;【解題思路】while循環(huán)條件丟掉?個括號。另一處是很簡單的程序語法錯誤,沒有加分號。編寫函數(shù)fun,其功能是:利用下面的簡單迭代方法求方程cos(x)—x=0的一個實根。加=cos(x〃)迭代步驟如下:(1)取xl初值為0.0;⑵x0=xl,將xl的值賦給x0;(3)x1=cos(x0),求出一個新的xl;(4)若xO-xl的絕對值小于0.000001,執(zhí)行步聚(5),否則執(zhí)行步聚(2);(5)所求xl就是方程cos(x)—x=0的一個實根,作為函數(shù)值返回。程序將輸出結果Root=0.7390860【參考答案】doublefun()doublex0,xl;xl=0.0;do(x0=xl;xl=cos(x0);}while(fabs(x0-x1)>=1e-6);returnxl;}【解題思路】用迭代方法求方程的一個實根,題目已經(jīng)給出了算法,只要按照算法用合適的程序表達,就可以解題了。程序通過定義學生結構體變量,存儲學生的學號、姓名和3門課的成績。函數(shù)fun的功能是:將形參a所指結構體變量中的數(shù)據(jù)賦給函數(shù)中的結構體變量b,并修改b中的學號和姓名,最后輸出修改后的數(shù)據(jù)。例如,a所指變量中的學號、姓名和三門課的成績依次是:10001、"ZhangSan"、95、80、88,則修改后輸出b中的數(shù)據(jù)應為:10002、"LiSi"、95、80、88?!緟⒖即鸢浮縜(2)(3)score[i]【解題思路】填空1:題目要求先將形參a所指結構體變量中的數(shù)據(jù)賦給函數(shù)中的結構體變量b,所以此處b=a。填空2:通過strcpy函數(shù)修改b中的學生姓名,注意結構變量成員的表示方法。填空3:printf函數(shù)輸出結果。下列給定程序中函數(shù)fim的功能是:刪除s所指字符中所有的小寫字母c。請改正程序中的錯誤,使它能得出正確的結果。注意:部分源程序在文件M0DI1.C中,不得增行或刪行,也不得更改的程序的結構!【參考答案】(l)s[j++]=s[i];或{s[j]=s[i];j++;}(2)s[j尸【解題思路】由循環(huán)條件iRs[i]!=d)可知,如果字符串中的字符不是d,則將保留該字符到s[j]位置,然后下標j進行加1操作。循環(huán)結束后要在新串的結尾加上規(guī)定輸入的字符串中只包含字母和*號。請編寫函數(shù)ftm,其功能是:將字符串中的前導*號全部移到字符串的尾部。例如,字符串中的內(nèi)容為:*******A*BC*DEF*G****,移動后,字符串中的內(nèi)容應當是:A*BC*DEF*G***********。在編寫函數(shù)時,不得使用C語言提供的字符串函數(shù)?!緟⒖即鸢浮縱oidfun(char*a)(inti=0,n=0;char*p;P=a;while(*p='*') /*判斷*P是否是*號,并統(tǒng)計*號的個數(shù)*/{n++;p++;}while(*p) /*將前導*號后的字符傳遞給a*/(a[i]=*p;i++;p++;}while(n!=0)(a[i]=,*,:i++;n―:}a[i]=\0";}【解題思路】函數(shù)fUn的功能:將字符串中的前導*號全部移到字符串的尾部。本題解題思路:(1)定義一個指針并指向字符串的首地址;(2)利用循環(huán)語句找出字符串的前導*號的個數(shù)n;(3)利用循環(huán)語句把剩余的字符拷貝到另一個字符串中;(4)在字符串的末尾接上n個*號。下列給定程序的功能是:從鍵盤輸入若干行字符串(每行不超過80個字符),寫入文件myfile4.txt中,用一1作字符串輸入結束的標志,然后將文件的內(nèi)容顯示在屏幕上。文件的讀寫分別由函數(shù)ReadText和WriteText實現(xiàn)?!緟⒖即鸢浮?fw(2)str(3)str【解題思路】填空1:定義函數(shù),函數(shù)的形參是一個文件類型的指針。填空2:此處考查muts函數(shù)的形式,應填入str。填空3:依據(jù)printf函數(shù)的格式,輸出字符串內(nèi)容,即printf("%s",str);?下列下列給定程序中,函數(shù)fun的功能是:從低位開始依次取出長整型變量s中奇數(shù)位上的數(shù),構成一個新數(shù)存放在t中。高位仍在高位,低位仍在低位。例如,當s中的數(shù)為7654321時,t中的數(shù)為7531?!緟⒖即鸢浮?l)voidfun(longs,long*t)(2)sl=sl*10;【解題思路】(1)主函數(shù)中調(diào)用函數(shù)的參數(shù)為地址,因此函數(shù)fun的形式參數(shù)應為指針類型。(2)重新組合一個數(shù),從個位開始,然后十位,依次類推,因此每增加一位數(shù),原數(shù)值需乘以10,即si=sl]編寫函數(shù)fun,其功能是:將兩個兩位數(shù)的正整數(shù)a、b合并成一個整數(shù)放在c中。合并的方式是:將a數(shù)的十位和個位數(shù)依次放在c數(shù)的個位和百位上,b數(shù)的十位和個位數(shù)依次放在c數(shù)的千位和十位上。例如,當a=45,b=12時,調(diào)用該函數(shù)后,c=1524?!緟⒖即鸢浮縱oidfiin(inta,intb,long*c)*c=a/10+(b%10)*10+(a%10)*100+(b/l0)*1000;【解題思路】本題中主要的問題是如何取出a和b的個位數(shù)和十位數(shù),取出后如何表示成c中相應的位數(shù)。由于a和b都是只有兩位的整數(shù),所以分別對它們除10可得到它們的十位數(shù),分別用10對它們求余可得到它們的個位數(shù)。得到后對應乘以1000、100、10、1就可得到c的千位數(shù)、百位數(shù)、十位數(shù)和個位數(shù)。注意:使用c時要進行指針運算。下列給定程序中,函數(shù)fim的功能是:有NxN矩陣,將矩陣的外圍元素做順時針旋轉。操作順序是:首先將第一行元素的值存入臨時數(shù)組r,然后使第一列成為第一行,最后一行成為第一列,最后一列成為最后一行,再使臨時數(shù)組中的元素成為最后一列。例如,若N=3,有下列矩陣:TOC\o"1-5"\h\z2 35 68 9操作后應為:4 15 26 3【參考答案】(DO(2)j一一(3)j【解題思路】填空1:NxN矩陣,第一列元素表示為第一行元素表示為將第一列賦值給第一行,因此填入0。填空2:for循環(huán)語句中,變量j的變化范圍為從N-1遞減到0,因此j做自減1操作。填空3:最后將臨時數(shù)組r中的元素賦值給矩陣最后一列。69、

下列給定程序中函數(shù)fun的功能是:計算S=fi[—n)+f(—n+l)+…+f(0)+f(l)+f(2)+…+Rn)的值。函數(shù)值應為10.407143。x>0FLx/2x=0或x=2x<0例如,當函數(shù)值應為10.407143。x>0FLx/2x=0或x=2x<0f(x)=(x+l)/(x-2)f(x)0(x—l)/(x—2)【參考答案】(1)doublef(doublex)(2)retums;【解題思路】該程序的流程是:fun()程序對f(n)項循環(huán)累加,ftin()程序采用條件選擇語句計算函數(shù)f(x)的值。第一處錯誤在于未定義函數(shù)f(doublex)的類型,因此返回值類型為double型,所以此處函數(shù)應定義為double。第二處錯誤的語法錯誤。70、編寫函數(shù)fun,其功能是計算:s=Jln(l)+ki(2)+ln(3)+……+磔〃九作為函數(shù)值返回.在C語言中可調(diào)用log(n)函數(shù)求ln(n)。log函數(shù)的引用說明為:doublelog(doublex)?例如,若m的值為20,則fun函數(shù)值為6.506583?!緟⒖即鸢浮縟oublefun(intm)inti;doubles=0.0;for(i=l;i<=m;i++)s=s+log(i);/*計算s=ln(l)+In(2)+In(3)+…+ln(m)*/returnsqrt(s);/*對s求平方根并返回*/【解題思路】首先計算從1到m的對數(shù)的和,因此循環(huán)變量的范圍是1?m,每次循環(huán)都進行一次累加求和。該題需要注意的是,log()函數(shù)的形式參數(shù)應當為double型變量,而用于循環(huán)的基數(shù)變量為整數(shù),需要進行強制轉換。在返回的時候求出平方根。7k下列給定程序中,函數(shù)fun的功能是:在形參ss所指字符串數(shù)組中,查找含有形參substr所指子串的所有字符串,并輸出,若沒找到則輸出相應信息。ss所指字符串數(shù)組中共有N個字符串,且串長小于M。程序中庫函數(shù)strstr(sl,s2)的功能是在si串中查找s2子串,若沒有,函數(shù)值為0,若有,函數(shù)位為非0?!緟⒖即鸢浮?1)N(2)substr(3)0【解題思路】填空1:此處考查for循環(huán)語句中循環(huán)變量i的取值范圍,題目指出共有N個字符串,所以i的取值范圍為0?N-1。填空2:strsgsl,s2)的功能是在si串中查找s2子串。題目要求在ss字符串數(shù)組中,查找substr所指的字符串,故應填substr。填空3:此處使用if條件語句來判斷查找結果,由于printf("\nDon,tfound!\n")可知此處需填寫沒有找到的條件,即是find==0。下列給定程序中函數(shù)firn的功能是:求三個數(shù)的最小公倍數(shù)。例如,若給主函數(shù)中的變量xl、x2、x3分別輸入15112,則輸出結果應當是330?!緟⒖即鸢浮?l)fun(intx,inty,intz)或intfun(y,intz)(2)retumj;【解題思路】(1)定義函數(shù)時,必須為每個形參分別定義變量類型。(2)通過return語句將最小公倍數(shù)j返回主調(diào)函數(shù)。規(guī)定輸入的字符串中只包含字母和*號。請編寫函數(shù)ftm,其功能是:只刪除字符前導和尾部的*號,串中字母間的*號都不刪除。形參n給出了字符串的長度,形參h給出了字符串中前導*號的個數(shù),形參e給出了字符串中尾部*號的個數(shù)。在編寫函數(shù)時,不得使用C語言提供的字符串函數(shù)。例如,字符串中的內(nèi)容為:****a*BC*DEF*G*******,刪除后,字符串中的內(nèi)容應當是:A*BC*DEF*G?!緟⒖即鸢浮縱oidfun(char*a,intn,inth,inte)(intij=0;for(i=h;i<n-e;i++)/*第一個字母和最后一個字母之間的字符全不刪除*/a[j++]=a[i];a[j]=\0,;/*在字符串最后加上結束標識*/【解題思路】由于程序已經(jīng)給出前導*號和尾部*號的個數(shù),所以只耍用循環(huán)語句將中間的字符保留起來。注意循環(huán)變量i的初值(h)和終止值(n-e),由于h和e分別表示a中的前導*號和尾部*號的個數(shù),n是字符串的長度,所以從a[h]到a[n—e—1]之間的所有字符都要保留。循環(huán)結束后在新串的尾部加上結束符'\0'。下列給定程序中,函數(shù)fun的功能是:計算一個帶頭結點的單向鏈表中各結點的數(shù)據(jù)域中數(shù)值之和,結果作為函數(shù)值返回?!緟⒖即鸢浮竣興ata (2)next(3)head【解題思路】本題考查的是鏈表的數(shù)據(jù)結構,需利用指針變量才能實現(xiàn),一個結點中應包含一個指針變量,用來存放下一個結點的地址。建立單項鏈表的一般步驟是:建立頭指針一建立第一個結點一頭指針指向第一個結點T建立第二個結點一第一個結點的指針與指向第二個結點T……-最后一個結點的指針指向NULLo填空1:變量S用來累加各結點的數(shù)據(jù)域,因此該空應為data。填空2:每次循環(huán)結束時,指針P指向下一個結點,即p=pnext,填空3:由被調(diào)用函數(shù)的形參列表可知,此處應為指針類型變量,因為要對鏈表的數(shù)據(jù)域求和,所以在將鏈表的頭指針傳給被調(diào)用函數(shù)。下列給定程序中函數(shù)ftin的功能是:將s所指字符串中出現(xiàn)的與tl所指字符串相同的子串全部替換為t2所指字符串,所形成的新串放在w所指的數(shù)組中。要求tl和t2所指字符串的長度相同。例如,當s所指字符串中的內(nèi)容為"abcdabfab",tl所指子串中的內(nèi)容為"ab",t2所指子串中的內(nèi)容為"99"時,在w所指的數(shù)組中的內(nèi)容應為"99cd99f99"?!緟⒖即鸢浮?l)while(*r){*a=*r;a++;r4-+;}【解題思路】while(r)和r++都是簡單的邏輯和語法錯誤,C語言中語句必須以分號";"結尾。只要掌握了C語言的基礎知識,發(fā)現(xiàn)這樣的錯誤是很容易的。函數(shù)fun的功能是:將s所指字符串中下標為偶數(shù)的字符刪除,剩余字符形成的新串放在t所指數(shù)組中。例如,當s所指字符串中的內(nèi)容為"ABCDEFGHIJK"時,在t所指數(shù)組中的內(nèi)容應是:"BDFHJ"o【參考答案】voidfun(char*s,chart[]){intij=O,k=strlen(s);/*k為字符串的長度*/for(i=l;i<k;i=i+2)/*將s所指字符串中下標為奇數(shù)的字符存入t所指字符串中*/t[j++]=s[i];t[j]=\0';【解題思路】本題使用了一種i永遠是奇數(shù)的循環(huán)方法,即fdr(i=l;i<k;i=i+2),因為開始時i的值為1,當i+2循環(huán)時,值永遠是奇數(shù)。循環(huán)結束后在新串的尾部加上結束符'\0'。程序通過定義學生結構體變量,存儲學生的學號、姓名和3門課的成績。函數(shù)fim的功能是:將形參a所指結構體變量s中的數(shù)據(jù)進行修改,并把a的地址作為函數(shù)值返回主函數(shù),從主函數(shù)中輸出修改的數(shù)據(jù)。例如,a所指變量s中的學號、姓名和三門課的成績依次是:10001,"ZhangSan",95、80、88,修改后輸出t中的數(shù)據(jù)應為:10002."LiSi'\96、81、89.【參考答案】structstudent* (2)a->score[i](3)a【解題思路】填空1:函數(shù)定義時,類型標識符指明了本函數(shù)的類型,我們前面已經(jīng)多次提到,函數(shù)的類型實際上是函數(shù)返回值的類型。該題中,用結構指針變量作為函數(shù)類型標識符。填空2:通過循環(huán)語句對指針a所指結構體變量中的3門成績進行修改,所以此處為a score[i]o填空3:通過return語句將形參a返回給主調(diào)函數(shù)。下列給定程序中函數(shù)fim的功能是:從N個字符串中找出最長的串,并將其地址作為函數(shù)值返回。各字符串在主函數(shù)中輸入,并放入一個字符串數(shù)組中。【參考答案】(1)char*fun(char(*sq)[M])(2)retumsp;【解題思路】函數(shù)fun的形參為字符串指針數(shù)組,每個元素指向一個長度為M的字符串,要找出其中最長的字符串,可先假設指針數(shù)組的第1個元素所指的字符串最長,之后對字符串指針數(shù)組進行遍歷,若遇字符串長度大于待定最長字符串的長度,則令該字符串為待定最長字符串,如此循環(huán)直至指針數(shù)組末尾,即可得到最長字符串的地址。(1)此處是函數(shù)定義錯誤,根據(jù)返回值類型可知該函數(shù)應定義為字符型指針函數(shù)。(2)由for循環(huán)體可知,指針sp指向長度最長的字符串,因此應返回sp。編寫函數(shù)fun,其功能是:將a、b中的兩個兩位正整數(shù)合并成一個新的整數(shù)放在c中。合并的方式是:將a中的十位和個位數(shù)依次放在變量c的百位和個位上,b中的十位和個位數(shù)依次放在變量c的十位和千位上。例如,當a=45,b=12,調(diào)用該函數(shù)后c=2415?!緟⒖即鸢浮縱oidfun(inta,intb,long*c)(?c=a%10+(b/10)*10+(a/10)*100+(b%10)*1000;I【解題思路】本題的主要問題如何取出a和b的個位數(shù)和十位數(shù),取出后如何表示成c中相應的位數(shù)。由于a和b都是只有兩位的整數(shù),所以分別對它們除10可得到它們的十位數(shù)(a/10),分別用10對它們求余可得到它們的個位數(shù)(a%10)。得到后對應乘以1000、100、10、1就可得到c的千位數(shù)、百位數(shù)、十位數(shù)和個位數(shù)。注意:使用c時要進行指針運算。下列給定程序中,函數(shù)fun的功能是:將NxN矩陣主對角線元素的值與反向對角線對應位置上元素的值進行交換。例如,若N=3,有下列矩陣:TOC\o"1-5"\h\z2 35 68 9交換后為:2 15 69 8 7【參考答案】(1)t[][N] (2)i=O;i<N(3)s【解題思路】填空1:根據(jù)main函數(shù)中的函數(shù)調(diào)用語句,可以填寫fun函數(shù)定義中的形參內(nèi)容。填空2:由于是NxN矩陣,所以for語句中循環(huán)變量i的取值范圍是0到N,填空3:for循環(huán)體中是變量值交換算法。由N個有序整數(shù)組成的數(shù)列已放在一維數(shù)組中,下列給定程序中函數(shù)fun的功能是:利用折半查找法杳找整數(shù)m在數(shù)組中的位置。若找到,返回其下標值;否則,返回一1。折半查找的基本算法是:每次查找前先確定數(shù)組中待行的范圍low和high(lowvhigh),然后用m與中間位置(mid)上元素的值進行比較。如果m的值大于中間位置元素的值,則下一次的查找范圍落在中間位置之后的元素中;反之,下一次的查找范圍落在中間位置之前的元素中。直到low>high,查找結束?!緟⒖即鸢浮?l)intfun(inta[]>intm)或fiin(inta[].intm)(2)elseifljm>a[mid])【解題思路】(l)fun(inta[],intm)函數(shù)的返回值為int類型,所以定義函數(shù)時,函數(shù)的返回類型不能是void,而是int類型。這里int可以省略,若省略函數(shù)類型標識符,系統(tǒng)將默認為int型。elseIf(m>a[mid])中,關鍵字if需要區(qū)別大小寫,大寫是錯誤的。假定輸入的字符串中只包含字母和*號。請編寫函數(shù)ftin,其功能是:除了尾部的*號之外,將字符中的其它的*號全部刪除。形參p已指向字符串中最后的一個字母。在編寫函數(shù)時,不得使用C語言提供的字符串函數(shù)。例如,字符串中的內(nèi)容為****A*BC*DEF*G*******,刪除后,字符串中的內(nèi)容應當是ABCDEFG*******?!緟⒖即鸢浮縱oidfun(char*a,char*p)char*t=a;fbr(;t<=p;t-H-)*(a-H-)=*t;fbr(;*t!=W;t-H-)*(a-H-)=*t;*a='\0,;/*在字符串最后加上字符串結束標識*/)【解題思路】本題用兩個循環(huán)語句來實現(xiàn)。第1個循環(huán)的作用是將指針P所指字母以前所有非*號的字符保留下來,即刪除指針p以前所有的*號。第2個循環(huán)的作用是將指針p以后的所有*號保留下來。最后在新串的結尾加上結束符。下列給定程序中,函數(shù)ftin的功能是:找出100?999之間(含100和999)所有整數(shù)中各位上數(shù)字之和為x(x為正整數(shù))的整數(shù),并輸出;符合條件的整數(shù)個數(shù)作為函數(shù)值返回。例如,當x值為5時,100?999之間各位上數(shù)字之和為5的整數(shù)有:104、113、122、131、140、203、212、221、230、302、311、320、401、410、500,共有15個。當x值為27時,各位數(shù)字之和為27的整數(shù)是:999,只有1個?!緟⒖即鸢浮?99 (2)t/10 (3)x【解題思路】填空1:題目要求找出100?999之間附合要求的數(shù),所以while語句的循環(huán)條件是t<=999。填空2:變量s2存放三位數(shù)的十位,取出三位數(shù)上位數(shù)值的方法為s2=(t/10)%10o填空3:題目需要判斷各位上數(shù)字之和是否為x,所以if語句條件表達式是sl+s2+s3==x。下列給定程序中函數(shù)fun的功能是:從低位開始依次取出長整型變量s中偶數(shù)位上的數(shù),構成一個新數(shù)放在t中。高位仍在高位,低位仍在低位。例如,當s中的數(shù)為7654321時,t中的數(shù)為642?!緟⒖即鸢浮?l)voidfun(longs,long*t)(2)while(s>0)【解題思路】函數(shù)的形參類型應與實參類型相同,主函數(shù)中函數(shù)fim()的調(diào)用方式說明其參數(shù)應為指針類型,所以形參t應定義為long*t?while循環(huán)的功能是,每循環(huán)一次就從s中的數(shù)上取出一位進行運算,直到取完為止,所以循環(huán)條件為s>0o學生的記錄由學號和成績組成,N名學生的數(shù)據(jù)已放入主函數(shù)中的結構體數(shù)組s中,請編寫函數(shù)fun,其功能是:按分數(shù)降序排列學生的記錄,高分在前,低分在后?!緟⒖即鸢浮縱oidfiin(STRECa[])(intij;STRECt;for(i=l;i<N;i++)/*用冒泡法進行排序,進行N-1次比較*/for(j=0; j++)/*在每一次比較中要進行N-1次兩兩比較*/if(a[j].s<a[j+1].s){t=a[j];a[j]=a[j+l];a[j+l]=t;}/*按分數(shù)的高低排列學生的記錄,高分在前*/1【考點分析】本題考查:排序算法;結構體類型?!窘忸}思路】對N個數(shù)進行排序的算法很多,其中最簡單的排序算法是冒泡算法。利用雙層for循環(huán)嵌套和一個if判斷語句來實現(xiàn),外層循環(huán)用來控制需比較的輪數(shù),內(nèi)層循環(huán)用來控制兩兩比較。程序通過定義學生結構體變量,存儲學生的學號、姓名和3門課的成績。函數(shù)ftjn的功能是:對形參b所指結構體變量中的數(shù)據(jù)進行修改,并在主函數(shù)中輸出修改后的數(shù)據(jù)。例如,若b所指變量t中的學號、姓名和三門課的成績依次是:10002、"ZhangQi”、93、85、87,修改后輸出t中的數(shù)據(jù)應為:10004、"LiJie"、93、85、87.【參考答案】->sno(2)->name(3)&t【解題思路】填空1:給b所指結構體變量學生學號賦值。填空2:通過strcpy字符串拷貝函數(shù)修改b所指結構體變量學生姓名。填空3:由于函數(shù)fun的形參是指針型變量,所以在main中調(diào)用函數(shù)fun的參數(shù)應為指針或地址。下列給定程序中函數(shù)fun的功能是:用遞歸算法求形參a的平方根。求平方根的迭代公式如下:xl=:(xO+W)2x0例如,a為2時,平方根值為:1.414214?!緟⒖即鸢浮?l)doublefun(doublea,doublexO)(2)ifi(fabs(xl-x0)>=0.00001)【解題思路】用c語言求平方根的方法一般有兩種經(jīng)典的算法,分別是迭代法和遞歸法,本題要求僅用遞歸法。該程序采用了if語句,錯誤在于if語句的判斷條件,程序的含義是當?shù)Y果差大于誤差時進行循環(huán),故正確的答案應該是if(fabs(xl-x0)>=0.00001),學生的記錄由學號和成績組成。N名學生的數(shù)據(jù)已放入主函數(shù)中的結構體數(shù)組s中,請編寫函數(shù)fun,其功能是:把高于等于平均分的學生數(shù)據(jù)放在b所指的數(shù)組中,高于等于平均分的學生人數(shù)通過形

溫馨提示

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

評論

0/150

提交評論