摘 要:輸入輸出是C語(yǔ)言程序設(shè)計(jì)課程教學(xué)的重要內(nèi)容,重點(diǎn)是printf函數(shù)和scanf函數(shù)的學(xué)習(xí)與應(yīng)用。本文簡(jiǎn)述了在教學(xué)實(shí)踐中如何講解C語(yǔ)言輸入輸出知識(shí)的經(jīng)驗(yàn)和方法,并且解答了學(xué)生在編程實(shí)踐中遇到的常見問(wèn)題。
關(guān)鍵詞:C語(yǔ)言;教學(xué);輸入;輸出
一、引言
在編寫程序時(shí)經(jīng)常需要從鍵盤輸入數(shù)據(jù),或者將程序的運(yùn)行結(jié)果顯示在屏幕上,那么如何完成這一類的功能呢?這里要和學(xué)生講清楚,C語(yǔ)言本身并不提供專用的輸入/輸出語(yǔ)句,其輸入/輸出功能是由標(biāo)準(zhǔn)輸入/輸出庫(kù)函數(shù)實(shí)現(xiàn)的,相應(yīng)的頭文件是stdio.h。這樣做的好處顯而易見,大大降低了學(xué)習(xí)輸入輸出知識(shí)的難度,只需要學(xué)生掌握幾個(gè)專用庫(kù)函數(shù)的用法即可。
在講解C語(yǔ)言輸入輸出庫(kù)函數(shù)時(shí),可以先簡(jiǎn)單介紹一下putchar函數(shù)和getchar函數(shù),這兩個(gè)庫(kù)函數(shù)是專門用于單個(gè)字符數(shù)據(jù)的輸入和輸出的。putchar函數(shù)是字符輸出庫(kù)函數(shù),其功能是在屏幕上輸出一個(gè)字符,給學(xué)生講解以下這個(gè)案例即可。
char c='A';
putchar('A'); /*輸出大寫字母A*/
putchar(c); /*輸出字符變量c的值,即大寫字母A*/
getchar函數(shù)是字符輸入庫(kù)函數(shù)。其功能是從鍵盤上輸入一個(gè)字符,并以回車鍵確認(rèn),給學(xué)生講解以下這個(gè)案例即可。
char c;
c=getchar(); /*從鍵盤輸入一個(gè)字符*/
putchar函數(shù)和getchar函數(shù)的功能很有限,一次只能輸入或輸出一個(gè)字符。格式化輸入輸出函數(shù)一次能夠輸入或輸出多個(gè)不同類型的數(shù)據(jù),而且可以規(guī)定格式。其中printf函數(shù)用來(lái)向標(biāo)準(zhǔn)輸出設(shè)備(顯示器)輸出數(shù)據(jù),scanf函數(shù)則用來(lái)從標(biāo)準(zhǔn)輸入設(shè)備(鍵盤)輸入數(shù)據(jù),這也是C語(yǔ)言輸入輸出知識(shí)教學(xué)的重點(diǎn)。
二、printf
printf函數(shù)是格式輸出庫(kù)函數(shù),其一般形式為:printf(格式控制字符串,輸出項(xiàng)列表);例如:
int a=3,b=5;
printf("a=%d,b=%d\n",a,b);
輸出結(jié)果是:
a=3,b=5
printf函數(shù)的參數(shù)分為格式控制字符串和輸出項(xiàng)列表兩類。格式控制字符串是函數(shù)的第一個(gè)參數(shù),調(diào)用時(shí)不能省略。其中包括普通字符和格式字符,用來(lái)輸出一些提示信息,以及控制輸出項(xiàng)列表的輸出格式。普通字符按原樣輸出,格式字符由%和格式說(shuō)明字符組成,用于說(shuō)明對(duì)應(yīng)輸出項(xiàng)的輸出格式。在講課時(shí)應(yīng)先讓學(xué)生熟練掌握幾種基本類型數(shù)據(jù)的格式符,例如%d對(duì)應(yīng)十進(jìn)制整數(shù),%f對(duì)應(yīng)浮點(diǎn)數(shù),%c對(duì)應(yīng)字符,%s則對(duì)應(yīng)字符串。
輸出項(xiàng)列表列出需要輸出的數(shù)據(jù)項(xiàng),它們可以是變量、常量、表達(dá)式和函數(shù)調(diào)用等等,各個(gè)輸出項(xiàng)之間用逗號(hào)隔開。輸出項(xiàng)的數(shù)目可以是多個(gè),甚至也可以是0,這取決于程序員編程時(shí)的實(shí)際需要。例如:
int i=97;
char c='A';
printf("i=%d,c=%c",i,c);
程序運(yùn)行結(jié)果為:
i=97,c=A
"i=%d,c=%c"是格式控制字符串,其中“i=”和“,c=”的內(nèi)容都是普通字符,因此按原樣輸出。%d和%c是格式字符,表示在相應(yīng)位置將輸出項(xiàng)列表中的第一個(gè)數(shù)據(jù)項(xiàng)(即i)以十進(jìn)制整數(shù)的形式輸出,將第二個(gè)數(shù)據(jù)項(xiàng)(即c)以字符的形式輸出。講課時(shí)應(yīng)對(duì)學(xué)生強(qiáng)調(diào),格式字符和輸出項(xiàng)列表中的數(shù)據(jù)項(xiàng)在數(shù)量和類型上都應(yīng)該保持一致。至于類似于%5.2f這樣的細(xì)節(jié)知識(shí),教師可以在適當(dāng)時(shí)機(jī)和學(xué)生提一下,它表示以五位浮點(diǎn)數(shù)的格式輸出,并帶兩位小數(shù)。
三、scanf
scanf是格式輸入庫(kù)函數(shù),其一般形式為:scanf(格式控制字符串,地址列表);scanf函數(shù)的形式與printf函數(shù)有很多相似的地方,講課時(shí)會(huì)相對(duì)輕松一些,重點(diǎn)是讓學(xué)生注意兩個(gè)庫(kù)函數(shù)之間的聯(lián)系與區(qū)別。scanf的參數(shù)也由兩部分組成,分別是格式控制字符串和地址列表。格式控制字符串用來(lái)控制輸入數(shù)據(jù)的格式,它包括格式字符和普通字符。scanf函數(shù)的格式字符與printf函數(shù)相似,但是也有一些不同之處。例如雙精度型數(shù)據(jù)專門用%lf描述,舉例如下:
int i;
float f;
long l;
double d;
scanf("%d%f%ld%lf",&i,&f,&l,&d);/*l是長(zhǎng)整型,使用%ld;d是雙精度型,使用%lf*/
格式字符應(yīng)與存放數(shù)據(jù)的變量在類型上嚴(yán)格保持一致,否則scanf函數(shù)將停止處理,變量就無(wú)法得到正確的數(shù)值。寬度指示符成為輸入截取符,用來(lái)按指定的寬度截取輸入的數(shù)據(jù)。例如:
scanf("%2d%4d%f",&x,&y,&z);/*從鍵盤輸入x,y,z的值*/
如果程序運(yùn)行時(shí)輸入:10200 9.3<回車>,則將10賦給x,200賦給y,9.3賦給z。其中%2d控制第一個(gè)數(shù)據(jù)只取兩個(gè)字符,將前面的10轉(zhuǎn)換成整數(shù)賦給x;%4d控制第二個(gè)數(shù)據(jù)只取4個(gè)字符,但是截取了200之后,接下來(lái)的第4個(gè)字符是空格,因此將200賦給y。
格式控制字符串中的普通字符實(shí)際上是數(shù)據(jù)分隔符,以分隔多個(gè)數(shù)據(jù),默認(rèn)數(shù)據(jù)分隔符是空格。從鍵盤輸入時(shí),不僅要原封不動(dòng)地輸入這些字符,而且它們的位置也不能改變。例如:scanf("a=%d,b=%d",&a,&b);在程序運(yùn)行時(shí),應(yīng)該按照如下的方式輸入:
a=12,b=34<回車>
否則變量a和b就不能得到正確的數(shù)值。講課時(shí)應(yīng)建議學(xué)生在使用scanf函數(shù)時(shí),盡量將格式控制字符串寫得簡(jiǎn)單明了,以方便數(shù)據(jù)的輸入。
四、結(jié)語(yǔ)
scanf函數(shù)和printf函數(shù)是C語(yǔ)言輸入輸出知識(shí)教學(xué)的重點(diǎn),教學(xué)時(shí)應(yīng)讓學(xué)生切實(shí)理解函數(shù)參數(shù)的意義,掌握格式控制字符串的書寫方法,并在編程實(shí)踐中熟練運(yùn)用。
參考文獻(xiàn):
[1] 王曉東. C程序設(shè)計(jì)簡(jiǎn)明教程(第二版)[M].北京:中國(guó)水利水電出版社, 2008.