C語言程序設計與實驗指導 習題答案 張光桃_第1頁
C語言程序設計與實驗指導 習題答案 張光桃_第2頁
C語言程序設計與實驗指導 習題答案 張光桃_第3頁
C語言程序設計與實驗指導 習題答案 張光桃_第4頁
C語言程序設計與實驗指導 習題答案 張光桃_第5頁
已閱讀5頁,還剩71頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

2/2目錄任務2順序結構 2學中做參考答案 2知識測試參考答案與解析 2任務3選擇結構 7學中做參考答案 7知識測試參考答案與解析 8任務4循環結構 12學中做參考答案 12知識測試參考答案與解析 14任務5數組 20學中做參考答案 20知識測試參考答案與解析 23任務6指針 34學中做參考答案 34知識測試參考答案與解析 35任務7函數 40學中做參考答案 40知識測試參考答案與解析 41任務8字符串 48學中做參考答案 48知識測試參考答案與解析 50任務9結構體 61學中做參考答案 61知識測試參考答案與解析 62任務10文件 68學中做參考答案 68知識測試參考答案與解析 70

任務2順序結構學中做參考答案(1)D(2)C(3)B(4)參考代碼為:#include<stdio.h>intmain(){ floata,b,c,v; a=3.0;b=4.0;c=5.0; v=a*b*c; printf("%f\n",v); return0;}(5)代碼如下:#include<stdio.h>intmain(){ intnum; scanf("%d",&num); printf("%d",num); return0;}或者#include<stdio.h>intmain(){ charnum[100]; gets(num); puts(num); return0;}(6)括號中的代碼為:scanf("%d%d",&a,&b);知識測試參考答案與解析A【解析】選項B中運算符”%”前后必須為整數;選項C中不能將變量賦給表達式x+n;選項D中不能將表達式4+1賦給常量5。A【解析】C語言本身沒有提供輸入輸出語句,但是可以通過調用標準庫函數中提供的輸入和輸出函數來實現輸入和輸出,所以選項B錯誤。采用printf輸出數據默認右對齊,若要左對齊,可以在格式控制字符串中的“%”和寬度之間加一個“-”號實現,選項C錯誤。printf函數的輸出精度由變量的類型決定,與域寬無關,選項D錯誤。A【解析】字符變量c1是字符’A’的ASCII碼加上4,即69所對應的字符’E’。字符變量c2是字符’A’的ASCII碼加上3,即68所對應的字符’D’。打印輸出時,c1以%c的格式輸出,所以是E,c2是%d的格式輸出,所以是68。C【解析】scanf函數的格式控制字符串中沒有空格,所以,對于選項A、B和D中輸入的第一個空格會作為字符賦值給變量c1,而不會被理解成分隔符,所以選項C正確。D【解析】在輸入多個數據時,若格式控制字符串中無非格式字符,則認為所有輸入的字符均為有效字符,所以應該按照選項D的順序輸入。A【解析】首先打印b=a+b=1+0=1的值1,此時已給b賦值為1,然后打印a=2*b=2*1=2的值2,所以選項A正確。B【解析】選項B輸出格式為%d,即整數格式,所以輸出字符A的ASCII碼值65,而不是字符A。大寫字母和其對應的小寫字母的ASCII碼差值為32,所以選項A正確。字符A的ASCII碼值是65,所以以%c格式輸出可以輸出字符A,所以選項C正確。字符A的ASCII碼值比字符B的ASCII碼值小1,所以選項D正確。A【解析】在格式說明符前加入一個整數可以指定輸入數據所占的寬度,所以賦值時會將87賦給int型變量a,把6.0賦給float型變量b。A【解析】printf函數中格式控制字符串中”%8.6”的含義是變量y的輸出寬度為8(包括小數點),小數點后保留6位小數,所以選項A正確。A【解析】scanf()函數的格式控制字符串中,必須含有與輸入項一一對應的格式說明符,int型數據、float型數據、double型數據對應的格式說明符分別為%d、%f、%lf,所以選項A正確。實驗測試參考答案與解析輸入以下程序,運行并分析結果。#include<stdio.h>intmain(){doublea=8.09;printf("a=%f\n",a);printf("a=%.3f\n",a);printf("a=%7.3f\n",a);return0;}【解題思路】printf函數中的“%f”,表示輸出項是帶有6位小數的浮點數。printf函數中的“%.3f”,表示輸出項是帶有3位小數的浮點數,對第4位小數采取四舍五入方法處理。printf函數中的“%7.3f”,表示輸出項寬度為7列,小數點后的小數為3位。如輸出項數字不足7列,則左側不足位補空格。程序的運行結果如圖1所示。a=8.090000a=8.090a=8.090圖1程序運行結果編寫程序,輸入華氏溫度(F),按下列公式計算并輸出對應的攝氏溫度(C):C=5(F-32)/9。程序運行結果如圖2所示,請將程序補充完整。請輸入華氏溫度:100對應的攝氏溫度是:37.8圖2程序運行結果#include<stdio.h>intmain(){floatf;floatc;printf("請輸入華氏溫度:");___________________________c=5*(f–32)/9;___________________________return0;}【解題思路】第一個橫線處語句作用是接受用戶從鍵盤輸入的值賦給f。第二個橫線處語句的作用是輸出華氏溫度對應的攝氏溫度的數值,并且保留小數點后一位?!緟⒖即a】#include<stdio.h>intmain(){floatf;floatc;printf("請輸入華氏溫度:");scanf("%f",&f);c=5*(f–32)/9;printf("對應的攝氏溫度是:%.1f\n",c);return0;}定義兩個整型變量,交換兩個變量的值并輸出。【解題思路】本題需要定義三個變量,變量a和b表示兩個整數,t表示兩數交換時的中間變量。本題是借助中間變量實現兩數交換“t=a;a=b;b=t;”。兩個數交換的方法不唯一,還可以通過兩個數間的加減運算實現兩個數的交換?!緟⒖即a】#include<stdio.h>intmain(){ inta; intb; intt; scanf("a=%d,b=%d",&a,&b); t=a;a=b;b=t; printf("a=%d,b=%d\n",a,b); return0;}程序的運行結果如圖3所示。a=10,b=20a=20,b=10圖3程序運行結果輸入圓的半徑,計算圓的周長和面積并輸出,輸出結果均保留2位小數(圓周率取3.14)?!窘忸}思路】利用scanf函數輸入浮點數作為半徑,利用圓周長和圓面積的公式計算,最后使用printf函數輸出。可以將圓周率定義為符號常量,方便使用?!緟⒖即a】#include<stdio.h>#definePI3.14intmain(){ doubler; doublel; doubles; printf("請輸入圓的半徑:"); scanf("%lf",&r); l=2*PI*r; s=PI*r*r; printf("圓的周長是%.2f,圓的面積是%.2f\n",l,s); return0;}程序的運行結果如圖4所示。請輸入圓的半徑:3.2圓的周長是20.10,圓的面積是32.15圖4程序運行結果輸入一個大寫字母,輸出其對應的小寫字母。【解題思路】大寫字母與小寫字母之間的ASCII碼差值為32,因此大寫字母轉換為小寫字母的方法就是將大寫字母的ASCII碼值加上32,便可得到與之對應的小寫字母。【參考代碼】#include<stdio.h>#definePI3.14intmain(){ charch; printf("請輸入一個大寫字母:"); scanf("%c",&ch); ch=ch+32; printf("其對應的小寫字母是:%c\n",ch); return0;}程序的運行結果如圖5所示。請輸入一個大寫字母:A其對應的小寫字母是:a圖5程序運行結果任務3選擇結構學中做參考答案(1)D(2)B(3)參考代碼為:#include<stdio.h>intmain(){ inta; scanf("%d",&a); if(a%2) printf("%d是o?奇?數oy\n",a); else printf("%d是o?偶?數oy\n",a); return0;}(4)參考代碼為:#include<stdio.h>intmain(){ doublex,y; scanf("%lf",&x); if(x>5) y=x*x+1; elseif(x<-5) y=1-x*x; else y=x*x; printf("y的ì?值|ì是o?%lf\n",y); return0;}(5)參考代碼為:#include<stdio.h>intmain(){floata,b,c;scanf("%f%f%f",&a,&b,&c);if(a+b>c&&a+c>b&&b+c>a)if(a==b&&b==c)printf("等邊三角形\n"); elseif(a==b||a==c||b==c)printf("等腰三角形\n"); elseprintf("一般三角形\n"); elseprintf("不能構成三角形\n");return0;}知識測試參考答案與解析C【解析】選項A中x的值為0,表示假,取反表示真,結果是1;選項B是一個條件運算符,當x<y時取1,否則取0,結果為1;選項C是中有兩種運算符,其中關系運算符的優先級高于邏輯運算符,先進行關系運算再邏輯運算,“x==y||y==z”相當于“0||0”,結果為0;選項D根據運算符的優先級,先進行關系運算后進行邏輯運算,相當于“1&&1”,結果為1。A【解析】條件運算符“?:”是C語言中唯一的三目運算符,它的結合性和賦值運算符一樣,從右向左。當一個表達式中出現多個條件運算符時,應該將位于最右邊的問號與離它最近的冒號配對,表達式“a<b?a:c<d?c:d”相當于“a<b?a:(c<d?c:d)”,先計算出右邊表示的值,得到“a<b?a:3”,結果為a的值1。D【解析】程序中的兩個if語句是相互獨立的。先執行第一個if語句,如果“b>a”成立,則將較大的值賦給a,否則不賦值,執行第一個if語句后,變量a中存放的是a和b的較大值。繼續執行第二個if語句,如果“c>a”成立,則將c的值賦給a,否則不賦值,執行第二個if語句后,變量a中存放的是a和c的較大值。經過兩個if語句的執行,變量a中存放的是3個數的最大值。同樣的思路,如果要獲取n個數的最大值或最小值,可以使用一個變量依次和所有的數進行比較,變量的初始值可以賦值為第一個數,經過n-1次判斷和賦值后可以得到它們的最大值或最小值。A【解析】本題考查了if語句的多分支結構和變量自增自減規則。當a等于5時,表達式“a--<5”不成立,因為“a--”表示先使用a的值后自減,判斷時a的值是5,判斷結束后a自減為4。如果換成“--a”則先自減后使用自減后的值。本題執行else子句中的“printf("%d",--a);”,a的值先自減為3再輸出。B【解析】本題考查了代碼細節,屬于陷阱題,要格外仔細。if語句的每個分支都執行一個代碼塊,可以使用一對大括號“{}”括起來,如果代碼塊只有一條語句可以省略大括號,也就是說如果沒有大括號,if語句的每個分支只控制一條語句。“if(a>b)a=b,b=c;c=a;”里有兩條語句,而if語句只控制了第一條逗號表達式語句“a=b,b=c;”,語句“c=a;”和if語句毫無關系,無論if判斷結果如何都會被執行。本題if語句判斷條件不成立,不執行“a=b,b=c;”語句,但語句“c=a;”一定會被執行。C【解析】在C語言中,有兩種語句使用到break語句:循環語句和switch語句。循環中的break語句用于結束循環;switch語句中的break語句又稱間斷語句用于結束分支,可以將break語句放在case標號之后的任何位置,通常是在case之后的語句最后加上break語句。每當執行到break語句時,立即跳出switch語句體。switch語句通??偸呛蚥reak語句聯合使用,使得switch語句真正起到分支的作用。 如果switch分支中沒有break語句,程序會繼續執行下一個分支,直到遇到break語句或者switch分支全部結束為止。switch語句中也可以一條break語句都沒有,意味著只要某個分支匹配成功就執行到底。2,2,3【解析】當獲取的字符為’1’和’3’時,執行“a++”語句;獲取的字符為’2’和’4’時,執行“b++”語句;獲取的字符為其它非’!’字符時,執行“c++”語句;獲取的字符為’!’時結束循環。最終輸出的a、b、c的值分別為2、2、3。A【解析】本題考查了switch語句的嵌套,在“case1”分支里繼續分支,break語句跳出內部分支,外部分支沒有遇到break語句,需要繼續執行,因此外部的“case1”和“case2”都要執行,其中“case1”內部的switch語句執行“case0”分支,所以a自增2次,b自增1次。C【解析】C語言規定了if和else的就近匹配原則,即else和它上面的最近的沒有配對的if配對,與書寫格式無關。提倡編寫代碼時養成良好習慣,按照要求進行代碼縮進,增加代碼的可讀性。0【解析】本題考查了if語句的嵌套,要注意else和if的對應關系,第一個else和第一個if對應,第二個else和第三個if對應,這里要特別注意,容易受到縮進的誤導,else和if的對應關系不受代碼縮進的影響,正確的縮進可以增強代碼的可讀性,錯誤的縮進容易誤導讀者,本題就是典型的錯誤縮進,雖然不影響執行結果,但容易誤導讀者。第一個判斷“if(!a)”為假,執行第一個else部分,里面包含一個if語句,“if(a==0)”判斷的結果依然為假,不執行“if(a)b=2; elseb=3;”,最終b的值未發生改變。實驗測試參考答案與解析輸入一個英文字母,如果是小寫字母則轉換為大寫,如果是小寫字母則轉換為大寫。【解題思路】本題需對輸入的字符進行判斷,判斷是小寫字母的條件為ch>='a'&&ch<='z',類推,大寫字母的判斷條件是ch>='A'&&ch<='Z',如果是小寫字母,其ASCII碼值減去32可轉換為大寫字母,如果是大寫字母,其ASCII碼值加32可轉換為小寫字母?!緟⒖即a】#include<stdio.h>intmain(){ charch; printf("請輸入一個英文字母:"); scanf("%c",&ch); if(ch>='a'&&ch<='z') ch=ch-32; elseif(ch>='A'&&ch<='Z') ch=ch+32; printf("轉換后的字母為:%c\n",ch); return0;}程序的運行結果如圖6所示。請輸入一個英文字母:C轉換后的字母為:c圖6程序運行結果輸入一個三位數,判斷它是否是水仙花數,水仙花數是指各位數字的立方和等于該數本身的數?!窘忸}思路】將輸入的三位數的數值分解為個位數字、十位數字、百位數字,根據水仙花數的條件進行計算,判斷各位數字的立方和是否等于該數本身的數值。【參考代碼】#include<stdio.h>intmain(){ intn,a,b,c; printf("請輸入一個百位數:"); scanf("%d",&n); a=n%10; //個位數 b=n/10%10; //十位數 c=n/100; //百位數 if(n==a*a*a+b*b*b+c*c*c) printf("%d是水仙花數\n",n); else printf("%d不是水仙花數\n",n); return0;}程序的運行結果如圖7所示。請輸入一個百位數:407407是水仙花數圖7程序運行結果從鍵盤輸入3個整數,輸出它們的最小值和最大值。【解題思路】將3個整數分別賦值為變量a、b、c,定義最大值變量max,初值為a,用b、c值分別與max比較,一旦值比max大,則將更大值賦給max,比較結束后max的值就是3個整數的最大值;類推,定義最小值變量min,初值為a,用b、c值分別與min比較,一旦值比min小,則將更小值賦給min,比較結束后min的值就是3個整數的最小值?!緟⒖即a】#include<stdio.h>intmain(){ inta,b,c,max,min; printf("請輸入三個整數:"); scanf("%d%d%d",&a,&b,&c); max=a; if(b>max) max=b; elseif(c>max) max=c; min=a; if(b<min) min=b; elseif(c<min) min=c; printf("%d%d%d的最小值為%d,最大值為%d\n",a,b,c,min,max); return0;}程序的運行結果如圖8所示。請輸入三個整數:58105810的最小值為5,最大值為8圖8程序運行結果任務4循環結構學中做參考答案(1)C(2)B(3)參考代碼為:#include<stdio.h>intmain(){intsum=0;intsign=1;for(inti=1;i<=100;i++){sum+=sign*i;sign=-sign;}printf("1-2+3-...-100=%d\n",sum);return0;}(4)參考代碼為:#include<stdio.h>intmain(){intsum=0;intN=1;while(1){sum+=N*N;if(sum>=10000)break;N++;}printf("%d\n",N);return0;}(5)參考代碼為:#include<stdio.h>intmain(){charch;while(1){scanf("%c",&ch);if(ch=='#')break;printf("輸入的是%c\n",ch);}printf("停止\n");return0;}知識測試參考答案與解析B【解析】首先確定循環變量i從0自增到5,循環了6次。如果i是奇數,余數是1,表示判斷成立,輸出字符型變量c1所表示的小寫字母;若i是偶數,余數為0,輸出c2所表示的大寫字母。B【解析】當變量a自增到0時結束循環,a初始值是-2,自增2次到0,所以變量b也自增2次,答案只能是A或者B,由于判斷條件是“a++”,先使用a的值后自增,當a為0時循環結束前還要執行a的自增操作,所以變量a最終的值是1,因此答案是B。如果將題中“a++”修改為“++a”,判斷條件是先自增后使用,則a自增2次,第二次自增后判斷失敗,b只能自增1次,選擇答案C。A【解析】表達式“a++”和“++b”只要有一個為假就結束循環。變量a的初始值為-2,b的初始值為0,第一次循環時表達式a++的值為-2,a的值為-1,表達式++b的值為1,變量b的值也為1;進入下次循環,a++的值為-1,a的值為0,表達式++b的值為2,變量b的值也為2;繼續進入下次循環,a++的值為0,a的值為1,此時無論++b的取值如何判斷條件“a++&&++b”的值都為假,后部分“++b”不再進行計算,b的值依然是2。所以循環結束后a的值為1,b的值為2。45689【解析】當c為字符’3’時,和“case1”分支匹配,輸出字符’4’,因為“case1”分支沒有break語句,還會繼續執行“case2”分支,輸出字符’5’,遇到了break結束switch語句,進入下一次循環,此時c為’4’,和“case2”分支匹配,輸出字符’6’,結束switch語句,下次循環中c為字符’5’,和“case3”分支匹配,執行兩條輸出語句,分別輸出字符’8’和’9’。B【解析】本題考查了continue語句的作用,continue語句用于提前結束本次循環進入下次循環。循環變量i從0循環到5,共循環6次。i為0時,條件i%2為0,判斷失敗,不執行continue語句,輸出0后進入下次循環,i為1,i%2為1,條件成立,執行continue語句繼續本次循環,進入下次循環,所以當i為偶數時輸出i的值,奇數直接跳過輸出語句,最終輸出的結果為024。B【解析】本題嵌套循環,break語句只能退出內循環,不影響外循環的執行。外循環變量i為1時,內循環變量j從3遞減至1,“i*j>3”都不成立,都需要將i*j的值累加到變量s上去,分別累加了1、2、3,此時s為6;i為2時,內循環變量j重新從3遞減至1,當j為3時,“i*j>3”成立,提前結束內循環,不累加;i為3時,結束外循環,整個循環結束,此時s的值為6。x=6【解析】外循環變量i為0時,內循環變量j從0自增到3,循環4次,j為0和2時執行continue語句,變量x不自增,j為1和3時,x分別自增1次,第一次內循環結束后x再自增一次,所以外循環每完成一次x增3次,外循環共執行2次,最終x的值為6。C【解析】本題考查了內循環和外循環的次數,外循環變量i從0開始,每次執行2次自增,下次是2,4時結束循環;內循環j從1自增到2,3時結束,所以外循環2次,內循環也是2次,循環體執行了2*2次。0,2【解析】循環變量i從1遞增到5,i為偶數時,a的值為0,進入while循環,執行“b++”,執行一次后a的值為-1,不等于0,結束while循環,所以當a為偶數是b自增1次,for循環結束后b自增2次,最后一次循環時,i為5,a為1,經過while循環判斷后a自減為0,所以最后a的值為0,b的值為2。實驗測試參考答案與解析分別使用while語句、do…while語句和for語句計算以下表達式的值。s=1-【解題思路】本題需要定義三個變量:循環變量i、累計求和變量s和表示符號的變量fh,每次循環需要計算導數、累加、改變符號;注意符號變量不能使用整數類型,否則fh/i的結果只能是整數0或者1。在循環次數確實的情況下使用for循環更加方便?!緟⒖即a】//使用while語句實現的參考代碼#include<stdio.h>intmain(){ inti=1; doubles=0; doublefh=1; while(i<=10000) { s+=fh/i; fh*=-1; i++; } printf("表達式的值為%lf\n",s); return0;}//使用for語句實現的參考代碼#include<stdio.h>intmain(){ inti; doubles=0; doublefh=1; for(i=1;i<=10000;i++) { s+=fh/i; fh*=-1; } printf("表達式的值為%lf\n",s); return0;}程序的運行結果如圖9所示。表達式的值為0.693097圖9程序運行結果從鍵盤輸入一個正整數,編寫程序將該數顛倒輸出,比如輸入12345,則輸出54321?!窘忸}思路】使用循環和除10運算可以不斷剝離數字的最后一位,再對新數乘10后相加剝離數可將剝離數不斷放到后面。【參考代碼】#include<stdio.h>intmain(){ intnum; ints=0; //輸入一個正整數 printf("請輸入一個正整數:"); while(1) { scanf("%d",&num); if(num<0) printf("數據不正確,請重新輸入!\n"); else break; } //顛倒數字 while(num>0) { s=s*10+num%10; num/=10; } printf("顛倒后的數為:%d\n",s); return0;}程序的運行結果如圖10所示。請輸入一個正整數:12345顛倒后的數為:54321圖10程序運行結果編寫程序求1!+2!+3!+?10!的值?!窘忸}思路】使用循環不斷累乘可以得到i的階乘,再將每一次計算得到的i的階乘累加到變量上去即可得到結果?!緟⒖即a】#include<stdio.h>intmain(){ inti; ints=0; intt=1; for(i=1;i<=10;i++) { t*=i; s+=t; } printf("和為:%d\n",s); return0;}程序的運行結果如圖11所示。和為:4037913圖11程序運行結果使用窮舉法輸出所有的三位數的水仙花數,水仙花數是指各位數字的立方和等于該數本身的數?!窘忸}思路】設置循環變量i從100循環至999,每次對i的3位數字進行分離,再根據分離后的3個數據進行計算判斷是否符合條件?!緟⒖即a】#include<stdio.h>intmain(){ inti; inta,b,c; printf("水仙花數為:\n"); for(i=100;i<=999;i++) { a=i%10; //個位數 b=i/10%10; //十位數 c=i/100; //百位數 if(i==a*a*a+b*b*b+c*c*c) printf("%d\t",i); } return0;}程序的運行結果如圖12所示。水仙花數為:153370371407圖12程序運行結果一個數如果恰好等于它的因子之和,這個數就稱為"完數",例如6=1+2+3。編寫程序輸出10000以內所有的完數?!窘忸}思路】本題和輸出素數類似,先判斷一個數是否為完數,再套個外循環。【參考代碼】#include<stdio.h>intmain(){ intn; inti; intsum; printf("10000以內的完數為:\n"); for(n=3;n<10000;n++) { sum=1; for(i=2;i<n;i++) { if(n%i==0) { sum+=i; } } if(sum==n) printf("%d\t",n); } return0;}程序的運行結果如圖13所示。10000以內的完數為:6284968128圖13程序運行結果如圖14輸出九九乘法表。1*1=11*2=22*2=41*3=32*3=63*3=91*4=42*4=83*4=124*4=161*5=52*5=103*5=154*5=205*5=251*6=62*6=123*6=184*6=245*6=306*6=361*7=72*7=143*7=214*7=285*7=356*7=427*7=491*8=82*8=163*8=244*8=325*8=406*8=487*8=568*8=641*9=92*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81圖14九九乘法表【解題思路】二維表需要嵌套循環,內循環控制列數,外循環控制行數,表上的每一個數字都可以使用行號和列號表示。【參考代碼】#include<stdio.h>intmain(){ inti,j; for(i=1;i<=9;i++) //行號 { for(j=1;j<=i;j++) //列號 { printf("%d*%d=%d\t",j,i,i*j); } printf("\n"); } return0;}任務5數組學中做參考答案(1)B(2)C(3)參考代碼為:#include<stdio.h>intmain(){intnumbers[10];printf("請輸入10個整數:\n");for(inti=0;i<10;i++){scanf("%d",&numbers[i]);}printf("逆序輸出輸入的整數:\n");for(inti=9;i>=0;i--){printf("%d\n",numbers[i]);}return0;}(4)參考代碼為:#include<stdio.h>intmain(){intnumbers[10];intmax,min;printf("請輸入10個整數:\n");for(inti=0;i<10;i++){scanf("%d",&numbers[i]);}max=min=numbers[0];for(inti=1;i<10;i++){if(numbers[i]>max)max=numbers[i];if(numbers[i]<min)min=numbers[i];}printf("輸入的整數中最大值為:%d\n",max);printf("輸入的整數中最小值為:%d\n",min);return0;}(5)參考代碼為:#include<stdio.h>intmain(){intarr[6];inttemp;printf("請輸入6個整數作為數組元素:\n");for(inti=0;i<6;i++)scanf("%d",&arr[i]);for(inti=0;i<3;i++){temp=arr[i];arr[i]=arr[5-i];arr[5-i]=temp;}printf("轉置后的數組元素為:\n");for(inti=0;i<6;i++)printf("%d",arr[i]);printf("\n");return0;}(6)參考代碼為:#include<stdio.h>intmain(){intarr[100];intn,insertNum;printf("請輸入從小到大排列的整數(以-1結束輸入):\n");inti=0;while(1){scanf("%d",&n);if(n==-1)break;arr[i]=n;i++;}printf("請輸入要插入的整數:\n");scanf("%d",&insertNum);//找到要插入的位置intj=i;while(j>0&&arr[j-1]>insertNum){arr[j]=arr[j-1];j--;}//插入元素arr[j]=insertNum;printf("插入后的有序數組為:\n");for(intk=0;k<=i;k++){printf("%d",arr[k]);}printf("\n");return0;}知識測試參考答案與解析D【解析】本題考查數組下標的要求。定義數組時數組的長度必須使用常量或常量表達式,定義后引用數組元素,下標可以是常量或者變量等任意形式的整數形表達式。D【解析】本題定義二維數組時省去了行數,系統根據初始賦值的個數自動計算出行數,規律是個數除以列數向上取整,由此可得,二維數組a兩行三列,有6個元素,最后一個元素沒有被賦值,系統自動賦值為0,a[1][0]是第二行的第一個元素。D【解析】選項A定義時沒有指定長度,系統無法分配空間,錯誤;選項B中定義數組a時不能使用變量n指定數組長度;選項C中大寫N為依然是變量,不能指定數組長度;選項D中小寫n是常量,n+5是常量表達式,可以在定義數組時指定數組長度。在C語言中,有一個約定的習慣,用大寫字母表達常量名,本題故意將常量寫成小寫,雖然違背了約定,降低了程序的可讀性,但符合C語言的語法要求,因此答案D正確。B【解析】本題主要考查一維數組在定義時長度的指定方式。選項A定義數組時指定了長度為5,并將元素都初始化為0;選項B定義數組時沒有指定數組長度,可以根據初始化時賦值的整數個數來確定數組長度,如果定義數組時既沒有指定長度也沒有初始賦值,系統將無法確定長度而產生語法錯誤;選項C定義數組時使用常量表達式指定長度,作用和選項A相同;選項D初始賦值時賦了5個整數,數組的長度也是5。C【解析】數組arr在定義時指定的長度為5,系統就給數組分配連續的5個該數據類型的內存空間,如果不賦初始值,這些元素就是沒有意義的隨機數,但是它們占用的空間是確定的。本題給前3個元素賦值,后兩個元素也同時賦值為0,每一個元素占用8字節,共占用40個字節。C【解析】本題主要考查一維數組元素的引用。特別要注意數組的下標范圍是0至長度-1。選項A中i的初始值為1,自減后為0,a[--i]相當于a[0],引用正確;選項B中出現數組嵌套,先計算內部,a[a[i]]相當于a[2],引用正確;選項C中a[a[4]]相當于a[5],數組a只有5個元素,最后一個元素是a[4],故選項C引用錯誤;選項D中的數組下標是個整數表達式,a[2*2]相當于a[4],引用正確。D【解析】本題主要考查一維數組的定義和初始化的相關概念。一維數組定義時必須指定數組長度,如果定義時進行了初始賦值,可以省略長度值,根據賦值的個數確定數組長度。數組初始化時,賦值的個數少于數組長度,則依次賦值,剩余的賦0,賦初值個數多于所定義數組長度是不允許的,編譯時會提示出錯信息。C【解析】冒泡排序法是最基礎的排序算法之一,也是每個編程學習者很容易掌握且必須掌握的算法之一。對n個數進行從小到大冒泡排序,第一輪將最大值沉底,需要進行n-1次比較,最壞的情況每次都交換,下一輪除去最大值,還需要進行n-2次比較,最壞的情況每次都交換,依次類推,直到還剩2個數,進行1次比較交換,最壞的情況下交換次數分別為n-1、n-2、n-3、n-4、……、1,求和得到n(n-1)/2次,n為10時,次數為45。C【解析】本題主要考查一維數組元素地址的使用。數組名a表示數組的首地址,a+i表示第i個元素的地址,a[i]表示第i個元素的值,&a[i]也表示第i個元素的地址,等同于a+i。選項A表示第i個元素的地址,但是i每次都為0,每次都為同一個元素賦值,而且無法結束循環,可見i的值還需要自增;選項B表示第i+1個元素的地址,和選項A一樣沒有改變循環變量的值;選項C表示第i個元素的地址,每次i自增,下一次就是下一個元素的地址,符合要求;選項D也表示第i個元素的地址,但是i先自增后作為下標使用,作為下標i從1開始,不符合要求。如果選項D修改為“&a[i++]”則符合要求,它等價于選項C。D【解析】本題考查了二維數組的定義和初始賦值的使用。選項A中定義了1行4列的二維數組,最多可以存放4個整數,賦值的個數超過存放的個數會產生語法錯誤;選項B中定義二維數組時省略了列的個數,這是C語言不允許的;選項C中定義了2行3列二維數組,賦值時賦了3行值,超出了范圍,和選項A類似,系統同樣會提示出錯;選項D中定義二維數組時省略了行的個數,系統可以根據初始賦值的個數和列數計算出行數,相當于“doublea[1][3]={{1,0,0}};”。2,4,6,4,0,【解析】本題考查了數組作為函數間參數傳遞,數組名傳遞的是首地址,屬于引用傳遞,操作的是同一段內存空間。函數fun中,將數組a的前n個元素的內容修改為原來的2倍。主函數main中,定義了長度為5的整形數組,前四個元素為1、2、3、4,最后一個元素為0,調用函數fun時第二個參數是3,即修改前3個元素為2、4、6,后兩個元素沒有變化,所以調用函數fun后數組a的5個元素為2、4、6、4、0,每次輸出時后面加上逗號,輸出的結果為“2,4,6,4,0,”。024【解析】通過參數傳遞,fun函數中指針a指向main函數中的數組a,5個元素分別為“1、2、3、4、5”,i=0時,a[0]為奇數,“if(a[i]%2)”判斷成立,“a[j++]=i”相當于a[0]=0后j自增;i=1時,a[1]為偶數,“if(a[i]%2)”判斷不成立;i=2時判斷成立,“a[j++]=i”相當于a[1]=1后j自增;i=3時判斷不成立;i=4時,“a[j++]=i”相當于a[2]=4后j自增;i=5結束循環,此時j為3。main函數輸出數組a的前3個元素,輸出結果為“024”。-3-113【解析】本題考查了二維數組的元素讀寫操作。主函數main中定義了4行4列二維數組,通過雙層嵌套循環分別賦值為“{{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}}”,再調用fun函數輸出數組b的內容。函數fun中,通過循環設置數組b的元素值,i=0時,b[0]=a[0][0]-a[0][3],即b[0]=4-1;i=1時,b[1]=a[1][1]-a[1][2],即b[1]=6-7;依次類推b[2]=11-10,b[3]=16-13。最終輸出數組b的內容為“-3-113”。實驗測試參考答案與解析從鍵盤輸入若干不重復的整數,再輸入一個要刪除的整數,輸出剩余整數,如果不存在則提示刪除失敗?!窘忸}思路】定義一個整型數組a,長度為可能輸入數據的最大值,可以約定不超過100個,定義一個整數n表示輸入整數的個數。使用循環獲取n個整數,再獲取要刪除的整數。使用循環遍歷數組找到定位點k,如果找到則從k點數據前移,更改長度。最后輸出數組中的前n-1個數?!緟⒖即a】#include<stdio.h>intmain(){ inti; //循環變量 intk; //定位點 intn; //數據個數 inta[100]; //最多可存100個整數 intnum; //待刪除的數 printf("輸入數據個數(小于100):\n"); scanf("%d",&n); printf("輸入不重復的%d個整數,使用空格隔開:\n",n); for(i=0;i<n;i++) { scanf("%d",&a[i]); } printf("輸入要刪除的整數:\n"); scanf("%d",&num); //定位 for(i=0;i<n;i++) { if(a[i]==num) { k=i; break; } } if(i<n)//如果存在 { //前移從前向后 for(i=k;i<n-1;i++) { a[i]=a[i+1]; } //長度-1 n--; } else { printf("刪除失敗,不存在要刪除的數據\n"); } printf("剩余的整數是:\n"); for(i=0;i<n;i++) { printf("%d",a[i]); } return0;}程序的運行結果如圖15所示。輸入數據個數(小于100):8輸入不重復的8個整數,使用空格隔開:247910346788輸入要刪除的整數:34剩余的整數是:2479106788圖15程序運行結果數組中有n個正整數,要求將他們從小到大排序,并且奇數在前偶數在后,運行結果如圖16所示。數組中的元素是:108376543219排序后的元素是:133579246810圖16程序運行結果【解題思路】本題的解決可分為以下3步:交換數組元素,奇數前移,偶數后移:使用兩個整形變量i和j分別作為數組的第一個和最后一個元素的下標,判斷a[i]和a[j]的奇偶性,判斷結果分為4種情況:前奇后偶則保持不動,i后移,j前移,繼續比較;前偶后奇則交換,i后移,j前移,繼續比較;前后都是奇數則i后移,j不變,繼續比較;前后都是偶數則i不變,j前移,繼續比較;直到i不再小于j為止,此時所有奇數移動到了偶數之前。找到偶數開始位置:使用循環從第一個元素開始找,找到即退出循環,此時的循環變量i就是第一個偶數所在位置。奇數部分和偶數部分分別排序:分別使用排序算法對數組的前部分和后部分進行排序?!緟⒖即a】#include<stdio.h>intmain(){ inti,j,temp; intn=11; inta[100]={10,8,3,7,6,5,4,3,2,1,9}; i=0; j=n-1; intk=0; printf("排序前:\n"); for(i=0;i<n;i++) { printf("%d",a[i]); } i=0; //使其奇數在前偶數在后 while(i<j) { if(a[i]%2==1&&a[j]%2==0)//1前奇后偶,不動 { i++; j--; } elseif(a[i]%2==0&&a[j]%2==1)//2前偶后奇,交換 { temp=a[i]; a[i]=a[j]; a[j]=temp; i++; j--; } elseif(a[i]%2==1&&a[j]%2==1)//2前奇后奇,前面后移 { i++; } elseif(a[i]%2==0&&a[j]%2==0)//2前偶后偶,后面前移 { j--; } } //找到偶數的位置k for(i=0;i<n-1;i++) { if(a[i]%2==0) { k=i; break; } } //前k個排序 for(i=0;i<k-1;i++) { for(j=0;j<k-1-i;j++) { if(a[j]>a[j+1]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } //后面排序 for(i=0;i<n-1-k;i++) { for(j=k;j<n-1-i;j++) { if(a[j]>a[j+1]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } printf("\n排序后:\n"); for(i=0;i<n;i++) { printf("%d",a[i]); } return0;}計算4×4數組中主對角線元素之和,數據從鍵盤中輸入。【解題思路】使用嵌套循環輸入或者輸出二維數組,外循環控制第一維度,內循環控制第二維度。主對角線元素之和就是行和列相等時的元素和?!緟⒖即a】#include<stdio.h>intmain(){ inti,j; ints=0; inta[4][4]; //輸入 printf("請輸入16個整數:\n"); for(i=0;i<4;i++) for(j=0;j<4;j++) scanf("%d",&a[i][j]); //計算 for(i=0;i<4;i++) s+=a[i][i]; //輸出 for(i=0;i<4;i++) { for(j=0;j<4;j++) printf("%-4d",a[i][j]); printf("\n"); } printf("主對角線元素和為%d",s); return0;}程序的運行結果如圖17所示。請輸入16個整數:1234567891011121314151612345678910111213141516主對角線元素和為34圖17程序運行結果計算4×4數組中主對角線上方的元素之和,數據從鍵盤中輸入?!窘忸}思路】行和列號相等表示主對角線的元素;行號大于列號的表示主對角線下方的元素,也可以說是下三角元素;行號小于列號的表示主對角線上方的元素,也可以說是上三角元素?!緟⒖即a】#include<stdio.h>intmain(){ inti,j; ints=0; inta[4][4]; //輸入 printf("請輸入16個整數:\n"); for(i=0;i<4;i++) for(j=0;j<4;j++) scanf("%d",&a[i][j]); //計算 for(i=0;i<4;i++) for(j=0;j<4;j++) if(j>i) s+=a[i][j]; //輸出 for(i=0;i<4;i++) { for(j=0;j<4;j++) printf("%-4d",a[i][j]); printf("\n"); } printf("主對角線上方的元素和為%d",s); return0;}程序的運行結果如圖18所示。請輸入16個整數:1234567891011121314151612345678910111213141516主對角線上方的元素和為36圖18程序運行結果使用二維數組存儲并輸出如圖19所示的楊輝三角,輸出的行數從鍵盤輸入。11112113311464115101051圖19楊輝三角【解題思路】定義二維數組a[20][20],最多支持計算20行楊輝三角數據,所有數據全部初始化為0,第1列和對角線為1,從第3行第2列起,下1行數據等于上1行前1列的值和上1行本列值的和?!緟⒖即a】#include<stdio.h>intmain(){ introw; //打印的行數 printf("請輸入打印行數(不大于20)\n"); scanf("%d",&row); inta[20][20]={0}; //所有元素初始化為0 inti,j; for(i=0;i<row;i++) { for(j=0;j<=i;j++) { if(j==0||i==j) //第1列和對角線賦值1 { a[i][j]=1; } elseif(i>j) { a[i][j]=a[i-1][j-1]+a[i-1][j]; } } } for(i=0;i<row;i++) { for(j=0;j<=i;j++) { printf("%d\t",a[i][j]); } printf("\n"); } return0;}任務6指針學中做參考答案(1)B(2)A(3)無(4)參考代碼為:#include<stdio.h>intmain(){intarr[10];int*p=arr;inttemp;printf("請輸入10個整數作為數組元素:\n");for(inti=0;i<10;i++){scanf("%d",arr+i);}//使用指針將數組元素轉置for(inti=0;i<5;i++){temp=*(p+i);*(p+i)=*(p+9-i);*(p+9-i)=temp;}printf("轉置后的數組元素為:\n");for(inti=0;i<10;i++){printf("%d",arr[i]);}printf("\n");return0;}(5)參考代碼為:#include<stdio.h>intmain(){intm[4][4];int*p=&m[0][0];intsum=0;printf("請輸入4x4矩陣的元素:\n");for(inti=0;i<4;i++){for(intj=0;j<4;j++){scanf("%d",&m[i][j]);}}//計算主對角線元素之和for(inti=0;i<4;i++){sum+=*(p+i*4+i);}printf("主對角線元素之和為:%d\n",sum);return0;}知識測試參考答案與解析C【解析】本題考查了指針和地址的基本概念。若p是指針變量,則p應該指向一個變量的地址,即p中保存了一個變量的地址,*p表示通過p中的地址取值,所以選項A錯誤;p本身也是一個變量,它的值是地址,它自身也要保存在內存中,&p表示指針變量p在內存中的地址,所以選項B錯誤;選項D中的表達式“*p+1”表示先取值再加1,而表達式“*(p+1)”先移動指針p,使指針p指向下一個元素值后再加1,所以選項D錯誤。D【解析】定義了一個整形變量a和整形指針p,使指針p指向變量a,a和*p表示值,p和&a表示變量a的地址,&p表示變量p的地址,&*p表示對指針取值后再取地址,它等價于p,同樣*&p表示先對變量p取地址再取值,也等價于p。因此只有選項D都是地址。D【解析】在C語言指針中,*號有兩個作用:定義指針和通過地址取值。語句①使用*號定義一個指針變量p并進行初始賦值,讓它指向變量a,語句②在指針變量p已經定義過的情況下,通過*號對地址進行取值,使它的值為a。所以選項D才是正確的。A【解析】本題主要考查指針的賦值和scanf函數中地址的使用。選項A中scanf的第二個參數傳入代表地址的變量p是正確的,但是前面的賦值是錯誤的,對指針賦值應該使用“p=&a;”;選項B中指針p指向使用malloc函數申請的內存空間,使用scanf函數讀入數據保存到該段空間;選項C中對指針p賦值的同時使用scanf函數讀入數據,相當于“p=&a;scanf(“%lf”,p);”,這是正確的;選項D中的scanf函數讀入數據時沒有使用指針變量,直接使用了變量a的地址,是正確的。A【解析】本題主要考查scanf函數和變量地址的表達形式。scanf函數讀入多個數據時,參數列表應提供所有保存數據的地址,選項B中a和b不是地址,選項C中d表示c的指針,使用&d是錯誤的,選項D中a、b、*d都不是地址,選項A中&a、&b和d表示變量a、b、c的地址。B【解析】本題主要考查一維數組元素地址的表達方式。數組使用數組名表示數組的首地址,也是第一個元素的地址,相當于&s[0],s+1表示第二個元素的地址,相當于&s[1],所以選項A、C、D都表示s[1]的地址,而表達式“s++”要改變了s的值,s必須指向數組的首地址不能改變,因此表達式“s++”是錯誤的。B【解析】本題主要考查一維數組元素的表達方式。指針變量s指向數組a,存放的是首元素a[O]的地址。選項A中*s就是第一個元素的值a[O],不能再使用下標取值,是錯誤的;選項B中表達式“*(s+3)”表示用指針法引用指向的數組元素,相當于a[3],是正確的;選項C中表達式“*s[3]”相當于“*(a[3])”,下標取值后再指針取值,顯然是錯誤的;選項D中表達式“*s+3”相當于“a[O]+3”,顯然錯誤。D【解析】本題繼續考查一維數組元素的表達方式。指針變量p指向數組a,可以使用數組的下標取值,比如a[i],也可以使用*號取值,比如*a、*(a+i),還可以使用指針變量p進行取值,比如*p、*(p+1),也可以使用指針變量加下標的方式取值,比如p[i]。選項A中兩個地址的差“p-a”表示p向后移動的次數,“a[p-a]”相當于“*p”;選項B表示先對第i個元素取地址再取值,“*(&a[i])”相當于“a[i]”;選項D中a[10]訪問元素越界了,數組共10個元素,分別從a[0]至a[9],沒有a[10]這個元素。D【解析】數組a有4個元素,表達式“*p=&a[3]”表示指針p指向數組a的第4個元素,“--p”表示指針p前移指向數組第3個元素,然后將p指向的第3個元素賦值給y,輸出的結果為“y=3”。C【解析】本題主要考查一維數組元素地址的表示方式。選項A中,x數組元素為double類型,輸入格式符用“f”有誤,應該用“lf”;選項B中,“*(a+6)”相當于a[6],表示數組元素的值,不是地址;選項C中,“p+6”表示下標為6的元素地址;選項D中,“p[6]”相當于x[6],表示數組元素的值,不是地址。C【解析】本題主要考查了字符串中轉義字符的含義。\t是一個字符,表示一個制表符,\后面3個小于8的數字表示一個八進制數,所以\017表示一個ASCII碼為15的字符,所以字符串“”的長度為5,注意本題問的是所占字節數,還要加上字符串的結束符’\0’。如果\后面就是一個數字0,則表示字符串的結束符,比如字符串“\ta\0bc”的長度為2。B【解析】本題繼續考查字符串中的轉義字符。字符串中\后面3個小于8的數字表示一個八進制數,如果數字不小于8則是單獨的字符,本題中’\01’表示一個字符,’8’是另一個字符,字符串中間沒有出現’\0’字符,所以循環一直到字符串末尾結束,共循環6次。B【解析】本題主要考查使用指針變量處理字符串的應用。循環語句“while((*s)&&(*t)&&(*t++==*s++))n++;”表示指針s和t指向的值都不為0,并且相當,n的值增1,同時指針t和s都向后移動,直到兩個指針指向的值有一個為0或者不等時結束自增。所以fun函數的功能是返回x、y所指字符串中連續相同的字符個數。B【解析】指針p和s都指向數組a,每次循環p向后移動一次,循環條件語句“p-a<n”表示p移動的次數為n次,如果p指向的值超過*s則讓s也指向該值,即“if(*p>*s)s=p;”。D【解析】本題主要考查指向一維數組的指針變量的概念。定義語句“int(*p)[3];”,*首先與p結合,說明p是一個指針變量,然后再與[3]結合,說明p指向的是一個包含3個整型元素的數組。B【解析】本題主要考查數組名和指針作為函數參數的應用。題中fun函數的參數有兩個,第一個形參a是數組形式,它不需要長度,參數a將指向調用時的實際參數的地址,它實質上是一個指針變量,這里的[]中即使寫了長度也毫無意義,因此不必在[]中間填寫表示長度的數字。選項A是錯誤的,數組和指針都是地址傳遞;選項C中形參a是數組形式,但不是數組名,它是一個指針,所以選項C是錯誤的,選項B正確;選項D表達是錯誤的,數組傳遞時傳遞的是第一個元素的地址,而不是所有元素值。A【解析】本題主要考查了函數間的指針傳值。要注意main函數中變量x和y和fun函數中的變量x和y只是變量名相同而已,而不是同一個變量。main函數中的調用語句“fun(&y,&x);”使fun函數中的指針x指向main函數中變量y,指針y指向main函數中的變量x,所以fun函數先輸出2和1,再將2改為3,將1改為4;回到主函數再輸出4和3。helloworld!【解析】函數fun的作用是將大寫字母的字符轉換為小寫字母,其它字符不變。主函數通過指向字符串的指針p不斷后移循環調用fun函數將所有大寫字母修改小寫字母,其它字符不變。實驗測試參考答案與解析使用指針從鍵盤輸入10個數,計算除去一個最大值和一個最小值后的和?!窘忸}思路】定義指針指向數組a,循環輸入時使用a+i或者p+i表示第i個元素的地址,讀取數組元素的時候使用*(a+i)或者*(p+i)表示第i個元素的值;將指針p不斷后移再使用“*p”獲取每個元素的值是指針的最常用方式。本題使用下標法a[i]更簡單明了,其目的在于練習掌握指針法讀取數組元素值?!緟⒖即a】#include<stdio.h>intmain(){ inti; inttotal,min,max; inta[10]; int*p=a; printf("輸入10個整數:"); //循環輸入 for(i=0;i<10;i++) scanf("%d",p+i); min=max=*a; total=0; for(i=0;i<10;i++,p++) { //計算總和 total+=*p; //獲取最大值 if(*p>max) max=*p; //獲取最小值 if(*p<min) min=*p; } printf("去除最大值和最小值后的和為:%d",total-min-max); return0;}程序的運行結果如圖20所示。輸入10個整數:12103456789去除最大值和最小值后的和為:44圖20程序運行結果使用指針將4×4數組轉置后存入新數組后輸出,數據從鍵盤中輸入?!窘忸}思路】使用兩層嵌套循環處理二維數組的元素遍歷,循環讀取數據時使用“*(a+i)+j”表示元素a[i][j]的地址,輸出時使用“*(*(a+i)+j)”表示元素a[i][j]的值,也可以使用“*(a[i]+j)”表示元素a[i][j]的值,使用“*(b[j]+i)=*(a[i]+j)”將數組a的第i行第j列的元素值賦給數組b的第j行第i列,實現轉置功能?!緟⒖即a】#include<stdio.h>intmain(){ inti,j; inta[4][4]; intb[4][4]; //輸入 printf("請輸入16個整數:\n"); for(i=0;i<4;i++) for(j=0;j<4;j++) scanf("%d",*(a+i)+j); //轉置 for(i=0;i<4;i++) for(j=0;j<4;j++) *(b[j]+i)=*(a[i]+j); //輸出 printf("轉置前:\n"); for(i=0;i<4;i++) { for(j=0;j<4;j++) printf("%-4d",*(*(a+i)+j)); printf("\n"); } printf("轉置后:\n"); for(i=0;i<4;i++) { for(j=0;j<4;j++) printf("%-4d",*(*(b+i)+j)); printf("\n"); } return0;}程序的運行結果如圖21所示。請輸入16個整數:12345678910111213141516轉置前:12345678910111213141516轉置后:15913261014371115481216圖21程序運行結果任務7函數學中做參考答案(1)A(2)D(3)參考代碼為:#include<stdio.h>#include<stdio.h>doublearea(intr){return3.1415926*r*r;}doublevolume(intr){return4.0/3.0*3.1415926*r*r*r;}intmain(){intradius;printf("請輸入半徑值:\n");scanf("%d",&radius);doublecircleArea=area(radius);doublesphereVolume=volume(radius);printf("半徑為%d的圓形面積為:%.2f\n",radius,circleArea);printf("半徑為%d的球體體積為:%.2f\n",radius,sphereVolume);return0;}(4)參考代碼為:#include<stdio.h>intadd(inta,intb,intc){returna+b+c;}intmain(){intnum1,num2,num3;printf("請輸入三個整數:\n");scanf("%d%d%d",&num1,&num2,&num3);intsum=add(num1,num2,num3);printf("輸入的三個整數的和為:%d\n",sum);return0;}知識測試參考答案與解析B【解析】函數說明的一般形式為“類型名函數名(參數類型1,參數類型2,…);”或者“類型名函數名(參數類型1參數名1,參數類型2參數名2,…);”,參數名完全是虛設的,可以是任意的用戶標識符,不必與函數首部中的形參名一致,也可以與程序中的任意用戶標識符同名,實際上,參數名還可以省略。本題中形參x在形式上寫作了數組的形式x[10],實際上,C編譯程序會將其作為一個指針變量處理。所以本題的答案為選項B。D【解析】輸入參數x和y是整型,x+y也是整型,但函數的返回值是double類型。由于整型可以自動轉換成double類型,所以函數的返回值將自動轉換成double類型。本題的答案為選項D。A【解析】形參是定義函數時,函數名后面括號中的變量名,實參是在主調函數中調用一個函數時,函數名后面括號中的參數。C語言規定,由實參單向傳遞給形參,在內存中,實參單元和形參單元是不同的單元。所以本題的答案為選項A。B【解析】f1(x)調用函數intf1(inta)時,形參a開辟空間,接收實參x的值3,執行函數體,返回值9。f2(&y)調用函數intf2(int*b)時,形參指針b接收實參y的地址,指向實參y,執行函數體,返回(*b)*5的值25。所以本題的答案為選項B。A【解析】fun函數的功能為求二維數組s中,列下標為k,行下標從0到n-1的元素的最大值。fun(a,4,0)調用intfun(int(*s)[4],intn,intk)時,形參s為指向數組a的指針,形參n開辟空間,接收實參值4,形參k開辟空間,接收實參值0,執行函數體,求得列下標為0,行下標從0到3的元素的最大值,即1、11、21、31的最大值,所以本題的答案為選項A。B【解析】f(a)調用函數voidf(intb[])時,形參intb[]雖為數組的形式,C編譯程序會將其作為一個指針變量處理,即指針b指向數組a,執行函數體,

溫馨提示

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

評論

0/150

提交評論