大學C語言期末考試練習題帶詳解答案_第1頁
大學C語言期末考試練習題帶詳解答案_第2頁
大學C語言期末考試練習題帶詳解答案_第3頁
大學C語言期末考試練習題帶詳解答案_第4頁
大學C語言期末考試練習題帶詳解答案_第5頁
已閱讀5頁,還剩50頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

一、 單項選擇題1 ( A )是構成 C 語言程序的基本單位。A、函數 B、過程 C、子程序 D、子例程2C 語言程序從 C 開始執行。A) 程序中第一條可執行語句 B) 程序中第一個函數C) 程序中的 main 函數 D) 包含文件中的第一個函數3、以下說法中正確的是( C ) 。A、C 語言程序總是從第一個定義的函數開始執行B、在 C 語言程序中,要調用的函數必須在 main( )函數中定義C、C 語言程序總是從 main( )函數開始執行D、C 語言程序中的 main( )函數必須放在程序的開始部分4.下列關于 C 語言的說法錯誤的是( B ) 。A) C 程序的工作過程是編輯、編譯、連接、運行 B) C 語言不區分大小寫。C) C 程序的三種基本結構是順序、選擇、循環 D) C 程序從 main 函數開始執行5.下列正確的標識符是(C ) 。A.-a1 B.ai C.a2_i D.int t58 題為相同類型題考點:標識符的命名規則(1) 只能由字母、數字、下劃線構成(2) 數字不能作為標識符的開頭(3) 關鍵字不能作為標識符選項 A 中的“-” ,選項 B 中“”與“”不滿足(1) ;選項 D 中的 int 為關鍵字,不滿足(3)6下列 C 語言用戶標識符中合法的是( B ) 。A)3ax B)x C)case D)-e2 E)union選項 A 中的標識符以數字開頭不滿足( 2) ;選項 C,E 均為為關鍵字,不滿足(3) ;選項 D 中的“-”不滿足(1) ;7下列四組選項中,正確的 C 語言標識符是( C ) 。A) %x B) a+b C) a123 D) 123選項 A 中的“%” ,選項 B 中“+” 不滿足(1) ;選項 D 中的標識符以數字開頭不滿足(2)8、下列四組字符串中都可以用作 C 語言程序中的標識符的是( A ) 。A、print _3d db8 aBc B、Iam one_half start$it 3pai C、str_1 Cpp pow while D、Pxq My-book line# His.age 選項 B 中的“”, ”$” ,選項 D 中“” , ”#”, ”.”, ”-”不滿足(1) ;選項 C 中的 while 為關鍵字,不滿足(3)9.C 語言中的簡單數據類型包括(D ) 。A、整型、實型、邏輯型 B、整型、實型、邏輯型、字符型C、整型、字符型、邏輯型 D、整型、實型、字符型10.在 C 語言程序中,表達式 5%2 的結果是 C 。A)2.5 B)2 C)1 D)3詳見教材 P5253.%為求余運算符,該運算符只能對整型數據進行運算。且符號與被模數相同。5%2=1; 5%(-2)=1;(-5)%2=-1;(-5)% (-2)=-1;/為求商運算符,該運算符能夠對整型、字符、浮點等類型的數據進行運算,5/2=211如果 int a=3,b=4;則條件表達式aage D) (*p).age33.設有如下定義:struck sk int a;float b;data;int *p;若要使 P 指向 data 中的 a 域,正確的賦值語句是 C A) p=&a; B) p=data.a; C) p=&data.a; D)*p=data.a;34.設有以下說明語句:typedef struct stu int a;float b; stutype;則下面敘述中錯誤的是( D ) 。A、struct 是結構類型的關鍵字 B、struct stu 是用戶定義的結構類型 C、a 和 b 都是結構成員名D、stutype 是用戶定義的結構體變量名35 語句 int *p;說明了 C 。A)p 是指向一維數組的指針 B)p 是指向函數的指針,該函數返回一 int 型數據C)p 是指向 int 型數據的指針 / 指針的定義教材 P223D)p 是函數名 ,該函數返回一指向 int 型數據的指針36下列不正確的定義是(A ) 。A. int *p=&i,i; B.int *p,i;Cint i,*p=&i; D.int i,*p;選項 A 先定義一個整型指針變量 p,然后將變量 i 的地址賦給 p。然而此時還未定義變量 i 因此編譯器無法獲得變量 i 的地址。(A 與 C 對比,選項 C 先定義變量 i,則在內存中為 i 分配空間,因此 i 在內存空間的地址就可以確定了;然后再定義 p,此時可以為 p 賦 i的地址,C 正確)37. 若有說明:int n=2,*p=&n,*q=p, 則以下非法的賦值語句是: (D )A)p=q B)*p=*q C)n=*q D)p=np,q 同為整型指針變量,二者里面僅能存放整型變量的地址。選項 A,q 中為地址,因此可將此地址賦給 p選項 B,*p 表示 p 所指向對象 n 的內容,即一個整數;*q 表示 q 所指向對象的內容,由于在定義 q 時為其初始化,將 p 中 n 的地址給 q,因此 p 中存放 n 的地址,*q 表示 q 所指向對象 n 的內容.因此*p=*q 相當于 n=n;選項 C,n=*q 等價于 n=n;選項 D,p 中只能存放地址,不能將 n 中的整數值賦給 p38有語句:int a10,;則 B 是對指針變量 p 的正確定義和初始化。A)int p=*a; B)int *p=a; C)int p=&a; D)int *p=&a;選項 A,a 是數組名,不是指針變量名,因此不可用*標注數組名 a選項 C,a 是數組名,數組名就是地址,無需再用地址符號。而且在定義指針變量 p 時,應在變量名前加*,標明 p 是指針變量選項 D,a 是數組名,數組名就是地址,無需再用地址符號。39.若有說明語句“int a5,*p=a;”,則對數組元素的正確引用是 ( C )。A.ap B.pa C.*(p+2) D.p+2首先定義一個整型數組 a,a 的長度為 5,然后定義一個指針變量 p,并同時對 p 進行初始化,將數組 a 的地址賦給 p。因此此時 p 中存放的數組 a 的首地址,即數組中第一個元素 a0的地址。對于數組元素下標的引用(詳見 p144), 一般形式 數組名下標 其中下標為邏輯地址下標,從 0 開始計數,方括號中的下標可以是變量,可以是表達式,但結果一定要是整數。選項 A,p 中存放的是地址,不是整數,不能做數組元素的下標選項 B,a 是數組名,數組名就是地址,不是整數,不能做數組元素的下標選項 C,(重點!詳見 p231234) p+2 表示指向同一數組中的下兩個元素的地址,當前 p 指向 a0,則 p+2 表示 a2的地址,因此*(p+2) 表示 a2的內容40. 有如下程序int a10=1,2,3,4,5,6,7,8,9,10,*P=a;則數值為 9 的表達式是 B A) *P+9 B) *(P+8) C) *P+=9 D) P+8(重點!詳見 p231234)首先定義一個整型數組 a,a 的長度為 5,然后定義一個指針變量 P,并同時對 P 進行初始化,將數組 a 的地址賦給 P。因此此時 P 中存放的數組 a 的首地址,即數組中第一個元素 a0的地址。數組中 9 對應的是 a8, 選項 B,P+8 表示數組中后 8 個元素的地址,即 a8的地址。*(P+8)則表示該地址內所存放的內容,即 a8的值。選項 A,*P 表示 P 所指向對象的內容,此時 P 指向 a0, *P 即 a0的值 1. *P+9=1+9=10選項 C,*P 表示 P 所指向對象的內容,此時 P 指向 a0, *P 即 a0的值。因此*P+=9 即*P =*P+9, 等價于 a0=a0+9.選項 D,P+8 表示數組中后 8 個元素的地址,即 a8的地址,而非 a8中的值。41. 在 C 語言中,以 D 作為字符串結束標志A)n B) C) 0 D)0 42.下列數據中屬于“字符串常量”的是(A ) 。A.“a” B.ABC C.abc0 D.a若干個字符構成字符串在 C 語言中,用單引號標識字符;用雙引號標識字符串選項 B,C ,分別用和 標識字符串選項 D,標識字符。43.已知 char x=hello, y=h,e,a,b,e;, 則關于兩個數組長度的正確描述是 B .A)相同 B)x 大于 y C)x 小于 y D)以上答案都不對C 語言中,字符串后面需要一個結束標志位0 ,通常系統會自動添加。對一維數組初始化時可采用字符串的形式(例如本題數組 x) ,也可采用字符集合的形式(例如本題數組 y) 。在以字符串形式初始化時,數組 x 不盡要存儲字符串中的字符,還要存儲字符串后的結束標志位,因此數組 x 的長度為 6;在以字符集合形式初始化時,數組y,僅存儲集合中的元素,因此數組 y 長度為 5二、 讀程序基本輸入輸出及流程控制1.#include main() int a=1,b=3,c=5;if (c=a+b)printf(yesn);elseprintf(non);運行結果為:no詳見教材 p89 選擇結構詳見教材 p91 關系符號詳見附錄 D p378 符號的優先級=表示判斷符號兩邊的值是否相等;=表示將符號右邊的值賦給左邊的變量本題考點是選擇結構 3 種基本形式的第二種選擇結構三種一般形式中的“語句”皆為復合語句,復合語句要用 括起來,只有當復合語句中只包括一條語句時可以省略 ,此題即如此,因此兩個 printf 操作沒有加 若 c=a+b 成立,則執行 printf(yesn);否則(即 c=a+b 不成立) ,執行 printf(non);+的優先級高于=,因此先算 a+b,值為 4, 表達式 5=4 不成立,因此執行 printf(non);即輸出字符串 no2. #include main() int a=12, b= -34, c=56, min=0;min=a;if(minb) min=b;if(minc) min=c;printf(min=%d, min);運行結果為: min=-34詳見教材 p89 選擇結構本題考點是選擇結構 3 種基本形式的第一種一共包含了兩個選擇結構(兩個 if 語句)定義變量,并賦值 此時 a=12, b= -34, c=56, min=0將 a 中值拷貝,賦給 min,覆蓋了 min 中的 0,此時 min 中的值被更新為 12。若 minb 成立,則執行 min=b;若 minc 成立,則執行 min=c;輸出 min 中的值12 大于-34,第一個 if 語句的表達式成立,因此執行 min=b; 執行后 min 中的值被更新為-34.-34 小于 56,第二個 if 語句的表達式不成立,因此不執行 min=c;最后輸出 min 中的值,為-34.3.#include main() int x=2,y= -1,z=5;if(x=0),執行 z=z+1;輸出 z2-1,表達式 xmain() float a,b,c,t;a=3;b=7;c=1;if(ab)t=a;a=b;b=t;if(ac)t=a;a=c;c=t;if(bc)t=b;b=c;c=t;printf(%5.2f,%5.2f,%5.2f,a,b,c);運行結果為:1.00, 2.00, 7.00詳見教材 p72 數據的輸出形式本題包含了 3 個 if 語句,每個 if 語句后的 都不可省略,因為每個 中都包含了多條語句若表達式 ab 成立,則執行t=a;a=b;b=t;若表達式 ac 成立,則執行 t=a;a=c;c=t;若表達式 bc 成立,則執行t=b;b=c;c=t;輸出 a,b,c 中的值,要求輸出的每個數據寬度為 5 個空格,小數部分保留 2 位,數據右對齊3 小于 7,因此表達式 ab 不成立,因此不執行t=a;a=b;b=t;3 大于 1,因此表達式 ac 成立,則執行t=a;a=b;b=t; 。第一句,將 a 中的 3 拷貝,粘貼到t 中;第二句,將 c 中的 1 拷貝,粘貼到 a 中,覆蓋掉先前的 3;第三句。將 t 中的 3 拷貝到 c 中,覆蓋掉 c 中先前的 1. 執行完復合語句后實現了 a,c 元素的值的互換,a 為 1,c 為3,t 為 3, 。7 大于 c 中的 3,因此 bc 成立,執行則執行t=b;b=c;c=t;,過程同上,執行后 b 為 3,c為 7,t 為 7此時輸出 a,b,c 中的值為 1.00, 2.00, 7.005#include main ( ) float c=3.0 , d=4.0;if ( cd ) c=5.0;else if ( c=d ) c=6.0;else c=7.0;printf ( “%.1fn”,c ) ;運行結果為:7.0此題為 if.else.語句的嵌套,第二 if.else.作為第一個 if.else.語句 else 部分的復合語句。若表達式 cd 成立,則執行 c=5.0;否則(表達式 cd 不成立)若表達式 c=d 成立,則執行 c=6.0;否則,執行 c=7.0;輸出 c 中的值3.0 小于 4.0,因此表達式 cd 不成立,執行第二個 ifelse。3.0 不等于 4.0,因此表達式 c=d 不成立,執行 c=7.0,將 7.0 賦給 c, 覆蓋掉 c 中的 3.0,此時 c 中的值為 7.0輸出此時的 c 中的值6.#include main() int m;scanf(%d, &m);if (m = 0) if (m%2 = 0)printf(%d is a positive evenn, m);else printf(%d is a positive oddn, m); else if (m % 2 = 0) printf(%d is a negative evenn, m);else printf(%d is a negative oddn, m); 若鍵入9,則運行結果為: -9 is a negative odd7. #include main() int num=0;while(nummain( ) int sum=10,n=1;while(nmain() int num,c;scanf(%d,&num);do c=num%10; printf(%d,c); while(num/=10)0);printf(n); 從鍵盤輸入 23,則運行結果為:32詳見教材 p117 循環結構;p60 復合的賦值運算符do while(表達式);先無條件執行循環體,再判斷循環條件。注意 while(表達式)后有分號定義整型變量 num,c;為 num 賦一個整型值;執行c=num%10; printf(%d,c); 直到循環條件(num/=10)0 不成立;輸出換行已知為 num 賦值 23第 1 次執行循環體執行 c=num%10=23%10=3;執行 printf(%d,c);輸出 3判斷循環條件 num/=10 等價于 num=num/10; 因此 num=23/10=2, 2 大于 0,因此循環條件(num/=10)0 成立,繼續執行循環體。執行完第 1 次循環時, num 為 2,c 為 3第 2 次執行循環體執行 c=2%10=2;執行 printf(%d,c);再輸出 2判斷循環條件 num=2/10=0,0 等于 0,因此循環條件(num/=10)0 不成立。結束循環10#include main() int s=0,a=5,n;scanf(%d,&n);do s+=1; a=a-2; while(a!=n);printf(%d,%dn,s,a);若輸入的值 1,運行結果為: 2,1 詳見教材 p117 循環結構;p60 復合的賦值運算符執行 s+=1; a=a-2; 直到循環條件 a!=n 不成立;已知為 n 賦值 1,s 為 0,a 為 5第 1 次執行循環體執行 s+=1;等價于 s=s+1=0+1執行 a=a-2; a=5-2=3判斷循環條件,3 不等于 1,因此循環條件 a!=n 成立,繼續執行循環體。執行完第 1 次循環時,s 為 1,a 為 3第 2 次執行循環體執行 s+=1;等價于 s=s+1=1+1=2執行 a=a-2; a=3-2=1判斷循環條件,1 等于 1,因此循環條件 a!=n 不成立,結束循環。執行完第 2 次循環時,s 為 2,a 為 1輸出此時 s,a 中的值,結果為 2,111#include stdio.h main() char c; c=getchar(); while(c!=?) putchar(c); c=getchar(); 如果從鍵盤輸入 abcde?fgh(回車)運行結果為:abcde12#include main() char c;while(c=getchar()!=$) if(Amain() int x, y =0;for(x=1;x=10) break; y=y+x; printf(“%d %d”,y,x);運行結果為:10 5詳見教材 p120 for 語句詳見教材 p126128 break,continue 語句for( 表達式 1;表達式 2;表達式 3)(1) 先求解表達式 1 (2) 求解表達式 2,若其值為真,執行循環體,然后執行 (3). 若為假,則結束循環,轉到(5)(3) 求解表達式 3 (4) 轉回上面 (2)繼續執行(5) 循環結束,執行 for 語句下面的一個語句 break ,跳出循環體;continue, 結束本次循環(第 i 次循環) ,繼續執行下一次循環( 第 i+1次循環)此題 表達式 1 為 x=1,表達式 2(循環條件)為 xmain( ) char ch;ch=getchar( ); switch(ch) case A : printf(“%c”,A);case B : printf(“%c”,B); break;default: printf(“%sn”,”other”); 當從鍵盤輸入字母 A 時,運行結果為: AB詳見教材 p103,switch 語句switch(表達式) case 常量 1 :語句 1 case 常量 2 :語句 2 case 常量 n :語句 n default : 語句 n+1 其中表達式,常量 1,常量 n 都為整型或字符型case 相當于給出執行程序的入口和起始位置,若找到匹配的常量,則從此處開始往下執行程序,不再匹配常量,直至遇到 break 或 switch 結束本題過程:首先從鍵盤接收一個字符A并將其放在變量 ch 中。執行 switch 語句。Switch 后面的條件表達式為 ch,因此表達式的值即為字符A. 用字符A依次與下面的 case 中的常量匹配。與第 1 個 case 后的常量匹配,則從其后的語句開始往下執行程序(在執行過程中不再進行匹配。 )因此先執行 printf(“%c”,A),屏幕上輸出 A;再往下繼續執行 printf(“%c”,B),屏幕上輸出 B;再繼續執行 break, 此時跳出 switch 語句。15. #include main( ) int a=1,b=0;scanf(“%d”,&a);switch(a) case 1: b=1;break;case 2: b=2;break ;default : b=10;printf(%d , b);若鍵盤輸入 5,運行結果為:10本題過程:首先用 scanf 函數為變量 a 賦值為 5。執行 switch 語句。switch 后面的條件表達式為 a,因此表達式的值即為 5. 用 5 依次與下面 case 中的常量匹配。沒有找到匹配的常量,因此兩個 case 后的語句都不執行。執行default 后面的語句 b=10;將 10 賦給變量 b。輸出變量 b,結果為 1016. #include main()_ char grade=C;switch(grade) case A: printf(“90-100n”);case B: printf(“80-90n”);case C: printf(“70-80n”);case D: printf(“60-70n”); break;case E: printf(“main() int y=9;for(;y0;y- -)if(y%3=0) printf(%d”,- -y); 運行結果為:852詳見教材 p53,自增自減符號此題 表達式 1 被省略,表達式 2(循環條件)為 y0,表達式 3 為 y-初值 y 為 9,循環條件(即表達式 2)y0 成立,進入循環體第 1 次循環執行 if 語句。9%3=0,if 語句的條件表達式成立,執行 printf(%d”,- -y),即 y 先自減1 變為 8,然后在輸出,因此屏幕上輸出 8轉向表達式 3,執行 y-, y=y-1=8-1=7。循環條件 y0 成立,進入第 2 次循環第 2 次循環執行 if 語句。7%3 不為 0,if 語句的條件表達式不成立,不執行 printf(%d”,- -y)轉向表達式 3,執行 y-, y=y-1=7-1=6。循環條件 y0 成立,進入第 3 次循環第 3 次循環執行 if 語句。6%3=0,if 語句的條件表達式成立,執行 printf(%d”,- -y),即 y 先自減1 變為 5,然后在輸出,因此屏幕上輸出 5轉向表達式 3,執行 y-, y=y-1=5-1=4。循環條件 y0 成立,進入第 4 次循環第 4 次循環執行 if 語句。4%3 不為 0,if 語句的條件表達式不成立,不執行 printf(%d”,- -y)轉向表達式 3,執行 y-, y=4-1=3。循環條件 y0 成立,進入第 5 次循環第 5 次循環執行 if 語句。3%3=0,if 語句的條件表達式成立,執行 printf(%d”,- -y),即 y 先自減1 變為 2,然后在輸出,因此屏幕上輸出 2轉向表達式 3,執行 y-, y=y-1=2-1=1。循環條件 y0 成立,進入第 5 次循環第 6 次循環執行 if 語句。1%3 不為 0,if 語句的條件表達式不成立,不執行 printf(%d”,- -y)轉向表達式 3,執行 y-, y=1-1=0。循環條件 y0 不成立,循環結束。18. #include main() int i,sum=0; i=1;do sum=sum+i; i+; while(i#define N 4main() int i;int x1=1,x2=2;printf(n);for(i=1;imain( ) int x, y;for(x=30, y=0; x=10, y#define N 4main( ) int i,j;for(i=1;imain() int i, a10;for(i=9;i=0;i-) ai=10-i;printf(“%d%d%d”,a2,a5,a8);運行結果為:852詳見 p143-146. 例題 6.1 一定看懂!首先定義整型變量 i,整型數組 a, a 的長度為 10,即 a 中包含 10 個整型元素(整型變量)執行 for 循環語句初值 i=9, 使得循環條件 i=0 成立,執行循環體第 1 次循環執行 ai=10-i 等價于 a9=10-9=1計算表達式 3,即 i-,i 為 8,使得循環條件 i=0 成立,繼續執行循環體第 2 次循環執行 ai=10-i 等價于 a8=10-8=2計算表達式 3,即 i-,i 為 7,使得循環條件 i=0 成立,繼續執行循環體第 3 次循環執行 ai=10-i 等價于 a7=10-7=3計算表達式 3,即 i-,i 為 6,使得循環條件 i=0 成立,繼續執行循環體第 4 次循環執行 ai=10-i 等價于 a6=10-6=4計算表達式 3,即 i-,i 為 5,使得循環條件 i=0 成立,繼續執行循環體第 5 次循環執行 ai=10-i 等價于 a5=10-5=5計算表達式 3,即 i-,i 為 4,使得循環條件 i=0 成立,繼續執行循環體第 6 次循環執行 ai=10-i 等價于 a4=10-4=6計算表達式 3,即 i-,i 為 3,使得循環條件 i=0 成立,繼續執行循環體第 7 次循環執行 ai=10-i 等價于 a3=10-3=7計算表達式 3,即 i-,i 為 2,使得循環條件 i=0 成立,繼續執行循環體第 8 次循環執行 ai=10-i 等價于 a2=10-2=8計算表達式 3,即 i-,i 為 1,使得循環條件 i=0 成立,繼續執行循環體第 9 次循環執行 ai=10-i 等價于 a1=10-1=9計算表達式 3,即 i-,i 為 0,使得循環條件 i=0 成立,繼續執行循環體第 10 次循環執行 ai=10-i 等價于 a0=10-0=10計算表達式 3,即 i-,i 為-1 ,使得循環條件 i=0 不成立,跳出循環體2. #include main() int i,a6;for (i=0; i=0 ; i-) printf(%3d,ai); 運行結果為:5 4 3 2 1 0首先定義整型變量 i,整型數組 a, a 的長度為 6,即 a 中包含 6 個整型元素(整型變量)執行第一個 for 循環語句初值 i=0, 使得循環條件 i=0 成立,執行循環體第 1 次循環執行 printf(%3d,ai); 即輸出 a5的值計算表達式 3,即 i-,i 為 4,使得循環條件 i=0 成立,繼續執行循環體第 2 次循環執行 printf(%3d,ai); 即輸出 a4的值計算表達式 3,即 i-,i 為 3,使得循環條件 i=0 成立,繼續執行循環體第 3 次循環執行 printf(%3d,ai); 即輸出 a3的值計算表達式 3,即 i-,i 為 2,使得循環條件 i=0 成立,繼續執行循環體第 4 次循環執行 printf(%3d,ai); 即輸出 a2的值計算表達式 3,即 i-,i 為 1,使得循環條件 i=0 成立,繼續執行循環體第 5 次循環執行 printf(%3d,ai); 即輸出 a1的值計算表達式 3,即 i-,i 為 0,使得循環條件 i=0 成立,繼續執行循環體第 6 次循環執行 printf(%3d,ai); 即輸出 a0的值計算表達式 3,即 i-,i 為 6,使得循環條件 i=0 不成立,結束循環3. #include main( ) int i,k,a10,p3;k=5;for(i=0;iint m33=1,2,3;int n33=1,2 ,3;main( ) printf(“%d,”, m10+n00);printf(“%dn”,m01+n10);運行結果為:3,0詳見教材 P149152,圖 6.7 看懂!首先定義整型二維數組 m,m 為 3 行,3 列的二維矩陣,并對其以行的形式初始化m00=1 m01=0 m12=0m10=2 m11=0 m22=0m20=3 m21=0 m22=0定義整型二維數組 n,m 為 3 行,3 列的二維矩陣n00=1 n01=2 n12=3n10=0 n11=0 n22=0n20=0 n21=0 n22=0因此 m10+n00=2+1=3m01+n10=0+0=05.#include main() int i;int x33=1,2,3,4,5,6,7,8,9;for (i=1; imain( ) int n33, i, j;for(i=0;imain()char diamond5=_,_,*,_,*,_,*,*,_,_,_,*,_,*,_,*,_,_,*;int i,j;for(i=0;imain( ) int i, f10;f0=f1=1;for(i=2;imain() float fun(float x); float ave,a3=4.5,2,4; ave=fun(a); printf(“ave=%7.2f”,ave); float fun(float x) int j;float aver=1; for (j=0;jmain()int a23=1,2,3,4,5,6;int b32,i,j;for(i=0;if(int b,int n)int i,r;r=1;for (i=0;iint Sub(int a, int b)return (a- b);main()int x, y, result = 0;scanf(%d,%d, &x,&y ); result = Sub(x,y ) ; printf(result = %dn,result);當從鍵盤輸入:6,3 運行結果為 :result =3 2. #include int min( int x, int y ) int m;if ( x y ) m = x;else m = y;return(m); main() int a=3,b=5,abmin ; abmin = min(a,b); printf(“min is %d”, abmin); 運行結果為:min is 53.#includefunc(int x) x=10;printf(“%d, ”,x);main( ) int x=20;func(x);printf(“%d”, x);運行結果為:10, 20在 main 函數中調用函數 func,main 函數將 20 作為實參穿給 func,并轉向開始執行 func.main()對應的內存 func()對應的內存20 x 20 x func()執行 x=10;,其內存中 x 變為 10. 10 xfunc()執行 printf(“%d, ”,x); 即輸出 func 函數對應內存中 x 的值,輸出的是10. 至此,func 函數執行結束,返回 main 函數。main 函數執行 printf(“%d”, x);此時輸出 main 函數對應內存中的 x,即 204.#include int m=4;int func(int x,int y) int m=1;return(x*y-m);main()int a=2,b=3;printf(%dn,m);printf(%dn,func(a,b)/m); 運行結果為:41整型變量 m 在函數外定義,因此 m 為全局變量,其作用于范圍為其定義位置開始,一直到整個程序結束。因此 func 與 main 函數都可以訪問 m程序首先執行 main 函數執行 printf(%dn,m); 即輸出 m 中的值 4,并換行。執行 printf(%dn,func(a,b)/m);即輸出表達式 func(a,b)/m 的值,為了計算該表達式,需要調用函數 func。此時 main 將 a,b 中的 2 和 3 值作為實參傳遞給 func 的 x 和 y程序開始轉向執行 func 函數,此時 func 中的 x 為 2,y 為 3執行 int m=1; 此句定義了一個局部變量 m 并賦值為 1 。m 的作用域為其所在的復合語句,即 func 的函數體,因此在 func 的函數體重,有限訪問局部變量 m。執行 return(x*y-m); 即 return(2*3-1) ;返回的是整數 5.func 函數返回至 main 函數中的被調用處main 函數中 func(a,b)的值為 5,func(a,b)/m=5/4=1,注意,在 main 函數中訪問的 m 為全局變量 m,此時 main 函數無法訪問 func 中的 m,因為不在 func 中 m 的作用域。5.#include int fun(int a, int b) if(ab) return(a);else return(b);main() int x=15, y=8, r;r= fun(x,y);printf(r=%dn, r);運行結果為:r=15程序首先執行 main 函數執行 r= fun(x,y);即將 func(x,y)的值賦給 r,為了計算該表達式,需要調用函數 func。此時 main 將 x,y 中的 15 和 8 值作為實參傳遞給 func 的 a 和 b程序開始轉向執行 func 函數,此時 func 中的 a 為 15,b 為 8執行 if 語句;判斷 if 后面的表達式,ab 成立,因此執行相應的操作 return(a);即返回a 的值 。func 函數返回至 main 函數中的被調用處main 函數中 func(x,y)的值為 15,即將 15 賦給 r。執行 printf(r=%dn, r); 即輸出 r=156.#include int fac(int n) int f=1,i;for(i=1;ib 成立,因此執行相應的操作 return(a);即返回a 的值 。func 函數返回至 main 函數中的被調用處main 函數中 func(x,y)的值為 15,即將 15 賦給 r。執行 printf(r=%dn, r); 即輸出 r=157. #include unsigned fun6(unsigned num) unsigned k=1;do k*=num%10; num/=10;while(num);return k;main() unsigned n=26;printf(“%dn”,fun6(n);運行結果為:12程序首先執行 main 函數執行 printf(“%dn”,fun6(n); 即輸出表達式 func(6)的值,為了計算該表達式,需要調用函數 func。此時 main 將 n 中的 26 作為實參傳遞給 func 的 num程序開始轉向執行 func 函數,此時 func 中的 num 為 26執行 do-while 語句第 1 次循環執行 k*=num%10,即 k=k*(num%10)=1*(26%10)=6執行 num/=10;即 num=num/10=26/10=2while 后面循環條件為 num,此時 num 為 2,是非 0 值,即表示循環條件成立,繼續執行循環體。此時 k 為 6第 2 次循環執行 k*=num%10,即 k=k*(num%10)=6*(2%10)=12執行 num/=10;即 num=num/10=2/10=0while 后面循環條件為 num,此時 num 為 0,表示循環條件不成立,結束循環執行 return k; 即返回至 main 函數中的被調用處執行 main 函數繼續執行 printf(“%dn”,fun6(n); 即輸出 128.#include int max(int x, int y);main() int a,b,c;a=7;b=8;c=max(a,b);printf(Max is %d,c);max(int x, int y) int z;z=xy? x : y;return(z) ;運行結果為:Max is 8指針1.# include main ( ) int x = 10, 20, 30, 40, 50 ;int *p ;p=x;printf ( “%d”, *(p+2 ) ); 運行結果為: 30首先定義一個整型數組 x,x 的長度為 5;然后定義一個指針變量 p;對 p 進行初始化,將數組 x 的地址賦給 p。因此此時 p 中存放的數組 x 的首地址,即數組中第一個元素 x0的地址。然后執行 printf 語句,輸出表達式*(p+2) 的值。p+2 表示以 p 當前指向的位置起始,之后第 2 個元素的地址,即 a2的地址。*(p+2)則表示該地址內所存放的內容,即 a2的值30,因此輸出 302.#include main( ) char s=”abcdefg”;char *p;p=s;printf(“ch=%cn”,*(p+5);運行結果為: ch=f 首先定義一個字符型數組 s,并用字符串 abcdefg 對 s 進行初始化; 然后定義一個字符型指針變量 p; 對 p 進行初始化,將數組 s 的地址賦給 p。因此此時 p 中存放的數組 s 的首地址,即數組中第一個元素 s0的地址。然后執行 printf 語句,輸出表達式*(p+5) 的值。p+5 表示以 p 當前指向的位置起始,之后第 5 個元素的地址,即 a5的地址。*(p+5)則表示該地址內所存放的內容,即 a5的值 f, 因此輸出 ch=f3.#includemain ( ) int a=1, 2, 3, 4, 5 ;int x, y, *p;p=a;x=*(p+2);printf(%d:%d n, *p, x);運行結果為: 1:3首先定義一個整型數組 a,并對 a 進行初始化; 然后定義整型變量 x,y,整型指針變量 p; 再將數組 a 的地址賦給 p。因此此時 p 中存放的數組 a 的首地址,即數組中第一個元素 a0的地址。執行 x=*(p+2);p+2 表示以 p 當前所指向的位置起始,之后第 2 個元素的地址,即 a2的地址。*(p+2)則表示該地址內所存放的內容,即 a2的值 3,然后再把 3 賦給 x然后執行 printf 語句,先輸出表達式*p 的值。此時*p 表示的是 p 所指向變量的內容,即 a0的值 1。再輸出一個冒號。然后再輸出 x 中的值 3。4.#includemain() int arr =30,25,20,15,10,5, *p=arr;p+;printf(“%dn”,*(p+3);運行結果為:10首先定義一個整型數組 arr,并對 arr 進行初始化; 然后定義整型指針變量 p; 再將數組arr 的地址賦給 p。因此此時 p 中存放的數組 arr 的首地址,即數組中第一個元素 a0的地址。執行 p+,即 p=p+1。p+1 表示以 p 當前所指向的位置起始,之后第 1 個元素的地址,即 arr1的地址,然后再將 arr1的地址賦給 p,執行完此語句后,p 不再指向 arr0,而是指向 arr1。然后執行 printf 語句,輸出表達式*(p+3) 的值。p+3 表示以 p 當前指向的位置起始( 此時p 指向 arr1),之后第 3 個元素的地址,即 arr4的地址。 *(p+3)則表示該地址內所存放的內容,即 arr4的值 10, 因此輸出 105.#include main( ) int a =1, 2, 3, 4, 5, 6;int x, y, *p;p = &a0;x = *(p+2);y = *(p+4);printf(“*p=%d, x=%d, y=%dn”, *p, x, y);運行結果為: *p=1, x=3, y=5首先定義一個整型數組 a,并對 a 進行初始化; 然后定義整型變

溫馨提示

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

評論

0/150

提交評論