第三章 簡單的程序設(shè)計(jì)_第1頁
第三章 簡單的程序設(shè)計(jì)_第2頁
第三章 簡單的程序設(shè)計(jì)_第3頁
第三章 簡單的程序設(shè)計(jì)_第4頁
第三章 簡單的程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩24頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第3章---簡單的程序設(shè)計(jì)為了讓計(jì)算機(jī)處理各種數(shù)據(jù),首先就應(yīng)該把源數(shù)據(jù)輸入到計(jì)算機(jī)中;計(jì)算機(jī)處理結(jié)束后,再將目標(biāo)數(shù)據(jù)信息以人能夠識別的方式輸出。C語言中的輸入輸出操作,是由C語言編譯系統(tǒng)提供的庫函數(shù)來實(shí)現(xiàn)。3.1格式化輸出——printf()函數(shù)3.2格式化輸入——scanf()函數(shù)3.3單個(gè)字符輸入輸出——getchar()和putchar()函數(shù)3.4順序結(jié)構(gòu)程序設(shè)計(jì)良好的源程序書寫風(fēng)格──順序程序段左對齊13.1格式化輸出——printf()函數(shù)

printf()函數(shù)的作用:向計(jì)算機(jī)系統(tǒng)默認(rèn)的輸出設(shè)備(一般指終端或顯示器)輸出一個(gè)或多個(gè)任意類型的數(shù)據(jù)。

3.1.1printf()函數(shù)的一般格式

例:已知圓半徑radius=1.5,求圓周長和圓面積。

main()

{floatradius,length,area,pi=3.1415926;

radius=1.5;

length=2*pi*radius; /*求圓周長*/

area=pi*radius*radius; /*求圓面積*/

printf(“radius=%f\n”,radius); /*輸出圓半徑*/

printf(“l(fā)ength=%7.2f,area=%7.2f\n”,length,area); /*輸出圓周長、面積*/

}

2程序運(yùn)行結(jié)果如下:

radius=1.500000length=9.42,area=7.07

printf()函數(shù)的一般格式如下:printf("格式字符串"[,輸出項(xiàng)表]);

1.格式字符串?!案袷阶址币卜Q“轉(zhuǎn)換控制字符串”,可以包含三種字符:(1)格式指示符。格式指示符的一般形式如下:%[標(biāo)志][寬度][.精度][F|N|h|L][類型]

常用的標(biāo)志字符如表3-1所示,常用的寬度指示符如表3-2所示,常用的精度指示符如表3-3所示,長度修飾符如表3-4所示,類型轉(zhuǎn)換字符如表3-5所示。

3(2)轉(zhuǎn)義字符例如,printf()函數(shù)中的'\n'就是轉(zhuǎn)義字符,輸出時(shí)產(chǎn)生一個(gè)“換行”操作。(3)普通字符──除格式指示符和轉(zhuǎn)義字符之外的其它字符。格式字符串中的普通字符,原樣輸出。

例如,printf("radius=%f\n",radius);語句中的“radius=”,“printf("length=%7.2f,area=%7.2f\n",length,area);”語句中的“l(fā)ength=”、“area=”等都是普通字符。

2.輸出項(xiàng)表輸出項(xiàng)表是可選的。如果要輸出的數(shù)據(jù)不止1個(gè),相鄰2個(gè)之間用逗號分開。下面的printf()函數(shù)都是合法的:(1)printf("Iamastudent.\n");

(2)printf("%d",3+2);

(3)printf("a=%fb=%5d\n",a,a+3); 必須強(qiáng)調(diào):“格式字符串”中的格式指示符,必須與“輸出項(xiàng)表”中、輸出項(xiàng)的數(shù)據(jù)類型一致,否則會引起輸出錯誤。4

3.1.2格式指示符

輸出不同類型的數(shù)據(jù),要使用不同的類型轉(zhuǎn)換字符。

1.類型轉(zhuǎn)換字符d──以帶符號的十進(jìn)制整數(shù)形式輸出。

例:類型轉(zhuǎn)換字符d的使用。main(){intnum1=123;longnum2=123456;/*用3種不同格式,輸出int型數(shù)據(jù)num1的值*/printf("num1=%d,num1=%5d,num1=%-5d,num1=%2d\n",num1,num1,num1,num1);/*用3種不同格式,輸出long型數(shù)據(jù)num2的值*/printf("num2=%ld,num2=%8ld,num2=%5ld\n",num2,num2,num2);printf("num1=%ld\n",num1);} 5程序運(yùn)行結(jié)果如下:num1=123,num1=□□123,num1=123□□,num1=123num2=123456,num2=□□123456,num2=123456num1=16908411 對于整數(shù),還可用八進(jìn)制、無符號形式(%o(小寫字母o))和十六進(jìn)制、無符號形式(%x)輸出。對于unsigned型數(shù)據(jù),也可用%u格式符,以十進(jìn)制、無符號形式輸出。所謂無符號形式是指,不論正數(shù)還是負(fù)數(shù),系統(tǒng)一律當(dāng)作無符號整數(shù)來輸出。例如,printf("%d,%o,%x\n",-1,-1,-1);6

2.類型轉(zhuǎn)換字符f──以小數(shù)形式、按系統(tǒng)默認(rèn)的寬度,輸出單精度和雙精度實(shí)數(shù)。例:類型轉(zhuǎn)換字符f的使用。main(){floatf=123.456;doubled1,d2;d1=1111111111111.111111111;d2=2222222222222.222222222;printf("%f,%12f,%12.2f,%-12.2f,%.2f\n",f,f,f,f,f);printf("d1+d2=%f\n",d1+d2);} 程序運(yùn)行結(jié)果如下:

123.456001,□□123.456001,□□□□□□123.46,123.46□□□□□□,123.46d1+d2=3333333333333.333010 7本案例程序的輸出結(jié)果中,數(shù)據(jù)123.456001和3333333333333.333010中的001和010都是無意義的,因?yàn)樗鼈兂隽擞行?shù)字的范圍。

對于實(shí)數(shù),也可使用格式符%e,以標(biāo)準(zhǔn)指數(shù)形式輸出:尾數(shù)中的整數(shù)部分大于等于1、小于10,小數(shù)點(diǎn)占一位,尾數(shù)中的小數(shù)部分占5位;指數(shù)部分占4位(如e-03),其中e占一位,指數(shù)符號占一位,指數(shù)占2位,共計(jì)11位。也可使用格式符%g,讓系統(tǒng)根據(jù)數(shù)值的大小,自動選擇%f或%e格式、且不輸出無意義的零。83.類型轉(zhuǎn)換字符c──輸出一個(gè)字符(只占一列寬度)。例:類型轉(zhuǎn)換字符c的使用。

main(){charc='A';

inti=65;

printf("c=%c,%5c,%d\n",c,c,c);

printf("i=%d,%c",i,i);}程序運(yùn)行結(jié)果如下:

c=A,□□□□A,65i=65,A

需要強(qiáng)調(diào)的是:在C語言中,整數(shù)可以用字符形式輸出,字符數(shù)據(jù)也可以用整數(shù)形式輸出。將整數(shù)用字符形式輸出時(shí),系統(tǒng)首先求該數(shù)與256的余數(shù),然后將余數(shù)作為ASCII碼,轉(zhuǎn)換成相應(yīng)的字符輸出。94.類型轉(zhuǎn)換字符s──輸出一個(gè)字符串。例:類型轉(zhuǎn)換字符s的使用。main(){printf("%s,%5s,%-10s","Internet","Internet","Internet");printf("%10.5s,%-10.5s,%4.5s\n","Internet","Internet","Internet");} 程序運(yùn)行結(jié)果如下:Internet,Internet,Internet□□,□□□□□Inter,Inter□□□□□,Inter注意:系統(tǒng)輸出字符和字符串時(shí),不輸出單引號和雙引號。10

3.1.3使用說明(1)printf()可以輸出常量、變量和表達(dá)式的值。但格式控制中的格式說明符,必須按從左到右的順序,與輸出項(xiàng)表中的每個(gè)數(shù)據(jù)一一對應(yīng),否則出錯。

例如,printf("str=%s,f=%d,i=%f\n","Internet",1.0/2.0,3+5,"CHINA");是錯誤的。(2)格式字符x、e、g可以用小寫字母,也可以用大寫字母。使用大寫字母時(shí),輸出數(shù)據(jù)中包含的字母也大寫。除了x、e、g格式字符外,其它格式字符必須用小寫字母。例如,%f不能寫成%F。(3)格式字符緊跟在“%”后面就作為格式字符,否則將作為普通字符使用(原樣輸出)。例如,“printf(”c=%c,f=%f\n“,c,f);”中的第一個(gè)c和f,都是普通字符。113.2格式化輸入——scanf()函數(shù)scanf()函數(shù)是用來從外部輸入設(shè)備向計(jì)算機(jī)主機(jī)輸入數(shù)據(jù)的。

3.2.1scanf()函數(shù)的一般格式

例:已知圓柱體的底半徑radius=1.5,高h(yuǎn)igh=2.0,求其體積。

main()

{floatradius=1.5,high=2.0,pi=3.14159,vol;

vol=pi*radius*radius*high;/*求體積*/

printf(“vol=%7.2f\n”,vol); /*輸出求出的體積*/

} 例:已知圓柱體的底半徑為radius,高為high,求其體積。/*功能:說明函數(shù)scanf()的格式及作用。*/12main(){floatradius,high,vol,pi=3.1415926;

printf("Pleaseinputradius&high:");

scanf("%f%f",&radius,&high); /*從鍵盤輸入兩個(gè)實(shí)數(shù)賦給變量r,h*/

vol=pi*radius*radius*high;

printf("radius=%7.2f,high=%7.2f,vol=%7.2f\n",radius,high,vol);} 程序運(yùn)行結(jié)果如下:

Pleaseinputradius&high:1.5□2.0↙radius=□□□1.50,high=□□□2.00,vol=□□14.1413在程序中給計(jì)算機(jī)提供數(shù)據(jù),可以用賦值語句,也可以用輸入函數(shù)。在C語言中,可使用scanf()函數(shù),通過鍵盤輸入,給計(jì)算機(jī)同時(shí)提供多個(gè)、任意的數(shù)據(jù)。1.scanf()函數(shù)的一般格式scanf("格式字符串",輸入項(xiàng)首地址表);(1)格式字符串。格式字符串可以包含3種類型的字符:格式指示符、空白字符(空格、Tab鍵和回車鍵)和非空白字符(又稱普通字符)。格式指示符與printf()函數(shù)的相似,空白字符作為相鄰2個(gè)輸入數(shù)據(jù)的缺省分隔符,非空白字符在輸入有效數(shù)據(jù)時(shí),必須原樣一起輸入。14(2)輸入項(xiàng)首地址表──由若干個(gè)輸入項(xiàng)首地址組成,相鄰2個(gè)輸入項(xiàng)首地址之間,用逗號分開。輸入項(xiàng)首地址表中的地址,可以是變量的首地址,也可以是字符數(shù)組名或指針變量。變量首地址的表示方法:&變量名其中“&”是地址運(yùn)算符。例如,[案例3.7]中的“&radius”是指變量radius在內(nèi)存中的首地址。

2.scanf()函數(shù)的功能:從鍵盤上接收格式化輸入。如:從鍵盤上輸入2個(gè)實(shí)數(shù),分別存入&radius、&high起始的存儲單元中,即輸入兩個(gè)實(shí)數(shù)分別賦給radius和high。15

3.2.2格式指示符格式指示符的一般形式為:%[*][寬度][F|N][h|l]類型字符

1.類型字符

類型字符如書上表所示。例如:scanf()函數(shù)語句中,格式字符串“%f%f”。

2.寬度n

指定該項(xiàng)輸入數(shù)據(jù)所占列數(shù)為n。換句話說,讀取輸入數(shù)據(jù)中相應(yīng)的n位,但按需要的位數(shù)賦給相應(yīng)的變量,多余部分被舍棄。例如,scanf("%3c%3c",&ch1,&ch2);printf("ch1=%c,ch2=%c\n",ch1,ch2);

假設(shè)輸入“abcdefg”,則系統(tǒng)將讀取的“abc”中的“a”賦給變量ch1;將讀取的“def”中的“d”賦給變量ch2,所以printf()函數(shù)的輸出結(jié)果為:ch1=a,ch2=d。16

3.賦值抑制字符*表示本輸入項(xiàng)對應(yīng)的數(shù)據(jù)讀入后,不賦給相應(yīng)的變量(該變量由下一個(gè)格式指示符輸入)。

例如,scanf("%2d%*2d%3d",&num1,&num2);printf("num1=%d,num2=%d\n",num1,num2);

假設(shè)輸入“123456789”,則系統(tǒng)將讀取“12”并賦值給num1;讀取“34”、但舍棄掉(“*”的作用);讀取“567”并賦值給num2。所以,printf()函數(shù)的輸出結(jié)果為:num1=12,num2=567。

4.類型修飾符──F、N、h、l。其含義與printf()中的一樣,分別為遠(yuǎn)指針、近指針、短整型和長整型。17

3.2.3數(shù)據(jù)輸入操作

1.如果相鄰2個(gè)格式指示符之間,不指定數(shù)據(jù)分隔符(如逗號、冒號等),則相應(yīng)的2個(gè)輸入數(shù)據(jù)之間,至少用一個(gè)空格分開,或者用Tab鍵分開,或者輸入1個(gè)數(shù)據(jù)后,按回車,然后再輸入下1個(gè)數(shù)據(jù)。例如,scanf("%d%d",&num1,&num2);

假設(shè)給num1輸入12,給num2輸入36,則正確的輸入操作為:12□36↙

或者:12↙36↙

注:使用“↙”符號表示按回車鍵操作,在輸入數(shù)據(jù)操作中的作用是,通知系統(tǒng)輸入操作結(jié)束。18

2.“格式字符串”中出現(xiàn)的普通字符(包括轉(zhuǎn)義字符形式的字符),務(wù)必原樣輸入。例如,scanf("%d,%d",&num1,&num2);

假設(shè)給num1輸入12,給num2輸入36,正確的輸入操作為:12,36↙

另外,scanf()函數(shù)中、格式字符串內(nèi)的轉(zhuǎn)義字符(如\n),系統(tǒng)并不把它當(dāng)轉(zhuǎn)義字符來解釋,從而產(chǎn)生一個(gè)控制操作,而是將其視為普通字符,所以也要原樣輸入。例如:scanf("num1=%d,num2=%d\n",&num1,&num2);

假設(shè)給num1輸入12,給num2輸入36,正確的輸入操作為:

num1=12,num2=36\n↙19提高人機(jī)交互性建議:為改善人機(jī)交互性,同時(shí)簡化輸入操作,在設(shè)計(jì)輸入操作時(shí),一般先用printf()函數(shù)輸出一個(gè)提示信息,再用scanf()函數(shù)進(jìn)行數(shù)據(jù)輸入。例如,將scanf("num1=%d,num2=%d\n",&num1,&num2);改為:

printf("num1=");scanf("%d",&num1);printf("num2=");scanf("%d",&num2);3.輸入數(shù)據(jù)時(shí),遇到以下情況,系統(tǒng)認(rèn)為該數(shù)據(jù)結(jié)束:(1)遇到空格,或者回車鍵,或者Tab鍵。(2)遇到輸入域?qū)挾冉Y(jié)束。例如“%3d”,只取3列。(3)遇到非法輸入。例如,在輸入數(shù)值數(shù)據(jù)時(shí),遇到字母等非數(shù)值符號(數(shù)值符號僅由數(shù)字字符0-9、小數(shù)點(diǎn)和正負(fù)號構(gòu)成)。20

4.使用格式說明符“%c”輸入單個(gè)字符時(shí),空格和轉(zhuǎn)義字符均作為有效字符被輸入。例如,scanf("%c%c%c",&ch1,&ch2,&ch3);printf("ch1=%c,ch2=%c,ch3=%c\n",ch1,ch2,ch3);

假設(shè)輸入:A□B□C↙,則系統(tǒng)將字母'A'賦值給ch1,空格'□'賦值給ch2,字母'B'賦值給ch3。

213.3單個(gè)字符輸入輸出——getchar()和putchar()函數(shù)3.3.1單個(gè)字符的輸出──putchar()函數(shù)例:

putchar()函數(shù)的格式和使用方法。/*功能:說明putchar()函數(shù)的格式和使用方法。*/#include"stdio.h" /*編譯預(yù)處理命令:文件包含*/main(){charch1='N',ch2='E',ch3='W';putchar(ch1);putchar(ch2);putchar(ch3); /*輸出*/

putchar('\n');putchar(ch1);putchar('\n'); /*輸出ch1的值,并換行*/

putchar('E');putchar('\n'); /*輸出字符'E',并換行*/putchar(ch3);putchar('\n');} 22程序運(yùn)行結(jié)果如下:

NEWNEW

1.putchar()函數(shù)的格式:

putchar(ch);

其中ch可以是一個(gè)字符變量或常量,也可以是一個(gè)轉(zhuǎn)義字符。

2.putchar()函數(shù)的作用:向終端輸出一個(gè)字符。(1)putchar()函數(shù)只能用于單個(gè)字符的輸出,且一次只能輸出一個(gè)字符。另外,從功能角度來看,printf()函數(shù)可以完全代替putchar()函數(shù)。(2)在程序中使用putchar()函數(shù),務(wù)必牢記:在程序(或文件)的開頭加上編譯預(yù)處理命令(也稱包含命令),即:

#include"stdio.h"

表示要使用的函數(shù),包含在標(biāo)準(zhǔn)輸入輸出(stdio)頭文件(.h)中。233.3.2單個(gè)字符的輸入──getchar()函數(shù)例:說明getchar()函數(shù)的格式和作用。/*功能:說明getchar()函數(shù)的格式和作用。*/#include"stdio.h" /*文件包含*/main(){charch;

printf("Pleaseinputtwocharacter:");

ch=getchar(); /*輸入1個(gè)字符并賦給ch*/

putchar(ch);putchar('\n');

putchar(getchar()); /*輸入一個(gè)字符并輸出*/

putchar('\n');} 24程序運(yùn)行情況如下:

Pleaseinputtwocharacters:ab↙ab

1.getchar()函數(shù)的格式:getchar();2.getchar()函數(shù)的作用:從系統(tǒng)隱含的輸入設(shè)備(如鍵盤)輸入一個(gè)字符。另外,從功能角度來看,scanf()函數(shù)可以完全代替getchar()函數(shù)。(1)getchar()函數(shù)只能用于單個(gè)字符的輸入,一次輸入一個(gè)字符。(2)程序中要使用getchar()函數(shù),必須在程序(或文件)的開頭加上編譯預(yù)處理命令:

#include"stdio.h“253.4順序結(jié)構(gòu)程序設(shè)計(jì)

在順序結(jié)構(gòu)程序中,各語句(或命令)是按照位置的先后次序,順序執(zhí)行的,且每個(gè)語句都會被執(zhí)行到。

例:輸入任意三個(gè)整數(shù),求它們的和及平均值。

求三個(gè)整數(shù)的和及平均值。*/

main()

{intnum1,num2,num3,sum;

floataver;

printf("Pleaseinputthreenumbers:");

scanf("%d,%d,%d",&num1,&num2,&num3);/*輸入三個(gè)整數(shù)*/

sum=num1+num2+num3; /*求累計(jì)和*/

aver=sum/3.0; /*求平均值*/

printf("num1=%d,num2=%d,num3=%d\n",num1,num2,num3);

printf("sum=%d,aver=%7.2f\n",sum,aver)

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論