




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)小結(jié)小結(jié)內(nèi)容內(nèi)容 C語(yǔ)言程序設(shè)計(jì)基礎(chǔ) 數(shù)據(jù)類型、常用庫(kù)函數(shù) 運(yùn)算符、表達(dá)式、位運(yùn)算控制結(jié)構(gòu)與語(yǔ)句 數(shù)組 函數(shù)及其應(yīng)用 編譯預(yù)處理 指針結(jié)構(gòu)體、共用體 、枚舉文 件 C語(yǔ)言程序結(jié)構(gòu)源程序文件1C程序源程序文件m源程序文件j內(nèi)部數(shù)據(jù)定義語(yǔ)句序列函數(shù)n函數(shù)1函數(shù)i預(yù)編譯命令外部數(shù)據(jù)說(shuō)明函數(shù)是C語(yǔ)言程序的基本模塊 【例】輸入兩個(gè)整數(shù),判斷大小,并輸出大數(shù)。 #include /編譯預(yù)處理命令void main() /主函數(shù)main() int a,b; int max (int, int); scanf(%d,%d, &a, &b); /輸入數(shù)據(jù) printf
2、(max=%dn, max(a, b) ); /調(diào)用函數(shù)max() /輸出結(jié)果 int max (int x,int y) /函數(shù)max if ( x 目標(biāo)程序 .obj 可執(zhí)行文件 .exe 結(jié)果整型實(shí)型(浮點(diǎn)型)字符型 char枚舉類型數(shù)組類型 結(jié)構(gòu)體類型 struct共用體類型單精度型 float雙精度型 double基本類型構(gòu)造類型指針類型 *空類型 NULL自動(dòng)類型 auto靜態(tài)類型 static寄存器類型 register外部類型 extern數(shù)據(jù)類型存儲(chǔ)類型數(shù)據(jù)類型的分類 各種數(shù)據(jù)類型所表示的數(shù)據(jù)有一定范圍,若將超出其范圍的數(shù)據(jù)放入其中,會(huì)產(chǎn)生數(shù)據(jù)的“溢出”。 Wirth 程序數(shù)
3、據(jù)結(jié)構(gòu)算法基本整型 int短整型 short長(zhǎng)整型 long 基本型無(wú)符號(hào)型 unsigned短整型 長(zhǎng)整型變量類型第2章 基本數(shù)據(jù)類型與常用庫(kù)函數(shù)n字符集與標(biāo)識(shí)符n基本數(shù)據(jù)類型n常量、變量 n輸入輸出函數(shù)用法 n常用函數(shù) n字符集基本符號(hào)是ASCII字符集n標(biāo)識(shí)符程序設(shè)計(jì)過(guò)程中用到的各種元素的名字u組成:英文字母、數(shù)字和下劃線“_” ,首字符為字母或下劃線。建議字符數(shù)不超過(guò)8個(gè)。u定義:見(jiàn)名知義、區(qū)分大小寫字母、禁用保留字YearYear,dayday,a_1a_1,A_1A_1,_Time_Time %A%A,356B ,abc$356B ,abc$n基本數(shù)據(jù)類型 :u整型數(shù)據(jù) 類型標(biāo)識(shí)符
4、:unsigned short、int、long sizeof(int) 計(jì)算所占字節(jié)數(shù)u實(shí)型數(shù)據(jù)float、doubleu字符型數(shù)據(jù) char以其ASCII碼存放在內(nèi)存 C語(yǔ)言保留字 語(yǔ)句保留字?jǐn)?shù)據(jù)類型保留字存儲(chǔ)類別保留字其他保留字break forcontinue gotodefault ifdo returncase switchelse whilechar shortdouble signedenum structfloat unionint unsignedlong voidautoexternstaticregister consttypedefsizeofvolatile除上述3
5、2個(gè)保留字(用小寫字母表示)不能另作他用外,象main、printf等庫(kù)函數(shù)名,include、define、undef、indef、infdef、endif等在C語(yǔ)言中具有特定的意義,也不要另作他用。n常量用來(lái)表示固定的數(shù)值和字符值的量u整型常量:十進(jìn)制、八進(jìn)制(0)、十六進(jìn)制(0 x),L|l、U|u 0578、234u實(shí)型常量(浮點(diǎn)數(shù)): 十進(jìn)制小數(shù)形式(.) 、指數(shù)形式E|e ,F(xiàn)|fu字符常量:A ,可以其ASCII碼值參加運(yùn)算, %c、%d 轉(zhuǎn)義字符 :n、ddd、xhh 、 、 u符號(hào)常量代表常量的標(biāo)識(shí)符 #define 符號(hào)常量 常量 #define PI 3.1415926n
6、變量程序執(zhí)行過(guò)程中,其值可以改變的量。u變量定義:類型標(biāo)識(shí)符變量名列表; double x, y =3.1; /使用前需定義、賦初值常量、變量表2.3常用轉(zhuǎn)義字符及其含義 字符形式轉(zhuǎn)義字符的意義b退格,將當(dāng)前位置移到前一列n回車換行r回車,將當(dāng)前位置移到本行開(kāi)頭t水平制表(跳到下個(gè)tab位置)反斜杠字符“”單引號(hào)字符”雙引號(hào)字符ddd 13位8進(jìn)制數(shù)所代表的字符xhh 12位16進(jìn)制數(shù)所代表的字符輸入輸出函數(shù)n#include 從鍵盤讀入一個(gè)字符: c = getchar();輸出一個(gè)字符: putchar(c); putchar(65); putchar(x41); puts() 輸出字符串
7、并換行puts(s1); gets() 讀取字符串直到回車結(jié)束 gets(s1);n格式輸出函數(shù) printf(”格式控制字符串”, 表達(dá)式列表); n格式輸入函數(shù) scanf(“格式控制字符串”, 地址列表); scanf(“i=%d, j=%f”, &i, &j); i=12,j=34 scanf(“%c%c%c”, &c1, &c2, &c3); A B C int *p; scanf(%d,p);int x; double y;float z;long m; char c1;scanf(“%d%lf%f%ld%c”, &x, &y
8、, &z, &m, &c1); /對(duì)非字符型數(shù)據(jù)輸入,可用空格,Tab,回車鍵作分隔符printf(“%d, %6.3f, %c, %d n”, x, y, c1, c1); 程序執(zhí)行:2 3.1415 1.2 a2 3.142 a 97常用函數(shù)常用函數(shù)n#include /數(shù)學(xué)函數(shù) 函數(shù)原型:double sqrt(double x) sin cos tan exp pow log log10.n#include /字符函數(shù) tolower(A) isalpha isupper isdigit isalnumn#include /其它常用函數(shù) exit(0);/正常終
9、止程序,值傳給調(diào)用過(guò)程;為1則異常終止程序表. 常用的數(shù)學(xué)函數(shù)(math.h) 類 別函數(shù)名作 用函 數(shù) 原 型三角函數(shù)sin正弦函數(shù)double sin(double x)cos余弦函數(shù)double cos(double x)tan正切函數(shù)double tan(double x)asin反正弦函數(shù)double asin(double x)acos反余弦函數(shù)double acos(double x)atan反正切函數(shù)double atan(double x)指數(shù)函數(shù)exp指數(shù)函數(shù)(e的x次方)double exp(double x)pow指數(shù)函數(shù)(x的y次方)double pow(double
10、 x,double y)pow10指數(shù)函數(shù)(10的p次方)double pow10(int p)對(duì)數(shù)函數(shù)log對(duì)數(shù)函數(shù)ln(x)double log(double x)log10對(duì)數(shù)函數(shù)log10 x double log10(double x)求絕對(duì)值fabs求絕對(duì)值double fabs(double x) sqrt計(jì)算平方根double sqrt(double x)第第3章章 運(yùn)算符和表達(dá)式運(yùn)算符和表達(dá)式 運(yùn)算符優(yōu)先級(jí)、結(jié)合性、運(yùn)算對(duì)象表達(dá)式形式、求解過(guò)程類型轉(zhuǎn)換 C語(yǔ)言的表達(dá)式語(yǔ)言的表達(dá)式 n書(shū)寫規(guī)則:寫在同一行,只能使用圓括號(hào)且匹配 1 a+b1.0/2 * ( (a+b) / (3
11、*c) ) 2 3c (x+r)*8-a+b)7、b*b-4ac -b /(2*a) 不能寫成不能寫成 -b/2*a = n算術(shù)運(yùn)算符: +、-、*、/、 %、+ +、- - (整型變量)n關(guān)系運(yùn)算符: 、=、=、= =、!= n邏輯運(yùn)算符: ! 、&、|n賦值運(yùn)算符: .簡(jiǎn)單賦值運(yùn)算符: = .復(fù)合算術(shù)賦值運(yùn)算符: +=、-=、*=、/=、%=具右結(jié)合性(自右至左)的運(yùn)算符: 賦值、條件、單目運(yùn)算符運(yùn)算符優(yōu)先級(jí)n條件運(yùn)算符(三目運(yùn)算符) ? :n逗號(hào)運(yùn)算符: ,n求字節(jié)數(shù)運(yùn)算符: sizeofn強(qiáng)制類型轉(zhuǎn)換 (類型)n括號(hào)運(yùn)算符: () n指針運(yùn)算符: *、&n成員運(yùn)算符:
12、、.n下標(biāo)運(yùn)算符: n位操作運(yùn)算符: &、|、 .復(fù)合位運(yùn)算賦值運(yùn)算符: &=、|=、=、=、,=,c2; / bc; a=0; 0y=0&yb)?a:b; /*if (ab) max=a; else max=b; */fabs(x-y) 1e-5 / x = = y 判斷實(shí)型數(shù)據(jù)相等否x=y=z=0; m = +x & +y | +z; /* z=0 &、|組成的邏輯表達(dá)式, 只對(duì)能確定整個(gè)表達(dá)式值的最少數(shù)目的子表達(dá)式進(jìn)行計(jì)算 */sizeof(char) / 1 sizeof (類型標(biāo)識(shí)符| 常量 |變量) , 返回字節(jié)長(zhǎng)度。 算術(shù)運(yùn)算中的類型轉(zhuǎn)換方
13、向n強(qiáng)制類型轉(zhuǎn)換:(類型標(biāo)識(shí)符)表達(dá)式 i=5; j=2; (double)i/j (double)(i/j) double(i/j) / 2.5, 2.0, (int)(d*1000)/1000.0 / 將實(shí)數(shù)d保留3位小數(shù) ,不四舍五入 k / (int)pow(10,n-1) % 10 / 求整數(shù)的右邊第n位上的數(shù)字 / pow返回值為double型,k/10n-1%10char 、shortintunsignedlongdoublefloat內(nèi)容內(nèi)容 c1/c1.ppt語(yǔ)言程序設(shè)計(jì)基礎(chǔ) 數(shù)據(jù)類型、常用庫(kù)函數(shù) 運(yùn)算符、表達(dá)式 分支、循環(huán)結(jié)構(gòu)程序設(shè)計(jì) *數(shù)組 函數(shù)及其應(yīng)用 編譯預(yù)處理指針結(jié)
14、構(gòu)體、共用體 、枚舉位運(yùn)算文 件 結(jié)構(gòu)化程序設(shè)計(jì)n順序結(jié)構(gòu)按語(yǔ)句的先后次序依次執(zhí)行程序n選擇結(jié)構(gòu)根據(jù)給定條件,從兩條或多條路徑選擇要執(zhí)行的操作路徑u雙分支(單分支,if嵌套) if (表達(dá)式) 語(yǔ)句1 else 語(yǔ)句2u多分支 switch (表達(dá)式) case 常量表達(dá)式1: 語(yǔ)句序列1 default:語(yǔ)句序列n+1 n循環(huán)結(jié)構(gòu)在滿足給定的條件下,反復(fù)執(zhí)行某一組操作 while (表達(dá)式) do for (表達(dá)式1; 表達(dá)式2; 表達(dá)式3) 語(yǔ)句 語(yǔ)句 語(yǔ)句 while (表達(dá)式); 先判斷,后執(zhí)行 先執(zhí)行,后判斷 循環(huán)次數(shù)確定,先判斷,后執(zhí)行n循環(huán)的嵌套 1!2! 10!、矩陣運(yùn)算n轉(zhuǎn)向
15、語(yǔ)句break立即結(jié)束循環(huán),執(zhí)行循環(huán)語(yǔ)句的后續(xù)語(yǔ)句。continue跳過(guò)循環(huán)體尚未執(zhí)行的語(yǔ)句,結(jié)束本次循環(huán)。 goto if語(yǔ)句的雙分支形式流程圖語(yǔ)句1語(yǔ)句2表達(dá)式 真(非0) 假(0)if語(yǔ)句的單分支形式流程圖語(yǔ)句表達(dá)式假(0)真(非0) if語(yǔ)句的單分支形式: if (表達(dá)式) 語(yǔ)句; if語(yǔ)句的雙分支形式:if (表達(dá)式) 語(yǔ)句1; else 語(yǔ)句2; if語(yǔ)句嵌套 注意:注意:= = 、=n else-if嵌套的一般形式:if (表達(dá)式1) 語(yǔ)句1else if (表達(dá)式2) 語(yǔ)句2 else if (表達(dá)式3) 語(yǔ)句3 else if (表達(dá)式n-1) 語(yǔ)句n-1 else 語(yǔ)句n
16、/*用于處理“非上述情況”、前面各個(gè)if都不滿足的缺 省情況(若無(wú)時(shí),可省略)、出錯(cuò)檢查 */圖4.5 else-if嵌套執(zhí)行流程圖語(yǔ)句1語(yǔ)句2 語(yǔ)句3語(yǔ)句n-1語(yǔ)句n真假真真真假假假假表達(dá)式1表達(dá)式3表達(dá)式n-1表達(dá)式2【例】已知一分段函數(shù) x+lnx 當(dāng)1x2 y = x2+ex 當(dāng)2x3 log10 x 當(dāng)3x4 1+x+x2 當(dāng)x為其他值當(dāng)輸入x的值時(shí),編程計(jì)算出相應(yīng)的函數(shù)值y。#include ? void main() 變量類型定義 輸入? if 、while、for 結(jié)構(gòu) ? 輸出?#include #include void main() double x,y; printf(
17、“Enter x=”); scanf(“%lf”,&x); if (x=1&x=2 & x=3 & x4) y=log10(x); else y=1+x+x*x ; printf(“x=%f ,y=%fn”,x,y);當(dāng)當(dāng)1x2當(dāng)當(dāng)2x3當(dāng)當(dāng)3x=1&x=1&x=1&x2) y= sqrt(x) +log(x); printf(“y =%fn”);else printf(“y =%fn”, sqrt(x) +log(x)”);y=sqrt(x)+double log(double x)#include #include void main
18、() double x,y; printf(“Enter x=”); scanf(“%lf”,&x); if (x=4) y=1+x+x*x ; else if(x=3) y=log10(x); else if(x=2) y =x*x+exp(x); else if(x=1) y =sqrt(x) +log(x); else y=1+x+x*x ; printf(“x=%f ,y=%fn”,x,y);當(dāng)當(dāng)1x2當(dāng)當(dāng)2x3當(dāng)當(dāng)3x=1&x=2 & x=3 & x=1 & x=2 & x=3 & x=4 | x=1 & x=2 &am
19、p; x=3 & x4) y=log10(x); else y=1+x+x*x ; C語(yǔ)言規(guī)定:else總是與前面最接近的、不帶else的if配對(duì)。if (a=b) if (b=c) printf(“a=b=c”);else /else與第2個(gè)if配對(duì) printf (“a!=c”); if (a=b) if (b=c) printf(“a=b=c”); /加上 “”else /else與第1個(gè)if配對(duì) printf (“a!=c”); #include void main() int i, j, k; scanf(“%d”, &i); j=k=0; if ( (i/10) 0
20、 ) /* 第7行 */ j=i ; if ( (i!=0) & (j=0) ) k=i; else k=-1 ; /* 第12行 */ printf(“j=%d , k=%dn”, j, k);j=0, k=5 j=99, k=-1 j=9, k=-1 j=0, k=0二級(jí)題,程序運(yùn)行:5?99?12行改為:k=-1; j=i/10;99?7行改為:if( (i/10)0) 12行改為:k=-1;5?switch語(yǔ)句多路分支嵌套的if語(yǔ)句,程序的可讀性較低。switch的一般形式: switch (表達(dá)式) /表達(dá)式值為整型或字符型 case 常量1:語(yǔ)句組1 /語(yǔ)句組可為空或多條語(yǔ)
21、句 case 常量2:語(yǔ)句組2 case 常量n:語(yǔ)句組n default:語(yǔ)句組n+1 /可省略 功能:表達(dá)式值為常量i 從語(yǔ)句組i執(zhí)行至break語(yǔ)句 均不等 default:執(zhí)行語(yǔ)句n+1例】設(shè)考試成績(jī)采用A(90-100分)、B(80-89分)、C(70-79分)、D(60-69分)、E(60分) 5級(jí)等級(jí)計(jì)分,編程判別某考試成績(jī)等級(jí)是否滿60分。 #include void main() char grade; printf(”Please input the grade:”); scanf(”%c”,&grade); switch(grade) case A: /case的
22、語(yǔ)句組為空時(shí)將順序下延至遇到語(yǔ)句再執(zhí)行的語(yǔ)句組為空時(shí)將順序下延至遇到語(yǔ)句再執(zhí)行 case B: case C: case D: printf(“= 60”); break; case E: printf(“ 60”); break; default: printf(“input error!”); 真假表達(dá)式語(yǔ)句while 語(yǔ)句流程圖while() 語(yǔ)句假真表達(dá)式do-while 語(yǔ)句流程圖do while();語(yǔ)語(yǔ) 句句假假真真表達(dá)式表達(dá)式2表達(dá)式表達(dá)式3表達(dá)式表達(dá)式1forfor語(yǔ)句之下一語(yǔ)句語(yǔ)句之下一語(yǔ)句 for語(yǔ)句流程圖for(表達(dá)式1; 表達(dá)式2; 表達(dá)式3) while 語(yǔ)句 一般
23、形式:while(表達(dá)式) 語(yǔ)句 1; 語(yǔ)句 2; 表達(dá)式循環(huán)條件,語(yǔ)句循環(huán)體。while(表達(dá)式) 語(yǔ)句s;真假表達(dá)式語(yǔ)句1;圖4.8 while 語(yǔ)句流程圖【例】統(tǒng)計(jì)輸入字符的個(gè)數(shù),并統(tǒng)計(jì)其中有多少個(gè)字符a,用【Enter】結(jié)束字符輸入。 #include void main() int n=0, i=0; char c; while ( (c =getchar() != n) i+; if (c = = a) n+; printf(“輸入字符總數(shù)i=%d,字符a數(shù)n=%dn,i,n);【例4.13】 輸入一個(gè)整數(shù),統(tǒng)計(jì)它有幾位數(shù)。#include void main()int m, n=
24、0; / n存放位數(shù)printf(“Input m: n); scanf(“%d”,&m); do / while? n+; / 位數(shù)加1 m/=10; / m的位數(shù)減少1位 while (m!=0) ; printf(”n=%d n”, n); 【例】求sum=ai,其中,ai為從鍵盤輸入的整數(shù)。 100i=1#include void main() int i, sum=0, a; for (i=1; i=100; i+) printf(Enter a%d= ,n); scanf(%d,&a); sum=sum+a; printf(”sum=%dn”,sum); int i
25、=1, sum=0, a; while (i=100) printf(Enter a%d= ,n); scanf(%d,&a); sum=sum+a; i+; 【例】用for 語(yǔ)句求sum=n。 100n=1#include void main() int n, sum=0; for (n=1; n=100; n+) sum=sum+n; printf(sum=%dn, sum); 閱讀下列程序說(shuō)明和程序,在每小題提供的若干可選答案中,挑選一個(gè)正確答案。*【程序說(shuō)明】求 1 + 2/3 + 3/5 + 4/7 + 5/9 + 的前20項(xiàng)之和。 運(yùn)行示例:sum = 11.239837【
26、程序】#include void main( ) int i, b = 1; double s; (1) ; for (i = 1; i = 20; i+) s = s + (2) ; (3) printf( (4) , s);【供選擇的答案】(1) A、s = 0B、s = 1 C、s = -1D、s = 2(2) A、i/b B、double(i)/double(b) C、i/2*i-1 D、(double)i/(double)b(3) A、; B、b = 2 * i 1; C、b = 1.0 * b; D、b = b + 2; (4) A、sum = %dn B、s = %cn C、su
27、m = %fn D、s = %sn“ADDC #include void main() int i, m; printf(input m:); scanf(%d, &m); for (i=2; im/2) printf( %d is a prime numbern,m); else printf(%d is not a prime numbern,m);【例】判斷整數(shù)m(m2)是否為素?cái)?shù)。素?cái)?shù)是除了1和他本身外,沒(méi)有其他的因子的一個(gè)大于1的自然數(shù)。int flag=1;for (i=2; i=m/2; i+) if (m%i= =0) flag=0;if (flag=1) printf
28、(“Yes”);else printf(“No”);【例5.13】輸出100以內(nèi)的所有素?cái)?shù)。 在外層套一層循環(huán),使數(shù)m(從2100)由該循環(huán)自動(dòng)生成,并將判別出的素?cái)?shù)直接輸出。設(shè)置標(biāo)志以標(biāo)明某種狀態(tài)的變化。#include void main() int i, m, flag; for (m=2; m100; m+) flag=1; / 設(shè)置標(biāo)志flag, 1表示素?cái)?shù) for (i=2; i=m/2; i+) if( m%i= = 0) flag=0; / 修改標(biāo)志flag, 0表示非素?cái)?shù) break; / m不是素?cái)?shù), 不需繼續(xù)循環(huán) if (flag= =1) printf(%d, m);
29、/判斷標(biāo)志,素?cái)?shù)則輸出m 【例5.13】輸出100以內(nèi)的所有素?cái)?shù)。 在外層套一層循環(huán),使數(shù)m(從2100)由該循環(huán)自動(dòng)生成,并將判別出的素?cái)?shù)直接輸出。設(shè)置標(biāo)志以標(biāo)明某種狀態(tài)的變化。#include void main() int i, m, flag; for (m=2; m100; m+) flag=1; / 設(shè)置標(biāo)志flag, 1表示素?cái)?shù) for (i=2; i=m/2; i+) if( m%i= = 0) flag=0; / 修改標(biāo)志flag, 0表示非素?cái)?shù) break; / m不是素?cái)?shù), 不需繼續(xù)循環(huán) if (flag=0) continue; /判斷標(biāo)志,非素?cái)?shù), 跳過(guò)輸出m, 進(jìn)入
30、下一次循環(huán) printf(%d, m); 【例6.5】判別和輸出2100之間的素?cái)?shù),按每行8個(gè)素?cái)?shù)輸出。 #include #include int isprime(int n) int i; for (i=2; i= sqrt(n); i+) if (n%i=0) return 0; / 返回0,k非素?cái)?shù) return 1; / 返回1,k為素?cái)?shù); void main() int k, count=0; for (k=2; k=100; k+) / k從2100,窮舉i是否素?cái)?shù) if (isprime(k)=1) /調(diào)用函數(shù)prime(), 將實(shí)參k傳遞給形參n. 若返回1, k為素?cái)?shù) pr
31、intf(%5d, k); count+; if (count%8=0) printf(n); /控制每行輸出8個(gè)數(shù)據(jù) 2 3 5 7 11 13 17 1923 29 31 37 41 43 47 5359 61 67 71 73 79 83 8997【例4.25 】 計(jì)算 1!+2!+3!+10!#include void main() int i, n, s=0, y; for (n=1; n=10; n+) /外循環(huán) y=1; for (i=1; i=n; i+)/內(nèi)循環(huán)計(jì)算n! y*=i; s+=y; /將n!累加到s printf(“1!+2!+3!+10! =%d n”, s);
32、 int i;long s=0, y=1;for (i=1; i= 10 B、power = 100 C、t != 0 D、number !=0(3) A、power = 0 B、digit != 0 C、number != 0 D、power = 1(4) A、number /= power; B、number %= 10; C、number %= power; D、number /= 10;BADC#include void main( ) int digit, number, power, t; printf(Enter an integer:); scanf(%d, &numb
33、er); number = number 0 ? -number : number; power = 1; (1) while( (2) ) power *= 10; t /= 10; ; printf(The digits are:); while( (3) ) digit = number / power; printf(%d , digit); (4) ; power /= 10; 閱讀下列程序并回答問(wèn)題,在每小題提供的若干可選答案中,挑選一個(gè)正確答案。*【程序】#include void main( ) int k; for(k = 5; k 0; k-) if(k=3) contin
34、ue; /* 第6行 */ printf(%d , k); (13) 程序的輸出是 。 A、5 4 3 2 1 B、5 4 2 1 C、5 4 D、3(14) 將第6行中的continue改為break后,程序的輸出是 。 A、5 4 3 2 1 B、5 4 2 1 C、5 4 D、3 (15) 將第6行中的continue刪除(保留分號(hào))后,程序的輸出是 A、5 4 3 2 1 B、5 4 2 1 C、5 4 D、3 (16) 將第6行全部刪除后,程序的輸出是 。 A、5 4 3 2 1 B、5 4 2 1 C、5 4 D、3BCAD比較:for寫程序較緊湊、清晰,能利用表達(dá)式給變量初始化并
35、修改其值;while和do-while語(yǔ)句只能在循環(huán)之前進(jìn)行初始化,在循環(huán)體中進(jìn)行修改。 若循環(huán)的次數(shù)確定,使用for較合適;否則,采用while或dowhile語(yǔ)句較為清晰。dowhile語(yǔ)句是“先執(zhí)行、后判斷”,至少執(zhí)行一次循環(huán)體;而while、for是“先判斷、后執(zhí)行”,若條件一開(kāi)始就不成立,循環(huán)體一次都不執(zhí)行。 while( ).do while( );for()dowhile( );dowhile( )while( );(A) 正確的嵌套形式 (B) 不正確的嵌套形式 嵌套形式示意圖 數(shù)組 一維數(shù)組排序、查找算法二維數(shù)組 字符數(shù)組和字符串?dāng)?shù)組一批同類型相關(guān)數(shù)據(jù)的有序集合n一維數(shù)組由一
36、個(gè)下標(biāo)確定元素的數(shù)組 u定義形式:數(shù)據(jù)類型 數(shù)組名 常量表達(dá)式 int t10; int n=10,an; u通過(guò)對(duì)單個(gè)數(shù)組元素的引用來(lái)使用數(shù)組: 數(shù)組名下標(biāo)u初始化: int j, t10; for(j=0;j10;j+) tj = j; for(j=0;j10;j+) scanf(%d, &tj); n二維數(shù)組u定義形式:數(shù)據(jù)類型 數(shù)組名常量表達(dá)式1 常量表達(dá)式2 行數(shù) 每行元素個(gè)數(shù) double b510; double b5,10; int a=1,2; u引用形式:數(shù)組名下標(biāo)1 下標(biāo)2u初始化 int j, k, b34; for (j=0; j3; j+) for (k=0
37、; k4; k+) scanf(%d, &bjk); / bjk=0; #define M 4double aM;字符數(shù)組u定義、初始化: char c5=L,i,k,e,0; char a3; a0=N ; char c5=Like; char c5=Like; char c5; c=Like; char c20; scanf(“%s”,c); printf(“String is %s”,c); / 回車,Tab,空格 結(jié)束輸入u逐個(gè)字符的輸入/輸出:getchar、putchar, scanf、printf用格式符%c char c81; int i; for(i=0; (ci=g
38、etchar() != n; i+) ; / 輸入字符串u字符串輸入/輸出函數(shù): gets(str); / 回車結(jié)束輸入 puts(str);u常用字符串函數(shù): string.h strcat(c1,c2); / c1=c1c2 strcpy(c1,c2); / c1=c2 strcmp(c1,c2) / =返回0; 返回1 strlen(c1); / 注意110n二維字符數(shù)組: char str39=”Hzhou”, ”Shai”, ”Bjing”; gets(str1); strcpy(str0,”Abc”); puts(str2);#include void main() int i;
39、int f40=1,1; for (i=2; i40; i+) fi=fi-1+fi-2; for (i=0; i40; i+) if (i%5=0) printf(n); /每行輸出5個(gè)數(shù)據(jù) printf(%8d, fi); 程序執(zhí)行: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 .【例6.2】利用數(shù)組求Fibonacci數(shù)列的前40項(xiàng)。fibonacci數(shù)列具有下面的性質(zhì): f1=1 (n=1) f2=1 (n=2) fn=fn-1+fn-2 (n3)分析:利用數(shù)組元素fn-1 存儲(chǔ)數(shù)列的第n項(xiàng)fnint f40;for (i=0; i40; i+
40、) if(i=0|i=1) fi=1; else fi=fi-1+fi-2; 排序冒泡法排序選擇法排序【例】用冒泡法對(duì)8個(gè)數(shù)排序(從小到大)。分析:將相鄰兩個(gè)數(shù)進(jìn)行比較,將大數(shù)調(diào)換到后面,經(jīng)過(guò)一輪操作將最大數(shù)放在最后; 7次, j=0; jaj+1 ? 再對(duì)前n-1個(gè)數(shù)進(jìn)行相同的比較交換操作,將次大數(shù)放在倒數(shù)第二的位置; 7次, i=0; ia1? a0a1a1a2? a1a2a2a3? a2a3a6a7? a6a7for(i=0; iai+1) aiai+1; /第1趟for(i=0; iai+1) aiai+1;for(i=0; iai+1) aiai+1;for(i=0; iai+1)
41、aiai+1; /第7趟for(j=0; j7;j+) for(i=0; iai+1) aiai+1;#include 冒泡法排序(升序冒泡法排序(升序)#define N 8void main() int i, j; double aN, t; printf(Input %d numbers:n“, N); for (i=0; iN; i+) scanf(%lf, &ai); for (i=0; iN-1; i+) /n個(gè)數(shù)進(jìn)行個(gè)數(shù)進(jìn)行n-1趟排序趟排序 for (j=0; jaj+1) /若相鄰兩元素不是小到大升序,則互換若相鄰兩元素不是小到大升序,則互換 t=aj; aj=aj+
42、1; aj+1=t; printf(The sorted numbers are:n); for (i=0; iN; i+) printf(%5.2f, ai);#include 冒泡法排序(升序)冒泡法排序(升序)#define N 8void main() int i, j; double aN, t; printf(Input %d numbers:n“, N); for (i=0; iN; i+) scanf(%lf, &ai); for (i=0; iN-1; i+) / for (i=1; i ;i+) for (j=0; jN-i-1; j+) / for (j= ; i
43、aj+1) t=aj; aj=aj+1; aj+1=t; printf(The sorted numbers are:n); for (i=0; i ak ? k=j a0ak第2次選擇:在a1至a7中找最小數(shù)ak,將a1與ak值交換,第2次排序后將次小的數(shù)放在a1處; k=1, j=27, aj ak ? k=j a1ak每次從未排序數(shù)中選最小數(shù)與未排序數(shù)中位置最前的數(shù)交換,直至所有數(shù)都按從小到大排列。 i=0, i ak ? k=j#include 選擇法排序(升序)#define N 8void main() int i, j, k; double aN, t; printf(Input
44、 %d numbers: n“, N); for (i=0; iN; i+) scanf(%lf, &ai); for (i=0; iN-1; i+) /N個(gè)數(shù)進(jìn)行N-1趟排序,每趟將當(dāng)前最小數(shù)置前 k=i; /k是本次要找的最小元素的下標(biāo) for (j=i+1; jN; j+) if (ajak)k=j; /保留最小元素的下標(biāo) t=ak; ak=ai; ai=t;/將當(dāng)前最小元素交換到本趟排序數(shù)最前面 printf(The sorted numbers are: n); for (i=0; iN; i+) printf(%.2f, ai);#include 機(jī)考(程序改錯(cuò)):機(jī)考(程
45、序改錯(cuò)):#define N 10 用選擇法對(duì)用選擇法對(duì)10個(gè)整數(shù)按升序排序個(gè)整數(shù)按升序排序void main() int i, j, min, temp; int aN=5, 4, 3, 2, 1, 9, 8, 7, 6, 0; printf(“n The array is: n“); /* 輸出數(shù)組元素輸出數(shù)組元素 */ for (i=0; iN; i+) printf(%5d, ai); for (i=0; iN-1; i+) /* 排序操作排序操作 */ min=i; for (j=i+1; jN; j+) /*1*/ if (amin=aj)min=j; /*2*/ temp=ami
46、n; amin=aj; aj=temp; /*數(shù)據(jù)交換數(shù)據(jù)交換*/ printf(The sorted numbers are: n); for (i=0; iaj)min=j;temp=amin; amin=ai; ai=temp;【例】使用順序查找法,在n個(gè)數(shù)中查找某個(gè)數(shù)。#include #include #define N 10void main() int aN, i, x; printf(Input %d numbers:n“,N); for(i=0; iN; i+) scanf(%d, &ai); printf(“input x to look for:n”); scan
47、f(“%d”, &x); for (i=0; iN; i+) if (ai= x) printf(“find: %d it is a%dn“,x,i); exit(0); printf(%d not been found.n,x);#include void main() int a33,temp; int i,j; for (i=0; i3; i+) / 輸入 for (j=0; j3; j+)scanf(%d, &aij); for (i=0; i3; i+) / 轉(zhuǎn)置 for (j=0; j3; j+)if (ij) temp=aij; aij=aji; aji=temp
48、; printf(“Turn after placing: n); for (i=0; i3; i+) / 輸出 for (j=0; jj) 【程序說(shuō)明】輸入一個(gè)2 * 3的二維數(shù)組,找出最大值以及它的行下標(biāo)和列下標(biāo),并輸出該矩陣。運(yùn)行示例:Enter a array(2*3):3 2 10 -9 6 -1max = a02 = 103 2 10-9 6 -1【供選擇的答案】(9) A、&aij B、&aji C、aij D、aji(10) A、row = col = 2; B、row = col = 0; C、arowcol = 0; D、arowcol = -1;(11)
49、A、row = j; col = i; B、arowcol = aij C、row = i; col = j; D、arowcol = aji(12) A、printf(“n”) B、printf(“n”); C、; D、printf(“n”); ABCD【程序】#include main( ) int col, i, j, row; int a23; printf(Enter array(2*3):); for(i = 0; i 2; i+) for(j = 0; j 3; j+) scanf(%d, (9) ); (10) ; for(i = 0; i 2; i+) for(j = 0;
50、j arowcol) (11) ; printf(max = a%d%d = %dn, row, col, arowcol); for(i = 0; i 2; i+) for(j = 0; j 3; j+) printf(%4d, aij); (12) ;【例【例6.14】輸入一串字符,將其逆序存放并輸出?!枯斎胍淮址瑢⑵淠嫘虼娣挪⑤敵觥?#include void main() char s81, t; int i, j; gets(s); for (j=0; sj!=0; j+) ; / 字符串長(zhǎng)度字符串長(zhǎng)度 j=strlen(s); for (i=0, j-; ij; i+, j-)
51、 t=si; si=sj; sj=t; printf(%s, s);for (j=0; (sj=getchar()!=n; j+) ;第5章 函數(shù)概述 函數(shù)的定義與調(diào)用 函數(shù)間參數(shù)傳遞函數(shù)的嵌套調(diào)用和遞歸調(diào)用 變量的作用域和存儲(chǔ)類別 圖6.1 C語(yǔ)言程序結(jié)構(gòu)源程序文件1C程序源程序文件m源程序文件j內(nèi)部數(shù)據(jù)定義語(yǔ)句序列函數(shù)n函數(shù)1函數(shù)i預(yù)編譯命令外部數(shù)據(jù)說(shuō)明C程序是由一個(gè)或多個(gè)函數(shù)組合而成,函數(shù)是C語(yǔ)言程序的基本模塊。唯一主函數(shù)唯一主函數(shù)main是程序開(kāi)始執(zhí)行處,可調(diào)用其它函數(shù)。是程序開(kāi)始執(zhí)行處,可調(diào)用其它函數(shù)。 Review 函數(shù)是具有獨(dú)立功能的程序模塊, 是C語(yǔ)言的基本構(gòu)件。函數(shù)是一個(gè)“黑
52、盒子”。 在引用一個(gè)函數(shù)時(shí),用戶只需了解被調(diào)用函數(shù)的功能、是否需要提供數(shù)據(jù)、函數(shù)返回值即可;不必了解其內(nèi)部的工作細(xì)節(jié)。由于采用了函數(shù)結(jié)構(gòu),程序的層次結(jié)構(gòu)清晰,便于編寫、閱讀和調(diào)試。分類: 從用戶的角度:標(biāo)準(zhǔn)庫(kù)函數(shù),用戶自定義函數(shù) y=sin(x); 從函數(shù)的結(jié)果:無(wú)返回值的函數(shù),有返回值的函數(shù) void 從函數(shù)的形式看:有參函數(shù),無(wú)參函數(shù)函數(shù)的定義與調(diào)用函數(shù)定義的一般形式:數(shù)據(jù)類型 函數(shù)名(類型形參, ) 函數(shù)體; 函數(shù)調(diào)用的一般形式為:函數(shù)名(實(shí)參1, 實(shí)參2, ) 用作函數(shù)表達(dá)式 z=max(x, y); 作實(shí)參使用 z= max( max(x1, x2), x3); 獨(dú)立構(gòu)成表達(dá)式語(yǔ)句
53、printf(maxmum=%d, z); 函數(shù)聲明一般形式為:數(shù)據(jù)類型 函數(shù)名(類型 形參, ); 或:數(shù)據(jù)類型 函數(shù)名 (類型, 類型,); 如被調(diào)函數(shù)定義的位置在主調(diào)函數(shù)前,聲明可省略。#include void main() int x, y, z; int max(int a, int b); /函數(shù)聲明 printf(input two numbers:); scanf(%d%d, &x, &y); z = max(x, y); /函數(shù)調(diào)用,作表達(dá)式、語(yǔ)句、形參 printf(max=%d, z); printf(max=%d, max(3, 6) );int ma
54、x(int a, int b) /函數(shù)定義 int c; if (ab) c=a; else c=b; return c;【例】編寫函數(shù),輸出10 個(gè)“*”號(hào),并回車。#include void star() /無(wú)參函數(shù) int i; for (i=0; i10; i+) printf(“*”); printf(“n); return; /無(wú)返回值、返回主調(diào)函數(shù) void main() star();/ 函數(shù)調(diào)用 函數(shù)間參數(shù)傳遞函數(shù)間參數(shù)傳遞:傳數(shù)值(形參,實(shí)參,return) 傳地址(形參是數(shù)組或指針變量) 一維形參數(shù)組定義的一般形式: void sort(int a , int n) in
55、t b10=1,6,7,0,8,4,3,2,9,5; sort(b,10); 二維形參數(shù)組定義的一般形式: void change(int x 5, int n, int m)函數(shù)的嵌套調(diào)用:在一個(gè)函數(shù)的函數(shù)體內(nèi)調(diào)用另一個(gè)函數(shù) 不允許嵌套定義遞歸調(diào)用:被調(diào)用的函數(shù)是調(diào)用函數(shù)自身時(shí)。 遞歸方法:將要解決的問(wèn)題分解成比原問(wèn)題規(guī)模小的類似子問(wèn)題,而解決此子問(wèn)題時(shí)又可用原問(wèn)題的解決方法,依此原則逐步遞推轉(zhuǎn)化,最終將原問(wèn)題轉(zhuǎn)化為較小且有已知解的子問(wèn)題。例:數(shù)列的第1、2項(xiàng)均為1,此后各項(xiàng)值均為該項(xiàng)前二項(xiàng)之和。計(jì)算數(shù)列第30項(xiàng)的值。(省二級(jí)上機(jī)填空題)#include 1 . void main() pr
56、intf( %ldn,f(30) ); long f(int n) if ( 2 ) return 1; else return f(n-1)+f(n-2); /long f(int n); n = =1| n = = 2【例】分析函數(shù)調(diào)用前后的實(shí)參值、形參值。#include void main() double a, z; double mult(double); a=5.2; printf(“調(diào)用mult前:a=%.2lf n, a); z=mult(a); /函數(shù)調(diào)用,形參值改變不影響 實(shí)參值a printf(“調(diào)用mult后:a=%.2lf n, a); printf(“z=%.2l
57、f n, z); double mult(double a) /形參a a=a*a; printf(“在mult中:a=%.2lf n, a); return (a); 程序執(zhí)行:調(diào)用mult前:a=5.20在mult中:a=27.04調(diào)用mult后:a=5.20z=27.04形參變量和實(shí)參變量是各自獨(dú)立的變量,占有不同存儲(chǔ)空間變量的存儲(chǔ)類別變量的作用域:局部變量在函數(shù)體或復(fù)合語(yǔ)句內(nèi)定義的變量全局變量在函數(shù)外部定義的變量。Extern全局變量和局部變量同名在局部變量的作用域內(nèi),全局變量不起作用變量的存儲(chǔ)類型說(shuō)明有種:自動(dòng)變量、寄存器變量動(dòng)態(tài)存儲(chǔ)方式(函數(shù)調(diào)用或復(fù)合語(yǔ)句結(jié)束時(shí)釋放)靜態(tài)變量、外部
58、變量靜態(tài)存儲(chǔ)方式(整個(gè)程序運(yùn)行結(jié)束時(shí)釋放空間)自動(dòng)變量 auto(缺省) 寄存器變量register:存儲(chǔ)在CPU中,存放使用頻率較高的數(shù)據(jù),訪問(wèn)速度快靜態(tài)變量 static:靜態(tài)局部變量在函數(shù)內(nèi)部定義且只在該函數(shù)內(nèi)使用。值具可繼承性靜態(tài)全局變量只在定義該變量的源文件內(nèi)有效 外部變量extern:外部變量可作用于整個(gè)源程序。如一個(gè)源程序由若干個(gè)源文件組成,在一個(gè)源文件中可以使用其他源文件中的外部變量(該全局變量只需在一個(gè)文件中定義),但必需要在使用前對(duì)該變量作extern外部變量說(shuō)明。 auto int i, j, k; static float x,y; extern float x, y;
59、#include int s;float f2(int x) int y,s; static int a; main() int m,n; int a,b; m=a+b; n=a-b; 變量的作用域變量的作用域:全局變量、局部變量全局變量、局部變量在同一源文件中,允許全局變量和局部變量同名。在局部變量的作用域內(nèi),全局變量不起作用。x x、y y、s s的作用域的作用域a a、b b的作用域的作用域m m、n n的作用域的作用域s s的的作作用用域域全局變量與局部變量同名:在局部變量的作用域內(nèi),全局變量不起作用(例6.20) #include double add, mult; /全局變量voi
60、d func( double x, double y) double add, mult; /局部變量 add=x+y; mult=x*y;void main()double a, b; scanf(“%lf%lf”, &a, &b); func(a, b); printf(“%.2lf %.2lfn”, add, mult); /全局變量若未初始化,初值0 7 50.00 0.00#include (省二級(jí)題)int k=1;void main() int j; void Fun(); for (j=0; j2; j+) Fun(); printf(k=%d, k);void Fun() int k=1; / static int k=1; k=1; ; printf(k=%d, , k); k+;輸出:k=1, k=1, k=1k=1, k=2, k=1k=1, k=1, k=2k=1, k=2, k=3【例】判別和輸出2100之間的素?cái)?shù),按每行8個(gè)素?cái)?shù)輸出。 #include #include int isprime(int n) int i; for (i=2; i= sqrt(n); i+) if (n%i=0) return 0; / 返回0,k非素?cái)?shù) return 1; /
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療健康管理在商業(yè)領(lǐng)域的應(yīng)用與挑戰(zhàn)
- 教案檢查工作總結(jié)模版
- 上海 房東租房合同范例
- 紅褐色扁平風(fēng)網(wǎng)絡(luò)安全模板
- 儲(chǔ)罐廠家供貨合同范例
- 產(chǎn)品定制打樣合同范例
- 供銷付款合同范例
- 防溺水安全家長(zhǎng)會(huì)發(fā)言稿模版
- 住建部買房合同范例
- 職業(yè)性硬皮病的臨床護(hù)理
- 水費(fèi)計(jì)算、水權(quán)與水價(jià)課件
- 有限空間作業(yè)及應(yīng)急物資清單
- 思想道德與法治教案第一章:領(lǐng)悟人生真諦把握人生方向
- 61850報(bào)文解析-深瑞版-131016
- 0-6歲兒童隨訪表
- 江西新定額2017土建定額說(shuō)明及解釋
- 國(guó)家電網(wǎng)有限公司十八項(xiàng)電網(wǎng)重大反事故措施(修訂版)-2018版(word文檔良心出品)
- 語(yǔ)文四年級(jí)下冊(cè)《失落的一角》繪本閱讀 課件(共61張PPT)
- 附件一∶ 教育部專家實(shí)地評(píng)估案頭必備材料
- 余甘果的栽培與加工工藝
- 中考英語(yǔ)雙向細(xì)目表
評(píng)論
0/150
提交評(píng)論