全國計(jì)算機(jī)等級考試二級C語言資料(機(jī)試)_第1頁
全國計(jì)算機(jī)等級考試二級C語言資料(機(jī)試)_第2頁
全國計(jì)算機(jī)等級考試二級C語言資料(機(jī)試)_第3頁
全國計(jì)算機(jī)等級考試二級C語言資料(機(jī)試)_第4頁
全國計(jì)算機(jī)等級考試二級C語言資料(機(jī)試)_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、全國計(jì)算機(jī)等級考試二級C語言考前復(fù)習(xí)資料(機(jī)試)機(jī)試做題技巧概述一、程序填空題【解析】該類型主要考察學(xué)員對一個(gè)C程序的整體把握能力。首先須通讀整個(gè)源程序,了解程序的功能后試著邊填空邊調(diào)試,分析輸出結(jié)果,以找到正確答案。因此,不像程序修改題那么簡單?!境绦蛱羁疹}的特點(diǎn)和注意事項(xiàng)】(1)程序填空的試題中通常包含三個(gè)空需要填寫。(2)試題中用"*found*/"來提示在下一行或下二行注明填空的位置及編號,如_1_。(3)程序填空考核對程序的整體把握,出題點(diǎn)可能是:for循環(huán)語句的初始化或條件判斷、函數(shù)返回值、if語句的條件判斷、鏈表中指針如何移動(dòng)、文件操作相關(guān)函數(shù)的參數(shù)等。(4)

2、特別要注意的是:只能在填空的位置填寫語句或表達(dá)式,不要增行或刪行,不要改動(dòng)程序行的順序,更不要改動(dòng)程序的結(jié)構(gòu)?!窘ㄗh答題步驟】(1)首先仔細(xì)審題,了解試題的要求,看清題目給出的輸入和輸出例示,以便檢驗(yàn)程序運(yùn)行的結(jié)果是否正確。(2)審視"/*found*/"所在函數(shù),根據(jù)題義理解程序所采用的基本算法,做到心里有數(shù)。(3)填好空后對測試程序進(jìn)行檢查是否有語法錯(cuò)誤。當(dāng)編譯提示有語法錯(cuò)時(shí),可參考編譯提示來查找并改正錯(cuò)誤。(4)當(dāng)不再出現(xiàn)語法錯(cuò)時(shí),執(zhí)行程序, 按照試題的示例給出的數(shù)據(jù)進(jìn)行試算,若試算的結(jié)果與給出的輸出結(jié)果相同時(shí),該題就做對了;若試算的結(jié)果與給出的輸出結(jié)果不同,就應(yīng)進(jìn)一

3、步檢查程序中的邏輯錯(cuò)誤。(5)修改完成,得到正確結(jié)果后,一定不要忘記把修改后的程序存盤。 二、程序修改題【解析】該類型主要考察學(xué)員對C程序部分結(jié)構(gòu)或算法的分析和理解能力。因此,對學(xué)員的知識把握能力要求不高,通常可以借助計(jì)算機(jī)幫我們改錯(cuò)(僅限語法錯(cuò)誤)。若非語法錯(cuò)誤,則需對程序邊調(diào)試邊找錯(cuò),分析輸出結(jié)果,找出錯(cuò)誤所在并改正?!境绦蛱羁疹}的特點(diǎn)和注意事項(xiàng)】(1)上機(jī)改錯(cuò)的試題中通常包含兩個(gè)(或三個(gè))錯(cuò)誤需要修改。(2)試題中用"*found*/"來提示在下一行(或下面第二行)有錯(cuò)。(3)錯(cuò)誤的性質(zhì)基本分語法錯(cuò)誤和邏輯錯(cuò)誤兩種,也有些試題要求把語句添加在下劃線處。(4)特別注意:

4、只能在出錯(cuò)的行上進(jìn)行修改,不要改動(dòng)程序行的順序,更不要自己另編程序?!窘ㄗh答題步驟】(1)首先仔細(xì)審題,了解試題的要求,看清楚試題給出的輸入和輸出例示,以便檢驗(yàn)改錯(cuò)后程序運(yùn)行的結(jié)果是否正確。(2)審視"/*found*/"所在函數(shù),根據(jù)題義理解程序所采用的基本算法,做到心里有數(shù)。(3)先對測試程序進(jìn)行檢查是否有語法錯(cuò)誤。當(dāng)編譯提示有語法錯(cuò)時(shí),可參考編譯提示來查找并改正錯(cuò)誤。(4)當(dāng)不再出現(xiàn)語法錯(cuò)時(shí),執(zhí)行程序, 按照試題的示例給出的數(shù)據(jù)進(jìn)行試算,若試算的結(jié)果與給出的輸出結(jié)果相同時(shí),該題就做對了;若試算的結(jié)果與給出的輸出結(jié)果不同,就應(yīng)進(jìn)一步檢查程序中的邏輯錯(cuò)誤。(5)當(dāng)程序存在

5、邏輯錯(cuò)誤時(shí),首先應(yīng)當(dāng)理解題意、讀懂程序的算法,必要時(shí)可按步檢查數(shù)據(jù)的流程,以便確定錯(cuò)誤所在。例如,題目要求數(shù)據(jù)按由小到大排序,而結(jié)果數(shù)據(jù)是按由大到小進(jìn)行了排序,問題可能出現(xiàn)在條件判斷上。又如,輸出的字符串比預(yù)期的短,就有可能字符串的結(jié)束標(biāo)志放錯(cuò)了位置。再如做循環(huán)的時(shí)候數(shù)組上限下限錯(cuò)誤了,下標(biāo)是從0開始 而不是1開始的。修改程序中的邏輯錯(cuò)時(shí),要求考生認(rèn)真讀懂程序代碼。(6)修改完成,得到正確結(jié)果后,一定不要忘記把修改后的程序存盤。三、程序設(shè)計(jì)題【解析】主要考察學(xué)員對C語言綜合理解能力和上機(jī)實(shí)踐能力,能夠?qū)λo問題,運(yùn)用所學(xué)知識,按照程序設(shè)計(jì)的步驟獨(dú)立編寫出一段程序,學(xué)會用計(jì)算機(jī)語言描述日常生活中

6、所見到的現(xiàn)象和擬題,通過實(shí)際上機(jī)操作積累經(jīng)驗(yàn),鍛煉用C語言描述問題的邏輯思維能力?!窘ㄗh答題步驟】(1)首先仔細(xì)審題,了解試題的要求,記下試題給出的輸入和輸出例示,以便檢驗(yàn)在完成指定的函數(shù)后程序運(yùn)行的結(jié)果是否正確。(2)調(diào)出源程序后,應(yīng)對照函數(shù)首部的形參,審視主函數(shù)中調(diào)用函數(shù)時(shí)的實(shí)參內(nèi)容,以便明確在函數(shù)中需要處理的數(shù)據(jù)對象。(3)理解試題的要求,審視主函數(shù)中調(diào)用函數(shù)的方式,若在表達(dá)式中調(diào)用函數(shù)(如把函數(shù)值賦給某個(gè)對象),則要求有函數(shù)值返回,需注意函數(shù)的類型,并在函數(shù)中用return語句返回函數(shù)值;若主函數(shù)中僅用語句形式調(diào)用函數(shù),則需要通過形參間接地返回所得結(jié)果。(4)選擇適當(dāng)?shù)乃惴ㄟM(jìn)行編程,輸

7、入程序語句。不要忘記及時(shí)存盤!(5)編譯程序,直到?jīng)]有語法錯(cuò)誤。(6)調(diào)試程序,利用試題中給出的例示數(shù)據(jù)進(jìn)行輸入(若要求輸入的話),運(yùn)行程序,用示例的輸出數(shù)據(jù)檢驗(yàn)輸出結(jié)果,直到結(jié)果相同。 特別要注意:程序設(shè)計(jì)題要求完全設(shè)計(jì)正確才會給分,因此,要么是40分,要么是0分,不會給中間分。那么想通過機(jī)試,程序填空題和程序修改題通常來說必須全部正確才能容易通過,否則不容易通過。第 30 頁 共 30 頁上機(jī)改錯(cuò)題重點(diǎn)題型歸類分析分類一:簡單語法錯(cuò)誤u 題型一:符號遺漏1、下列程序的功能是:讀入一個(gè)整數(shù) k(2k10000),打印它的所有質(zhì)因子(即所有為素?cái)?shù)的因子)。例如,若輸入整數(shù):2310,則應(yīng)輸出:

8、2、3、5、7、11。請改正程序中的語法錯(cuò)誤,使程序能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include “conio.h”#include “stdio.h”/*found*/IsPrime ( int n ); int i, m;m = 1;for ( i = 2; i < n/ i+ )/*found*/ if !( n%i ) m=0; break ; return ( m );main () int j, k;clrscr ();printf (“nPease enter an integer number between 2 a

9、nd 10000:”); scanf (“%d”,&k );printf ( “nn The prime factor (s) of % d is ( are ):”, k );for ( j = 2; j <= k; j+ )if ( ( ! k%j ) ) && ( IsPrime ( j ) ) printf ( n % 4d, j );printf (n);【參考答案】(1) IsPrime(int n) (2) if(!(n%i)【解題技巧】常見的符號遺漏問題包括以下兩種:(1)分號問題l 遺漏分號:k+>k+; break>break; r

10、eturn sum>return sum; l 分號多余:if(k>1); >if(k>1) while(k>1); >while(k>1) switch( ); > switch( ) (2)遺漏括號if k>1 > if(k>1) if !(n%i) > if (!(n%i) while k>1 > while(k>1)u 題型二:符號出錯(cuò)2、給定程序MODI1.C中函數(shù) fun 的功能是:用下面的公式求的近似值,直到最后一項(xiàng)的絕對值小于指定的數(shù)(參數(shù)num )為止: 1 1 1 1 - + - +

11、. 4 3 5 7 例如, 程序運(yùn)行后, 輸入0.0001, 則程序輸出3.1414。 請改正程序中的錯(cuò)誤,使它能輸出正確的結(jié)果。 注意:不要改動(dòng) main 函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include <math.h>#include <stdio.h>float fun ( float num ) int s ; float n, t, pi ; t = 1 ; pi = 0 ; n = 1 ; s = 1 ;/*found*/ while(t >= num) pi = pi + t ; n = n + 2 ; s = -s ;/*found*

12、/ t = s % n ; pi = pi * 4 ; return pi ;main( ) float n1, n2 ; printf("Enter a float number: ") ;scanf("%f", &n1) ; n2 = fun(n1) ; printf("%6.4fn", n2) ;【參考答案】(1)while(fabs(t)>=num) (2)t=s/n3、下列給定程序中,函數(shù)fun的功能是:從低位開始取出長整型變量s中偶數(shù)位上的數(shù),一次構(gòu)成一個(gè)新數(shù)放在t中。例如,當(dāng)s中的數(shù)為7654321時(shí),t是

13、的數(shù)為642。請改正程序中的錯(cuò)誤,使程序能得出正確的結(jié)果。注意,不要改多main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include <conio.h>#include <stdio.h>/*found*/void fun (long s, long t)long sl=10; s/=10; *t=s%10;/*found*/ while (s<0) s=s/100; *t=s%10*sl+*t; sl=sl*10; main()long s,t; clrscr(); printf("nPlease enter s:");scanf(&

14、quot;%ld",&s); fun(s,&t); printf("The result is : %ldn",t);【參考答案】(1)void fun (long s, long *t) (2)while (s>0)【解題技巧】符號出錯(cuò)會表現(xiàn)在以下七個(gè)方面:(1)“%”和除號“/”混淆,如int i=j/k;>int i=j%k;有時(shí)候反過來考,將“%”改為“/”(2)賦值號“=”和等號“= =”混淆如if(i=j)>if(i=j) while(i=j)>while(i=j)(3)復(fù)合賦值出錯(cuò),如:i=10>i/=1

15、0,除號是左下的斜線(4)強(qiáng)制轉(zhuǎn)換出錯(cuò),如int i=int(f)>int i=(int)f強(qiáng)制轉(zhuǎn)化是在類型上加括號(5)大小寫問題,如IF() >if() 或For( ) >for() 注:所有的關(guān)鍵字都是小寫字母(6)條件判斷時(shí)的符號問題(要根據(jù)具體題意來修改)如if(fabs(n-m)<0.0001) >if(fabs(n-m)> 0.0001) if(*s<*p)>if(*s>*p)for(;j<=n;)>for(;j<n;) int *a10 >int (*a)10(7)浮點(diǎn)數(shù)不能比較大小,只能用絕對值來比

16、較u 題型三:變量定義出錯(cuò)4、程序的功能更是求方程2x3-4x2+3x-6=0的一個(gè)根,求要求絕對誤差不超過0.001。例如,若給m輸入 -100,給n輸入90,則函數(shù)求得的一個(gè)根值為2.000。 請改正程序中的錯(cuò)誤,使它能得出正確結(jié)果。 注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。#include <stdio.h>#include <math.h>double funx(double x) return(2*x*x*x-4*x*x+3*x-6); double fun( double m, double n)/*found*/ int r; r

17、=(m+n)/2;/*found*/ while(fabs(n-m)<0.001) if(funx(r)*funx(n)<0) m=r;else n=r;r=(m+n)/2; return r;main( ) double m,n, root; printf("Enter m n : n"); scanf("%lf%lf",&m,&n); root=fun( m,n ); printf("root = %6.3fn",root);【參考答案】:(1)double r;(2)while(fabs(m-n)&g

18、t;0.001)【解題技巧】變量定義可能會出現(xiàn)以下三種錯(cuò)誤:(1)變量定義時(shí)沒有初始化,或者初始化的值不對,如int s=1>int s=0,一般在累加求和時(shí)容易出現(xiàn)此類錯(cuò)誤(2)變量定義出錯(cuò),如int sum=0.0>double sum=0.0 或者是使用變量前并沒有定義(3)變量定義的類型和程序中使用的類型不匹配,如int r>double r;u 題型四:賦值出錯(cuò)5、給定程序MODI1.C中函數(shù)fun的功能是:將長整型數(shù)中每一位上為奇數(shù)的數(shù)依次取出,構(gòu)成一個(gè)新數(shù)放在t中。高位仍在高位,低位仍在低位。 例如,當(dāng)s中的數(shù)為:87653142時(shí),t中的數(shù)為:7531。 請改

19、正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。 注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include <stdio.h>void fun (long s, long *t) int d; long sl=1;/*found*/ t = 0; while ( s > 0) d = s%10;/*found*/ if (d%2 = 0) *t = d * sl + *t;sl *= 10; s /= 10; main() long s, t; printf("nPlease enter s:"); scanf("%ld"

20、;, &s); fun(s, &t); printf("The result is: %ldn", t);【參考答案】:(1)*t=0;(2)if(d%2!=0)6、下列給定程序中,函數(shù)fun的功能是:實(shí)現(xiàn)兩個(gè)整數(shù)的交換。例如給a和b分別輸入60和65,輸出為:a=65 b=60請改正程序中的錯(cuò)誤,使程序能得出正確的結(jié)果。注意,不要改多main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include <conio.h>#include <stdio.h>/*found*/void fun (int a,b) int t;/*fou

21、nd*/ t=b;b=a;a=t; main()int a,b; clrscr(); printf("Enter a,b:");scanf("%d%d",&a,&b); fun(&a,&b); printf("a=%d b=%dn",a,b);【參考答案】(1)void fun (int *a,int *b) (2)t=*b;*b=*a;*a=t;【解題技巧】在解題時(shí),要注意以下幾種常見的錯(cuò)誤:(1)賦值時(shí)類型不匹配。如char *r,*p;if(r= =p)>if(*r= =*p),*r,*p才

22、是內(nèi)容char ch="0">char ch='0'字符是用單引號括起來char ch='0'>char ch='0'此時(shí)是將字符0賦給ch變量,而不是0 > char ch=0;'0'的ASCII碼就是0,可直接用0進(jìn)行賦值(2)指針類賦值出錯(cuò)(左右兩邊類型不一致)如:int *a;int x=10,t=20;a=&x; a=t;>a=&t;指針只能存放變量的地址a=t;>*a=t;將變量賦給指針?biāo)赶虻淖兞浚?)實(shí)現(xiàn)交換時(shí)賦值出錯(cuò)如:if(a<b) t=a

23、;b=a;b=t->if(a<b) t=a;a=b;b=t; 錯(cuò)誤形式 正確形式 void fun(int *a,int *b) int t;t=b;b=a;a=t;void fun(int *a,int *b) int t; t=*b;*b=*a;*a=t;分類二:固定語法格式搭配錯(cuò)誤u 題型一:輸入輸出格式出錯(cuò)1、給定程序MODI1.C中,fun函數(shù)的功能是:先從鍵盤上輸入一個(gè)3行3列矩陣的各個(gè)元素的值,然后輸出主對角線元素之積。請改正程序中的錯(cuò)誤,或在橫線處填上適當(dāng)?shù)膬?nèi)容并把橫線刪除,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#i

24、nclude <stdio.h>int fun ()int a 3 3, sum, i, j;*_; for (i=0;i<3;i+) for (j=0;j<3;j+)* scanf (“%d”,a i j); for (i=0; i<3; i+) sum=sum*ai i;printf (“Sum=%dn”, sum);main () fun (); 【參考答案】(1)sum = 1; (2)scanf("%d", &aij);2、給定程序MODI1.C中函數(shù)fun的功能是:輸出M行M列整數(shù)方陣,然后求兩條對角線上元素之和,返回此和數(shù)

25、。 請改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。 注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include <stdio.h>#define M 5/*found*/int fun(int n, int xx) int i, j, sum=0; printf( "nThe %d x %d matrix:n", M, M ); for( i = 0; i < M; i+ ) for( j = 0; j < M; j+ )/*found*/ printf( "%f ", xxij ); printf("

26、;n"); for( i = 0 ; i < n ; i+ ) sum += xxii+xxi n-i-1 ; return( sum );main( ) int aaMM=1,2,3,4,5,4,3,2,1,0,6,7,8,9,0,9,8,7,6,5,3,4,5,6,7; printf ( "nThe sum of all elements on 2 diagnals is %d.",fun( M, aa );【參考答案】(1)int fun(int n,int xxM)(2)printf("%d",xxij);【解題技巧】注意輸入輸出

27、的正確格式,關(guān)注容易出錯(cuò)的地方,如下圖正確形式 錯(cuò)誤形式scanf(“%d”,aij)int i,*p=&i; scanf(“%d”,&p);int i=10;printf(“%f”,i);printf(“%d”, “string”);scanf(“%d”,&aij)int i,*p=&i; scanf(“%d”,p);int i=10;printf(“%d”,i);printf(“%s”, “string”);如:scanf(“%d”,aij) >scanf(“%d”,&aij) int i,*p=&i; scanf(“%d”,&

28、p) >scanf(“%d”,p);int i=10; printf(“%f”,i);>printf(“%d”,i); printf(“%d”, “string”); > printf(“%s”, “string”);u 題型二:選擇結(jié)構(gòu)中的基本格式問題3、給定程序MODI1.C中函數(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。請改正程序中的錯(cuò)誤,使它能得出正確結(jié)果。 注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。#include &

29、lt;stdio.h>long fun(int g)/*found*/ switch(g); case 0: return 0;/*found*/ case 1 ;case 2 : return 1 ; return( fun(g-1)+fun(g-2) );main() long fib; int n; printf("Input n: "); scanf("%d",&n); printf("n = %dn",n); fib=fun(n); printf("fib = %dnn",fib);【參考答

30、案】:(1)switch(g)(2)case 1: return 1; case 2:return 1;【解題技巧】注意選擇結(jié)構(gòu)的正確語法格式,關(guān)注容易出錯(cuò)的地方,如下圖正確形式 錯(cuò)誤形式switch() ; 分號多余 case 1:語句1;break;case 2; 此處應(yīng)該為冒號case3:語句3 case與常量表達(dá)式之間有空格switch() case 1:語句1;break;case 2:case 3:語句3;u 題型三:循環(huán)結(jié)構(gòu)中的基本格式問題4、給定程序MODI1.C中函數(shù)fun的功能是:根據(jù)整型形參m的值,計(jì)算如下公式的值。 1 1 1 t = 1 - - - - - - - 2

31、*2 3*3 m*m 例如,若 m 中的值為: 5,則應(yīng)輸出: 0.536389。 請改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。 注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include <stdio.h>double fun ( int m ) double y = 1.0 ;int i ;/*found*/ for(i = 2 ; i < m ; i+)/*found*/ y -= 1 /(i * i) ; return( y ) ;main( ) int n = 5 ; printf( "nThe result is %lfn"

32、;, fun ( n ) ) ;【參考答案】:(1)for(i=2;i<=m;i+)(2)y-=1.0/i/i;【解題技巧】注意選擇結(jié)構(gòu)的正確語法格式,關(guān)注容易出錯(cuò)的地方,如下圖正確形式 錯(cuò)誤形式for(i=0,i<10,i+)以分號為間隔符for(i=0;i<n;i+)循環(huán)的次數(shù)以具體題目來判斷(改錯(cuò)中的經(jīng)??迹ゝor(i=0;i<10;i+)for(i=0;i<n-1;i+)分類三:函數(shù)類錯(cuò)誤(考試重點(diǎn)、難點(diǎn),出現(xiàn)的頻率非常高)u 題型一:函數(shù)定義時(shí)出錯(cuò)1、給定程序MODI1.C中函數(shù)fun的功能是:根據(jù)形參m的值(2m9,在m行m列的二維數(shù)組中存放如下所示規(guī)

33、律的數(shù)據(jù),由main函數(shù)輸出。例如,若輸入 2 | 若輸入 4 則輸出: | 則輸出: 1 2 | 1 2 3 4 2 4 | 2 4 6 8 | 3 6 9 12 | 4 8 12 16 請改正程序函數(shù)中的錯(cuò)誤,使它能得出正確的結(jié)果。 注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include <conio.h>#include <stdio.h>#define M 10int aMM = 0 ;/*found*/void fun(int *a, int m) int j, k ; for (j = 0 ; j < m ; j+ )for

34、 (k = 0 ; k < m ; k+ )/*found*/ ajk = k * j ;main ( ) int i, j, n ; printf ( " Enter n : " ) ; scanf ("%d", &n ) ; fun ( a, n ) ; for ( i = 0 ; i < n ; i+) for (j = 0 ; j < n ; j+) printf ( "%4d", aij ) ; printf ( "n" ) ; 【參考答案】:(1) void fun(int a

35、M, int m)(2)ajk=(k+1)*(j+1);2、給定程序MODI1.C中函數(shù) fun 的功能是:求S的值。 例如,當(dāng)k為10時(shí),函數(shù)值應(yīng)為:1.533852。 請改正程序中的錯(cuò)誤,使程序能輸出正確的結(jié)果。 注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include <stdio.h>#include <math.h>/*found*/void fun( int k ) int n; double s, w, p, q; n = 1; s = 1.0; while ( n <= k ) w = 2.0 * n; p = w - 1

36、.0; q = w + 1.0; s = s * w *w/p/q;n+; /*found*/ return smain ( ) printf("%fn", fun (10);【參考答案】(1) float fun(int k)(2)return s;3、給定程序MODI1.C中函數(shù)fun的功能是: 比較兩個(gè)字符串,將長的那個(gè)字符串的首地址作為函數(shù)值返回。 請改正函數(shù)fun中指定部位的錯(cuò)誤, 使它能得出正確的結(jié)果。 注意: 不要改動(dòng)main函數(shù), 不得增行或刪行, 也不得更改程序的結(jié)構(gòu)!#include <stdio.h>/*found*/char fun(ch

37、ar *s, char *t) int sl=0,tl=0; char *ss, *tt; ss=s; tt=t; while(*ss) sl+;/*found*/ (*ss)+; while(*tt) tl+;/*found*/ (*tt)+; if(tl>sl) return t; else return s;main() char a80,b80; printf("nEnter a string : "); gets(a); printf("nEnter a string again : "); gets(b); printf("n

38、The longer is :nn"%s"n",fun(a,b);【參考答案】(1) char *fun(char *s,char *t)(2)ss+;(3)tt+;【解題技巧】函數(shù)頭部容易出錯(cuò)的幾個(gè)地方:(1)int fun(int m);->int fun(int m)函數(shù)定義時(shí)末尾的分號是多余的(2)int fun(int m) int i=20;char ch;->int fun(int m) 函數(shù)名后必須要有大括號(3)void fun(int a,int b)->void fun(int *a,int *b)參數(shù)類型不對(4)void

39、 fun(int a,b)->void fun(int a,int b)相同類型的參數(shù)也要分開定義(5)void fun(int a,int n)->void fun(int a10,int n)數(shù)組定義時(shí)二維下標(biāo)不能省略(6)voidfun(int n)->void fun(int n)返回值類型和函數(shù)名之間有空格注意函數(shù)定義的一般格式,關(guān)注容易出錯(cuò)的地方,如下圖:正確形式 錯(cuò)誤形式int fun(int a,b);int k=2;while(k<=m&&(k%b)k+;.if(k=a)return 1.0;else return 0.0double

40、fun(int a,int b)int k=2;while(k<=m&&(k%b)k+;.if(k= =a)return 1.0;else return 0.0當(dāng)+、- -與*結(jié)合問題,搞清楚什么時(shí)候應(yīng)該加括號。搞清楚什么時(shí)候該加*號+、- -和*是同一優(yōu)先級,結(jié)合性是從右向左*p+; 是指針p向后移動(dòng)一個(gè)存儲單元 然后取指針p所指變量的值。(*p)+; 是將指針p所指變量的值自增1.u 題型二:返回值錯(cuò)誤4、下列給定程序中,函數(shù)fun的功能是:統(tǒng)計(jì)字符串中各元音字母(即:A、E、I、O、U)的個(gè)數(shù)。注意:字母不分大、小寫。例如:若輸入THIs is a boot,則輸出

41、應(yīng)該是1、0、2、2、0。請改正程序中的錯(cuò)誤,使它能得出正確結(jié)果。#include <conio.h>#include<stdio.h>/*found*/fun(char *s,int num5)int k,i=5;for(k=0;k<i;k+)/*found*/numi=0;for(;*s;s+)i=-1;/*found*/switch(s) case a:case A:i=0;break;case e:case E:i=1;break;casei:caseI:i=2;break;case0:case 0:i=3;break;caseu:caseU:i=4;br

42、eak;if(i>=0)numi+;main()int i;char s30;int num5=0;printf("請輸入一個(gè)字符串:n");gets(s);fun(s,num);for(i=0;i<5;i+)printf("%d、",numi);【參考答案】(1)void fun(char *s,int num5) (2)numk=0; (3)switch(*s)【解題技巧】返回值錯(cuò)誤主要表現(xiàn)在以下四個(gè)方面:(1)有return語句,但缺少返回值類型,fun(int n)->double fun(int n) 經(jīng)常考(2)缺少返回值。

43、函數(shù)定義時(shí)有返回值類型,但程序中缺少return 語句(3)返回值類型和函數(shù)定義時(shí)的類型不一致。如調(diào)用函數(shù)時(shí)返回值為double類型,但定義時(shí)為int類型,int fun(int a) >double fun(int a) (4)返回值不對,如:return (a)->return (b);分類四:編譯預(yù)處理、鏈表類錯(cuò)誤u 題型一:帶參數(shù)的宏定義出錯(cuò)1、給定程序MODI1.C中函數(shù)fun的功能是:計(jì)算函數(shù)F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值。其中x和y的值不等,z和y的值不等。例如,當(dāng)x的值為9、y的值為11、z的值為15時(shí),函數(shù)值為 -3.50。

44、請改正程序中的錯(cuò)誤,使它能得出正確結(jié)果。#include <stdio.h>#include <math.h>#include <stdlib.h>/*found*/#define FU(m,n) (m/n)float fun(float a,float b,float c) float value; value=FU(a+b,a-b)+FU(c+b,c-b);/*found*/ Return(Value);main() float x,y,z,sum; printf("Input x y z: ");scanf("%f%f%f

45、",&x,&y,&z); printf("x=%f,y=%f,z=%fn",x,y,z); if (x=y|y=z)printf("Data error!n");exit(0); sum=fun(x,y,z); printf("The result is : %5.2fn",sum);【參考答案】:(1)#define FU(m,n) (m)/(n) (2)return (value);【解題技巧】帶參數(shù)的宏定義,要注意宏替換部分有沒有括號,一般情況下是缺少括號或者括號的位置不正確,如 #define

46、 F(m,n) (m/n)>#define F(m,n) (m)/(n)u 題型二:鏈表指針向后移動(dòng)節(jié)點(diǎn)時(shí)出錯(cuò)2、給定程序MODI1.C是建立一個(gè)帶頭結(jié)點(diǎn)的單向鏈表, 并用隨機(jī)函數(shù)為各結(jié)點(diǎn)數(shù)據(jù)域賦值。函數(shù)fun的作用是求出單向鏈表結(jié)點(diǎn)(不包括頭結(jié)點(diǎn))數(shù)據(jù)域中的最大值,并且作為函數(shù)值返回。 請改正函數(shù)fun中指定部位的錯(cuò)誤, 使它能得出正確的結(jié)果。#include <stdio.h>#include <stdlib.h>typedef struct aa int data; struct aa *next; NODE;int fun ( NODE *h ) int

47、max=-1;NODE *p;/*found*/ p=h ; while(p) if(p->data>max ) max=p->data;/*found*/ p=h->next ; return max;outresult(int s, FILE *pf) fprintf(pf,"nThe max in link : %dn",s);NODE *creatlink(int n, int m) NODE *h, *p, *s; int i; h=p=(NODE *)malloc(sizeof(NODE);h->data=9999; for(i=1

48、; i<=n; i+) s=(NODE *)malloc(sizeof(NODE); s->data=rand()%m; s->next=p->next; p->next=s; p=p->next; p->next=NULL; return h;outlink(NODE *h, FILE *pf) NODE *p; p=h->next; fprintf(pf,"nTHE LIST :nn HEAD "); while(p) fprintf(pf,"->%d ",p->data); p=p->

49、;next; fprintf(pf,"n"); main() NODE *head; int m; head=creatlink(12, 100); outlink(head , stdout); m=fun(head); printf("nTHE RESULT :n"); outresult(m, stdout);【參考答案】(1)p=h->next;(2)p=p->next;【解題技巧】在鏈表題中,一般會有多個(gè)結(jié)構(gòu)體指針,要注意每個(gè)指針的指向,尤其是在指針間相互賦值時(shí),指針的指向就會發(fā)生變化,這時(shí)就容易出現(xiàn)改錯(cuò)題,建議在做此類型的題目時(shí)在

50、紙上畫一個(gè)指針的指向圖。指針在鏈表中的移動(dòng)是??碱}型,指針向后移動(dòng)一個(gè)節(jié)點(diǎn)的固定形式是:p=p->nex,如上題中,應(yīng)將p=h->next應(yīng)該改為p=p->next。上機(jī)編程題重點(diǎn)題型歸類分析加雙下劃線和灰背景的為可出填空的地方,請注意!上機(jī)編程題重點(diǎn)題型歸類分析加雙下劃線和灰背景的為可出填空的地方,請注意!分類一:數(shù)學(xué)問題u 題型一:整數(shù)合并1、函數(shù)fun的功能是: 將a、b中的兩個(gè)兩位正整數(shù)合并形成一個(gè)新的整數(shù)放在c中。合并的方式是:將a中的十位和個(gè)位數(shù)依次放在變量c的百位和個(gè)位上,b中的十位和個(gè)位數(shù)依次放在變量c的千位和十位上。 例如,當(dāng)a45,b=12。調(diào)用該函數(shù)后,c=1425。請編寫fun函數(shù)實(shí)現(xiàn)該功能:void fun(int a, int b, long *c)*c=a/10*100+a%10+b/10*1000+b%10*10;/取多位數(shù)各位上的數(shù)字【解題思路】本題主要考了以下幾個(gè)知識點(diǎn):(1)如何獲得一個(gè)二位數(shù)的個(gè)位和十位:不管是幾位數(shù),獲得個(gè)位數(shù)的方法:a%10即可獲得個(gè)位兩位數(shù)獲得十位的方法:a/10(2)十進(jìn)制中四位數(shù)的構(gòu)成:如十進(jìn)制的1234=1*1000+2*100+3*10+4*1也就是說:只要知道該四位數(shù)的各位上的數(shù)碼,通過以上組合的方式就可以組合成一個(gè)四位數(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

提交評論