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