版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第3章C程序基本結(jié)構(gòu)
本章知識要點(diǎn)
C語言程序的流程控制及簡單程序設(shè)計標(biāo)準(zhǔn)庫函數(shù)的分類及使用常用數(shù)學(xué)函數(shù)以及標(biāo)準(zhǔn)的輸入輸出函數(shù)使用隨機(jī)函數(shù)rand()和srand()3.1簡單程序設(shè)計
3.1.1流程控制概述流程控制是指程序中語句執(zhí)行的順序,在1960年末,理論上已經(jīng)證明了任何復(fù)雜的算法都可以由順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)三種基本的流程控制結(jié)構(gòu)組成。對于所有的程序而言,流程控制其實(shí)都是順序結(jié)構(gòu),也就是說程序語句總體來看就是一條接著一條按照其在程序中的位置順序執(zhí)行的。C語言提供了多種語句來實(shí)現(xiàn)程序結(jié)構(gòu),程序的執(zhí)行部分是由語句組成,功能也是由執(zhí)行語句實(shí)現(xiàn)。C語句可分為:表達(dá)式語句、函數(shù)調(diào)用語句、控制語句、復(fù)合語句、空語句與類.介紹這些基本語句及其在順序結(jié)構(gòu)中的應(yīng)用,可以使讀者對C程序有一個初步的認(rèn)識,為以后的學(xué)習(xí)打下基礎(chǔ)(1)表達(dá)式語句:表達(dá)式語句由表達(dá)式加上分號“;”組成,運(yùn)行結(jié)果可以得到表達(dá)式的值。其一般形式為:表達(dá)式;例如:x=y+z;賦值語句;i++;自增1語句,i值增1(2)函數(shù)調(diào)用語句:由函數(shù)名、實(shí)際參數(shù)加上分號“;”組成。其一般形式為:函數(shù)名(實(shí)際參數(shù)表);函數(shù)語句的執(zhí)行就可以調(diào)用函數(shù)體并把實(shí)際參數(shù)賦予函數(shù)定義中的形式參數(shù),然后執(zhí)行被調(diào)函數(shù)體中的語句(在后面函數(shù)中再詳細(xì)介紹)。例如:printf("thisisaCProgram");調(diào)用庫函數(shù),輸出字符串。(3)控制語句:控制語句用于控制程序的流程,C語言由特定的語句定義符定義9種控制語句??梢詫?shí)現(xiàn)程序的各種結(jié)構(gòu)方式。它們可分成3類:條件判斷語句:if語句、switch語句。循環(huán)執(zhí)行語句:do…while語句、while語句、for語句。轉(zhuǎn)向語句:break語句、goto語句、continue語句、return語句。(4)復(fù)合語句:把一組語句用括號{}括起來組成的一個語句稱復(fù)合語句。在程序中把復(fù)合語句看成一個整體,相當(dāng)于是單條語句,而不是多條語句。例如:{x=y+z;a=b+c;printf("%d%d",x,a);}是一條復(fù)合語句。復(fù)合語句內(nèi)的各條語句都必須以分號“;”結(jié)尾,在右大括號“}”外不能加分號。(5)空語句:只由分號“;”組成的語句稱為空語句。其形式為;,不產(chǎn)生任何操作運(yùn)算,只作為形式上的語句。例如:while(getchar()!='\n');本語句的功能是,只要從鍵盤輸入的字符不是回車則重新輸3.1.2簡單程序設(shè)計舉例一個簡單的程序僅包含一個main()函數(shù)并且程序流程是順序結(jié)構(gòu),程序的執(zhí)行部分通常包含3種基本的語句:輸入語句、輸出語句、賦值語句,或用于計算的其他表達(dá)式語句。例3-1輸入三角形的三邊長,求三角形面積。分析:已知三角形的三邊長a,b,c,則該三角形的面積公式為:其中s=(a+b+c)/2,所以只需要輸入三個邊,就可以得到三角形的面積。#include<math.h>#include<stdio.h>intmain(){floata,b,c,s,area;scanf("%f,%f,%f",&a,&b,&c);/*輸入邊長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=%7.2f\n",a,b,c,s);printf("area=%7.2f\n",area);/*輸出三角形面積*/return0;}程序的運(yùn)行情況為:請輸入三角形邊(如3,5,6):3,4,5a=???3.00,b=???4.00,c=???5.00,s=???6.00area=???6.00例3-2將字符'C'、'h'、'i'組成的字符串Chi加密(將每位字符ASCII值加6后變成其他字符的ASCII值)后輸出并顯示。分析:利用字母的ASCII碼值可以進(jìn)行加減運(yùn)算特性,在ASCII碼運(yùn)算后再進(jìn)行輸出即可將字母進(jìn)行加密轉(zhuǎn)換。本例題是將每位字符ASCII值加6后變成其他字符的ASCII值,然后利用printf()進(jìn)行輸出。#include<stdio.h>intmain(){/*定義字符型變量,并給它們賦初值*/charc1,c2,c3,c4,c5,c6,c7;c1='C';c2='h';c3='i';/*輸出原碼*/printf("原碼是:%c%c%c\n",c1,c2,c3);/*對字符進(jìn)行譯碼運(yùn)算*/c1=c1+6;c2=c2+6;c3=c3+6;/*輸出譯碼結(jié)果*/printf("密碼是:%c%c%c\n",c1,c2,c3);return0;}運(yùn)行情況如下原碼是:Chi密碼是:Ino3.2C語言標(biāo)準(zhǔn)庫函數(shù)
C源程序是由函數(shù)組成的。雖然在前面程序中都只有一個主函數(shù)main(),但實(shí)際使用程序往往由多個函數(shù)組成。函數(shù)是C源程序的基本模塊,相當(dāng)于其他高級語言的子程序。C程序的全部工作都是由各式各樣的函數(shù)完成的,所以通常也會把C語言稱為函數(shù)式語言。C語言提供了極為豐富的庫函數(shù)(如TurboC,MircosoftC都提供了三百多個庫函數(shù)),庫函數(shù)由C編譯環(huán)境提供,用戶無須定義,只需在程序的首部使用預(yù)處理命令#include包含有該函數(shù)原型的頭文件,即可在程序中直接調(diào)用,3.2.1C標(biāo)準(zhǔn)庫函數(shù)的分類C語言豐富的庫函數(shù),從功能角度分為以下7類。(1)數(shù)學(xué)函數(shù)。此類函數(shù)主要功能是用于數(shù)學(xué)函數(shù)計算。數(shù)學(xué)函數(shù)原型在頭文件math.h,使用此類函數(shù)前,必須在程序首部將math.h頭文件包含進(jìn)來方可使用。本章3.2.2節(jié)常用數(shù)學(xué)庫函數(shù)將詳細(xì)講解該類函數(shù),在此不再贅述。(2)字符判斷和轉(zhuǎn)換函數(shù)。此類函數(shù)用于對字符按ASCII碼分類為:字母、數(shù)字、控制字符、分隔符、大小寫字母等,也可以使用字符轉(zhuǎn)換函數(shù)將參數(shù)轉(zhuǎn)換為需要的大小寫格式。所有的字符函數(shù)都包含在ctype.h頭文件中,使用字符函數(shù)前都必須在程序的首部將頭文件ctype.h包含到程序中。(3)輸入輸出函數(shù)。此類函數(shù)主要功能是用于完成數(shù)據(jù)輸入輸出功能。函數(shù)原型都在頭文件stdio.h中,使用此類函數(shù)前,必須在程序的首部將頭文件stdio.h包含到程序中。本章3.2.3節(jié)、3.2.4節(jié)將詳細(xì)講解該類函數(shù),在此不再贅述。(4)字符串函數(shù)。此類函數(shù)主要功能是用于字符串操作和處理。字符串函數(shù)原型都在頭文件string.h中,使用此類函數(shù)前,必須在程序的首部將頭文件string.h包含到程序中進(jìn)來方可使用。(5)動態(tài)存儲分配(內(nèi)存管理)函數(shù)。此類函數(shù)主要功能是用于內(nèi)存管理。內(nèi)存管理函數(shù)原型在頭文件alloc.h,使用此類函數(shù)前,必須在程序首部將alloc.h頭文件包含進(jìn)來方可使用。后面第9章指針的高級章節(jié)將詳細(xì)講解該類函數(shù),在此不再贅述。(6)日期和時間函數(shù)。此類函數(shù)主要功能是獲得系統(tǒng)時間或?qū)Φ玫降臅r間進(jìn)行格式轉(zhuǎn)化等操作。日期和時間函數(shù)原型在頭文件time.h,使用此類函數(shù)前,必須在程序首部將time.h頭文件包含進(jìn)來方可使用。(7)其他函數(shù)。此類函數(shù)主要功能是用于其他各種功能。其他函數(shù)原型在頭文件stdlib.h,使用此類函數(shù)前,首先必須在程序頭部使用預(yù)處理命令#include<stdlib.h>將頭文件包含進(jìn)來方可使用??梢岳么祟惡瘮?shù)中的rand()函數(shù)和srand()函數(shù)來取得隨機(jī)數(shù),本章3.2.6節(jié)具體講解隨機(jī)函數(shù)使用方法。注意:在C語言程序中用預(yù)處理命令將頭文件包含到程序的形式有兩種,例如,針對頭文件stdio.h來說預(yù)處理命令的形式可以為#include<stdio.h>或#include"stdio.h",使用尖括號表示編譯時會先在系統(tǒng)的include目錄里查找,若找不到才會到源代碼所在目錄進(jìn)行搜索;使用雙引號則相反。建議對系統(tǒng)提供的頭文件使用尖括號,自己編寫的頭文件使用雙引號。3.2.2常用數(shù)學(xué)庫函數(shù)C語言提供的數(shù)學(xué)庫函數(shù)可以解決一些只用算術(shù)運(yùn)算符不能完成的問題。數(shù)學(xué)函數(shù)原型都包含在math.h頭文件中。除了簡單的數(shù)學(xué)函數(shù),程序開發(fā)常用的三角函數(shù)和對數(shù)函數(shù)如表3-1所示。表3-1常用三角函數(shù)、對數(shù)數(shù)學(xué)庫函數(shù)函數(shù)名函數(shù)和形參類型功能返回值說明sindoublesin(x)doublex;計算sinx的值計算結(jié)果x的單位為孤度cosdoublecos(x)doublex;計算cos(x)的值計算結(jié)果x的單位為孤度expdoubleexp(x)doublex;求ex的值計算結(jié)果logdoublelog(x)doublex;求logex,即lnx計算結(jié)果x>0log10doublelog10(x)doublex;求log10x計算結(jié)果x>0powdoublepow(x,y)doublex,doubley計算xy的值計算結(jié)果pow10doublepow10(x)intx計算10x的值計算結(jié)果例3-5打印出三角函數(shù)和對數(shù)函數(shù)的結(jié)果。
#include<math.h>#include<stdio.h>intmain(){printf("三角函數(shù):\n");printf("三角函數(shù)cosineof1is%.3f\n",cos(1));printf("三角函數(shù)sineof1is%.3f\n",sin(1));printf("三角函數(shù)tangentof1is%.3f\n",tan(1));printf("\n");printf("\n");printf("對數(shù)函數(shù):\n");printf("對數(shù)函數(shù)e的1次方is%.3f\n",exp(1));printf("2的自然對數(shù)函數(shù)is%.3f\n",log(2));printf("2的以10為底的對數(shù)函數(shù)is%.3f\n",log10(2));return0;}例3-6用pow()函數(shù)和pow10()函數(shù),分別求10的3次冪的值。#include<math.h>#include<stdio.h>intmain(){doublep=3.0;printf("pow()函數(shù)10^%lfis%lf\n",p,pow(10,p));/*pow()函數(shù)輸出10的3次方的值*/printf("pow10函數(shù)10^%lfis%lf\n",p,pow10(p));/*pow10()函數(shù)輸出10的3次方的值*/return0;}運(yùn)行結(jié)果:pow()函數(shù)10^3.000000is1000.000000pow10()函數(shù)10^3.000000is1000.0000003.2.3標(biāo)準(zhǔn)輸出函數(shù)一般C語言程序可分為:數(shù)據(jù)輸入、計算處理和輸出處理結(jié)果3部分,其中數(shù)據(jù)的輸入與輸出是程序的重要組成部分,是程序與用戶之間交互的界面如圖3-1所示運(yùn)算輸入輸出用戶其他的高級語言都提供了輸入與輸出語句,而C語言本身沒有輸入和輸出語句,為實(shí)現(xiàn)數(shù)據(jù)的輸入和輸出,其庫函數(shù)提供了一組輸入和輸出函數(shù),函數(shù)scanf()和printf()來完成數(shù)據(jù)的格式輸入和輸出操作,其作用是向默認(rèn)的輸入設(shè)備(鍵盤)和輸出設(shè)備(終端或顯示器)輸入或輸出若干個任意類型的數(shù)據(jù)。1.printf()函數(shù)的功能printf()函數(shù)稱為格式輸出函數(shù),最末一個字母f即為“格式”(format)之意,格式輸出函數(shù)printf()的一般調(diào)用形式為:printf("格式控制字符串",輸出項表列);如:printf("a=%d,b=%d\n",a,b);printf("格式控制字符串",輸出項表列);
printf()函數(shù)功能是按用戶所指定“格式控制字符串”的格式,將指定的輸出項表列數(shù)據(jù)輸出到標(biāo)準(zhǔn)輸出設(shè)備(通常為顯示器)。格式控制字符串是使用一對雙引號括起來的字符串,格式字符串用于指定后面各個輸出項的輸出格式。輸出項表列用于指定輸出內(nèi)容,它通常由一個或多個輸出項構(gòu)成,當(dāng)有多個輸出項時,輸出項之間應(yīng)使用逗號“,”分隔,輸出項可以是常數(shù)、變量或表達(dá)式。2.輸出格式輸出格式由格式控制字符串加以規(guī)定,將輸出項表列相對應(yīng)的輸出項以指定的格式進(jìn)行輸出。格式控制字符串有“格式字符”和“普通字符(包括轉(zhuǎn)義字符序列)”兩種字符組成,普通字符串在輸出時原樣輸出(或執(zhí)行),普通字符主要是在顯示中起提示作用。格式字符形式為:%[附加格式說明符]格式字符例如,%d,%10.2f等。(1)格式字符。最簡單的格式說明符是以%開頭后面跟上一個特定的字母,用來與輸出項的數(shù)據(jù)類型相匹配如:“%d”表示按十進(jìn)制整型輸出?!?ld”表示按十進(jìn)制長整型輸出?!?c”表示按字符型輸出一個字符?!?s”表示按實(shí)際寬度輸出一個字符串表3-2格式說明符格式字符功能d輸出帶符號10進(jìn)制形式整數(shù)(正數(shù)不輸出符號)o輸出無符號8進(jìn)制形式整數(shù)(不輸出前綴0)x,X輸出無符號16進(jìn)制形式整數(shù)(不輸出前綴Ox)u輸出無符號10進(jìn)制形式整數(shù)f輸出單、雙精度小數(shù)形式實(shí)數(shù)(6位小數(shù))c輸出單個字符s輸出一串字符串e,E以指數(shù)形式輸出單、雙精度實(shí)數(shù)(尾數(shù)含1位整數(shù),6位小數(shù),指數(shù)至多3位)g,G以%f或%e中輸出寬度較小的格式輸出單、雙精度實(shí)數(shù),不輸出無意義的01)整型數(shù)據(jù)格式輸出。%d:輸出十進(jìn)制基本整型數(shù)據(jù)。例如,設(shè)整型數(shù)據(jù)a=12;b=13;printf("%d,%d",a,b);%ld:輸出十進(jìn)制長整型數(shù)據(jù)。例如,longinta=1234567;printf("%ld",a);%u(或%lu):輸出無符號十進(jìn)制基本整型數(shù)據(jù)(或長整型數(shù)據(jù))。%o(或%lo):以無符號八進(jìn)制格式輸出整型數(shù)據(jù)(或長整型數(shù)據(jù))。%x(或%lx):以無符號十六進(jìn)制格式輸出整型數(shù)據(jù)(或長整型數(shù)據(jù))。②實(shí)型格式格式輸出C語言程序的浮點(diǎn)數(shù)有10進(jìn)制小數(shù)和科學(xué)計數(shù)法兩種輸出形式,對于單精度和雙精度浮點(diǎn)數(shù)來說,它們的格式說明符完全相同。%f:以10進(jìn)制小數(shù)形式輸出單精度、雙精度浮點(diǎn)數(shù)。%e:以科學(xué)計數(shù)法形式輸出單精度、雙精度浮點(diǎn)數(shù)。%g:根據(jù)浮點(diǎn)數(shù)的大小,自動選用%f或%e格式中輸出寬度較短的一種格式,且不輸出無意義的零。【例3.7】以10進(jìn)制小數(shù)形式輸出單精度、雙精度浮點(diǎn)數(shù)#include<stdio.h>intmain(){doublex=3.1415;floaty=15.725;printf("x=%f,y=%f\n",x,y);printf("x=%e,y=%e\n",x,y);printf("x=%f,x=%e,x=%g"x,x,x);return0;}程序運(yùn)行結(jié)果為x=3.141500,y=15.725000x=3.141500e+000,y=1.572500e+001x=3.141500,x=3.141500e+000,x=3.1415③字符型格式說明符%c:輸出一個字符。.charc;c=’s’;printf("%c,",c);則程序輸出結(jié)果為:s④字符串格式說明符%s:按實(shí)際寬度輸出一個字符串。printf("%s","hello);輸出結(jié)果為:hello(2)轉(zhuǎn)義字符轉(zhuǎn)義字符作為格式控制字符串中的非格式字符,由“\”和一個特定的字母組成,用于輸出某些特殊字符和不可見字符。常用的轉(zhuǎn)義字符符如表3-3所示。表3-3轉(zhuǎn)義字符轉(zhuǎn)義字符形式功能\n換行\(zhòng)t橫向跳格(即跳到下一個輸出區(qū)-占8列)\v豎向跳格\b退格(不換行)\r回車\f走紙換頁\\反斜杠字符“\”\’單引號(撤號)字符\dddl到3位8進(jìn)制數(shù)所代表的字符\xdd1到2位16進(jìn)制數(shù)所代表的字符(3)附加格式說明符在%和格式符之間的附加格式說明符,用于指定輸出時的對齊方向、輸出數(shù)據(jù)的寬度、小數(shù)部分的位數(shù)等要求,附加格式說明符可以是其中之一或多個字符的組合。常用的附加說明符如表3-4所示。表3-4附加格式說明符附加說明符意義m(m為正整數(shù))為域?qū)捗枋龇瑪?shù)據(jù)輸出寬度為m,若實(shí)際位數(shù)多于定義的寬度,則按實(shí)際位數(shù)輸出,若實(shí)際位數(shù)少于定義的寬度則補(bǔ)以空格或0.n(n為正整數(shù))為精度描述符,對實(shí)數(shù),n為輸出的小數(shù)位數(shù),若實(shí)際位數(shù)大于所定義的精度數(shù),則截去超過的部分;對于字符串,表示輸出n前各字符,。l表示整型按長整型量輸出如%ld,%lx,%lo,對實(shí)型按雙精度型量輸出如%lf,%le。h表示按短整型量輸出,如%hd,%hx,%hdo,%hu-數(shù)據(jù)左對齊輸出,右邊填空格,無-時默認(rèn)右對齊輸出+輸出符號(正號或負(fù)號)0表示數(shù)據(jù)不足最小輸出寬度時,左補(bǔ)零;空格輸出值為正時冠以空格,為負(fù)時冠以負(fù)號#對c,s,d,u類無影響;對o類,在輸出時加前綴o;對x類,在輸出時加前綴0x;對e,g,f類當(dāng)結(jié)果有小數(shù)時才給出小數(shù)點(diǎn)對于整型格式說明符其附加格式說明符一般形式為:其一般形式為:%[-]][m]整型格式說明符.-:依然表示數(shù)據(jù)輸出時左對齊;m.:m表示整個數(shù)據(jù)的輸出最小寬度。例如:設(shè)整型數(shù)據(jù)intx=18,y=-1;printf("%-5d,%4d\n",x,y);printf("%15o,%-10x\n",y,y);上面printf函數(shù)輸出結(jié)果為:18???,??-1????37777777777,ffffffff??對于浮點(diǎn)數(shù)格式說明符,其附加格式說明符一般形式為:"%[-][m.n]浮點(diǎn)格式說明符"。-:依然表示數(shù)據(jù)輸出時左對齊;m.n:m表示整個數(shù)據(jù)的輸出寬度,n表示小數(shù)部分輸出的位數(shù)?!纠?.8】以指定的格式輸出10進(jìn)制小數(shù)形式單精度浮點(diǎn)數(shù)#include<stdio.h>intmain(){ doublepi=3.1415; printf("%f,%6.2f,%.2f,%-6.2f\n",pi,pi,pi,pi);return0;}程序輸出結(jié)果為:3.141500,??3.14,3.14,3.14??對于字符型格式說明符,其附加格式說明符一般形式為:"%mc":以寬度m輸出一個字符,若m>1,則在輸出字符前面補(bǔ)m-1個空格。例如:charc;c=’s’;printf("%3c",c);輸出結(jié)果為:??s對于字符串格式說明符,其附加格式說明符一般形式為:"%[-]ms"或"%[-]m.ns"。其中%[-]ms表示輸出的字符串占m列,若字符串本身長度超過m列,則按實(shí)際寬度輸出;若字符串長度小于m列,若m前有負(fù)號“-”,字符串左對齊,右補(bǔ)空格,否則字符串右對齊,左補(bǔ)空格。%[-]m.ns表示輸出的字符串占m列,但只取字符串中左端n個字符。若m>n,若m前有負(fù)號“-”時,這n個字符左對齊,右補(bǔ)空格,當(dāng)m前沒有負(fù)號“-”時,這n個字符右對齊,左補(bǔ)空格;若m<n,則m自動取n值,以保證n個字符正常輸出?!纠?.9】以指定的格式輸出字符串。#include<stdio.h>intmain(){printf("%s,%3s,%8s,%-8s,%8.3s","hello","hello","hello","hello","hello");return0;}程序輸出結(jié)果為:hello,hello,???hello,hello???,?????hel(4)普通字符格式控制字符串”中,除了以上三項字符以外的其他字符都是普通字符,在進(jìn)行輸出時在顯示屏幕上將按原樣輸出顯示。例如:inta=7,b=8;printf("輸出a=%d,輸出b=%d\n",a,b);上述程序段中,printf函數(shù)的“格式控制字符串”中,除了兩個“%d”以外的其它字符均為普通字符,其中“輸出a=,輸出b=”是可打印字符,它們將在顯示屏幕上原樣輸出,最后一個字符’\n’是一個轉(zhuǎn)義字符,表示“換行符”,輸出時光標(biāo)將在屏幕上另起一行顯示。上述程序段的輸出結(jié)果為輸出a=7,輸出b=8
(光標(biāo)另起一行閃爍)3、函數(shù)說明在使用格式輸出函數(shù)時,需要注意以下問題。(1)整個格式控制字符串必須用雙引號括住,如果有輸出項目,則格式控制字符串與第一個輸出項之間一定要用一個逗號隔開;(2)格式控制中的各格式說明符與輸出項表列數(shù)量、順序、類型等必須一一對應(yīng),否則會產(chǎn)生意想不到的后果;(3)格式說明符除一些大寫字母具有特殊含義外,均要用小寫字母,如%d不能寫成%D;(4)數(shù)值范圍在0-255之間的整數(shù)也可以用字符形式輸出,首先將整數(shù)轉(zhuǎn)換成相應(yīng)的ASCII碼字符,然后進(jìn)行輸出。反之,也可以將一個字符型數(shù)據(jù)轉(zhuǎn)換為相應(yīng)的ASCII碼數(shù)值以整數(shù)形式輸出。intx=83;chary='s';printf("x=%d,%c\n",x,x);printf("y=%d,%c\n",y,y);程序運(yùn)行結(jié)果為:x=83,sy=83,s(5)若要輸出符號“%”,應(yīng)連用兩個“%”。例如:printf("x=%f%%",1.0/3);輸出結(jié)果為:0.333333%3.2.4標(biāo)準(zhǔn)輸入函數(shù)C語言并沒有配備專門輸入語句來實(shí)現(xiàn)輸入,所有的輸入操作都是通過函數(shù)調(diào)用實(shí)現(xiàn)的。本節(jié)介紹標(biāo)準(zhǔn)的輸入函數(shù)scanf()默認(rèn)的標(biāo)準(zhǔn)輸入設(shè)備通常為鍵盤,scanf()函數(shù)定義在頭文件“stdio.h”中來完成,因此在使用這些函數(shù)之前應(yīng)該使用預(yù)編譯命令#include<stdio.h>將庫函數(shù)包含到C程序中。1.scanf()函數(shù)的功能格式輸入函數(shù)其一般調(diào)用形式如下:scanf("格式控制字符串",參數(shù)列表);scanf("格式控制字符串",參數(shù)列表);
scanf()函數(shù)的功能就是按照指定的格式(通常是鍵盤)輸入數(shù)據(jù),并將數(shù)據(jù)存入內(nèi)存地址表所對應(yīng)的內(nèi)存單元中格式控制字符串由“%”和格式說明符組成,不同的格式說明符規(guī)定用不同的格式輸入數(shù)據(jù)給相應(yīng)的輸入項;參數(shù)列表是接收輸入數(shù)據(jù)的變量地址或字符串的首地址,而不是變量本身;列表中至少有一個輸入項,每個輸入項必須是變量名前加地址運(yùn)算符“&”表示(如&x,&y分別表示變量x,y的變量地址),這與printf函數(shù)完全不同,多個地址輸入項之間需要用逗號“,”分隔。
1.整型格式說明符格式輸入函數(shù)的整型格式說明符及其含義如表3.5所示
表3.5scanf函數(shù)的整型格式說明符整型格式符意義%d輸入10進(jìn)制基本整型數(shù)據(jù)%ld輸入10進(jìn)制長整型數(shù)據(jù)%u輸入無符號10進(jìn)制基本整型數(shù)據(jù)%lu輸入無符號10進(jìn)制長整型數(shù)據(jù)%o(%lo)輸入8進(jìn)制基本(長)整型數(shù)據(jù)%x(%lx)輸入16進(jìn)制基本(長)整型數(shù)據(jù)%hd輸入10進(jìn)制短整型數(shù)據(jù)%ho輸入8進(jìn)制短整型數(shù)據(jù)%hx輸入16進(jìn)短整型數(shù)據(jù)%m整型格式說明符按整數(shù)m指定的寬度輸入一個整型數(shù)據(jù)【例3.11】格式輸入函數(shù)scanf()輸入的整型格式數(shù)據(jù)。#include<stdio.h>intmain(){ inta,b,c; scanf("%d%d",&a,&b); c=a*a+b*b; printf("c=%d\n",c);return0;}程序運(yùn)行時按如下方式輸入a、b的值:4?5↙(輸入a、b的值)z=41(輸出z的值)利用鍵盤輸入整型數(shù)據(jù)時,當(dāng)格式說明符中沒有寬度說明時應(yīng)注意以下問題:(1)如果格式說明符之間沒有其它字符,例如上述例3.6程序的scanf函數(shù):scanf("%d%d",&a,&b);“%d”之間沒有其它字符則輸入時,數(shù)據(jù)之間用“空格”、“Tab”或“回車”來分隔;例如,上述例3.6程序在執(zhí)行scanf函數(shù)時,按下面形式輸入數(shù)據(jù)是正確的。①3?4↙②3↙4↙③3<按Tab鍵>4↙但按下面形式輸入數(shù)據(jù)都是不合法的。①3,4↙②3、4↙③3;4↙(2)如果格式說明符之間包含有其它普通字符,則輸入時,普通字符將按原樣輸入。例如,上述例3.6程序的scanf函數(shù)若改為如下形式scanf("a=%d,b=%d",&a,&b);則執(zhí)行時,應(yīng)按如下形式輸入a、b的值a=3,b=4↙
普通字符,按原樣輸入2.實(shí)型格式說明符格式輸入函數(shù)的單精度、雙精度浮點(diǎn)數(shù)(實(shí)型數(shù))的格式說明符不相同,這與格式輸出函數(shù)printf略有差別。表3.6scanf函數(shù)的實(shí)型格式說明符實(shí)型格式符意義%f、%e用于輸入單精度實(shí)型數(shù)據(jù)%lf、%le用于輸入雙精度實(shí)型數(shù)據(jù)注意:實(shí)型數(shù)據(jù)輸入時輸入的數(shù)據(jù)可以是整數(shù)(不帶小數(shù)點(diǎn))、帶小數(shù)點(diǎn)的定點(diǎn)數(shù)或者指數(shù)形式(如3e-4,5.4e3)表示的實(shí)數(shù);在輸入函數(shù)scanf()沒有%m.nf這種規(guī)定輸入數(shù)據(jù)的精度格式。例如:Scanf(“%6.3f”,&y);是非法的,不能用此語句輸入小數(shù)為3位的實(shí)數(shù),當(dāng)輸入數(shù)據(jù)123456不能使得y的值為123.456。一般在執(zhí)行scanf函數(shù)前,先執(zhí)行printf函數(shù),在顯示屏幕上輸出一行提示信息,然后光標(biāo)在提示信息之后閃爍等待用戶通過鍵盤輸入數(shù)據(jù)。這種程序風(fēng)格具有良好的用戶界面,值得借鑒。例如下面程序段:
doublex,y,z; printf("請輸入直角三角形邊x,y:"); scanf("%lf,%lf",&x,&y); c=sqrt(x*x+y*y); printf("直角三角形邊長z=%f\n"z);程序運(yùn)行效果如下:請輸入直角三角形邊x,y:3.0,4.0↙(前邊為提示信息,后邊為輸入數(shù)據(jù))直角三角形邊長z=5.000000(輸出第三條邊c的邊長)注意:變量x、y為雙精度浮點(diǎn)類型,因此scanf函數(shù)相應(yīng)的格式說明符只能用“%lf”,而不能用“%f”。另外,“%lf,%lf”中的逗號“,”是普通字符,在輸入時應(yīng)按原樣輸入。3.字符型格式說明符用于輸入字符型數(shù)據(jù)的格式說明符為:“%c”
或“%mc”m為整型數(shù)據(jù),表示輸入字符數(shù)據(jù)時的寬度?!纠?.12】#include<stdio.h>intmain(){ charc; scanf("%c",&c); printf("%c,%d\n",c,c);return0;}程序運(yùn)行時須輸入一個字符型數(shù)據(jù)給變量cB↙(輸入字符‘B’給變量c)B,66(輸出變量c的值)4.字符串格式說明符用于輸入字符串?dāng)?shù)據(jù)的格式說明符為:“%s”,輸入的字符串不必加雙引號,但遇到空格、制表符或換行將終止接收,詳細(xì)情況將在后面章節(jié)討論。下面就scanf函數(shù)使用說明幾點(diǎn):
(1)與printf函數(shù)一樣,scanf函數(shù)的格式控制中的各格式說明符與內(nèi)存地址表中的變量地址在個數(shù)、次序、類型方面必須一一對應(yīng)。(2)參數(shù)列表中必須是變量地址,而不應(yīng)是變量名。例如scanf("%d%d",x,y);是不對的,應(yīng)將x,y,應(yīng)為&x,&y。這是C語言特點(diǎn),需要重點(diǎn)注意。(3)在%與格式說明符之間可以加上一個附加說明符星號“*”,如%*d,使對應(yīng)的輸入數(shù)據(jù)不賦給相應(yīng)變量。(4)當(dāng)整型或字符型格式說明符中有寬度說明時,按寬度說明截取數(shù)據(jù)。(5)在“格式控制字符串”中除了格式控制外還有其它非格式字符的普通字符,則在輸入數(shù)據(jù)時按原樣輸入。(6)在使用“%c”輸入字符時,空格和轉(zhuǎn)義字符都作為有效字符輸入。3.2.5字符的輸出和輸入格式化輸入輸出函數(shù)scanf()和prinf()
可以完成單個字符的輸入和輸出,但是由于C語言程序中經(jīng)常用到單個字符的輸入和輸出,所以專門提供了對單個字符的輸入輸出函數(shù)getchar()和putchar(),函數(shù)原型在頭文件stdio.h中,所以使用它們前應(yīng)用預(yù)處理命令#include<stdio.h>將文件包含到程序文件中。1.單個字符輸出函數(shù)putchar()調(diào)用格式:putchar(ch);參數(shù)說明:ch為字符型常量或者變量;也可以是整型數(shù)據(jù)。功能說明:當(dāng)參數(shù)ch為字符型數(shù)據(jù)時,putchar函數(shù)在顯示屏幕的光標(biāo)閃爍處顯示ch所表示的字符;當(dāng)參數(shù)ch為整型數(shù)據(jù)時,則顯示以整數(shù)ch為ASCII碼值的字符。Putchar()函數(shù)除了能輸出普通字符外,也可以輸出控制字符和轉(zhuǎn)義字符,如:‘\n’、‘\t’等?!纠?.13】#include<stdio.h>intmain(){charc1,c2,=’h’,c3,c4,c5;c1=c2-5-32;/*c2-5是小寫字母c,c2-5-32是大寫字母c*/c3=c2+1;/*c2+1是小寫字母i*/c4=c2+6;/*c2+6是小寫字母n*/c5=c2-7;/*c2-7是小寫字母a*/putchar(c1);putchar('\n');putchar(c2);putchar('\n');putchar(c3);putchar('\n');putchar(c4);putchar('\n');putchar(c5);putchar('\n');return0;}putchar(‘\n’)輸出一個換行符,因此上面程序執(zhí)行時,在輸出每個變量所代表的字符后,緊接著輸出一個換行符,所以程序運(yùn)行結(jié)果為China另外,也可以將變量的值直接用字母的對應(yīng)的ASCII碼來賦值,若將上述程序的4個賦值語句改為:c1=67;c3=105;c4=110;c5=97;則putchar函數(shù)執(zhí)行時,將分別顯示以相應(yīng)整型數(shù)據(jù)為ASCII碼值的字符,因此運(yùn)行結(jié)果與例3.8相同。2.單個字符輸入函數(shù)getchar()調(diào)用格式:getchar();功能說明:接收從標(biāo)準(zhǔn)輸入設(shè)備中讀入一個字符,并返回該字符,getchar函數(shù)沒有參數(shù)。下面程序段:charch1;printf("請輸入一個字符::"); /*提示用戶輸入一個字符*/ch1=getchar();/*讀入一個字符*/putchar(‘\n’)printf("輸入的字符為:");/*將字符回顯出來*/putchar(ch1);putchar(ch1+32);putchar(‘\n’) return0;}程序運(yùn)行結(jié)果為:請輸入一個字符:A↙(輸入‘A’后,按“回車”鍵,字符才能送到內(nèi)存)輸入的字符為:Aa若程序運(yùn)行時從鍵盤輸入字符ABCD并按“回車”:請輸入一個字符:ABCD↙(輸入ABCD后,按“回車”鍵)輸入的字符為:A(只接收到首字符‘A’并且賦值給變量ch1,然后輸出)由此可見,執(zhí)行字符輸入函數(shù)時,盡管可以從鍵盤輸入多個字符,但getchar只能接收一個字符。getchar函數(shù)與putchar函數(shù)一次只能輸入、輸出一個字符。而格式化輸入、輸出函數(shù)scanf和printf可以按照指定格式輸入、輸出若干個任意類型數(shù)據(jù)。3.2.6隨機(jī)函數(shù)在進(jìn)行程序設(shè)計時有時需要隨機(jī)輸入一些數(shù),這時調(diào)用隨機(jī)函數(shù)可以完成此功能。在C語言中要使用隨機(jī)函數(shù)rand()和srand()時,必須包含以下頭文件。#include<stdio.h>#include<stdlib.h>#include<time.h>/*需引用的頭文件*/其中隨機(jī)函數(shù)rand()函數(shù)和srand()函數(shù)包含在頭文件stdlib.h中,需要在程序頭部包含頭文件stdlib.h。rand()函數(shù)原型:intrand(void);功能是返回0到rand_max之間的隨機(jī)整數(shù),rand_max至少是32767,C語言預(yù)生成一組隨機(jī)數(shù),每次調(diào)用隨機(jī)函數(shù)時從指針?biāo)赶虻奈恢瞄_始取值,因此使用rand()重復(fù)運(yùn)行程序產(chǎn)生的隨機(jī)數(shù)都是相同的,可以通過srand()函數(shù)來改變指針位置。srand()函數(shù)原型:voidsrand(unsignedseed);功能:初始化隨機(jī)數(shù)發(fā)生器,可以使隨機(jī)數(shù)發(fā)生器rand()函數(shù)產(chǎn)生新的隨機(jī)序列,一般配合time(NULL)函數(shù)使用,因為時間每時每刻都在改變,產(chǎn)生的seed值都不同,srand((unsigned)time(NULL));產(chǎn)生隨機(jī)種子,因而程序頭部應(yīng)包含time.h頭文件。利用隨機(jī)函數(shù)要產(chǎn)生指定范圍的隨機(jī)數(shù),其通常為公式"intx=1+(int)rand()%n;"可以生成1到n之間的隨機(jī)數(shù),如1+rand()%100表達(dá)式將產(chǎn)生1-100之間的數(shù)字,也可以使用公式a+(int)rand()%(b-a+1)來產(chǎn)生a~b之間的數(shù)字;還有一種比較好公式為:j=1+(int)(n*rand()/(RAND_MAX+1.0))產(chǎn)生一個1到n之間的隨機(jī)數(shù),這兩者都可以實(shí)現(xiàn)產(chǎn)生指定范圍的數(shù)字?!纠?.14】利用隨機(jī)函數(shù)rand()和srand()來產(chǎn)生一期體育彩票的中獎號碼
分析:彩票號碼是需要隨機(jī)產(chǎn)生的,但是彩票號碼的產(chǎn)生又要求在一定的范圍內(nèi),所以此函數(shù)需要使用隨機(jī)函數(shù)rand()。體育彩票要求6個紅球為介于1到33的隨機(jī)數(shù)值和藍(lán)球為1到16間的隨機(jī)數(shù)值#include<stdio.h>#include<stdlib.h>/*需引用的頭文件*/intmain(){ /*產(chǎn)生本期中獎號碼:其中紅球6個范圍為1-33,藍(lán)球1個范圍為1-16*/ inthq1,hq2,hq3,hq4,hq5,hq6,lq1; hq1=1+(int)rand()%33;/*產(chǎn)生1-33之間的紅球*/ hq2=1+(int)rand()%33; hq3=1+(int)rand()%33; hq4=1+(int)rand()%33; hq5=1+(int)rand()%33; hq6=1+(int)rand()%33; lq1=1+(int)rand()%16;;/*產(chǎn)生1-16之間的藍(lán)球*/ /*輸出本期中獎號碼:其中紅球6個范圍為1-33,藍(lán)球1個范圍為1-16*/ printf("本期中獎號碼是:\n紅球%02d%,%02d
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度養(yǎng)殖場節(jié)能減排與綠色低碳合作協(xié)議書3篇
- 二零二五年度航空航天器加工合作協(xié)議2篇
- 2025陶瓷現(xiàn)匯外貿(mào)合同書
- 二零二五年度籃球運(yùn)動員長期保障合同3篇
- 2025年度農(nóng)村私人魚塘承包合同附漁業(yè)環(huán)保責(zé)任承諾書
- 二零二五年度汽車維修行業(yè)員工薪酬福利合同范本3篇
- 2025年度養(yǎng)殖土地租賃及農(nóng)業(yè)品牌建設(shè)合作協(xié)議3篇
- 2025年度農(nóng)機(jī)租賃與農(nóng)業(yè)廢棄物資源回收利用合作協(xié)議3篇
- 2025年度新能源充電樁建設(shè)公司成立協(xié)議書范本3篇
- 2025年度年度農(nóng)機(jī)租賃與農(nóng)業(yè)科技創(chuàng)新合作協(xié)議3篇
- 《S7-1200-PLC-編程及應(yīng)用技術(shù)》試題試卷及答案2套
- 內(nèi)科護(hù)理學(xué)消化系統(tǒng)試習(xí)題及答案
- 用人單位職業(yè)病危害現(xiàn)狀評價技術(shù)導(dǎo)則
- 中建一局質(zhì)量考核評價辦法
- 民辦非企業(yè)單位會計報表(會民非表010203)
- 口腔頜面系統(tǒng)解剖骨
- 川骨香-川古香手撕鴨配方及制作方法
- 深圳市排水管網(wǎng)維護(hù)管理質(zhì)量
- 變電站二次設(shè)計規(guī)范
- 能見度不良時船舶航行須知
- 實(shí)習(xí)證明、實(shí)習(xí)證明表(模板)2頁
評論
0/150
提交評論