第03講順序結(jié)構(gòu)程序設(shè)計_第1頁
第03講順序結(jié)構(gòu)程序設(shè)計_第2頁
第03講順序結(jié)構(gòu)程序設(shè)計_第3頁
第03講順序結(jié)構(gòu)程序設(shè)計_第4頁
第03講順序結(jié)構(gòu)程序設(shè)計_第5頁
已閱讀5頁,還剩41頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第3章順序結(jié)構(gòu)程序設(shè)計為了讓計算機(jī)處理各種數(shù)據(jù),首先就應(yīng)該把源數(shù)據(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單個字符輸入輸出——getchar()和putchar()函數(shù)3.4順序結(jié)構(gòu)程序設(shè)計[Return]3.1格式化輸出——printf()函數(shù)

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

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

[案例3.1]已知圓半徑radius=1.5,求圓周長和圓面積。

/*案例代碼文件名:AL3_1.C。*/

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);/*輸出圓周長、面積*/

}

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

radius=1.500000length=9.42,area=7.07

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

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所示。

(2)轉(zhuǎn)義字符

例如,[案例3.1]中printf()函數(shù)中的'\n'就是轉(zhuǎn)義字符,輸出時產(chǎn)生一個“換行”操作。

(3)普通字符除格式指示符和轉(zhuǎn)義字符之外的其它字符。格式字符串中的普通字符,原樣輸出。

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

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

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

(3)printf("a=%fb=%5d\n",a,b); 必須強(qiáng)調(diào):(1)“格式字符串”中的格式指示符,必須與“輸出項表”中、輸出項的數(shù)據(jù)類型一致,否則會引起輸出錯誤。(2)如果格式說明的個數(shù)少于輸出項的個數(shù),多余的輸出項不予輸出。如果格式說明的個數(shù)多于輸出項的個數(shù),多余的格式項輸出不定值或0。

3.1.2格式指示符

輸出不同類型的數(shù)據(jù),要使用不同的類型轉(zhuǎn)換字符。1.類型轉(zhuǎn)換字符d──以帶符號的十進(jìn)制整數(shù)形式輸出。[案例3.2]類型轉(zhuǎn)換字符d的使用。/*案例代碼文件名:AL3_2.C。*/main(){intnum1=123;longnum2=123456;/*用4種不同格式輸出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);} 程序運(yùn)行結(jié)果如下:num1=123,num1=□□123,num1=123□□,num1=123num2=123456,num2=□□123456,num2=123456num1=123 對于整數(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);

2.類型轉(zhuǎn)換字符f──以小數(shù)形式、按系統(tǒng)默認(rèn)的寬度,輸出單精度和雙精度實(shí)數(shù)。[案例3.3]類型轉(zhuǎn)換字符f的使用。/*案例代碼文件名:AL3_3.C。*/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

(%lfdouble型輸入格式)3.類型轉(zhuǎn)換字符c──輸出一個字符(只占一列寬度)。[案例3.4]類型轉(zhuǎn)換字符c的使用。/*案例代碼文件名:AL3_4.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ù)用字符形式輸出時,系統(tǒng)首先求該數(shù)與256的余數(shù),然后將余數(shù)作為ASCII碼,轉(zhuǎn)換成相應(yīng)的字符輸出。4.類型轉(zhuǎn)換字符s──輸出一個字符串。[案例3.5]類型轉(zhuǎn)換字符s的使用。/*案例代碼文件名:AL3_5.C。*/

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)輸出字符和字符串時,不輸出單引號和雙引號。3.1.3使用說明

(1)printf()可以輸出常量、變量和表達(dá)式的值。但格式控制中的格式說明符,必須按從左到右的順序,與輸出項表中的每個數(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ù)據(jù)中包含的字母也大寫。除了x、e、g格式字符外,其它格式字符必須用小寫字母。例如,%f不能寫成%F。(3)格式字符緊跟在“%”后面就作為格式字符,否則將作為普通字符使用(原樣輸出)。例如,“printf(”c=%c,f=%f\n“,c,f);”中的第一個c和f,都是普通字符。

[Return]3.2格式化輸入——scanf()函數(shù)scanf()函數(shù)是用來從外部輸入設(shè)備向計算機(jī)主機(jī)輸入數(shù)據(jù)的。

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

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

/*案例代碼文件名:AL3_6.C。*/

main()

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

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

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

}

[案例3.7]已知圓柱體的底半徑為radius,高為high,求其體積。/*案例代碼文件名:AL3_7.C。*//*功能:說明函數(shù)scanf()的格式及作用。*/main(){floatradius,high,vol,pi=3.1415926;

printf("Pleaseinputradius&high:");

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

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.14

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

2.scanf()函數(shù)的功能:從鍵盤上接收格式化輸入。運(yùn)行[案例3.7]的程序時,從鍵盤上輸入2個實(shí)數(shù),分別存入&radius、&high起始的存儲單元中,即輸入兩個實(shí)數(shù)分別賦給radius和high。

3.2.2

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

1.類型字符類型字符如表4.3所示。例如,在[案例3.7]的scanf()函數(shù)語句中,格式字符串“%f%f”。

2.寬度n

指定該項輸入數(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。3.賦值抑制字符*表示本輸入項對應(yīng)的數(shù)據(jù)讀入后,不賦給相應(yīng)的變量(該變量由下一個格式指示符輸入)。例如,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。3.2.3數(shù)據(jù)輸入操作1.如果相鄰2個格式指示符之間,不指定數(shù)據(jù)分隔符(如逗號、冒號等),則相應(yīng)的2個輸入數(shù)據(jù)之間,至少用一個空格分開,或者用Tab鍵分開,或者輸入1個數(shù)據(jù)后,按回車,然后再輸入下1個數(shù)據(jù)。例如,scanf("%d%d",&num1,&num2);

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

或者:12↙36↙

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

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)生一個控制操作,而是將其視為普通字符,所以也要原樣輸入。例如:scanf("num1=%d,num2=%d\n",&num1,&num2);

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

num1=12,num2=36\n↙提高人機(jī)交互性建議:為改善人機(jī)交互性,同時簡化輸入操作,在設(shè)計輸入操作時,一般先用printf()函數(shù)輸出一個提示信息,再用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ù)時,遇到以下情況,系統(tǒng)認(rèn)為該數(shù)據(jù)結(jié)束:(1)遇到空格,或者回車鍵,或者Tab鍵。(2)遇到輸入域?qū)挾冉Y(jié)束。例如“%3d”,只取3列。(3)遇到非法輸入。例如,在輸入數(shù)值數(shù)據(jù)時,遇到字母等非數(shù)值符號(數(shù)值符號僅由數(shù)字字符0-9、小數(shù)點(diǎn)和正負(fù)號構(gòu)成)。4.使用格式說明符“%c”輸入單個字符時,空格和轉(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。

3.3單個字符輸入輸出getchar()和putchar()3.3.1單個字符的輸出──putchar()函數(shù)[案例3.8]putchar()函數(shù)的格式和使用方法。/*案例代碼文件名:AL3_8.C*//*功能:說明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');}

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

NEWNEW

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

#include"stdio.h"

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

printf("Pleaseinputtwocharacter:");

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

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

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

putchar('\n');}

程序運(yùn)行情況如下:

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

#include"stdio.h“

[Return]3.4順序結(jié)構(gòu)程序設(shè)計

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

[案例3.10]輸入任意三個整數(shù),求它們的和及平均值。

/*案例代碼文件名:AL3_10.C*/

/*功能:設(shè)計一個順序結(jié)構(gòu)程序,求三個整數(shù)的和及平均值。*/

main()

{intnum1,num2,num3,sum;

floataver;

printf("Pleaseinputthreenumbers:");

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

sum=num1+num2+num3;/*求累計和*/

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

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

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

}

思考題:能否將“aver=sum/3.0;”中“3.0”改為“3”?[案例3.11]求方程ax2+bx+c=0的實(shí)數(shù)根。a,b,c由鍵盤輸入,a≠0且b2-4ac>0。/*案例代碼文件名:AL3_11.C。*//*功能:設(shè)計一個順序結(jié)構(gòu)程序,求方程的根。*/#include"math.h" /*為使用求平方根函數(shù)sqrt(),包含math.h頭文件*/main(){floata,b,c,disc,x1,x2;

printf("Inputa,b,c:");

scanf("%f,%f,%f",&a,&b,&c); /*輸入方程的三個系數(shù)的值*/

disc=b*b-4*a*c; /*求判別式的值賦給disc*/x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);printf("\nx1=%6.2f\nx2=%6.2f\n",x1,x2);}

[案例3.12]從鍵盤輸入一個小寫字母,要求用大寫字母形式輸出該字母及對應(yīng)的ASCII碼值。/*案例代碼文件名:AL3_12.C。*/#include"stdio.h"main(){charc1,c2;

printf("Inputalowercaseletter:");c1=getchar();putchar(c1);printf(",%d\n",c1);c2=c1-32; /*將大寫字母轉(zhuǎn)換成對應(yīng)的小寫字母*/printf("%c,%d\n",c2,c2);}

程序運(yùn)行情況如下:

Inputalowercaseletter:a↙a,97A,65

在順序結(jié)構(gòu)程序中,一般包括以下幾個部分:

1.程序開頭的編譯預(yù)處理命令。在程序中要使用標(biāo)準(zhǔn)函數(shù)(又稱庫函數(shù)),除printf()和scanf()外,其它的都必須使用編譯預(yù)處理命令,將相應(yīng)的頭文件包含進(jìn)來。。

2.順序結(jié)構(gòu)程序的函數(shù)體中,是完成具體功能的各個語句和運(yùn)算,主要包括:

(1)變量類型的說明。(2)提供數(shù)據(jù)語句。(3)運(yùn)算部分。(4)輸出部分。

[Return]1、有以下程序:main(){charc1,c2;inta1,a2;scanf("%d%c%d%c",&a1,&c1,&a2,&c2);printf("%d,%c,%d,%c\n",a1,c1,a2,c2);

}要求變量a1、a2賦值為10和20,c1、c2賦值為字符X和Y,選擇正確的輸入方式:10X20Y<回車>B)10X20Y<回車>C)10X<回車>D)10X<回車>

20Y<回車>20Y<回車>

E)10X20Y<回車>

F)10X20Y<回車>

2、設(shè)有定義:inta;floatb;執(zhí)行scanf(“%2d%f”,&a,&b);語句時,若輸入876543.0<回車>,a和b的值分別是876和543.000000B)87和6.000000C)87和543.000000D)76和543.0000003、執(zhí)行以下程序時輸入1234567,則輸出結(jié)果是

1234

#include<stdio.h>main(){inta=1,b;

scanf("%2d%2d",&a,&b);

printf("%d%d\n",a,b);}4、有以下程序段

char

ch;intk;

ch='a';k=12;

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

已知字符a的ASCII十進(jìn)制代碼為97,則執(zhí)行上述程序段后輸出的結(jié)果是

A)因變量類型與格式描述符的類型不匹配輸出無定值

B)輸出項與格式描述符個數(shù)不符,輸出為零值或不定值

C)a,97,12k=12

D)a,97,k=12

2007.92008.42008-91.若變量已正確定義為int型,要通過語句scanf("%d,%d,%d",&a,&b,&c);給a賦值1、給b賦值2、給c賦值3,以下輸入形式中錯誤的是(μ代表一個空格符)A)μμμ1

溫馨提示

  • 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

提交評論