版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、44.14.24.34.44.4.14.4.24.54.5.1最簡單的c程序設(shè)計(jì)一順序程序設(shè)計(jì)c語句概述1賦值語句3數(shù)據(jù)輸入輸出的概念及在c語言中的實(shí)現(xiàn)字符數(shù)據(jù)的輸入輸岀4putchar函數(shù)(字符輸出函數(shù))getchar函數(shù)(鍵盤輸入函數(shù))格式輸入與輸出5printf函數(shù)(格式輸出函數(shù))54.5.2 scanf函數(shù)(格式輸入函數(shù))84.6順序結(jié)構(gòu)程序設(shè)計(jì)舉例124最簡單的c程序設(shè)讓一順序程序設(shè)計(jì)從程序流程的角度來看,程序可以分為三種基本結(jié)構(gòu),即順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán) 結(jié)構(gòu)。這三種基本結(jié)構(gòu)可以組成所有的各種復(fù)雜程序。c語言提供了多種語句來實(shí)現(xiàn)這些 程序結(jié)構(gòu)。本章介紹這些基本語句及其在順序結(jié)構(gòu)中
2、的應(yīng)用,使讀者對'c程序有一個(gè)初步 的認(rèn)識,為后面各章的學(xué)習(xí)打下基礎(chǔ)。4.1 c語句概述c程序的結(jié)構(gòu):c程序的執(zhí)行部分是由語句組成的。程序的功能也是由執(zhí)行語句實(shí)現(xiàn)的。c語句可分為以下五類:1)表達(dá)式語句2)函數(shù)調(diào)用語句3)控制語句4)復(fù)合語句5)空語句1. 表達(dá)式語句:表達(dá)式語句由表達(dá)式加上分號“;”組成。其一般形式為:表達(dá)式;執(zhí)行表達(dá)式語句就是計(jì)算表達(dá)式的值。例如:x=y+z;賦值語句:y+z;加法運(yùn)算語句,但計(jì)算結(jié)果不能保留,無實(shí)際意義;i+; 自增1語句,i值增lo2. 函數(shù)調(diào)用語句:山函數(shù)名、實(shí)際參數(shù)加上分號“;”組成。其一般形式為:函數(shù)名(實(shí)際參數(shù)表);執(zhí)行函數(shù)語句就是調(diào)用函
3、數(shù)體并把實(shí)際參數(shù)賦予隊(duì)i數(shù)定義中的形式參數(shù),然后執(zhí)行被調(diào)函數(shù) 體中的語句,求取函數(shù)值(在后而函數(shù)中再詳細(xì)介紹)。例如:printfc'c program-);調(diào)用庫函數(shù),輸出字符串。3. 控制語句:控制語句用于控制程序的流程,以實(shí)現(xiàn)程序的各種結(jié)構(gòu)方式。它們 由特定的語句定義符組成c c語言有九種控制語句??煞殖梢韵氯悾?)條件判斷語句:訐語句、switch語句;2) 循環(huán)執(zhí)行語句:do while語句、while語句、foi語句;3) 轉(zhuǎn)向語彳u: break語彳u、goto語彳寸、continue語彳j、return語彳«j。4. 復(fù)合語句:把多個(gè)語句用括號括起來組成的一
4、個(gè)語句稱復(fù)合語句。 在程序中應(yīng)把復(fù)合語句看成是單條語句,而不是多條語句。例如: x二y+z;a=b+c;printf( “d%d”,x, a);是一條復(fù)合語句。復(fù)合語句內(nèi)的各條語句都必須以分號“;”結(jié)尾,在括號“”外不能加分號。5. 空語句:只有分號“;”組成的語句稱為空語句??照Z句是什么也不執(zhí)行的語句。 在程序中空語句可用來作空循環(huán)體。例如while(getchar()!='n,)木語句的功能是,只要從鍵盤輸入的字符不是i川車則重新輸入。這里的循環(huán)體為空語句。4.2 賦值語句賦值語句是由賦值表達(dá)式再加上分號構(gòu)成的表達(dá)式語仏其一般形式為:變量二表達(dá)式;賦值語句的功能和特點(diǎn)都與賦值表達(dá)式
5、相同。它是程序中使用最多的語句之一。在賦值語句的使用中需婆注意以下幾點(diǎn):1. 由于在賦值符“二”右邊的表達(dá)式也可以又是一個(gè)賦值表達(dá)式,因此,下述形式變量=(變量=表達(dá)式);是成立的,從而形成嵌套的情形。其展開之后的一般形式為:變量=變量=.=表達(dá)式;例如:a=b=c=d=c=5;按照賦值運(yùn)算符的右接合性,因此實(shí)際上等效于:e=5;d=e;c=d;b=c;a=b;2. 注意在變量說明中給變量賦初值和賦值語句的區(qū)別。給變最賦初值是變量說明的一部分,賦初值后的變量與其示的其它同類變量之間仍必須用逗 號間隔,而賦值語句則必須用分號結(jié)尾。例如:int a=5,b,c;3. 在變量說明屮,不允許連續(xù)給多個(gè)
6、變量賦初值。如下述說明是錯(cuò)誤的:inta=b=c=5必須寫為inta=5,b=5,c=5;而賦值語句允許連續(xù)賦值。4. 注意賦值表達(dá)式和賦值語句的區(qū)別。賦值表達(dá)式是一種表達(dá)式,它可以出現(xiàn)在任何允許表達(dá)式出現(xiàn)的地方,而賦值語句則不能。 下述語句是合法的:if(x=y+5)>0) z=x;語句的功能是,若表達(dá)式x二y+5人于()則z=xo下述語句是非法的:if(x=y+5;)>0) z=x;因?yàn)閤=y+5;是語句,不能出現(xiàn)在表達(dá)式中。4.3 數(shù)據(jù)輸入輸出的概念及在c語言中的實(shí)現(xiàn)1) 所謂輸入輸出是以計(jì)算機(jī)為主體而言的。2) 本章介紹的是向標(biāo)準(zhǔn)輸出設(shè)備顯示器輸出數(shù)據(jù)的語句。3) 在c語言
7、中,所有的數(shù)據(jù)輸入/輸出都是由庫函數(shù)完成的。因此都是函數(shù)語句。4) 在使用c語言庫函數(shù)時(shí),要用預(yù)編譯命令#include將有關(guān)“頭文件”包括到源文件屮。使用標(biāo)準(zhǔn)輸入輸出庫函數(shù)時(shí)要用到“stdio.h”文件,因此源文件開頭應(yīng)冇以下預(yù)編譯命令:#includc< stdio.h >或include ” stdio.h”stdio 是 standard input &outupt |的意丿ji。5) 考慮到printf和scanf函數(shù)使用頻繁,系統(tǒng)允許在使用這兩個(gè)函數(shù)時(shí)可不加#inckidc< stdio.h >或#include "stdio.h”4.4
8、字符數(shù)據(jù)的輸入輸岀4.4.1 putchar函數(shù)(字符輸出函數(shù))putchar函數(shù)是字符輸出函數(shù),其功能是在顯示器上輸出單個(gè)字符。其一般形式為: putchar(字符變量) 例如:putchar(*a');(輸出大寫字母a)putchar(x);(輸出字符變量x的值)putchar(,10);(也是輸出字符a)putchar('n'); (換行)對控制字符則執(zhí)行控制功能,不在屏幕上顯示。使用本函數(shù)前必須要用文件包含命令:# inckidc<stdio.h>或#include "stdio.h”【例4.1】輸出單個(gè)字符。#include<std
9、io.h>main()< br> chara=,b',b='oc=,k'putchar(a);putchar(b);putchar(b);putchar(c);putchar(at,);putchar(a);putchar(b);putcharw);putchar(b);putchar(c);4.4.2 getchar函數(shù)(鍵盤輸入函數(shù))gctchar函數(shù)的功能是從鍵盤上輸入一個(gè)字符。 其一般形式為:getchar();通常把輸入的字符賦v個(gè)字符變量,構(gòu)成賦值語句,如:char c;c=getchar();【例4.2】輸入單個(gè)字符。# include&
10、lt;stdio.h>void main()char c;printf("input a charactern");c=gctchar();putchar(c);使用getchar函數(shù)還應(yīng)注意兒個(gè)問題:1) getchar函數(shù)只能接受單個(gè)字符,輸入數(shù)字也按字符處理。輸入多于一個(gè)字符時(shí), 只接收第一個(gè)字符。2) 使用本函數(shù)前必須包含文件“stdio.h”。3) 在tc屏幕下運(yùn)行含本函數(shù)程序吋,將退出tc屏幕進(jìn)入用八屏幕等待用八輸入。 輸入完畢再返回tc屏幕。4) 程序最后兩行可用下面兩行的任意一行代替:putchar(getchar();printf( “c'&
11、#39; ,getchar();4.5 格式輸入與輸出4.5.1printf函數(shù)(格式輸出函數(shù))printf函數(shù)稱為格式輸出函數(shù),其關(guān)鍵字最末一個(gè)字母f即為"格式”(foimat)之意。其功能 是按用八指定的格式,把指定的數(shù)據(jù)顯示到顯示器屏幕上。在前血的例題中我們已多次使用 過這個(gè)函數(shù)。1. printf函數(shù)調(diào)用的一般形式printf函數(shù)是一個(gè)標(biāo)準(zhǔn)庫函數(shù),它的函數(shù)原型在頭文件“stdio.h”中。但作為一個(gè)特例,不 要求在使用printf函數(shù)z前必須包含stdio.h文件。printf函數(shù)調(diào)用的一般形式為:printf(“格式控制字符串”,輸出表列)其中格式控制字符串用于指定輸出格式
12、。格式控制串可由榕式字符串和非格式字符串兩種組 成。格式字符串是以開頭的字符串,在后面跟有各種格式字符,以說明輸出數(shù)據(jù)的類型、 形式、長度、小數(shù)位數(shù)等。如:“d”表示按十進(jìn)制整型輸出;“l(fā)d”表示按卜進(jìn)制長整型輸出;“c”表示按字符型輸出等。非格式字符串在輸出時(shí)原樣照印,在顯示中起提示作用。輸出表列中給出了各個(gè)輸出項(xiàng),要求格式字符串和各輸岀項(xiàng)在數(shù)量和類型上應(yīng)該一一對應(yīng)。 【例4.3】main()inta=88,b=89;printf(u%d %dnu,a,b);printf(“d,%dn“,a,b);printf(” c,%cn",a,b);printf(na=%d,b=%dn,a,
13、b);本例中四次輸出了 a,b的值,但由于格式控制串不同,輸出的結(jié)果也不相同。第四行的輸出 語句格式控制串屮,兩格式串4之間加了一個(gè)空格(非格式字符),所以輸出的a,b值之間 冇一個(gè)空格。第五行的printf語句格式控制串中加入的是非格式字符逗號,因此輸出 的a,b值z間加了一個(gè)逗號。笫六行的格式串要求按字符型輸出a,b值。第七行屮為了提示 輸出結(jié)果乂增加了非格式字符串。2. 格式字符串在turbo c屮格式字符串的一般形式為:標(biāo)志輸出最小寬度.精度長度類型其中方括號中的項(xiàng)為可選項(xiàng)。各項(xiàng)的意義介紹如下:1) 類型:類型字符卅以表示輸出數(shù)據(jù)的類型,其格式符和意義如下表所示:格式字符意義d以i進(jìn)制
14、形式輸出帶符號整數(shù)(正數(shù)不輸出符號)o以八進(jìn)制形式輸出無符號整數(shù)(不輸出前綴0)x,x以十六進(jìn)制形式輸出無符號整數(shù)(不輸出前綴ox)u以十進(jìn)制形式輸出無符號整數(shù)f以小數(shù)形式輸出單、雙粕度實(shí)數(shù)c,e以指數(shù)形式輸出單、雙精度實(shí)數(shù)g,g以£或6屮較短的輸出寬度輸出單、雙精度實(shí)數(shù)c輸岀單個(gè)字符s輸出字符串2) 標(biāo)志:標(biāo)志字符為、+、#、空格四種,其意義下表所示:標(biāo)志意義-結(jié)果左對齊,右邊填空格+輸出符號(正號或負(fù)號)空格輸出值為正時(shí)冠以空格,為負(fù)時(shí)冠以負(fù)號#對c,s,d,u類無影響;對o類,在輸出時(shí)加前綴0;對x類,在輸出時(shí)加前綴ox;對e,g,f類當(dāng)結(jié)果有小數(shù)時(shí)才給出小數(shù)點(diǎn)3) 輸岀最小寬
15、度:用十進(jìn)制整數(shù)來表示輸出的最少位數(shù)。若實(shí)際位數(shù)多于定義的寬 度,則按實(shí)際位數(shù)輸出,若實(shí)際位數(shù)少于定義的寬度則補(bǔ)以空格或0。4) 精度:精度格式符以開頭,后跟i-進(jìn)制整數(shù)。木項(xiàng)的意義是:如果輸出數(shù)字, 則表示小數(shù)的位數(shù);如果輸出的是字符,則表示輸出字符的個(gè)數(shù);若實(shí)際位數(shù)人于所定義的 精度數(shù),則截去超過的部分。5. 長度:長度格式符為h,l兩種,h表示按短整型量輸出,1表示按長整空量輸出?!纠?.4main()int a=15;float b= 123.1234567;double c= 12345678.1234567;char d='p'printf(ua=%d,%5d,%o
16、,%xn",a,a,a,a);printf(',b=%f,%lf,%5.41f,%en,b,b,b,b);printf("c=%lf,%f,%8.41fn",c,c,c);printf(,d=%c,%8cnm,d,d);本例第七行中以四種格式輸出整型變量a的值,其中“5d ”婆求輸出寬度為5, iflja 值為15只有兩位故補(bǔ)三個(gè)空格。笫八行中以四種格式輸出實(shí)型量b的值。其中“f”和 “l(fā)f ”格式的輸出相同,說明“1”符對“f”類型無影響?!?.41f”指定輸出寬度為5, 精度為4,由于實(shí)際長度超過5故應(yīng)該按實(shí)際位數(shù)輸岀,小數(shù)位數(shù)超過4位部分被截去。第
17、九行輸出雙精度實(shí)數(shù),“8.41f ”由于指定精度為4位故截去了超過4位的部分。第十行輸 出字符量d,其中“8c ”指定輸出寬度為8故在輸出字符pz前補(bǔ)加7個(gè)空格。使用printf函數(shù)時(shí)還要注意一個(gè)問題,那就是輸出表列中的求值順序。不同的編譯系統(tǒng)不一 定相同,可以從左到右,也可從右到左。turbo c是按從右到左進(jìn)行的。請看卜面兩個(gè)例子:【例4.5】main()int 上&printf("%dn%dn%dn%dn%dn%dii'+i,i,i+,i,-i+,-i);【例4.6】main()int i=&printf(,%dn,+i);printf(” dn”,i)
18、;printf(”dn”,i+);printf(,%dnm,i-); printf("%dn",-i+);printf(” dn”,i);這兩個(gè)程序的區(qū)別是用一個(gè)printf語句和多個(gè)printf語句輸出。但從結(jié)果可以看出是不同的。 為什么結(jié)果會不同呢?就是因?yàn)閜rintf函數(shù)對輸出表中各量求值的順序是口右至左進(jìn)行的。 在第一例屮,先對最示一項(xiàng)“4”求值,結(jié)果為&然后i自減1后為7。再對“i+”項(xiàng) 求值得7,然后i自增1后為8。再對“i”項(xiàng)求值得8,然后i再自減1后為7。再求“i+” 項(xiàng)得7,然后i再自增1后為8。再求“-i”項(xiàng),i先口減1后輸出,輸出值為7。最后才
19、 求輸出表列中的第一項(xiàng)“+i”,此時(shí)i自增1后輸岀8o但是必須注意,求值順序雖是白右至左,但是輸出順序還是從左至右,因此得到的結(jié)果是上 述輸出結(jié)果。4.5.2 scanf函數(shù)(格式輸入函數(shù))scanf函數(shù)稱為格式輸入函數(shù),即按用戶指定的格式從鍵盤上把數(shù)據(jù)輸入到指定的變量z中。1. scanf函數(shù)的一般形式scanf函數(shù)是一個(gè)標(biāo)準(zhǔn)庫函數(shù),它的函數(shù)原型在頭文件"stdio.h”中,與printf函數(shù)相同,c 語言也允許在使用scanf函數(shù)之両不必包含stdio.h文件。scanf函數(shù)的一般形式為:scanf(“格式控制字符串”,地址表列);其中,格式控制字符串的作用與printf函數(shù)相同
20、,但不能顯示非格式字符串,也就是不能顯 示提示字符串。地址表列屮給出各變量的地址。地址是由地址運(yùn)算符“&”后跟變量名組成 的。例如:&a, &b分別表示變量a和變量b的地址。這個(gè)地址就是編譯系統(tǒng)在內(nèi)存中給a,b變量分配的地址。在c語言中,使用了地址這個(gè)概念, 這是與其它語言不同的。應(yīng)該把變量的值和變量的地址這兩個(gè)不同的概念區(qū)別開來。變量 的地址是c編譯系統(tǒng)分配的,用戶不必關(guān)心具體的地址是多少。變量的地址和變量值的關(guān)系如下:在賦值表達(dá)式中給變量賦值,如:a=567則,a為變量名,567是變邀的值,&a是變罐a的地址。但在賦值號左邊是變量名,不能寫地址,而scanf
21、函數(shù)在本質(zhì)上也是給變屋賦值,但要求寫 變量的地址,如&紙 這兩者在形式上是不同的。&是一個(gè)収地址運(yùn)算符,&“是一個(gè)表達(dá)式, 其功能是求變量的地址?!纠?.7】main()int a,b,c;printf("input a,b,cn");scanf("%d%d%d",&a,&b,&c);printf(ua=%d,b=%d,c=%d,',a,b,c);在本例中,由于scanf函數(shù)本身不能顯示提示串,故先用printf語句在屏幕上輸出提示,請 用戶輸入a、b、c的值。執(zhí)行scanf語句,則退出tc屏幕進(jìn)入
22、用戶屏幕等待用戶輸入。用 戶輸入7 8 9后按卜.回車鍵,此時(shí),系統(tǒng)乂將返回tc屏幕。在scanf語句的格式串屮由 于沒冇非格式字符在“d%d%d” z間作輸入時(shí)的間隔,因此在輸入時(shí)要用一個(gè)以上的空格 或回車鍵作為每兩個(gè)輸入數(shù)之間的間隔。如:789或7892. 格式字符串格式字符串的一般形式為:%*輸入數(shù)據(jù)寬度長度類型其中冇方括號的項(xiàng)為任選項(xiàng)。各項(xiàng)的意義如下:1)類型:表示輸入數(shù)據(jù)的類型,其格式符和意義如下表所示。格式字符意義d輸入十進(jìn)制整數(shù)o輸入八進(jìn)制整數(shù)x輸入i 六進(jìn)制整數(shù)u輸入無符號十進(jìn)制整數(shù)f或e輸入實(shí)型數(shù)(用小數(shù)形式或指數(shù)形式)c輸入單個(gè)字符s輸入字符串2)符:用以表示該輸入項(xiàng),讀入
23、后不賦予相應(yīng)的變量,即跳過該輸入值。如:scanf("%d %*d %d",&a,&b);當(dāng)輸入為:123時(shí),把1賦予a, 2被跳過,3賦予b。3)寬度:用十進(jìn)制整數(shù)指定輸入的寬度(即字符數(shù))。例如:scanf(”5d”,&a);輸入:12345678只把12345賦予變量a,具余部分被截去。又如:scanf(” 4d%4d“,&a,&b);輸入:12345678將把1234賦予a,而把5678賦予b。4)長度:長度格式符為1和h, 1表示輸入長整型數(shù)據(jù)(如ld)和雙精度浮點(diǎn)數(shù) (如lf)。h表示輸入短整型數(shù)據(jù)。使用scanf函數(shù)還必
24、須注意以下兒點(diǎn):1)scanf函數(shù)中沒有精度控制,如:scanf("%5.2f°,&a);是非法的。不能企圖用此語句 輸入小數(shù)為2位的實(shí)數(shù)。2)scanf中要求給出變量地址,如給出變量名則會出錯(cuò)。如scanf(”d“,a);是非法的, 應(yīng)改為scnaf(”d”,&a);才是合法的。3)在輸入多個(gè)數(shù)值數(shù)據(jù)時(shí),若格式控制串中沒冇非格式字符作輸入數(shù)據(jù)z間的間隔 則可用空格,tab或回車作間隔。c編譯在碰到空格,tab,回千或非法數(shù)據(jù)(如對“d” 輸入“12a”時(shí),a即為非法數(shù)據(jù))時(shí)即認(rèn)為該數(shù)據(jù)結(jié)朿。4)在輸入字符數(shù)據(jù)時(shí),若格式控制串屮無非格式字符,則認(rèn)為所有輸入的
25、字符均為 冇效字符。例如:scanf("%c%c%c",&a,&b,&c); 輸入為:def則把u賦了 a, *1賦了 b,o賦了 co 只有當(dāng)輸入為:def時(shí),才能把d賦于賦予b,f賦予c。 如果在格式控制屮加入空格作為間隔, 如:scanf('*%c %c %c”,&a,&b,&c);則輸入時(shí)各數(shù)據(jù)z間可加空格。【例4.8】main()char a,b;printf("input character a,bn"); scanf("%c%c",&a,&b); p
26、rintf("%c%cn",a,b);由于scanf函數(shù)”c%c”中沒有空格,輸入m n,結(jié)果輸出只有m。而輸入改為mn吋則 可輸出mn兩字符。【例4.9】main()char a,b;printf("input character a,bn");scanf("%c %c",&a,&b);pri ntf( "n%c%cn" ,a,b);本例表示scanf格式控制串“c %c”z間有空格時(shí),輸入的數(shù)據(jù)z間可以有空格間隔。5) 如果格式控制串中有非格式字符則輸入時(shí)也要輸入該非格式字符。例如:scanf(
27、”d,%d,%d”,&a,&b,&c);其中用非格式符“,”作間隔符,故輸入時(shí)應(yīng)為:5,6,7乂如:scanf("a=%d,b=%d,c=%d",&a,&b,&c);則輸入應(yīng)為:a=5,b=6,c=76) 如輸入的數(shù)據(jù)與輸出的類型不一致吋,雖然編譯能夠通過,但結(jié)果將不正確?!纠?.10】main()int a;printf(hinput a numbernh); scanf("%d",&a); printf(“l(fā)d“,a);由于輸入數(shù)據(jù)類型為整型,而輸出語句的格式串中說明為長整型,因此輸出結(jié)果和輸入
28、 數(shù)據(jù)不符。如改動程序如下:【例4.11main()long a;printf(hinput a long intcgcrnh);scanf(m%ldn,&a);printf(n%ldh,a);運(yùn)行結(jié)果為:input a long integer12345678901234567890當(dāng)輸入數(shù)據(jù)改為氏整型后,輸入輸出數(shù)據(jù)相等?!纠?.12】main()char a,b,c;printf(hinput character a,b,cn");scanf("%c %c %c",&a,&b,&c);printf(u%d,%d,%dn%c,%
29、c,%cnn,a,b,c,a-32,b-32,c-32);輸入三個(gè)小寫字母,輸出其ascii碼和對應(yīng)的大寫字母?!纠?.13】main()int a;long b;float f;double d;char c;printf(hnint:%dnlong:%dnfloat:%dndoubie:%dnchar:%dn,sizeof(a),sizeof(b),sizeof(f),sizeof( d),sizeof(c);輸出各種數(shù)據(jù)類型的字節(jié)長度。4.6順序結(jié)構(gòu)程序設(shè)計(jì)舉例【例4.14輸入三角形的三邊長,求三角形面積。已知三介形的三邊t a,b,c,則該三九形的面積公式為:其中 s = (a+b+c
30、)/2源程序如下:#include<math.h>main()float a,b,c,s,area;scanf( “f,%f,%f”,&a,&b,&c);s=1.0/2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c);printf( “a=%7.2f,b=%7.2f,c=%7.2f,s=%72fn” ,a,b,c,s);printf( "area=%7.2fn” ,area);【例4.15求ax2+bx+c=0方程的根,a,b,c由鍵盤輸入,設(shè)b2-4ac>0o 求根公式為:令,則 x1二p+qx2=p-q源程序如
31、下:# include<math.h>main()float a,b,c,disc,xl,x2,p,q;scanf( "a=%f,b=%f,c=%f”,&a,&b,&c);disc=b*b-4*a*c;p=-b/(2*a);q=sqrt(disc)/(2*a);xl=p+q;x2=p-q;printf( "nxl=%5.2fnx2=%5.2fn” ,xl,x2);4最簡單的c程序設(shè)計(jì)一順序程序設(shè)計(jì)14.1 c語句概述14.2 賦值語句34.3 數(shù)據(jù)輸入輸出的概念及在c語言屮的實(shí)現(xiàn)44.4 字符數(shù)據(jù)的輸入輸出44.4.1 putchar函數(shù)
32、(字符輸出函數(shù))44.4.2 getchar函數(shù)(鍵盤輸入函數(shù))54.5 格式輸入與輸出54.5.1 printf函數(shù)(格式輸出函數(shù))54.5.2 scanf函數(shù)(格式輸入函數(shù))84.6 順序結(jié)構(gòu)程序設(shè)計(jì)舉例124最簡單的c程序設(shè)計(jì)一順序程序設(shè)計(jì)從程序流程的角度來看,程序可以分為三種基木結(jié)構(gòu),即順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán) 結(jié)構(gòu)。這三種基本結(jié)構(gòu)可以組成所有的各種復(fù)雜程序。c語言提供了多種語句來實(shí)現(xiàn)這些 程序結(jié)構(gòu)。本章介紹這些基本語句及其在順序結(jié)構(gòu)中的應(yīng)用,使讀者對c程序有一個(gè)初步 的認(rèn)識,為后而各章的學(xué)習(xí)打下基礎(chǔ)。4.1 c語句概述c程序的結(jié)構(gòu):c程序的執(zhí)行部分是由語句組成的。程序的功能也是由執(zhí)行
33、語句實(shí)現(xiàn)的。c語句可分為以下五類:1) 表達(dá)式語句2) 函數(shù)調(diào)用語句3) 控制語句4) 復(fù)合語句5) 空語句1. 表達(dá)式語句:表達(dá)式語句由表達(dá)式加上分號“;”組成。其一般形式為:表達(dá)式;執(zhí)行表達(dá)式語句就是計(jì)算表達(dá)式的值。例如:x=y+z;賦值語句;y+z;加法運(yùn)算語句,但計(jì)算結(jié)果不能保留,無實(shí)際意義;i+; 自增1語句,i值增1。2. 函數(shù)調(diào)用語句:由函數(shù)名、實(shí)際參數(shù)加上分號“;”組成。其一般形式為:函數(shù)名(實(shí)際參數(shù)表);執(zhí)行函數(shù)語句就是調(diào)用函數(shù)體并把實(shí)際參數(shù)賦予函數(shù)定義中的形式參數(shù),然后執(zhí)行被調(diào)函數(shù) 體中的語句,求取函數(shù)值(在后面函數(shù)中再詳細(xì)介紹)。例如:printf("c pro
34、gram");調(diào)用庫函數(shù),輸出字符串。3. 控制語旬:控制語句用于控制程序的流程,以實(shí)現(xiàn)程序的各種結(jié)構(gòu)方式。它們 由特定的語句定義符組成。c語言有九種控制語句。可分成以下三類:1) 條件判斷語句:訐語句、switch語句;2) 循壞執(zhí)彳亍語句:do while語句、while語句、for語句;3) 轉(zhuǎn)向語句:break語句、goto語句、continue語句、return語句。4. 復(fù)合語句:把多個(gè)語句用括號括起來組成的一個(gè)語句稱復(fù)合語句。 在程序中應(yīng)把復(fù)合語句看成是單條語句,而不是多條語句。例如: x=y+z;a=b+c;printf( "%d%d”,x, a);是一條復(fù)
35、合語句。復(fù)合語句內(nèi)的各條語句都必須以分號“;”結(jié)尾,在括號“”外不能加分號。5. 空語句:只冇分號“;”組成的語句稱為空語句??照Z句是什么也不執(zhí)行的語句。在程序屮空語句可用來作空循環(huán)體。例如while(getchar()!=n,)本語句的功能是,只要從鍵盤輸入的字符不是冋車則重新輸入。這里的循環(huán)體為空語句。4.2 賦值語句賦值語句是由賦值表達(dá)式再加上分號構(gòu)成的表達(dá)式語句。其一般形式為:變量二表達(dá)式;賦值語句的功能和特點(diǎn)都少賦值表達(dá)式和同。它是程序中使用最多的語句z-o在賦值語句的使用中需要注意以下幾點(diǎn):1. 由于在賦值符“二”右邊的表達(dá)式也可以乂是一個(gè)賦值表達(dá)式,因此,下述形式變量=(變雖=表
36、達(dá)式);是成立的,從而形成嵌套的情形。其展開之后的一般形式為:變量=變量=表達(dá)式;例如:a=b=c=d=e=5;按照賦值運(yùn)算符的右接合性,因此實(shí)際上等效于:e=5;d=e;c=d;b=c;a=b;2. 注意在變量說明中給變量賦初值和賦值語句的區(qū)別。給變量賦初值是變量說明的一部分,賦初值后的變量與具后的具它同類變量之間仍必須川逗 號間隔,而賦值語句則必須用分號結(jié)尾。例如:int a=5,b,c;3. 在變量說明中,不允許連續(xù)給多個(gè)變量賦初值。如卜-述說明是錯(cuò)課的:inta=b=c=5必須寫為inta=5,b=5,c=5;而賦值語句允許連續(xù)賦值。4. 注意賦值表達(dá)式和賦值語句的區(qū)別。賦值表達(dá)式是一
37、種表達(dá)式,它可以岀現(xiàn)在任何允許表達(dá)式岀現(xiàn)的地方,而賦值語句則不能。 下述語句是合法的:if(x=y+5)>0) z=x;語句的功能是,若表達(dá)式x=y+5大于0則z=x。卜謎語句是非法的:if(x=y+5;)>0) z=x;因?yàn)閤=y+5;是語句,不能出現(xiàn)在表達(dá)式中。4.3 數(shù)據(jù)輸入輸出的概念及在c語言中的實(shí)現(xiàn)1) 所謂輸入輸出是以計(jì)算機(jī)為主體而言的。2) 木章介紹的是向標(biāo)準(zhǔn)輸出設(shè)備顯示器輸出數(shù)據(jù)的語句。3) 在c語言中,所有的數(shù)據(jù)輸入/輸出都是由庫函數(shù)完成的。因此都是前數(shù)語句。4) 在使用c語言庫函數(shù)吋,要用預(yù)編譯命令#include將有關(guān)“頭文件”包括到源文件中。使用標(biāo)準(zhǔn)輸入輸出
38、庫函數(shù)時(shí)要用到“stdio.h”文件,因此源文件開頭應(yīng)有以下預(yù)編譯命令:#include< stdio.h >或#include ” stdio.h"stdio 是 standard input &outupt 的意思。5) 考慮到printf和scanf函數(shù)使用頻繁,系統(tǒng)允許在使用這兩個(gè)函數(shù)吋可不加#include< stdio.h >或#include ” stdio.h”4.4 字符數(shù)據(jù)的輸入輸出4.4.1 putchar函數(shù)(字符輸出函數(shù))putchar函數(shù)是字符輸出函數(shù),其功能是在顯示器上輸出單個(gè)字符。其一般形式為:putchar(字符變量)
39、例如:putchar(a); (輸出人寫字母a) putchar(x);(輸出字符變量x的值)putchar( '101');(也是輸出字符 a) putcharcn'); (換行) 對控制字符則執(zhí)行控制功能,不在屏幕上顯示。使用木函數(shù)前必須要用文件包含命令:# include<stdio.h>或#include “stdio.h”【例4.1】輸出單個(gè)字符。#include<stdio.h>main()< br> chara=,b',b='o,c=,k,;putchar(a);putchar(b);putchar(b)
40、;putchar(c);putchar('t');putchar(a);putchar(b);putchar('n');putchar(b);putchar(c);4.4.2 getchar函數(shù)(鍵盤輸入函數(shù)) getchar兩數(shù)的功能是從鍵盤上輸入一個(gè)字符。其一般形式為:getchar();通常把輸入的字符賦予一個(gè)字符變量,構(gòu)成賦值語句,如:char c;c=getchar();【例4.2】輸入單個(gè)字符。# include<stdio.h>void main()char c;printf(hinput a character'll);c=g
41、etchar();putchar(c);使用getchar函數(shù)還應(yīng)注意兒個(gè)問題:1) getchar函數(shù)只能接受單個(gè)字符,輸入數(shù)字也按字符處理。輸入多于一個(gè)字符時(shí), 只接收第一個(gè)字符。2) 使用本函數(shù)前必須包含文件“stdio.h”。3) 在tc屏幕下運(yùn)行含本函數(shù)程序時(shí),將退出tc屏幕進(jìn)入用戶屏幕等待用戶輸入。 輸入完畢再返i叫tc屏幕。4) 程序蝕后兩行可用下面兩行的任意一行代替:putchar(gctchar();printf( "%c” ,getchar();4.5 格式輸入與輸出451printf函數(shù)(格式輸出函數(shù))printf函數(shù)稱為格式輸出函數(shù),其關(guān)鍵字最末一個(gè)字母f即為
42、“格式”(fonnat)z意。其功能 是按用戶指定的格式,把指定的數(shù)據(jù)顯示到顯示器屏幕上。在前面的例題中我們已多次便用 過這個(gè)函數(shù)。1. printf函數(shù)調(diào)用的一般形式printf函數(shù)是一個(gè)標(biāo)準(zhǔn)庫函數(shù),它的函數(shù)原型在頭文件“stdio.h”中。但作為一個(gè)特例,不 要求在使用printf函數(shù)z前必須包含stdio.h文件。printf函數(shù)調(diào)用的一般形式為:printf(“格式控制字符串”,輸岀表列)其小格式控制字符串川于指定輸出格式。格式控制串可由格式字符串和非格式字符串兩種組 成。格式字符串是以開頭的字符串,在后而跟有各種格式字符,以說明輸出數(shù)據(jù)的類型、 形式、長度、小數(shù)位數(shù)等。如:“d”表示
43、按十進(jìn)制整型輸出;“l(fā)d”表示按十進(jìn)制長整型輸出;%”表示按字符型輸出等。非格式字符串在輸出時(shí)原樣照印,在顯示屮起提示作用。輸出表列中給出了各個(gè)輸出項(xiàng),要求格式字符串和各輸出項(xiàng)在數(shù)量和類型上應(yīng)該一一對應(yīng)。 【例4.3 main()inta=88,b=89; printf(u%d %dnu,a,b); printf("%d,%dn",a,b); printf("%c,%cnm,a,b); printf(ua=%d,b=%d',a,b);本例中四次輸出了 a,b的值,但山于格式控制串不同,輸出的結(jié)果也不相同。第四行的輸出 語句格式控制串中,兩格式串1之間加了一
44、個(gè)空格(非格式字符),所以輸出的a,b值之間 有一個(gè)空格。第五行的prhnf語旬格式控制串屮加入的是非格式字符逗號,因此輸出 的a,b值z間加了一個(gè)逗號。第六行的格式串要求按字符型輸出a,b值。第七行中為了提示 輸出結(jié)果又增加了非格式字符串。2. 格式字符串在turbo c中格式字符串的一般形式為:標(biāo)志輸出最小寬度兒粋度長度類型其中方括號中的項(xiàng)為可選項(xiàng)。各項(xiàng)的意義介紹如下:1)類空:類型字符用以表示輸出數(shù)據(jù)的類空,其格式符和意義如下表所示:格式字符意義d以i進(jìn)制形式輸岀帶符號整數(shù)(正數(shù)不輸出符號)o以八進(jìn)制形式輸出無符號整數(shù)(不輸出前綴0)x,x以十六進(jìn)制形式輸出無符號整數(shù)(不輸出前綴ox)u
45、以十進(jìn)制形式輸出無符號整數(shù)f以小數(shù)形式輸出單、雙精度實(shí)數(shù)e,e以指數(shù)形式輸岀單、雙精度實(shí)數(shù)g,g以力彳或©中較短的輸出寬度輸出單、雙精度實(shí)數(shù)c輸出單個(gè)字符s輸出字符串2)標(biāo)志:標(biāo)志字符為、+、#、空格四種,其意義卜表所示:標(biāo)志意義-結(jié)果左對齊,右邊填空格+輸出符號(正號或負(fù)號)空格輸出值為正時(shí)冠以空格,為負(fù)時(shí)冠以負(fù)號#對c,s,d,u類無影響;對o類,在輸出時(shí)加前綴o;對x類,在輸出時(shí)加前綴ox;對e,g,f類當(dāng)結(jié)果有小數(shù)吋才給出小數(shù)點(diǎn)3)輸出最小寬度:用十進(jìn)制整數(shù)來表示輸出的蝕少位數(shù)。若實(shí)際位數(shù)多于定義的寬 度,則按實(shí)際位數(shù)輸出,若實(shí)際位數(shù)少于定義的寬度則補(bǔ)以空格或0。4)精度:精
46、度格式符以開頭,后跟十進(jìn)制整數(shù)。本項(xiàng)的意義是:如果輸出數(shù)字, 則表示小數(shù)的位數(shù);如果輸出的是字符,則表示輸出字符的個(gè)數(shù);若實(shí)際位數(shù)大于所定義的 精度數(shù),則截去超過的部分。5. 長度:長度格式符為h,l兩種,h衣示按短整型量輸出,1表示按長整型量輸出。【例4.4】main()int a=15;float b= 123.1234567;double c=12345678.1234567;char d='p'printf(ua=%d,%5d,%o,%xnh,a,a,a,a); printf(nb=%f,%lf,%5.41f,%enn,b,b,b,b); printf(nc=%lf,%
47、f,%8.41ann,c,c,c);printf(hd=%c,%8cn",d,d);本例第七行中以四種格式輸出整型變量a的值,其中“5d ”要求輸出寬度為5,而a 值為15只有兩位故補(bǔ)三個(gè)空格。笫八行中以四種格式輸出實(shí)型量b的值。其屮“f”和 “l(fā)f ”格式的輸出相同,說明“1”符對“f”類型無影響?!?.41f”指定輸出寬度為5, 精度為4,由于實(shí)際長度超過5故應(yīng)該按實(shí)際位數(shù)輸岀,小數(shù)位數(shù)超過4位部分被截去。笫 九行輸出雙粕度實(shí)數(shù),“841f ”由于指定粕度為4位故截去了超過4位的部分。第十行輸 出字符量d,其中“8c ”指定輸出寬度為8故在輸出字符pz前補(bǔ)加7個(gè)空格。使用prin
48、tf函數(shù)時(shí)還要注意一個(gè)問題,那就是輸出表列屮的求值順序。不同的編譯系統(tǒng)不一 定相同,可以從左到右,也可從右到左。turbo c是按從右到左進(jìn)行的。請看下面兩個(gè)例子:【例4.5main()int i=8;printf(n%dn%dn%dn%dn%dn%dnh,+i,-i,i4-+,i-,-i+,-i-); 【例4.6main()int 上&printf(,%dn,+i); printfc%dnm,-i);printf(” dn",i+);printf(n%dnh,i-);printf(” dn”,-i+);printf("%dii",-i);這兩個(gè)程序的區(qū)別
49、是用一個(gè)printf語旬和多個(gè)printf語句輸出。但從結(jié)果可以看出是不同的。 為什么結(jié)果會不同呢?就是因?yàn)閜rintf函數(shù)對輸出表屮各最求值的順序是白右至左進(jìn)行的。在笫一例中,先對最后一項(xiàng)“i”求值,結(jié)果為&然后i自減1后為70再對“i+”項(xiàng) 求值得-7,然后i自增1后為8o再對“i”項(xiàng)求值得8,然后i再自減1后為7o再求“i+” 項(xiàng)得7,然示i再自增1后為8。再求“-i”項(xiàng),i先自減1后輸出,輸岀值為7。最后才 求輸出表列中的第一項(xiàng)“+i”,此時(shí)i自增1后輸出8o但是必須注意,求值順序雖是自右至左,但是輸出順序還是從左至右,因此得到的結(jié)果是上 述輸出結(jié)果。4.5.2 scanf函數(shù)
50、(格式輸入函數(shù))scanf函數(shù)稱為格式輸入函數(shù),即按用八指定的格式從鍵盤上把數(shù)據(jù)輸入到指定的變量z中。1. scanf函數(shù)的一般形式scanf函數(shù)是-個(gè)標(biāo)準(zhǔn)庫函數(shù),它的函數(shù)原型在頭文件“stdio.h”中,與printf函數(shù)相同,c 語言也允許在使用scanf函數(shù)z前不必包含stdio.h文件。scanf函數(shù)的一般形式為:scanf( “格式控制字符串”,地址表列);其中,格式控制字符串的作用printf函數(shù)相同,但不能顯示非格式字符串,也就是不能顯 示提示字符串。地址表列中給出各變量的地址。地址是山地址運(yùn)算符“&”后跟變量名組成 的。例如:&a, &b分別表示變量a和
51、變量b的地址。這個(gè)地址就是編譯系統(tǒng)在內(nèi)存中給a,b變量分配的地址。在c語言中,使用了地址這個(gè)概念, 這是與其它語言不同的。應(yīng)該把變量的值和變量的地址這兩個(gè)不同的概念區(qū)別開來。變量 的地址是c編譯系統(tǒng)分配的,用戶不必關(guān)心具體的地址是多少。變量的地址和變量值的關(guān)系如下:在賦值表達(dá)式屮給變最賦值,如:a=567則,a為變量名,567是變量的值,&a是變量a的地址。但在賦值號左邊是變量名,不能寫地址,而scanf函數(shù)在木質(zhì)上也是給變量賦值,但要求寫 變量的地址,如&a。這兩者在形式上是不同的。&是一個(gè)取地址運(yùn)算符,&a是一個(gè)表達(dá)式, 其功能是求變量的地址?!纠?.7】m
52、ain()int abc;printf(uinput a,b,cn");scanf("%d%d%dh,&a,&b,&c);printf(na=%d,b=%d,c=%d'a,b,c);在本例中,由于scanf函數(shù)本身不能顯示提示串,故先用printf語句在屏幕上輸出提示,請 用戶輸入a、b、c的值。執(zhí)行scanf語句,則退出tc屏幕進(jìn)入用戶屏幕等待用戶輸入。用 戶輸入7 8 9后按下回車鍵,此時(shí),系統(tǒng)乂將返回tc屏幕。在scanf語句的格式串中由 于沒有非格式字符在“d%d%d”之間作輸入時(shí)的間隔,因此在輸入時(shí)要川一個(gè)以上的空格 或回車鍵作為每
53、兩個(gè)輸入數(shù)之間的間隔。如:789或7892. 格式字符串格式字符串的一般形式為:輸入數(shù)據(jù)寬度長度類型其小有方括號的項(xiàng)為任選項(xiàng)。各項(xiàng)的意義如f:1) 類型:表示輸入數(shù)據(jù)的類型,其格式符和意義如下表所示。格式字符意義d輸入十進(jìn)制整數(shù)0輸入八進(jìn)制整數(shù)x輸入i-六進(jìn)制整數(shù)ii輸入無符號十進(jìn)制整數(shù)f或e輸入實(shí)型數(shù)(用小數(shù)形式或指數(shù)形式)c輸入單個(gè)字符s輸入字符串2) “*”符:用以表示該輸入項(xiàng),讀入后不賦予相應(yīng)的變罐,即跳過該輸入值。如:scanf("%d %*d %(t',&a,&b);當(dāng)輸入為:123r寸,把1賦予a, 2被跳過,3賦予b。3) 寬度:用十進(jìn)制整數(shù)指
54、定輸入的寬度(即字符數(shù))。例如:scanf(” 5d”,&a);輸入:12345678只把12345賦予變量a,其余部分被截去。乂如:scanf(” 4d%4d”,&a,&b);輸入:12345678將把1234賦予a,而把5678賦予b。4) 長度:長度格式符為1和h, 1表示輸入長整型數(shù)據(jù)(如ld)和雙精度浮點(diǎn)數(shù) (如lf)。h表示輸入短整型數(shù)據(jù)。使用scanf函數(shù)還必須注意以下幾點(diǎn):1) scanf函數(shù)中沒有精度控制,如:scanf(u%5.2f,&a);是非法的。不能企圖用此語句 輸入小數(shù)為2位的實(shí)數(shù)。2) scanf中要求給出變量地址,如給出變量名則會
55、出錯(cuò)。如scanf(”d“,a);是非法的, 應(yīng)改為scnaf(”d”,&a);才是合法的。3) 在輸入多個(gè)數(shù)值數(shù)據(jù)時(shí),若格式控制串屮沒有非格式字符作輸入數(shù)據(jù)之間的間隔 則可用空格,tab或回車作間隔。c編譯在碰到空格,tab,回車或非法數(shù)據(jù)(如對“1” 輸入“12a”吋,a即為非法數(shù)據(jù))吋即認(rèn)為該數(shù)據(jù)結(jié)束。4) 在輸入字符數(shù)據(jù)時(shí),若格式控制串中無非格式字符,則認(rèn)為所有輸入的字符均為 有效字符。例如:scanf(m%c%c%cm,&a,&b,&c);輸入為:def貝ij把d賦予a,"賦予b,e賦予c。只有當(dāng)輸入為:def吋,才能把d賦于a,o賦予b,f賦予co如果在格式控制中加入空格作為間隔,如:scanf (h%c %c %c*&am
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【《中小型辦公室大樓的綜合布線系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)(論文)》5600字】
- 2024年客運(yùn)站衛(wèi)生管理制度模版(二篇)
- 2024年大學(xué)外聯(lián)部門干事工作計(jì)劃范文(二篇)
- 2024年衛(wèi)生院院務(wù)公開制度范例(三篇)
- 2024年小學(xué)教師年度考核總結(jié)樣本(二篇)
- 2024年小學(xué)教師個(gè)人教學(xué)工作計(jì)劃樣本(二篇)
- 2024年安全教育活動總結(jié)簡單版(五篇)
- 2024年單位個(gè)人工作總結(jié)(二篇)
- 2024年土木工程實(shí)習(xí)總結(jié)范例(三篇)
- 2024年小學(xué)一年級體育教學(xué)工作計(jì)劃樣本(二篇)
- 期中測試卷(1-4單元)(試題)-2024-2025學(xué)年人教版數(shù)學(xué)四年級上冊
- 應(yīng)用文寫作+以“A+Clean-up+Activity”為題給學(xué)校英語報(bào)寫一篇新聞報(bào)道+講義 高二上學(xué)期月考英語試題
- 校園反詐騙課件
- 2024-2030年中國工業(yè)脫水機(jī)行業(yè)發(fā)展?fàn)顩r及投資方向分析報(bào)告
- 網(wǎng)絡(luò)傳播法導(dǎo)論(第2版)課件 第五章 侵害名譽(yù)權(quán)
- 環(huán)評手續(xù)轉(zhuǎn)讓協(xié)議(2篇)
- 胸外科快速康復(fù)護(hù)理課件
- 醫(yī)院污水處理運(yùn)維服務(wù)投標(biāo)方案(技術(shù)方案)
- 2024年高考最后一套壓軸卷-文綜試題(全國甲卷)含解析
- 蘇教版數(shù)學(xué)長方體與正方體表面積解析
- 2024年國家開放大學(xué)形考作業(yè)答案
評論
0/150
提交評論