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

下載本文檔

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

文檔簡介

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

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

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

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

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

溫馨提示

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

評論

0/150

提交評論