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

下載本文檔

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

文檔簡(jiǎn)介

第3章順序結(jié)構(gòu)程序設(shè)計(jì)C語(yǔ)句2數(shù)據(jù)的輸出3數(shù)據(jù)的輸入4任務(wù)1——將英里轉(zhuǎn)換為公里1任務(wù)1——將英里轉(zhuǎn)換為公里1問(wèn)題你的暑假作業(yè)是研究一些以公里標(biāo)注距離的地圖和一些以英里標(biāo)注距離的地圖。你和你的伙伴們想使用公制計(jì)量單位來(lái)處理,因此需要編寫(xiě)一個(gè)程序來(lái)執(zhí)行必要的轉(zhuǎn)換工作。分析解決這個(gè)問(wèn)題的第1步是確定要干什么。我們要做的是將一種計(jì)量單位轉(zhuǎn)換成另外一種,但是,是要從公里轉(zhuǎn)換成英里,還是從英里轉(zhuǎn)換成公里?問(wèn)題陳述中說(shuō)明了想使用公制計(jì)量單位,那么就是要把英里表示的距離轉(zhuǎn)換成用公里來(lái)表示。因此,問(wèn)題的輸入就是以英里表示的距離,而問(wèn)題的輸出就是以公里表示的距離。要想編寫(xiě)這個(gè)程序,需要知道公里與英里之間的關(guān)系。查詢公制單位表可知:1英里等于1.609公里。下面列出了數(shù)據(jù)需求和相關(guān)的公式,miles是包含問(wèn)題輸入的變量(內(nèi)存單元),kms是包含著程序結(jié)果或者說(shuō)問(wèn)題輸出的變量(內(nèi)存單元)。

數(shù)據(jù)需求

問(wèn)題輸入miles/*存放用英里表示的距離*/

問(wèn)題輸出kms/*存放用公里表示的距離*/

相關(guān)公式1英里=1.609公里設(shè)計(jì)下面,我們用公式表達(dá)算法來(lái)解決問(wèn)題。首先列出算法的三個(gè)主要步驟或稱(chēng)子問(wèn)題。

算法1.讀取英里數(shù)。2.將距離轉(zhuǎn)換成公里。3.用公里顯示距離?,F(xiàn)在我們要確定算法中是否有哪一步需要更進(jìn)一步地細(xì)化或者是否已表達(dá)清晰。第1步(獲取數(shù)據(jù))和第3步(顯示結(jié)果值)都是基本步驟,不需要進(jìn)行什么細(xì)化。而第2步雖然很顯而易見(jiàn),但還是需要更詳細(xì)一些才更有幫助:第2步細(xì)化2.1英里距離是公里距離的1.609倍下面列出包含了細(xì)化步驟的完整算法,我們來(lái)研究一下是否合適。這個(gè)算法很像學(xué)期總結(jié)的大綱。第2步的細(xì)化用2.1來(lái)表示,并位于第2步之下。細(xì)化后的算法1.讀取英里數(shù)。2.將距離轉(zhuǎn)換成公里。

2.1英里距離是公里距離的1.609倍。3.用公里顯示距離。在繼續(xù)之前,要對(duì)算法進(jìn)行桌面檢查。如果第1步獲得的是10.0英里,那么第2.1步會(huì)將之轉(zhuǎn)換為1.609×10.0或16.09公里。第3步將顯示這個(gè)正確的結(jié)果。實(shí)現(xiàn)我們使用C語(yǔ)言來(lái)編寫(xiě)這個(gè)算法。首先將問(wèn)題的數(shù)據(jù)需求告訴C編譯器,即要使用的內(nèi)存單元的名稱(chēng)和每個(gè)內(nèi)存單元中所存儲(chǔ)的數(shù)據(jù)類(lèi)型。接下來(lái),將算法的每一步都轉(zhuǎn)換成一條或多條C語(yǔ)句。如果對(duì)算法的某一步進(jìn)行了細(xì)化,那么必須用C語(yǔ)句來(lái)轉(zhuǎn)換細(xì)化步驟,而不是原始步驟。從算法中知道,順序結(jié)構(gòu)程序是按照從上到下的順序執(zhí)行語(yǔ)句。/*將英里轉(zhuǎn)換為公里的程序*/#include<stdio.h> /*預(yù)處理,頭文件對(duì)printf,scanf函數(shù)的聲明*/#defineKMS_PER_MILE1.609 /*定義符號(hào)常量KMS_PER_MILE*/main(){doublemiles,kms; /*定義雙精度型變量miles,kms*/printf("請(qǐng)輸入用英里表示的距離:"); /*輸出語(yǔ)句,提示輸入英里表示的距離*/scanf("%lf",&miles); /*輸入語(yǔ)句,從鍵盤(pán)輸入變量miles的值*/kms=KMS_PER_MILE*miles; /*表達(dá)式語(yǔ)句,轉(zhuǎn)換為公里表示的距離*/printf("等同%f公里。\n",kms); /*輸出語(yǔ)句,顯示用公里表示的距離*/}運(yùn)行結(jié)果:請(qǐng)輸入用英里表示的距離:10↙等同于16.090000公里。C語(yǔ)句2一個(gè)C程序可以由若干個(gè)源程序文件(分別進(jìn)行編譯的文件模塊)組成,一個(gè)源文件可以由若干個(gè)函數(shù)和預(yù)處理命令以及全局變量聲明部分組成(關(guān)于“全局變量”見(jiàn)第7章,“編譯預(yù)處理”見(jiàn)第8章),一個(gè)函數(shù)由數(shù)據(jù)定義部分和執(zhí)行語(yǔ)句組成。C語(yǔ)言的語(yǔ)句可以分為5類(lèi),分別是:表達(dá)式語(yǔ)句、函數(shù)調(diào)用語(yǔ)句、控制語(yǔ)句、空語(yǔ)句和復(fù)合語(yǔ)句。表達(dá)式語(yǔ)句表達(dá)式語(yǔ)句由各種表達(dá)式加上分號(hào)“;”組成。kms=KMS_PER_MILE*miles;就是一條表達(dá)式語(yǔ)句,將符號(hào)常量KMS_PER_MILE所替代的數(shù)1.609與輸入的miles值相乘,結(jié)果賦值給變量kms。函數(shù)調(diào)用語(yǔ)句在C語(yǔ)言中,函數(shù)調(diào)用后面加一個(gè)分號(hào)“;”,就構(gòu)成了函數(shù)調(diào)用語(yǔ)句。如:printf("Enterthedistanceinmiles:");scanf("%lf",miles);

函數(shù)是一段程序,這段程序可能存在于函數(shù)庫(kù)中,也可能是用戶自己定義的,當(dāng)調(diào)用函數(shù)時(shí)就轉(zhuǎn)達(dá)到該段程序中執(zhí)行。但是函數(shù)調(diào)用以語(yǔ)句的形式出現(xiàn),它與前后語(yǔ)句之間的關(guān)系是順序執(zhí)行的控制語(yǔ)句用于完成一定的控制功能,例如程序的選擇控制、循環(huán)控制等。語(yǔ)句種類(lèi)語(yǔ)句形式功能說(shuō)明選擇分支控制語(yǔ)句if()…else…分支語(yǔ)句switch(){…}多分支語(yǔ)句循環(huán)控制語(yǔ)句for()循環(huán)語(yǔ)句while()循環(huán)語(yǔ)句do…while()循環(huán)語(yǔ)句結(jié)束控制語(yǔ)句break終止循環(huán)語(yǔ)句的執(zhí)行continue結(jié)束本次循環(huán)語(yǔ)句轉(zhuǎn)向控制語(yǔ)句goto轉(zhuǎn)向語(yǔ)句return返回語(yǔ)句空語(yǔ)句只有分號(hào)“;”組成的語(yǔ)句稱(chēng)為空語(yǔ)句。空語(yǔ)句是什么也不執(zhí)行的語(yǔ)句。在程序中空語(yǔ)句可用作空循環(huán)體。如:while(getchar()!='\n'){;}函數(shù)getchar()的功能是接收從鍵盤(pán)輸入的字符,該語(yǔ)句的功能是:只要鍵盤(pán)輸入的字符不是回車(chē)符則等待重新輸入,這里的循環(huán)體為空語(yǔ)句。程序設(shè)計(jì)中有時(shí)需要加一個(gè)空語(yǔ)句來(lái)表示存在一條空語(yǔ)句,但隨意加分號(hào)也會(huì)導(dǎo)致邏輯上的錯(cuò)誤,需要慎用。復(fù)合語(yǔ)句復(fù)合語(yǔ)句的語(yǔ)句形式如下:{語(yǔ)句1;語(yǔ)句2;…;語(yǔ)句n;}用一對(duì)花括號(hào)把若干語(yǔ)句括起來(lái)構(gòu)成一個(gè)語(yǔ)句組,一個(gè)復(fù)合語(yǔ)句在語(yǔ)法上視為一條語(yǔ)句,在一對(duì)花括號(hào)內(nèi)的語(yǔ)句數(shù)量不限例如:{a=2;b=3;b*=a;printf("b=%d\n",b);}在復(fù)合語(yǔ)句內(nèi),不僅可以有執(zhí)行語(yǔ)句,還可以有定義部分,定義部分應(yīng)該出現(xiàn)在可執(zhí)行語(yǔ)句的前面。數(shù)據(jù)的輸出3數(shù)據(jù)輸入輸出的概念及在C語(yǔ)言中的實(shí)現(xiàn)輸入輸出

所謂輸入輸出是以計(jì)算機(jī)主機(jī)為主體而言的。從計(jì)算機(jī)向外部輸出設(shè)備(如顯示屏、打印機(jī)、磁盤(pán)等)輸出數(shù)據(jù)稱(chēng)為“輸出”,從輸入設(shè)備(如鍵盤(pán)、磁盤(pán)、光盤(pán)、掃描儀等)向計(jì)算機(jī)主機(jī)輸入數(shù)據(jù)稱(chēng)為“輸入”。標(biāo)準(zhǔn)庫(kù)函數(shù)

C語(yǔ)言本身不提供輸入輸出語(yǔ)句,輸入和輸出操作是由函數(shù)來(lái)實(shí)現(xiàn)的。在C標(biāo)準(zhǔn)函數(shù)庫(kù)中提供了一些輸入輸出函數(shù),例如,printf函數(shù)和scanf函數(shù)。C語(yǔ)言函數(shù)庫(kù)中有一批“標(biāo)準(zhǔn)輸入輸出函數(shù)”,它是以標(biāo)準(zhǔn)的輸入輸出設(shè)備(一般為終端設(shè)備)為輸入輸出對(duì)象的。其中有:putchar(輸出字符)getchar(輸入字符)printf(式輸出)scanf(格式輸入)puts(輸出字符串)gets(輸入字符串)。預(yù)處理

在使用C語(yǔ)言庫(kù)函數(shù)時(shí),要用預(yù)編譯命令“#include”將有關(guān)的“頭文件”包括到用戶源文件中。在頭文件中包含了與用到的函數(shù)有關(guān)的信息。例如使用標(biāo)準(zhǔn)輸入輸出庫(kù)函數(shù)時(shí),要用到“stdio.h”文件。文件后綴“h”是head的縮寫(xiě),#include命令都是放在程序的開(kāi)頭,因此這類(lèi)文件被稱(chēng)為“頭文件”。在調(diào)用標(biāo)準(zhǔn)輸入輸出庫(kù)函數(shù)時(shí),文件開(kāi)頭應(yīng)有以下預(yù)編譯命令:

#include<stdio.h>

或#include"stdio.h"stdio.h是standardinput&output的縮寫(xiě),它包含了與標(biāo)準(zhǔn)I/O庫(kù)有關(guān)的變量定義和宏定義字符輸出函數(shù)(putchar函數(shù))putchar函數(shù)的作用是向終端輸出一個(gè)字符。一般格式為:

putchar(變量名)如:putchar(c);它輸出字符變量c的值。c可以是字符型變量或整型變量。例3-1利用putchar函數(shù)輸出字符。#include<stdio.h>main(){charc1,c2,c3;c1='Y';c2='O';c3='U';putchar(c1);putchar(c2);putchar(c3);}運(yùn)行結(jié)果:YOU也可以輸出控制字符,如putchar('\n')輸出一個(gè)換行符,使輸出的當(dāng)前位置移到下一行的開(kāi)頭。如果將例3.1程序最后一行改為putchar(c1);putchar('\n');putchar(c2);putchar('\n');putchar(c3);putchar('\n');則輸出結(jié)果為:YOU也可以輸出其他轉(zhuǎn)義字符,如:putchar('\101') (輸出字符'A')putchar('\'') (輸出單引號(hào)字符’)putchar('\015') (輸出回車(chē),不換行,使輸出的當(dāng)前位置移到本行開(kāi)頭)格式輸出函數(shù)(printf函數(shù))

函數(shù)調(diào)用的一般形式格式輸出函數(shù)的作用是按格式控制所指定的格式,在標(biāo)準(zhǔn)輸出設(shè)備上輸出輸出項(xiàng)列表中列出的各輸出項(xiàng)。printf函數(shù)的一般調(diào)用格式為:

printf(格式控制,輸出項(xiàng)表)如果在printf函數(shù)調(diào)用之后加上“;”,就構(gòu)成了輸出語(yǔ)句。例如:printf("a=%d,b=%d",a,b);其中printf是函數(shù)名;在圓括號(hào)中用雙引號(hào)括起來(lái)的字符串,如“a=%d,b=%d”稱(chēng)為格式控制串;a、b是輸出項(xiàng)表中的輸出項(xiàng),它們都是printf函數(shù)的參數(shù)。格式控制

格式控制的作用有兩個(gè):(1)為各輸出項(xiàng)提供格式轉(zhuǎn)換說(shuō)明。(2)提供需要原樣輸出的文字或字符。

格式控制由格式說(shuō)明和普通字符組成。

格式說(shuō)明格式說(shuō)明由“%”和緊跟其后的格式描述符組成,用來(lái)指定輸出數(shù)據(jù)的輸出格式。C語(yǔ)言規(guī)定,每個(gè)要輸出的參數(shù)都必須用一個(gè)格式說(shuō)明符指定其輸出格式。例如上面printf函數(shù)中的兩個(gè)%d,指定輸出兩個(gè)整型參數(shù)a和b。printf函數(shù)中常用的格式說(shuō)明符格式字符說(shuō)明c以字符形式輸出,只輸出一個(gè)字符d以帶符號(hào)的十進(jìn)制形式輸出整數(shù)(正數(shù)符號(hào)不輸出)o以八進(jìn)制無(wú)符號(hào)形式輸出整數(shù)(不輸出前導(dǎo)符0)x或X以十六進(jìn)制無(wú)符號(hào)形式輸出整數(shù)(不輸出前導(dǎo)符0x或0X)u以無(wú)符號(hào)的十進(jìn)制形式輸出整數(shù)f以小數(shù)形式輸出單、雙精度數(shù),隱含輸出6位小數(shù)e或E以標(biāo)準(zhǔn)指數(shù)形式輸出單、雙精度數(shù),數(shù)字部分小數(shù)位數(shù)為6位s以字符串形式輸出g選用%f或%e格式中輸出寬度較短的一種格式①整型數(shù)據(jù)輸出用%d輸出時(shí),將最高位視為符號(hào)位,按有符號(hào)數(shù)進(jìn)行輸出;用%o、%x(或%X)、%u輸出時(shí),則將最高位視為數(shù)據(jù)位,按無(wú)符號(hào)數(shù)進(jìn)行輸出

%o輸出該數(shù)對(duì)應(yīng)的八進(jìn)制數(shù)

%x(或%X)輸出對(duì)應(yīng)的十六進(jìn)制數(shù)(如果是%x,輸出含小寫(xiě)字母表示的十六進(jìn)制數(shù),如果是%X,則輸出含大寫(xiě)字母表示的十六進(jìn)制數(shù))

%u則輸出對(duì)應(yīng)的無(wú)符號(hào)十進(jìn)制數(shù)。例3-2整型數(shù)據(jù)的輸出。main(){unsignedinta=65535;intb=-2;

printf("a=%d,%o,%x,%u\n",a,a,a,a);printf("b=%d,%o,%X,%u\n",b,b,b,b);}運(yùn)行結(jié)果:a=-1,177777,ffff,65535b=-2,177776,FFFE,65534②實(shí)型數(shù)據(jù)輸出格式說(shuō)明符有%f、%e(或%E)、%g

%f:整數(shù)部分全部輸出,小數(shù)部分固定輸出6位%e(或%E):尾數(shù)部分保留1位非零整數(shù),指數(shù)部分為兩位整數(shù),中間的指數(shù)標(biāo)識(shí)為小寫(xiě)字母“e”(按%E輸出時(shí),指數(shù)標(biāo)識(shí)為大寫(xiě)字母“E”)%g:系統(tǒng)自動(dòng)選擇輸出形式,使輸出數(shù)據(jù)的寬度最小。例3-3實(shí)型數(shù)據(jù)的輸出。main(){floatx,y;x=222222.22;y=333333.333;printf("%f",x+y);}運(yùn)行結(jié)果:555555.5625只有前7位數(shù)字是有效數(shù)字

③字符型數(shù)據(jù)輸出字符型數(shù)據(jù)輸出用格式說(shuō)明符%c和%s。%c指定輸出一個(gè)字符,與putchar函數(shù)的功能相同;%s指定輸出一個(gè)字符串常量或一個(gè)字符數(shù)組中存放的字符串。例3-4字符型數(shù)據(jù)的輸出。main(){charc='a';inti=97;

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

printf("%c,%d\n",i,i);printf("%s\n","CHINA");}輸出結(jié)果:a,97a,97CHINA注意:按照%s輸出字符串時(shí),是從第一個(gè)字符開(kāi)始輸出,遇到字符串結(jié)束標(biāo)志‘\0’為止,而不是必須輸出字符串中的所有字符。附加格式說(shuō)明符

出現(xiàn)在%和格式描述符號(hào)之間,主要用于指定輸出數(shù)據(jù)的寬度和輸出形式,列出了printf函數(shù)中常用的附加格式說(shuō)明符。符號(hào)說(shuō)明l表示長(zhǎng)整型數(shù)據(jù),可加在格式符d、o、x、u前面m指定輸出字段的寬度.n對(duì)于實(shí)數(shù),表示輸出n位小數(shù);對(duì)于字符串,表示截取的字符個(gè)數(shù)+使輸出的數(shù)值數(shù)據(jù)無(wú)論正負(fù)都帶符號(hào)輸出-使數(shù)據(jù)在輸出域內(nèi)按左對(duì)齊方式輸出例3-5輸出實(shí)數(shù)時(shí)指定小數(shù)位數(shù)。main(){floatf=123.456;printf("%f%10f%10.2f%.2f%-10.2f\n",f,f,f,f,f);}其中“”代表一個(gè)空格,在本書(shū)程序及運(yùn)行結(jié)果中的空格用“”表示。注意:m用于指定數(shù)據(jù)的最小輸出寬度(稱(chēng)為域?qū)?。對(duì)于實(shí)型數(shù)據(jù),m指定的域?qū)挵ㄕ麛?shù)位、小數(shù)點(diǎn)、小數(shù)位和符號(hào)所占的總位數(shù)。如果輸出數(shù)據(jù)實(shí)際位數(shù)小于域?qū)?,不足部分用空格補(bǔ)齊;如果超出域?qū)?,則按實(shí)際寬度輸出。采用“.n”形式說(shuō)明時(shí),如果小數(shù)實(shí)際位數(shù)超出n指定的倍數(shù),則截取n位小數(shù),并自動(dòng)對(duì)后面的數(shù)四舍五入。不使用“+”修飾時(shí),正數(shù)不輸出符號(hào)。不使用“-”修飾時(shí),均在輸出域內(nèi)按右對(duì)齊方式輸出數(shù)據(jù)。普通字符

格式控制中前面沒(méi)有“%”的字符都是普通字符,可以是可視字符,也可以是轉(zhuǎn)義字符,在輸出時(shí)會(huì)原樣輸出,例如前面的“a=,b=”。注意:

格式控制中的轉(zhuǎn)義字符會(huì)在輸出時(shí)起到相應(yīng)的控制作用。例如,輸出‘\n’??梢赃M(jìn)行回車(chē)換行控制。數(shù)據(jù)的輸入4字符輸入函數(shù)(getchar函數(shù))作用是從標(biāo)準(zhǔn)輸入設(shè)備上輸入一個(gè)字符。函數(shù)調(diào)用的一般格式是:getchar();

其中,getchar函數(shù)是一個(gè)無(wú)參函數(shù),但調(diào)用getchar()函數(shù)時(shí)后面的括號(hào)不能省略。在輸入時(shí),空格、回車(chē)鍵等都作為字符讀入,而且,只有在用戶鍵入回車(chē)鍵后,讀入才開(kāi)始執(zhí)行,一個(gè)getchar()函數(shù)只能接收一個(gè)字符。例3-6輸入單個(gè)字符。

#include<stdio.h>main(){charc;c=getchar();putchar(c);}在運(yùn)行時(shí),如果從鍵盤(pán)輸入字符‘a(chǎn)’并按回車(chē)鍵,就會(huì)在屏幕上看到輸出的字符‘a(chǎn)’。a↙(輸入'a'后,按回車(chē)鍵,字符才送到內(nèi)存)a(輸出變量c的值'a')如果在一個(gè)函數(shù)中要調(diào)用getchar函數(shù),應(yīng)該在該函數(shù)的前面(或本文件的開(kāi)頭)加上“包含命令”#include<stdio.h>。請(qǐng)不要忘記請(qǐng)注意:

getchar()只能接收一個(gè)字符。getchar函數(shù)得到的字符可以賦給一個(gè)字符變量或整型變量,也可以不賦給任何變量,作為表達(dá)式的一部分。如,例3-6第4、5行可以用下面一行代替:

putchar(getchar());因?yàn)間etchar()的值為‘a(chǎn)’,因此putchar函數(shù)輸出‘a(chǎn)’。也可以用printf函數(shù)輸出:

printf("%c",getchar());格式輸入函數(shù)(scanf函數(shù))函數(shù)調(diào)用的一般格式

功能:從鍵盤(pán)上輸入數(shù)據(jù),該輸入數(shù)據(jù)按指定的輸入格式被賦給相應(yīng)的輸入項(xiàng)。

函數(shù)的一般格式為:scanf(格式控制,地址表列)其中“格式控制”規(guī)定數(shù)據(jù)的輸入格式,必須用雙引號(hào)括起來(lái),其內(nèi)容僅僅是格式說(shuō)明。“地址列表”則由一個(gè)或多個(gè)地址組成的列表,可以是變量的地址,或字符串的首地址。例3-7用scanf函數(shù)輸入數(shù)據(jù)。main(){inta,b,c;scanf("%d%d%d",&a,&b,&c);printf("%d,%d,%d\n",a,b,c);}運(yùn)行時(shí)按以下方式輸入a、b、c的值:123↙ (輸入a、b、c的值)1,2,3 (輸出a、b、c的值)&a、&b、&c中的“&”是“地址運(yùn)算符”,&a指在內(nèi)存中的地址。上面scanf函數(shù)的作用是:按照a、b、c在內(nèi)存的地址將a、b、c的值存進(jìn)去。變量a、b、c的地址是在編譯連接階段分配的?!?d%d%d”表示按十進(jìn)制整數(shù)形式輸入數(shù)據(jù)。輸入數(shù)據(jù)時(shí),在兩個(gè)數(shù)據(jù)之間以一個(gè)或多個(gè)空格間隔,也可以用回車(chē)鍵、跳格鍵(tab鍵)。下面輸入均為合法:①123↙②1↙23↙③1(按tab鍵)2↙3↙用“%d%d%d”格式輸入數(shù)據(jù)時(shí),不能用逗號(hào)作兩個(gè)數(shù)據(jù)間的分隔符,如下面輸入不合法:1,2,3↙格式控制

scanf()函數(shù)允許用于輸入的字符格式和它們的功能如表所示。在一些系統(tǒng)中,格式字符只允許用小寫(xiě)字母。輸入類(lèi)型字符說(shuō)

明字符型數(shù)據(jù)c輸入一個(gè)字符s輸入字符串整型數(shù)據(jù)d輸入十進(jìn)制整型數(shù)i輸入整型數(shù),整數(shù)可以是帶前導(dǎo)o的八進(jìn)制數(shù),帶前導(dǎo)ox(或OX)十六進(jìn)制數(shù)o以八進(jìn)制形式輸入整型數(shù)(可以帶前導(dǎo)o,也可以不帶)x以十六進(jìn)制形式輸入整型數(shù)(可以帶前導(dǎo)ox或OX,也可以不帶)u無(wú)符號(hào)十進(jìn)制整數(shù)實(shí)型數(shù)據(jù)f(lf)以帶小數(shù)點(diǎn)的形式或指數(shù)形式輸入單精度(雙精度)數(shù)e(le)與f(lf)的作用相同表3-5列出scanf可以用的附加說(shuō)明字符(修飾符)。字符說(shuō)

明l用于輸入長(zhǎng)整型數(shù)據(jù)(可用%d,%lo,%lx)或double型數(shù)據(jù)(用%lf或%le)h用于輸入短整型數(shù)據(jù)(可用%hd,%ho,%hx)m用于指定輸入數(shù)據(jù)的域?qū)?忽略讀入的數(shù)據(jù)(即不將讀入的數(shù)據(jù)賦給對(duì)應(yīng)變量)說(shuō)明:(1)對(duì)unsigned型變量所需的數(shù)據(jù),可以用%u,%d或%o,%x格式輸入。(2)可以指定輸入數(shù)據(jù)所占列數(shù),系統(tǒng)自動(dòng)按它截取所需數(shù)據(jù)。如:scanf("%3d%3d",&a,&b);輸入:123456↙系統(tǒng)自動(dòng)將123賦給a,456賦給b。此方法也可用于字符型:scanf("%3c",&ch);如果從鍵盤(pán)連續(xù)輸入3個(gè)字符abc,由于ch只能容納一個(gè)字符,系統(tǒng)就把第一個(gè)字符‘a(chǎn)’賦給ch。(3)如果在%后有一個(gè)“*”附加說(shuō)明符,表示跳過(guò)它指定的列數(shù)。例如:scanf("%2d%*3d%2d",&a,&b);如果輸入如下信息:1234567↙將12賦給a,%*3d表示讀入3位整數(shù)但不賦給任何變量。然后再讀入2位整數(shù)67賦給b。也就是說(shuō)第2個(gè)數(shù)據(jù)“345”被跳過(guò)。在利用現(xiàn)成的一批數(shù)據(jù)時(shí),有時(shí)不需要其中某些數(shù)據(jù),可用此法“跳過(guò)”它們。(4)輸入數(shù)據(jù)時(shí)不能規(guī)定精度,例如:scanf("%7.2f",&a);是不合法的,不能企圖用這樣的scanf函數(shù)并輸入以下數(shù)據(jù)而使a的值為12345.67。1234567↙使用scanf函數(shù)時(shí)應(yīng)注意的問(wèn)題(1)scanf函數(shù)中的“格式控制”后面應(yīng)當(dāng)是變量地址,而不應(yīng)是變量名。例如,如果a、b為整型變量,則scanf("%d,%d",a,b);是不對(duì)的,應(yīng)將“a,b”改為“&a,&b”。這是C語(yǔ)言與其他高級(jí)語(yǔ)言不同之處。許多初學(xué)者常在此出錯(cuò)。(2)如果在“格式控制”字符串中除了格式說(shuō)明以外還有其他字符,則在輸入數(shù)據(jù)時(shí)應(yīng)輸入與這些字符相同的字符。例如scanf(“%d,%d”,&a,&b);輸入形式為:3,4↙注意“3”后面是逗號(hào),它與scanf函數(shù)中的“格式控制”中的逗號(hào)對(duì)應(yīng)。如果輸入時(shí)不用逗號(hào)而用空格或其他字符是不對(duì)的:34↙(不對(duì))3:4↙(不對(duì))如果是:scanf("%d%d",&a,&b);輸入時(shí)兩個(gè)數(shù)據(jù)間應(yīng)空2個(gè)或更多的空格字符。如:1025↙或1025↙如果是:scanf("%d:%d:%d",&h,&m,&s);輸入應(yīng)該用以下形式:8:26:56↙如果是scanf("a=%d,b=%d,c=%d",&a,&b,&c);輸入應(yīng)該用以下形式:a=12,b=24,c=36↙這種形式是為了使用戶輸入數(shù)據(jù)時(shí)添加必要的信息以幫助理解,不易發(fā)生輸入數(shù)據(jù)的錯(cuò)誤。(3)在用“%c”格式輸入字符時(shí),空格字符和“轉(zhuǎn)義字符”都作為有效字符輸入:scanf("%c%c%c",&c1,&c2,&c3);如輸入abc↙字符‘a(chǎn)’送給c1,字符‘’送給c2,字符‘b’送給c3,因?yàn)?c只要求讀入一個(gè)字符,后面不需要用空格作為兩個(gè)字符的間隔,因此‘’作為下一個(gè)字符送給c2。(4)在輸入數(shù)據(jù)時(shí),遇以下情況時(shí)該數(shù)據(jù)認(rèn)為結(jié)束。①遇空格,或按“回車(chē)”或“跳格”(Tab)鍵。②按指定的寬度結(jié)束,如“%3”,只取3列。③遇非法輸入。如scanf("%d%c%f",&a,&b,&c);若輸入123k123o.52↙小型案例

通過(guò)案例總結(jié)一下順序結(jié)構(gòu)程序設(shè)計(jì)的應(yīng)用。本案例中使用了int類(lèi)型的數(shù)據(jù)(使用/和%)和char類(lèi)型的數(shù)據(jù)。問(wèn)題

本地銀行儲(chǔ)蓄所有很多顧客周期性地將零錢(qián)存進(jìn)自己的賬戶。請(qǐng)編寫(xiě)一個(gè)程序,與銀行的顧客交互,從而確定硬幣總共是多少錢(qián)。分析

為了解決這個(gè)問(wèn)題,我們需要從顧客那里獲得每種硬幣的數(shù)量(yuan、wujiao、jiao)。從所獲得的數(shù)字中,我們就可以確定這些硬幣的總值(以角為單位)。得到硬幣的總值后,我們可以用10去除這個(gè)數(shù),從而獲得硬幣總共是多少元,除得的余數(shù)就是零頭。下面的數(shù)據(jù)需求中將硬幣的總值以變量total列出,因?yàn)樗皇怯?jì)算過(guò)程的一部分,而不參與結(jié)果的輸出。為了使得與顧客的交互更人性化,可以在詢問(wèn)硬幣數(shù)量之前,先獲得該顧客的姓名縮寫(xiě)。

數(shù)據(jù)需求問(wèn)題輸入charfirst,middle,last /*存放顧客姓名的首字母的變量*/intyuan /*存放1元硬幣的個(gè)數(shù)的變量*/intwujiao /*存放5角硬幣的個(gè)數(shù)的變量*/intjiao /*存放1角硬幣的個(gè)數(shù)的變量*/

問(wèn)題輸出intrmbyuan /*存放元值的變量*/intrmbjiao /*存放角值的變量*/

附加的問(wèn)題變量inttotal /*存放硬幣的總值*/設(shè)計(jì)初始算法1.獲得并顯示顧客的姓名縮寫(xiě)。2.獲得每種硬幣的數(shù)量。3.計(jì)算硬幣的總值(以角為單位)。4.計(jì)算出元和零頭。

4.1元數(shù)就是total與10整除的商。

4.2零頭就是total與10整除的余數(shù)部分。5.顯示出元和零頭。實(shí)現(xiàn)下面這幾條語(yǔ)句:scanf("%c%c%c",&first,&middle,&last);printf("你好%c%c%c,我們一起看看你的硬幣是多少。\n",first,middle,last);會(huì)將三個(gè)字符放到first、middle和last中,然后在歡迎消息中對(duì)顧客顯示出來(lái)。下面這些語(yǔ)句:total=10*yuan+5*wujiao+jiao;將實(shí)現(xiàn)算法的步驟3。下面這些語(yǔ)句:rmbyuan=total/10;rmbjiao=total%10;將實(shí)現(xiàn)算法的步驟4.1和4.2。最后的printf調(diào)用將顯示結(jié)果。#include<stdio.h>intmain(void){charfirst,middle,last;intyuan,wujiao,jiao;intrmbyuan,rmbjiao;inttotal;printf("請(qǐng)輸入你姓名的首字母:");scanf("%c%c%c",&first,&middle,&last);printf("你好%c%c%c\n我們一起看看你的硬幣是多少。\n",fir

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論