程序設(shè)計-教案改_第1頁
程序設(shè)計-教案改_第2頁
程序設(shè)計-教案改_第3頁
程序設(shè)計-教案改_第4頁
程序設(shè)計-教案改_第5頁
已閱讀5頁,還剩235頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

C程序設(shè)計(第四版著程序設(shè)計和C語算法——最簡單的C程序設(shè)計——選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)利用函數(shù)用戶自己對文件的常見錯誤PAGEPAGE5第1計和C語所謂程序,就是一組計算機(jī)能識別和執(zhí)行的指#includeintmain( //一個簡單的C語言 printf("ThisisaCprogram.\n");return0;}計算機(jī)語言的發(fā)展機(jī)器語言匯編語言(低級語言)高級語言(面向過程的語言、算法語言)第四代語言(面向問題的語言)計算機(jī)語言的應(yīng)用1.3CC語言的產(chǎn)生與發(fā)ALGOL60CPL(CombinedProgrammingLanguage)BCPL(Basi L)BCC語言的標(biāo)準(zhǔn)化:標(biāo)準(zhǔn)C、ANSIC、 C、TurboC、BORLANDC等C語言的特語言簡潔、緊湊,使用方便、靈活(例下表37個關(guān)鍵字、9種控制語句、格式自由、小C語PASCAL語含義 if IF(e) THENS條件inti VARi 定義i為整int 定義a為整型intf(int*FUNTIONf():VARp:^定義f為返回整型定義p為指向整型單元指針變i++i:=i+2i:=i+賦值語句i2ii自增1i+1iC運算符豐數(shù)據(jù)類型豐

具有結(jié)構(gòu)化的控制語句。以函數(shù)為程序的模塊單位,便于實現(xiàn)程序的模塊化語法限制 生成目標(biāo)代碼質(zhì)量高,程序執(zhí)行效率高可移植性 1.4最簡單的C語言程 #include<stdio.h> intmain( 定義主函{printf("ThisisaCprogram.\n");return0;}例1.2求兩個#includeintmain( //求兩數(shù)之{inta,b,sum; a=123;b=456; //以下4行為C語句printf("sumis%d\n",sum);return0;

} 1.4最簡單的C語言程例1.3求兩個#includeintmain( //主函{intmax(intx,inty); //對被調(diào)用函數(shù)max的inta,b,c; //輸入變量a和b的值 //調(diào)用max函數(shù),將得到的值賦給cprintf("max=%d\n",c); //輸出c的值return}intmax(intx,int //定義max函數(shù),函數(shù)值為整型,形式參數(shù)x,y為整{int //max函數(shù)中 部分,定義其中用到的變量z為整if(x>y)z=x;elsez=y;return //將z的值返回,通過max} 最簡單的C語言程xy7zxy7z8{intmax(intx,inty);inta,b,c;printf("max=%d\n",c);return0;

8 88}intmax(intx,int{intif(x>y)z=x;elsez=y;return(z);220/12/2 1.1.PAGE10簡單的C程序介C語言源程序的結(jié)構(gòu)C程序是由函數(shù)構(gòu)成的。包含一個main函數(shù)和若干個其他函數(shù)。函數(shù)類 函數(shù) 函數(shù)參數(shù)類型函數(shù)參數(shù)

{intif(x>y)z=x;elsez=y;return(z);

部分執(zhí)行部 合法是空函數(shù):voiddump( 1.1.PAGE11簡單的C程序介(4)一個C程序總是從main函數(shù)開始執(zhí)行的#includeintmax(intx,int{intif(x>y)z=x;elsez=y;return(z);}main({inta,b,c;printf("max=%d\n",c);

C 對程的作注釋}C有

有錯無

源程 C C程無目標(biāo)程 上 上機(jī)庫函 和其他 驟 驟

正確

正確 問題分設(shè)計算編寫程運行程序,分析結(jié)果(調(diào)試、測試編寫程序文第2章算法——程序的程序=數(shù)據(jù)結(jié)構(gòu)+算法+程序設(shè)計方法+語言工具和環(huán)據(jù)的類型和數(shù)據(jù)的組織形式。2.1什么是算法2.22.2簡單算法舉22/1/:若i<=11,返回Step3;否則,結(jié)束例2.1求1234關(guān)鍵:抽象、提煉關(guān)鍵:抽象、提煉出解決問題初始Step3:pipStep4:i+1iStep5:i<=5,返回Step3;否則,結(jié)束。求13579112.22.2簡單算法舉例2.2有50個學(xué)生,要求將他們之中成績在80分以上者第i個學(xué)生的學(xué)號為ni,成績?yōu)間iStep1:Step2:若gi>=80,則打印ni和gi;否則不打印Step3:Step4:若i<=50,返回Step2;否則,結(jié)束例2. 判定2000—2500年中的每一年是否閏年,將結(jié)果輸閏年的條件:能被4整除但不能被100整除的年份是閏年能被100整除又能被400整除的年份是閏年設(shè)year為被檢測的年份,算法如下S2:若year不能被4整除,則輸出year不是閏年”,然后轉(zhuǎn)到S3:若year能被4整除,不能被100整除,則輸出year是閏S4:若year能被100整除,又能被400整除,則輸出year是閏S5:輸出year不是閏年”S6year+1yearS7:若year<=2500,返回S2繼續(xù)執(zhí)行;否則,結(jié)束例2.4

1

1

……1 算法如下

S6:sum=sum+termS8:若deno<=100返回S4;否則算法結(jié)束例2.4對于一個大于或等于3的正整數(shù),判斷是否為素數(shù)S2:i=2(i作為除數(shù))S4:如果r=0,表示ni整除,打印n“不是素數(shù)”,算法結(jié)S5:i+1S6:若i<=n1返回S3;否則打印n“是素數(shù)”,然S6步驟可改為

講義的小錯S6

n返回S3;否則打印n“是素數(shù)”,然算法的特有窮性(要做合理的范圍內(nèi)確定有效自然語傳統(tǒng)流程結(jié)構(gòu)化流程偽代用流程用流程圖表起止框輸入輸出框判斷框處理框流程 連接點注釋YN打印打印YN打印打印 用流程用流程圖表例2.6將例2.1求5!的算法用流程圖表示如NY打印用流程用流程圖表例2.7將例2.2的算法用流程圖表示如下 打印NNY用流程用流程圖表例2.8將例2.3的算法用流程圖表示yy不能被4Ny不能被100YYNYy不能被400N打印打印打印NY用流程用流程圖表例2.10將例2.5的算法用流程圖表示如下輸入YN打印YN打印N nYn/i的余數(shù)三種基三種基本結(jié)構(gòu)和改進(jìn)的流程傳統(tǒng)BS型算法:aBowlof 例圖2.13三種基本結(jié)構(gòu)(1966年,Bohra&abp不成ap不成b成AAabp不成ap不成b成AAababBA成立不成pABABa成a成p不成bA

當(dāng)While直到Until三種基三種基本結(jié)構(gòu)和改進(jìn)的流程abp成abp成A

當(dāng)While

直到ap不ap不成b成A0打印x0打印xYxN0x+1打印xNY 三種基本結(jié)構(gòu)的共同特點只有

只有一個出 BABAb

pABABAABB

AAp成立b2.4.42.4.4用N-S流程圖表示算N-SINassi&B.Shneiderman)BAp成BAp成 不成ABAA直到p1順序結(jié) 選擇結(jié) 當(dāng)型循環(huán)結(jié)構(gòu)直到型循環(huán)結(jié)其中A或B框可以是簡單操作,也可以是三種結(jié)構(gòu)之成 成 不成當(dāng)B 2.4.42.4.4用N-S流程圖表示算直到打印 直到例

例y/4的余數(shù)為 y/100的余 不為 y/400的余

“是閏

”打印”

為 否“非閏年打印例

“是閏年“不是閏””直到2.4.42.4.4用N-S流程圖表示算輸入輸入n/i的余數(shù)n/i的余數(shù)

Y打印

輸入2n/in/i的余數(shù) Y i n?Y

N“

輸出n

輸出n 結(jié) 2.4.42.4.4用N-S流程圖表示算例例輸入2YNYYi NN輸出n輸出nn/i的余數(shù)輸入n/i的余數(shù)是否直到in或是否輸出輸出2.4.52.4.6#include<stdio.h>intmain(){inti,t;{}return0;

#include<stdio.h>intmain() intdoubledeno=2.0,sum=1.0,term;{sign=-sign;}return0;} }(1)自頂向下(2)逐步細(xì)對當(dāng)前(3)模塊化設(shè)計;(對當(dāng)前工廠工廠

前一階段工 第3簡單的C——順序程序常量和變常在程序運行過程中,其值不能被改變的符號1.1.常整型常十進(jìn)制整數(shù)八進(jìn)制整數(shù)。以0開頭。如0123、–0110x開頭。0x123、–實型常十進(jìn)制小數(shù)形指數(shù)形式形式:12.34e3、-1.23E-字符常普通字符,用單撇號括起來的字符。如'D','1','?','$'此為源程序級的表示,例如c=若在計算機(jī)中表示,則為其ASCII碼的二進(jìn)制注意ASCII表的規(guī)律,空字符、空格字轉(zhuǎn)義字符:以字符\開頭的字符序列。例轉(zhuǎn)義字字符形

98

1~3位8進(jìn)制所代表的字1~2位16進(jìn)制所代表的字 利用\ddd和\xhh可表示任何字符(只要已知其ASCII碼例如'\101'等同于'A','\012'等同于'\n‘;'\0'、'\000'為空例#include<stdio.h>intmain(){printf("abc\tde\rf\tg\n");printf("h\ti\b\bjk");return0;}輸出fabfabfjhkjh例如:wdoyou,,"a"與'a'的不同字符串常量在內(nèi)存中的存放。例如CHINA號常量的使#definePRICE30intmain(){intnum,printf("Total=%d",totalreturn}符號常量的作用:(1)含(2)便

intmain({intnum,total;printf("Total=%d",total);return0;}變其值可以改變的量稱源程序中變量有一個名字。程序運行時對應(yīng)內(nèi)存相應(yīng)的 單元(地址)。變量 單

對應(yīng)單元地

變量C便于保證(1)變量使用的正確性;(2)為其分配合適的單元;(3)變量進(jìn)行運算的正確性。 常變constint在該變量存在期間其值不能改變與變量的異同與常量的異同標(biāo)識標(biāo)識符(identifie):用來標(biāo)識變量名、符號有效字符序列。有效標(biāo)識符:只能由字母、數(shù)字、下劃線組成,且第一個字符必須為字母或下劃線。注1:C語言中大、小寫字母是有區(qū)別的注2:標(biāo)識符的長度(各個C編譯系統(tǒng)自己的規(guī)定)。注3:形象的標(biāo)識符。數(shù)據(jù)類 單元的長度以及數(shù)據(jù)

整型字符型

(float)double

整型數(shù)整型數(shù)據(jù)的分基本int //int型數(shù)據(jù)單元為2個字節(jié)或4個字i

0000000i0000000

00001010000101i的地址為0000000000010111111111111010數(shù)值是以補(bǔ)碼表示的。例10的補(bǔ)碼。0000000000010111111111111010按位取11111111111011再11111111111011短整型:shortintshort長整型:longintlong雙長整型:longlongintsizeof(short)≤sizeof(int)≤sizeof(long)≤sizeof(long比特最小取值范[signed比特最小取值范[signed] 即215~(215unsigned 0~(216–[signed]short 即215~(215unsignedshort 0~(216–[signed]long2147483648~2147483647即231~(231unsignedlong即0~(232–)))))整型變量的溢#include<stdio.h>intmain() inta,b;

3.2.30111111111111101111111111111111111111111111111111111111101111111111111printf("%d,%d", 01111111111111return10000000000000 10000000000000運行結(jié)果為:32767,-說明(2)用%u格式字符型數(shù)字符按ASCII碼形字符'1'與整數(shù)1的不同:1+1='1'1 charc1,c2;c1='a'c2='b';

字符型數(shù) 字符數(shù)據(jù)在內(nèi)存中的形式及其使用方字符在內(nèi)存中以二進(jìn)制形式存放其對應(yīng)的I碼!例向字符變量賦以整數(shù)。main({charc1=97;c2=98; //等價于c1='a'c2='b';printf("%c%c\n",c1,c2);printf("%d}例main({charc1,c2;printf("%c}字符數(shù)據(jù)與整型數(shù)據(jù)可以互相賦值charc=130;浮點型數(shù)實型數(shù)據(jù)在內(nèi)存中的存放形式——是以指數(shù)形式存放在單元中的。指數(shù)形式:123e3、規(guī)范化的指數(shù)形式:1.23e5、例:將5.25在內(nèi)存存放。++系數(shù)部分?jǐn)?shù) 系數(shù)部分小 指實型變量的類比特有效數(shù)數(shù)值范6(±)1.2×1038~3.4×(±)2.3×10308~1.7×long(±)3.4×104932~1.1×整型?;颍嚎稍谡麛?shù)的末尾加L或l浮點型常例:floatf=3.14159;floatf=3.14159f;longdoublea=1.23L;1.基本的算術(shù)運算符+、–、*、、注意:(1)兩個整數(shù)相除的結(jié)果為整數(shù)。若至少有一個運算數(shù)為實數(shù),則算術(shù)運算的結(jié)果為雙精度實數(shù)。例:1/2為0,1.0/2等于(2)+、–還可為單目運算符 ,–i++,i–注1.自增自減運算符,只能作用于變量,而不能用于常量或表達(dá)式。5++、(a+b)+不合法。注2.自增自減運算符的結(jié)合方向“自右至左”例如(1)–i++ (參見oC程序) i=3;j=(++i)+(++i)+10+'a'+1.5-8765.1234*'b'(系統(tǒng)自動進(jìn)行轉(zhuǎn)換 高 char,強(qiáng)制類型轉(zhuǎn)換運算符:(類型)(表達(dá)式(int)3.14、6.C運算(1)(+—/%++–(2)(><>=<=(3)(!||(4)(<< &(5)(=及其擴(kuò)展賦值運算符(6)(?(7)(8)(*(9)(10)強(qiáng)((類型(11)成(.—>(12)( ](13)其(如函數(shù)調(diào)用運算C語CCC程源程序文源程序文件源程序文件源程序文件函數(shù)函數(shù)預(yù)處理函數(shù)函數(shù)預(yù)處理命函數(shù)函數(shù)首函數(shù)執(zhí)行語局執(zhí)行語 CC語句的作用和分控制if()…else (條件語句for (循環(huán)語句while (循環(huán)語句dowhile (循環(huán)語句 (結(jié)束本次循環(huán)語句 (終止執(zhí)行switch或循環(huán)語句 (多分支選擇語句 (從函數(shù)返回語句 (轉(zhuǎn)向語句函數(shù)printf("ThisisaC表達(dá)空語;復(fù)合 最基本最基本的語句——賦值語提高效提高效例3.4給出三角形的三邊長,求三角形面積解題思路、編寫程序、程序分析(略)。注意數(shù)學(xué)函數(shù)'\t'的應(yīng)用賦值運算符: 例如:a=3; 其作用復(fù)合的賦值運算符:+=、*=、%=、等價等價等價一般地:vvopexp(此v為變量,exp為表達(dá)式為運算符 等價于vop=目的:簡最基本最基本的語句——賦值語賦值表達(dá)式

整個作為一個表達(dá)有此概念后,就可以理解并實現(xiàn)a+=a–=a*a(若a的初值為12)整型變注意:表達(dá)式的值是否超過變量所屬類型的取值范整型變實型數(shù)實型數(shù)

取整數(shù)部分,但注意范整型數(shù)實型變double數(shù)據(jù)取7位有效數(shù)字,但注意范圍float變

double字符數(shù)據(jù)送到整字符數(shù)據(jù)送到整型變量低8整型變但注意符

有效位數(shù)

float數(shù)

char變量取低8

整型數(shù)變量賦初inta=3;floatf=3.56;charc='a';intinta,b,c;標(biāo)準(zhǔn)輸入輸出函數(shù):putchar、getchar(、printf、scanf()、puts()、gets() 字符數(shù)字符數(shù)據(jù)的輸入輸putchar函數(shù)(字符輸出函數(shù)putchar函數(shù)的功能是向終端輸出一個字符一般形式:putchar(表達(dá)式先計算表達(dá)式之值,然后在終端輸出其SI碼為該值的字符。例如:char

此時在屏幕上輸出getchar函數(shù)(字符輸入函數(shù)getcha函數(shù)的功能是從終端(實際上是從輸入緩沖區(qū))字符。一般形式:getchar(例3.9從鍵盤輸入BOY3個字符,然后把它#include<stdio.h>intmain() chara=getchar(); b=getchar();c=getchar(); return}注意程序運行過程3.43.4.1字符數(shù)據(jù)的輸入輸輸輸入的一行字符同時顯示在屏幕上getchar函數(shù)(字符輸入函數(shù)getc函數(shù)的功能是從終端(實際上是從輸入緩沖區(qū))讀入一個字符。getchar()將輸入函數(shù)值返注1.getchar()從輸入緩沖區(qū)讀

輸入緩沖

下一下一個可讀字符后(例如右圖中

可讀再下一個字符成為下一個可讀字符(右圖中注2.若當(dāng)前輸入緩沖區(qū)可讀字符為空(例如程序開始時,或輸入緩沖區(qū)字符被讀完后——例如上圖讀完換行符后),getchar將等待用戶從鍵盤向緩沖區(qū)輸入數(shù)據(jù),直到輸入一行字符(鍵入后),才開始讀輸入緩沖(此時剛輸入的第一個字符為下一個可讀字符)。 字符數(shù)字符數(shù)據(jù)的輸入輸 getchar函數(shù)(字符輸入函數(shù)補(bǔ)充1:getch(函數(shù)——直接讀鍵盤(而不是讀輸入緩沖任一鍵后(不必為),getch(將該字符作為函數(shù)值返回。注意:為執(zhí)行g(shù)etch(函數(shù)而在鍵盤上補(bǔ)充2:getche(函數(shù),基本同getch(只是為執(zhí)行g(shù)etche(函數(shù)而在鍵盤上鍵入的字符顯示在屏幕3.4.2printf函數(shù)(格式輸出函數(shù)printf的功能是向終端輸出若干個任意類型(格式)一般形式:printf(參數(shù)1,參數(shù)2,參數(shù)3……參數(shù)轉(zhuǎn)換控制字符 輸出表例如其中printf()的第一個參數(shù)為轉(zhuǎn)換控制字符串,它包括格式說明,由%和格式字符等組成,如%d,%6.2f等。其作普通字符,將1.1.printf函數(shù)(格式輸出函數(shù)2020/12/2020/12/達(dá)式中的類型轉(zhuǎn)格式字d格式符。將對應(yīng)參數(shù)的數(shù)據(jù)以十進(jìn)制形式輸出%d:以十進(jìn)制形式按實際長度輸出%m:為指定的輸出數(shù)據(jù)的最小寬度。若實際輸出字符個數(shù)小于m,則在左端補(bǔ)以空格(右端對齊)。若實際輸出字符個數(shù)超過m,則m不起作用。%md”意味著左對齊格式,將在右端補(bǔ)以空注意:int型的數(shù)據(jù)應(yīng)利用%d格式輸出,long型數(shù)據(jù)應(yīng)利用%ld格式輸出。否則可能發(fā)生類型轉(zhuǎn)換而出錯。該轉(zhuǎn)換規(guī)則不同于1.1.printf函數(shù)(格式輸出函數(shù)格式字符(補(bǔ)充–o格式符:將對應(yīng)參數(shù)的數(shù)據(jù)以無符號八進(jìn)制形式–x格式符:將對應(yīng)參數(shù)的數(shù)據(jù)以無符號十六進(jìn)制形–u格式符:將對應(yīng)參數(shù)的數(shù)據(jù)以無符號十進(jìn)制注1:注意是否進(jìn)行了類型轉(zhuǎn)換。(int型數(shù)據(jù)與這些格式之間的轉(zhuǎn)換等同于int與gd在賦值時的轉(zhuǎn)換)注2:%與格式符o、x、u之間可加修飾符l(輸出長整型)、整數(shù)(最小寬度)、#(將輸出八進(jìn)制、十六進(jìn)制標(biāo)記:0、輸出結(jié)果為a=–1,177777, 輸出結(jié)果為a=–1,177777, {unsignedinta=65535;intb=–2;}

return 1.1.printf函數(shù)(格式輸出函數(shù)格式字c格式符。將對應(yīng)參數(shù)的數(shù)據(jù)(作為字符的ASCII碼)s 輸出字符串,例如printf("%s",當(dāng)然也等同于%ms,為指定的輸出數(shù)據(jù)的最小寬度。若字符串字符個數(shù)小于m,則在左端補(bǔ)以空格(右端對齊)。若字符串字符個數(shù)超過m,則m不起作用。%–ms,則在右端補(bǔ)以空格(左端對齊)格式(4)f格式符。用于輸出實數(shù)(包括單、雙精度),以小數(shù)形式輸%f,不指定字段寬度,由系統(tǒng)自動指定,一般是整數(shù)+6位小數(shù)。但注意有效位數(shù)。%m.nf,指定輸出的數(shù)據(jù)共占m列,其中有n位小%–m.nf,同上,但左端e、E%e,不指定字段寬度,由系統(tǒng)自動指定,TurboC一般的輸出%m.neg、G格式符,取f或e格式的最小格式,不輸出無意義的0總結(jié) 格式說明的一般形式其中type為格式符,可為如下之一:d,i、o、x,X、u、c、s、f、e,Eflags為修飾符,可為:+、–、空格、+:若輸出帶符號數(shù)據(jù),則在輸出數(shù)據(jù)前加上符號+或–。缺省+當(dāng)輸出負(fù)數(shù)時,才輸出負(fù)號–。–:右端補(bǔ)以空格,左空格:輸出帶符號正數(shù)時,在輸出數(shù)據(jù)前加一空格。若+使用,則空格不起作用。#:在格式符o、x前使用時,則輸出的八進(jìn)制、十六進(jìn)制數(shù)據(jù)有前綴0、0x.總結(jié)2若%后沒有合適的格式符,則%不起作用,相當(dāng)于普通字符。例如a",……);則輸出%abc……但若要輸出的普通字符有%,且其后有普通字符為格式符,如要輸出……30%for……,則必須printf("……30%%for……",……總結(jié)3.轉(zhuǎn)換控制字符串中的格式說明必須與后面的參數(shù)相對應(yīng),否 在此,再一次特別強(qiáng)調(diào):轉(zhuǎn)換控制字符串中的格式說明必須與后面的參數(shù)的類型相對應(yīng)scanf函數(shù)(格式輸入函數(shù)scanf()函數(shù)功能:從輸入緩沖區(qū)中讀相應(yīng)格式的數(shù)據(jù)進(jìn)行匹一般形式:a(格式控制,地址表列);例如,a",&a,&b,&c);若輸123456則123送入a,456送入b,789送入c格式控制字符串中的格式說明(以%開始,以格式符結(jié)束確定要去讀一個什么樣的合法數(shù)據(jù)項。配。2.scanf函數(shù)(格式輸入函數(shù)普通空白符(包括空格'\t''\n):可以匹配輸入流中輸入流中相應(yīng)的連續(xù)空白符,直到讀到下一個非空白符為止。(講義P7第9行說法不妥) (不匹配),則引起scanf函數(shù)異常終止例如scanf("%d%d%d,%d:應(yīng)輸入 2.2.scanf函數(shù)(格式輸入函數(shù)scanf()函數(shù)按某種格式去讀輸入流時,怎樣讀一個合法的%c格式:輸入流中下一個字符就是合法的數(shù)據(jù)項除%c外的其他格式:%d,%i、%u、%o、%x,%X、%s%f,%e,%E,%g,%等,將從輸入流的下一個非空白字符開始讀一個合法的數(shù)據(jù)項(也即f為讀這樣格式的數(shù)據(jù),若輸入流中下面可讀的字符為空白符的話,將引起直接掃描過空白符,直到讀到第一個非空白符才開始讀合法數(shù)據(jù)項),直到遇到以下情況時結(jié)束該數(shù)據(jù)項的讀入:遇到空白遇輸入,例如若輸入流為:123.456abc,當(dāng)scanf()注意,若讀到的第一個非空白符就是輸入,則引起f異常結(jié)束。scanf()格式說m為指定輸入數(shù)據(jù)所占列數(shù)。例輸入則123送入a,456送入b輸入:abc123……則abc被掃描,并將a送入ch%*tye格式不對應(yīng)后面地址表列中某一參數(shù)。2.2.scanf函數(shù)(格式輸入函數(shù)特別scanf()函數(shù)從第二個參數(shù)起,都為變量地址提示語句每個scanf(最好使用獨執(zhí)行前輸入緩沖區(qū)為inti;char若輸入:123 則i,ch為何printf("Inputanumber:\n");printf("OK???發(fā)現(xiàn)什么問題了嗎第4程序設(shè)Cif語if語句最常用的形式else語句2例如:if(x>0)elsey=switch語例用if用if例4.3輸入3個數(shù)a,b,c,要求按由小到大的順序輸#include<stdio.h>intmain() floata,b,c,t;if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;if(b>c){t=b;b=c;c=t;}return0;}ifif語句的一般形if(表達(dá)式)語句1 ifif(表達(dá)式)語if(表達(dá)式)語句1

假表達(dá)式

真表達(dá)假語句 真表達(dá)假表達(dá)式表達(dá)式假(0)語if(表達(dá)式1)語句elseif(表達(dá)式2)語句2elseif(表達(dá)式3)語句elseif(表達(dá)式m)語句

else語句

語句

語句2 語句3 語句4 語句5ifif語句的一般形說明if后面的表達(dá)式可為任意的數(shù)值類型。但一般為關(guān)系表每個子語句若為表達(dá)式語句等簡單語句,應(yīng)有一分號;若為復(fù)合語句,則不能有分號。各有一個例如:if各有一個elseif不可有分{s=0.5*(a+b+c); 不可有分elseprintf("itisnota關(guān)系運關(guān)系運算符和關(guān)系表達(dá)關(guān)系運算——關(guān)系運算符及其優(yōu)先順<、<=、>、>=、、<、<=、>、>=優(yōu)先級相同,高于==、算算術(shù)運算(高關(guān)系運算賦值運算(低例如:c>a+b、a>b=c、a==b<c、關(guān)系表達(dá)式——其值為邏輯值:1代表“真”;0代表“假”例如,a=3,b=2c=1, a>b==c值為1b+c<a值為0 f的值為0邏輯運邏輯運算符和邏輯表達(dá)4.4.1&&(邏輯與:AND)、||(邏輯或:OR)、!(邏輯非:NOT)ab真真假假真真真假假真假真假真真假假真假假真真假假真——非假—

真——假——若a=4,b=5,則:!a值為0;a&&b值為1;a||b值為1;!a||bab非非0011非001010非1001001100邏輯運算符及其優(yōu)先順??!賦值運算(高(低例如!a||a>b5>3&&8<4!0邏輯運邏輯運算符和邏輯表達(dá)邏輯exp1&&exp2只要exp1、exp2有一個為0,則結(jié)果為0exp1為0時,就不必計算exp2 exp1||exp2只要exp1、exp2有一個為1,則結(jié)果為1,于是當(dāng)為1時,就不必計算exp2例如當(dāng)a=1,b=2,c=3,d=4,m=1,n=1計算后,m=0,而n仍為1(n=c>d沒有計算year為閏年

非0(真0(假0(假

示意

非0(真0(假非0(真

示意122(1(真

0(假

1(真邏輯運邏輯運算符和邏輯表達(dá)4.4.3邏輯型變 條件運算符和條件表達(dá)若語句的內(nèi)嵌子語句都為對同一個變量的賦值語句時可用條件表達(dá)式語句代替f語句。例如if(a>b)else條件運算?真(非表達(dá)式假真(非表達(dá)式假條件運算例如條件運算a>b?a: 相當(dāng) a>b?a:(c>d?c:dif(a>b)printf("%d",aelseprintf("%d",b

printf(條件表達(dá)式值的類型為表達(dá)式2、表達(dá)式3的值的類型中較高者。例4.4ch是大寫字母 else總是與它上最else總是與它上最近的if配評述:例if if()語句1 語句if()語句3 語句但應(yīng)改if if if(if))語句語句{if(if())語句語句}(x(x(x(x(x(x程序1:intmain( intscanf("%d",&x);if(x<0)y=–1;elseif(x==0)y=0;elsey=1;printf

程序if(x>=0if(x>0) elsey=0;else}程序y=if(x!=0

程序if{if y=1; 修 {if(x>0)y=1;else

else用switchswitch表達(dá) 常量1句

表達(dá)式

多分支選擇語假

[break;常量2句[break;

表達(dá)式 假 常量n句[break;default 語句}

表達(dá)式 表達(dá)式常量break語句常量多個case可以共用一組執(zhí)行語句

switch語句適用的情況語句語句 例4.8#include<stdio.h>intmain()if(year%4!=0)if(year%4!=0)elseif(year%100!=0)leap=1;elseif(year%400!=0)leap=0;elseleap=1;{if(year%100={if(year%400==0)leap=1;elseleap=0; }elseif(leap)printf("%dis",year);elseprintf("%disnot",year);printf("aleapyear.\n");return0;if((year%4=if((year%4==0&&year%100!=0)||year%400==0)leap=1;elseleap=0; 例4.9求ax2+bx+c=0方程的解#include<stdio.h>#include<math.h>intmain() doublea,b,c,d,disc,x1,x2,realpart,imagpart;scanf("%lf,%lf,%lf",&a,&b,&c);printf("Theequation");if(fabs(a)<=1e6)printf("isnota{if(fabs(disc)<=leprintf("hastwoequalroots:%8.4\n",b/(2*a));elseif(disc>le6){xl=(b+sqrt(disc))/(2*a); x2=(bsqrt(disc))/(2*a);printf("hasdistinctrealroots:%8.4fand%8.4f\n",xl,x2);}else{realpart=b/(2*a); imagpart=sqrt(disc)/(2*a);printf("hascomplexroots:\n”);printf("%8.4f+%8.4fi\n",realpart,imagpart);printf("%8.4f%8.4fi\n",realpart,imagpart);}}return} 沒有2%折5%折8%折10%折沒有2%折5%折8%折10%折15%折設(shè)每公里每噸貨物的基本運費為p(price的縮寫),貨物重為(的縮寫),距離為s,折扣為d(discount的縮寫),則總運費f(feig的縮寫)的計算公式為f=p*w*s*(1switch語句適用的情況不等式表示的范圍為某一值的整數(shù)倍switch語句適用的情況不等式表示的范圍為某一值的整數(shù)倍一般不等號與嚴(yán)格不等號分居兩#include<stdio.h>intmain() intc,floatprintf("pleaseenterprice,weight,distance:");scanf("%f,%f,%d",&p,&w,&s);if(s>=3000)elsec=s/250;1:d=2;21:d=2;23:d=5;7:d=8;811:d=10;12:d=15;}f=p*w*s*printf("freight=%10.2f\n",f);return0;} 補(bǔ)充:求1月1日到某月底的天#includeintmain({inty,m,d=0,leap;if(y%4==0&&y%100!=0||y%400==0)leap=1;elseleap=0; {case12: case d+=30;case if(leap)d+=29;elsed+=28; }} 第5程序設(shè)為什么需要循環(huán)結(jié)用while語用do—while語用for語用goto語句和if語句構(gòu)成循用whilewhile語句用來實現(xiàn)“當(dāng)型”循環(huán)結(jié)構(gòu),其一般形式為表達(dá)表達(dá)非0語

表達(dá))循環(huán)體語例5.1

n#includeintmain( inti,sum=0;while{sum=sum+i;}return0;}注1.循環(huán)體如果包含一個以上的語句,應(yīng)用復(fù)合注2.控制循環(huán)的條件。循環(huán)控制變量的初值、條件表達(dá)式、用do-whileoe語句的特點是“先執(zhí)行循環(huán)體,后判斷循環(huán)條件”,其一般形式為:循循環(huán)體語非表達(dá)0循環(huán)體語while(達(dá)例5.2

nn表表達(dá)非語0 inti=1,{sum=sum+i;}while(i<=100);return0;

do-while與while的異同} do-whiledo-while與whileoe語句的特點是“先執(zhí)行循環(huán)體,后判斷循環(huán)條件”,至少執(zhí)行一次循環(huán)體;而e循環(huán)語句是“先判斷,后執(zhí)行”,可能一次也不執(zhí)行循環(huán)體——即當(dāng) 非表達(dá) 非表達(dá)0循環(huán)體語表達(dá)式while語 do-while語需要至少執(zhí)行一次的循環(huán)體請用do-while語 用用for語句實現(xiàn)循求解表達(dá)式表達(dá)式非0求解表達(dá)式語forfor(表達(dá)式1;表達(dá)式2;表達(dá)式其執(zhí)行過例如for語句最常用的形式for(循環(huán)變量賦初值;循環(huán)條件表達(dá)式;循環(huán)變量增值循環(huán)體 用用for語句實現(xiàn)循for語句完全可代替while求解表達(dá)式表求解表達(dá)式表達(dá)式非0求解表達(dá)式語等價for(;表達(dá)式;)反之亦然for(表達(dá)式1;表達(dá)式2;表達(dá)式等價while(表達(dá)式23{循環(huán)體語句3}

用用for語句實現(xiàn)循forfor(i=1;i<=100;i++)可寫為for(;i<=100;

或for(i=1 i++ if(i>100)break; 或 或for(i=1;i<=100;{sum=sum+i;

i=1for( ; if(i>100) }for語句中表達(dá)式實際上可為任意表達(dá)式,有時為逗號表達(dá)式:for(sum=0,i=1;i<=100;i++)for(sum=0,i=1,j=100;i<=j;i++,j)for(i=0;(c=getchar())!='\n';i+=cfor(;(c=getchar())!='\n';)循環(huán)的嵌幾種循環(huán)的比break語句和coutinue語break語句用于跳出switch語句,或用于跳出while語句、dowhile continue語句用5.75.7break語句和coutinue語比較while(表達(dá)式{if表達(dá)式2)表達(dá)表達(dá)式非0表達(dá)式0非

while(表達(dá)式{if表達(dá)式2)表達(dá)表達(dá)式非0表達(dá)式0Continue語句可換成非continue語句,但有時也可用while(表達(dá)式while(表達(dá)式{if表達(dá)式2)continue;}while(表達(dá)式{if表達(dá)式2)}

{if!表達(dá)式2}}例#include<stdio.h>intmain(){charwhile((c=getchar(){{if(c>'Z'&&c<='Z'+4||c>'z')c=c-}}return0;}基本加密方密best明文datasec密best明文datasecurity例如:P=datasecurity, C=Ek(P)=EELTTIUNabcdefghijklmnopqrstuvwxyzaABCDEFGHIJKLMNOPQRSTUVWXYZbBCDEFGHIJKLMNOPQRSTUVWXYZA…eEFGHIJKLMNOPQRSTUVWXYZABCD…sSTUVWXYZABCDEFGHIJKLMNOPQRtTUVWXYZABCDEFGHIJKLMNOPQRS…zZABCDEFGHIJKLMNOPQRSTUVWXY第6處理批量數(shù)構(gòu)造類型(導(dǎo)出類型數(shù)結(jié)構(gòu)公用數(shù)組:一數(shù)組中的每一個元素都屬于同一類數(shù)組中的元素可用數(shù)組名和下標(biāo)來。例a[0],a[i]等。例:intfor(i=0;i<10;i怎樣定義和一維數(shù)一維數(shù)組的定類型說明符數(shù)組名[常量表達(dá)式 例如:int說明常量表達(dá)式表示數(shù)組元素的個數(shù)。數(shù)組元素下標(biāo)從開始inta[10]中有10個元素,為a[0]、a[1]、a[2]、a[3]、數(shù)組定義時數(shù)組長度必須確定,即常量表達(dá)式中不能包含變量。例如,下面數(shù)組定義是不行的:intn;inta[n]; 一維數(shù)組的定注意 其中l(wèi)ength為每個單元的長度(字節(jié)數(shù))若數(shù)組長度為N,則數(shù)組元素下標(biāo)范圍為0~ 怎樣定義 一維數(shù)怎 一維數(shù)組(元素例6.1數(shù)組元素的 :對10個數(shù)組元素依次賦值0,1,…,9,要求按逆序輸出。#include<stdio.h>intmain() inti,a[10];for(i=0;i<=9;i++)return0;} 一維一維數(shù)(1)inta[10]={inta[10]={0,1,2,3,4};(4)在對全部數(shù)組元素賦初值時,可以不定義數(shù)組長度。例如 int

等價于inta[

一維一維數(shù)一維數(shù)組例6.2Fibonacci數(shù)列問題例5.8求例5.8求Fibonacci數(shù)列40#include<stdio.h>intmain(){longintf1=1,f2=1;inti;{printf("%12ld%12ld",f1,f2);if(i%2==0)printf("\n");}return} intintf[i]=f[i2]+f[i1];{if(i%5==0)}return0;}6.1.4例6.3用起泡法對10個數(shù)排序(從小到大)985420第1

95420第2

59420第3

54920第4

第5 結(jié)forj=1ton1fori=1to 假輸出a[1]到2020202012/2例6.3用起泡法對10個數(shù)排序(從小到大)#include<stdio.h>intmain() inta[11],i,j,printf("input10for(i=1;i<11;i++)scanf("%d",&a[i]);for(i=1;i<=10j;if(a[i]>a[i+1]) {t=a[i];a[i]=a[i+1];a[i+1]=t;}printf("thesortednumbers:\n");for(i=1;i<11;i++) printf("%d",a[i]);printf("\n");return怎樣定義和二維數(shù)類型說明組常量表達(dá)式常量表達(dá)式];例如:floatpay[3][6],a[3][4],b[5][10];a[0]a[1]a[2]a[0]a[1]a[2]a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]a[2][0]a[2][1]a[2][2]aaa[0][0]a[0][1]a[0][2]a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]a[2][0]a[2][1]a[2][2]

怎樣定義 二維數(shù)怎 二維數(shù)也同樣注意數(shù)組元素下標(biāo)不要越界定義的數(shù)組:int數(shù)組元素—— 則應(yīng)0<=i<=M1,0<=j<=Ninta[3][4]={{1,2,3,4},{5,6,7,8},inta[3][4]={1,2,3,4,5,6,7,8,可以對部分元素賦初 inta[3][4]={{1},{5}, {1,5,inta[3][4]={{1},{0,6},{0,0,11inta[3][4]={{1},inta[3][4]={{1},{}, 二維二維數(shù)6.2.3二維如果對全部元素都賦初值,則初始化時可省略第一維的長度(即行數(shù)),但第二維的長度不能省略。inta[][4]={{1,2,3,4},{5,6,7,8},inta[][4]={{0,0,3,},{},{0實際上二維數(shù)組元素是在連續(xù)的一段內(nèi)存空間內(nèi),每個元所在單元的地址可通過如下公式計算:&a[i][j]=&a[0][0]+(i*N+j)*其中N為二維數(shù)組的列數(shù)(第二維的長度),lengt元的長度(字節(jié)數(shù))。二維二維數(shù)2020202012/2例7.5有一個34的矩陣,編程求其中值最大的那個元素的值,以及#include<stdio.h>intmain(){inti,j,row=0,colum=0,inta[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,for(i=0;i<=2;i++)for(j=0;j<=3;if(a[i][j]>max{max=a[i][j]; }printf("max=%d,row=%d,colum=%d\n",max,row,colum);return0;字字符數(shù).1怎樣定義一方面可與一般數(shù)組類似#include<stdio.h>intmain(){charc[0]='I';c[1]='';c[2]='a';c[3]='m';c[4]='';c[5]='h';c[6]='a';c[7]='p';c[8]='p';c[9]='y';for(return0;}輸出Iam

是否有字符串的結(jié)便于利用結(jié)束標(biāo)志串的處理,例如可printf("%s" 字字符數(shù)6.3.2charc[10]={'I','','a','m','','h','a','p','p',或charc[]={'I','','a','m','','h','a','p','p',與charc[11]={'I','','a','m','','h','a','p','p','y',的區(qū)別有有無結(jié)束可參考TurboC6.3.4charc[11]={'I','','a','m','','h','a','p','p','y',或charc[11]={"Iamhappy"charc[ ]={"Iamhappy"};charc[ ]="Iamhappy";6.3.5字符用"%c"for( 用"格式將整個字符串輸入輸出。此時字符串必須有字符串結(jié)束標(biāo)志。例如:charc[printf("%s",注意"%s"對于的數(shù)據(jù)項為數(shù)組名——char 而不 charstr[13];scanf("%s",str);例如:charstr1[5],str2[5],str3[5];輸入數(shù)據(jù)Howarescanf("%[^\n]%*c",gets(puts(gets(strcat(strcpy(strcmp(strlen(strlwr(strupr(6.3.76.3.7字符串應(yīng)用例6.8輸入一行字符,統(tǒng)計有多少個單詞,單詞之間用空#include<stdio.h>intmain(){charinti,num=0,word=0;charc;for(i=0;(c=string[i])!='\0';i++)if(c=='')word=0;elseif(word==0){word=1;num++;}printf("Thereare%dwordsintheline.\n",num);return0;6.3.76.3.7字符串應(yīng)用例6.9有三個字符串,要求找出其中最大者#include<stdio.h>#include<string.h>intmain(){charstring[20],str[3][20];inti;for(i=0;i<3;i++)gets(str[i]);if(strcmp(str[0],str[1])>0)strcpy(string,str[0]);elsestrcpy(string,str[1]);if(strcmp(str[2],string)>0)strcpy(string,str[2]);printf("\nThelargeststringis:\n%s\n",string);return0;}第7章用函數(shù)實現(xiàn)模塊化程序設(shè)7.1為什函數(shù)就是功能。主函數(shù)就 者:指令、菜單例 #includecbaintmain(cbaihhgfed{voidprint_star(),print_message();print_star();ihhgfedprint_message(geprintstar(ge}

voidprint_star({}voidprint_message({printf("Howdoyou}

說明

一個C一個源程序文件由一個或多個函數(shù)組成。一個源程序文件是一個編譯單位。C程序的執(zhí)行從main函數(shù)開始,到main所有函數(shù)都是平行的,即函數(shù)不能嵌套定義。函數(shù)間可以互相調(diào)用,但不能調(diào)用main函數(shù)。Main函數(shù)是作系統(tǒng)調(diào)用的。標(biāo)準(zhǔn)函數(shù)——庫函 自定義函無參函數(shù)—主調(diào)函數(shù)與被調(diào)用函數(shù)之間不需要利用參數(shù)傳遞數(shù)據(jù)。有參函數(shù)—主調(diào)函數(shù)與被調(diào)用函數(shù)之間需要利用參數(shù)傳遞數(shù)據(jù)。 定義函數(shù)應(yīng)包括以下幾個內(nèi)容指定函數(shù)指定函數(shù)的類型,即函數(shù)返回值的類型指定函數(shù)便在調(diào)例如例如intmax(intx,inty{intz=x>y?x:y;return(z);}7.2例如例如intmax(intx,inty{intz=x>y?x:y;return(z);}類型數(shù)名( 部語}類型數(shù)名(形式 部語}可以有“空函數(shù) voiddummy( 調(diào)用函函數(shù)調(diào)用的方式:函數(shù)名(實參表列函數(shù)調(diào)用語如print_star(函數(shù)表達(dá) 例如:c=2*max(a,函數(shù)參 例如:m=max(a,max(b,–函數(shù)調(diào)用出現(xiàn)在表達(dá)式中,應(yīng)有函數(shù)返回(不能為void類型的函數(shù)) 函數(shù)調(diào)函數(shù)調(diào)用時的數(shù)據(jù)傳x33形式參數(shù)(簡稱形參)和實際參數(shù)(簡稱實參例7.2x33#include<stdio.h>intmain(){intmax(intx,inty);inta,b,c;單元。(類似函數(shù)f(x)=ex,單元。(類似函數(shù)f(x)=ex,只有當(dāng)自變量x后,才計算出函數(shù)的值將實參傳遞給形參。在調(diào)用結(jié)束后,形參所占的內(nèi)存單元將(2)實(4)說明(1)函數(shù)定義中必須指定形參的類型。在未出現(xiàn)函數(shù)調(diào)用時,形參并不占內(nèi)存中的

3 33}intmax(intx,inty{intz=x>y?x:y;return(z);}函數(shù)調(diào)函數(shù)調(diào)用時的數(shù)據(jù)傳實參變量對形參變量的數(shù)據(jù)傳遞是“值傳遞”,即單向傳遞。實參形參 而實參形參形參的值發(fā)生改變,并不會改變主調(diào)用函數(shù)的#includevoidmain({inta,b;a=2;b=3;change(a,

xyxy

intchange(intx,int{}

函數(shù)的函數(shù)的返回(1)函數(shù)的返回值是通過函數(shù)中的return語句獲得的return語句的一般形式:return(exp);returnexp;例1intmax(intx,int returnx>y?x:y}例2intex{if(exp1)returnexp2return}函數(shù)intmax(floatx,floaty)charletter(charc1,charc2)doublemin(intx,inty)

#includeintmain({intmax(floatx,floaty);floata,b;intprintf("Maxis%d\n",c);return0;

intmax(floatx,float{floatz;z=x>y?x:y;returnz;}}般是結(jié)束時所執(zhí)行的語句(表達(dá)式))。例如:{inta,b,c;a=printstar();b=print_message();c=printstar();}不過,這樣的函數(shù)值沒有什么用。所以,應(yīng)將函數(shù)類型說明為void類型。void型函數(shù)不使函數(shù)帶回任何值。當(dāng)然,這樣的函數(shù)也不能出現(xiàn)對被調(diào)用函數(shù)的和函數(shù)原在一個函數(shù)中調(diào)用另一個函數(shù)(即被調(diào)用函數(shù))被調(diào)用的函數(shù)必須是已經(jīng)存在的函數(shù)(庫函數(shù)或自定義函數(shù))函函 與函數(shù)定義的異函數(shù)類(參數(shù)類型1[參數(shù)名1],參數(shù)類型2[參數(shù)名2],……);數(shù)名(––:#include<stdio.h>8C語言不能嵌套定義函數(shù),但可以嵌套調(diào)用數(shù)。main函 a函 b函 例7.5輸入4個整數(shù),找出其中最大者#include<stdio.h>intmain(){intmax4(inta,intb,intc,intd);inta,b,c,d,max;printf("Pleaseenter4integernumbers:");printf("Max=%d\n",max);return0;}intmax4(inta,intb,intc,int{intmax2(inta,intb),m=max2(a,b);m=max2(m,c);m=max2(m,d);returnm;}intmax2(inta,int{if(a>b)returna;elsereturnb;函數(shù)的函數(shù)的遞歸例

回推階 遞推階段

intintage(int{intif(n==1)c=10;elsec=age(n-1)+2;}

age(n)=age(n-#includeintage(int{intif(n==1)c=10;elsec=age(n-1)+2;}intmain({printf("No.5,age:%d\n",age(5));return0;}age輸出輸出

例7.7用遞歸方法求

nn(n fac(int{

nif(n<0)printf("n<0,dataerror!");elseif(n==0||n==1)f=1;}例7.8Hanoi()塔問題。將A座上n個大小不等(大下小上)的 將n-1個盤子從A座移動到B座(中間可借助于C座將第n個盤子從A座移動到C將n-1個盤子從B座移動到C座(中間可借助于A座函數(shù)的函數(shù)的遞歸將n-1個盤子從A座移動到B座(中間可借助于C座將第n個盤子從A座移動到C將n-1個盤子從B座移動到C座(中間可借助于A座#includevoidhanoi(intn,charone,chartwo,char{if(n==1)printf("%c—>%c\n",one,three);else{hanoi(n-1,one,three,two);printf("%c—>%c\n",one,three);hanoi(n-1,two,one,three); }intmain({intprintf("inputthenumberofdiskes:");printf("Thesteptomoving%3ddiskes:\n",m);hanoi(m,'A','B','C');return7.7數(shù)組名可作函數(shù)參例7.10有一個一維數(shù)組score,內(nèi)放10個學(xué)生成績,求平均成績利用函數(shù)average}}例7.10有一個一維數(shù)組score,內(nèi)放10個學(xué)floataverage(floatarray intfor(i=1;i<10;i++)sum=sum+array[i];return}intmain( floatscore[10],aver;inti;printf("input10for(i=0;i<10;i++)scanf("%f",&score[i]);printf("averagescoreis%5.2f",aver);return0;

242468#include

例floataverage(floatarray[],int intfor(i=1;i<n;i++)sum=sum+array[i];return}voidmain( floatscore1[5]={……};floatscore2[10]={……};printf("theaverageofclassAis%6.2f\n",average(score_1,5));printf("theaverageofclassBis%6.2f\n",average(score_2,10));}}}例7.12用選擇法對數(shù)組中10個整數(shù)按由小到大排voidsort(intarray[],int{inti,j,k,tfor(i=0;i<n1;i++{for(j=i+1;j<n;j++)if(array[j]<array[k])k=j;t=array[k];array[k]=array[i];array[i]=}}voidmain({inta[10],for(i=0;i<10;i++)scanf("%d",&a[i]);sort(a,10);printf("thesortedarray:for(i=0;i<10;i++)printf("%d",a[i]);printf("\n");7.8局部變量——函 定義的變量,有效范圍為本函數(shù)說明主函不同形式在函數(shù) 的復(fù)合語句(分程序)中也可定義局部變量,只在本復(fù)合語句中有效。floatf1(int

{intb,}charf2(intx,int{inti,}intmain({intm,return0;}

intmain({inta, intc;}}

7.8全局變量——在函數(shù)之外定義的變量。有效范圍為從定義變量的位置開始到本源文件結(jié)束。說明全局變量的作用是增加了函數(shù)間數(shù)據(jù)聯(lián)系的。(例不要全局變量全局使用的作用范圍內(nèi),外部變量不起作用。intintmax(inta,int returna>b?a:}

voidmain({intprintf("max=%d\n",} 變量 類動 方式與靜 方式——反映變量對應(yīng)單元的存在時間靜 方式:程序運行期間分配固定 空間實際上,在編譯時就確定 單元 動 方式:程序運行期間進(jìn)行動態(tài)的分 空間包括形式參數(shù)、自動變量(未加static的局部變量)auto變intf(int{[auto]intb,2020/2/2

區(qū)區(qū) 區(qū)區(qū)用static靜態(tài)局部變作用:函數(shù)中的局部變量的值在函數(shù)調(diào)用結(jié)束后不而保留原值在下一次調(diào)用該函數(shù)時進(jìn)入該函數(shù)后可以繼續(xù)使用。即:在同一個函數(shù)的前后次調(diào)用之間傳遞數(shù)據(jù)例 intf(int{autointb=0;staticc=3;

c62第一c62調(diào) cbb調(diào)returna+b+c}voidmain( inta=2,for(i=0;i<3;i++)printf(“%4d\n",} 例7.17打印1到5的階乘1intfac(int1f{staticintf=1;returnf;f

22fvoidmain({intifor(i=1;i<=5;i++)printf("%d!=%d\n",i,fac(i));}

f6f6{statica;}register變存取內(nèi)運算存取內(nèi)運算voidmain({[register]inti,j;for(i=1;i<=10000;i++)for(j=1;j<=10000;;}只有局部自動變量和形式參數(shù)可以作為register變量若計算機(jī)系統(tǒng)的寄存器數(shù)目不夠,則說明的egir變量存放在內(nèi)存中。目前的優(yōu)化編譯系統(tǒng)能識別使用頻繁的變量,從而自動將其放在寄存器中。 7.9.3全局變量 類外部變量都是存放在靜 區(qū)的用 外部變在同一個文件 外部變例外部變 時,變量類型可以省略。例如externint可以extern在多個文件的程序 外部變例用 外部變量——此時外部變量只能在本文件中使

弄清變量的定義 的區(qū)用 局部變量和外部變量的區(qū)

例7.19給定b的值,輸入a和m,求a*b和am文件#include<stdio.h>intA;intmain({intpower(int),b=3,c,d,externA;intpower(int{inti,y=1;returnexternA;intpower(int{inti,y=1;return}printf("%d*%d=%d\n",A,b,c);printf(("%d**%d=%d\n",A,m,d);return0;}類別小自動變量,即動態(tài)局部變量(離開函數(shù),值 局部變寄存器變量(離開函數(shù),局部變(形式參數(shù)可以定義為自動變量或寄存器變量全局變靜態(tài)外部變量(只限本文全局變?nèi)肿兞浚ㄔ试S其他文 則是在調(diào)用函數(shù)時臨時分配單動動靜靜態(tài)局部變量(函數(shù)內(nèi)有效靜

函數(shù)——在定義時,在函數(shù)類型前加static中使外部函數(shù)——在定義時,在函數(shù)類型前加extern(或省略)程序中其他文件中可以使用。voidenter_string(voidenter_string(char{gets(str);voiddelete_string(charstr[],char{intfor(i=j=0;if(str[i]!=ch)str[j++]=str[i];}{printf("%s\n",str);{externvoidenter_string(char*);externvoiddelete_string(char*,char)externvoidprint_string(char*);charc,str[80];return0;如何運行多文件的程序(以Turbo2.0為例先編輯好各個源文件,如file1.c,file2.c,file3.c,建立項目在TURBOC主菜單中選project菜單,輸入按F9鍵編譯連接,產(chǎn)生可執(zhí)行文件按ctrl+F9鍵,運行第8章利用指在調(diào)用函數(shù)時能得到多于1個的8.1指針是什么——內(nèi)存單元的內(nèi)容的(房間號vs房間中居住的旅客 “間 ”方式—例:inti,j,*i_pointer;i_pointer*i_pointer=3;j=2*(*i_pointer);

內(nèi)存用戶數(shù)據(jù) 變量i 變量 變量 變量i_pointer 8.1指針是什么——例 inti,j,*i_pointer*i_pointer=3;j=2*(*i_pointer);術(shù)語指針指針指針 i:

弄清“直 ”、“間 (變量的)指針、指針變例如:i_pointer例如*i_pointer=3;*i_pointer就是它所指向單 指指針變變量的指針——指針變量——可以存放某類型單元的地址。也即:將來可以用來指向某單元,從而可通過它操作某單元。使用例8.1通過指針變量整型變量#include<stdio.h>voidmain() inta=100,int*pointer_1,*pointer_2;指針變量定義pointer_1=&a;pointer_2=&b;printf(“a=%d,b=%d\n",a,b);

printf("*pointer_1=%d,*pointer_1=%d\n",*pointer_1,*} 指指針變基類型* 例如:int*pointer_1;思考:基類型的作用用來指定此指針變量可以指向什么類型的變量(單元)明確了(*指針變量)若p為指針,則為它所指向指針類型的識別與理解。例int*pi;char*pc;

怎怎&——取地址運算*——指針運算符(“間接”運算符給指針變量賦值:p=&a(2)指針變量指向的變量(單元)注意:此前,必須保證p指向某確定單元(3)指針變量的值。printf("%o",怎怎2020/1*pointer_12020/1*pointer_1?說明inta,等價inta,*pointer_1;

&與* (在pointer_1已指向的前提下,例如:pointer_1=&a;(3)(*pointer_1)++相當(dāng)怎怎例8.2輸入a和b兩個整數(shù),按的順序輸出#include<stdio.h>voidmain() int*p1,*p2,*p,a,printf("pleaseentertwointegernumbers:");p1=&a;p2=&b;{p=p1;p1=p2;p2=p;}printf("\na=%d,b=%d\n\n",a,b);printf("max=%d,min=%d\n",*p1,*p2);95 95pb 指針變指針變量作為函數(shù)參例8.3同例8.2,對輸入的兩個整數(shù)按大小順序輸出。用函數(shù)處理#include a9b5voidswap(inta9b5 inttemp;}voidmain( inta,int*pointer_1,*pointer_2;pointer_1=&a;pointer_2=&b; swap(pointer_1,pointer_2);printf(“max=%d,min=%d\n\n",a,b);} 8.2.48.2.4指針變量作為函數(shù)參例8.3同例8.2,對輸入的兩個整數(shù)按大小順序輸出。用函數(shù)處理#includeb59voidswap(int*p1,b59 inttemp;

}voidmain( inta,b;}指針變指針變量作為函數(shù)參例8.3的若干相關(guān)問題分析發(fā)現(xiàn)什么發(fā)現(xiàn)什么問題了嗎voidswap(int*p1,int int}voidmain( inta,b; swap(&a,&b);printf("\na=%d,b=%d\n\n",a,b);}例8.3的若干相關(guān)問題指針作參數(shù)與其他類型的數(shù)據(jù)作參數(shù)有什么不swap0能swap0能實現(xiàn)a,b的交換嗎voidswap0(intx,int inttemp;}voidmain( inta,b; swap0(a,b);printf("\na=%d,b=%d\n\n",a,b);

9 9}8.2.48.2.4指針變量作為函數(shù)參}}例8.3的若干相關(guān)問題指針作參數(shù)與其他類型的數(shù)據(jù)作參數(shù)有什么不voidswap(int*p1,int int*p;

我們應(yīng)該}voidmain( inta,int*pointer_1,*pointer_2;pointer_1=&a;pointer_2=&b;

的3、再仔細(xì)研究例 swap(pointer_1,2020/22intf("\na=%d,

8.3通過指針數(shù)8.3.1數(shù)組的指針:數(shù)組的起始地址(數(shù)組的起始元素a[0]的地址&a[0],也稱數(shù)組的首地址)。該指針值可用數(shù)組名a表示 inta[10];int*p;

8.3通過指 數(shù)8.3.2 數(shù)組元素時指針的運inta[10],*p;p+1、a+1p+i、a+i表示數(shù)組元素的方法:a[i]、

p+1或p+i或p+9或

在指針變量p指向數(shù)組a起始元素的前提下也可利用p操作數(shù)組元素:*(p+i)、甚至因為對數(shù)組元素a[i]的操作都是通過如下地址計算完成的2020/1/[0]+i 或

2020/12/22020/12/2例8.6輸出數(shù)組中void a inta[10], a

for(i=0;i<10;i++)for(i=0;i<10;i++)printf("%4d",a[i]);}void inta[10],for(i=0;i<10;i++)scanf("%d",for(i=0;i<10;i++)printf("%4d",*(a+i));

}void inta[10],i,

for(p=a;p<a+10;p++)scanf("%d",for(i=0;i<10;i++)scanf("%d",a+i);for(p=a;p<a+10;p++)?注?注意對指向數(shù)組的指針變量p可以進(jìn)行1、i或+運算。對數(shù)組名a(指針常量)可以進(jìn)行a+1、a+i運算,但不能進(jìn)行a++運算。注意指向數(shù)組的指針變量的當(dāng)前值。例voidmain( inta[10],i,*p;for(i=0;i<10;i++)scanf("%d",p++);for(i=0;i<10;i++,p++)printf("%4d",*p);}voidvoidmain( inta[10],i,*p;for(i=0;i<10;i++)scanf("%d",p++);for(i=0;i<10;i++,p++)}(4)*p++for(

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論