




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第3章順序結(jié)構(gòu)程序設(shè)計(jì)3.1結(jié)構(gòu)化程序設(shè)計(jì)3.2C語句3.3賦值語句3.4數(shù)據(jù)輸入/輸出的概念及在C語言中的實(shí)現(xiàn)3.5字符數(shù)據(jù)的輸入與輸出3.6格式輸入與輸出3.7順序結(jié)構(gòu)程序?qū)嵗?/p>
3.1結(jié)構(gòu)化程序設(shè)計(jì)
3.1.1程序的三種基本結(jié)構(gòu)
通常的計(jì)算機(jī)程序總是由若干條語句組成的,從執(zhí)行方式上看,從第一條語句到最后一條語句完全按順序執(zhí)行,是簡單的順序結(jié)構(gòu);若在程序執(zhí)行過程中,根據(jù)用戶的輸入或中間結(jié)果去執(zhí)行若干不同的任務(wù)則為選擇結(jié)構(gòu);如果在程序的某處,需要根據(jù)某項(xiàng)條件重復(fù)地執(zhí)行某項(xiàng)任務(wù)若干次,直到滿足或不滿足某條件為止,這就構(gòu)成循環(huán)結(jié)構(gòu)。大多數(shù)情況下,程序都不會(huì)是簡單的順序結(jié)構(gòu),而是順序、選擇、循環(huán)三種結(jié)構(gòu)的復(fù)雜組合。
(1)順序結(jié)構(gòu)。順序結(jié)構(gòu)是簡單的線性結(jié)構(gòu),各框按順序執(zhí)行。其流程圖的基本形態(tài)如圖3-1所示,語句的執(zhí)行順序?yàn)椋篈→B→C。
(2)選擇(分支)結(jié)構(gòu)。這種結(jié)構(gòu)是對某個(gè)給定條件進(jìn)行判斷,條件為真或假時(shí)分別執(zhí)行不同的框的內(nèi)容。其基本形狀有兩種,分別如圖3-2(a)、(b)所示。圖3-2(a)的執(zhí)行序列為:當(dāng)條件為真時(shí)執(zhí)行A,否則執(zhí)行B;圖3-2(b)的執(zhí)行序列為:當(dāng)條件為真時(shí)執(zhí)行A,否則什么也不做。圖3-1順序結(jié)構(gòu)的流程圖圖3-2選擇(分支)結(jié)構(gòu)的流程圖
(3)循環(huán)結(jié)構(gòu)。循環(huán)結(jié)構(gòu)有兩種基本形態(tài):while(當(dāng))型循環(huán)和do-while(直到)型循環(huán)。
①while型循環(huán)。while型循環(huán)的流程圖如圖3-3所示。
其執(zhí)行序列為:當(dāng)條件為真時(shí),反復(fù)執(zhí)行A,一旦條件為假,跳出循環(huán),執(zhí)行循環(huán)后面的語句。
②do-while型循環(huán)。do-while型循環(huán)的流程圖如圖3-4所示。圖3-3
while型循環(huán)的流程圖圖3-4
do-while型循環(huán)的流程圖執(zhí)行序列為:首先執(zhí)行A,再判斷條件,條件為真時(shí),一直循環(huán)執(zhí)行A,一旦條件為假,結(jié)束循環(huán),執(zhí)行循環(huán)后面的下一條語句。
在圖3-3、圖3-4中,A被稱為循環(huán)體,條件被稱為循環(huán)控制條件。要注意的是:
a.在循環(huán)體中,必須對條件要判斷的值進(jìn)行修改,使得經(jīng)過有限次循環(huán)后,循環(huán)一定能結(jié)束。
b.當(dāng)型循環(huán)中循環(huán)體可能一次都不執(zhí)行,而直到型循環(huán)則至少執(zhí)行一次循環(huán)體。
c.直到型循環(huán)可以很方便地轉(zhuǎn)化為當(dāng)型循環(huán),而當(dāng)型循環(huán)不一定能轉(zhuǎn)化為直到型循環(huán)。例如,圖3-4可以轉(zhuǎn)化為圖3-5。
d.三種基本結(jié)構(gòu)的NS流程圖如圖3-6所示。圖3-5
do-while型循環(huán)轉(zhuǎn)換為while型循環(huán)圖3-6三種基本結(jié)構(gòu)的NS圖3.1.2結(jié)構(gòu)化程序設(shè)計(jì)的核心思想
結(jié)構(gòu)化程序設(shè)計(jì)的基本思想概括有三點(diǎn):
(1)采用順序、選擇和循環(huán)三種基本結(jié)構(gòu)作為程序設(shè)計(jì)的基本單元,這樣程序有以下四個(gè)特征:只有一個(gè)入口;只有一個(gè)出口;無死語句;無死循環(huán)。
(2)盡量避免使用goto語句,如果要使用,盡可能不使用多于一個(gè)goto的語句標(biāo)號;只在一個(gè)單入口單出口的程序模塊結(jié)構(gòu)內(nèi)使用goto語句,并且只往前跳轉(zhuǎn),不允許往后跳轉(zhuǎn)。
(3)采用“自頂向下、逐步求精”的程序設(shè)計(jì)方法。3.1.3自頂向下、逐步求精的程序設(shè)計(jì)方法
自頂向下、逐步求精的程序設(shè)計(jì)方法有以下幾個(gè)要點(diǎn):
(1)自頂向下(Top-Down):先整體再局部,把一個(gè)較大的問題分成幾個(gè)小問題(部分),再逐步求解,較小的問題還可以進(jìn)一步進(jìn)行分割。
(2)自底向上(Bottom-Up):先部分后整體,先編寫出基本的程序段,然后再將多個(gè)程序段組合成更大的部分,直至完成整個(gè)程序。
(3)大致步驟:
①對實(shí)際問題進(jìn)行全局分析,確定數(shù)學(xué)模型;
②確定程序的總體結(jié)構(gòu),將整個(gè)問題分解成若干相對獨(dú)立的子問題;
③確定子問題的具體功能及其相互關(guān)系;
④將子問題進(jìn)一步細(xì)化,直至能用高級語言表示為止。
3.2
C語句
圖3-7
C程序的結(jié)構(gòu)
C語言的語句用來向計(jì)算機(jī)發(fā)出操作指令,指揮、控制計(jì)算機(jī)執(zhí)行相應(yīng)的操作。在本書的前面章節(jié)已有介紹,一個(gè)C語言程序由多個(gè)函數(shù)構(gòu)成。每個(gè)函數(shù)都由聲明部分和執(zhí)行部分構(gòu)成。其中,執(zhí)行部分由語句構(gòu)成,可完成對數(shù)據(jù)的操作,程序的功能也是由執(zhí)行語句實(shí)現(xiàn)的。說明
(1)函數(shù)聲明部分的內(nèi)容不應(yīng)稱為語句,函數(shù)的執(zhí)行部分才稱為語句。
(2)C程序的預(yù)編譯命令不應(yīng)稱為C語言語句。
C語句可以分為以下五類:
(1)控制語句。
if()…else… 條件語句
for()… 循環(huán)語句
while()… 循環(huán)語句
do…while() 循環(huán)語句
continue 結(jié)束本次循環(huán)語句
break 中止switch或循環(huán)語句
switch 多分支選擇語句
goto 轉(zhuǎn)向語句
return 從函數(shù)返回語句
其中,()表示條件,…?表示內(nèi)嵌的語句。
(2)函數(shù)調(diào)用語句。如:
a=getchar();
/*該語句調(diào)用函數(shù)getchar()*/
(3)表達(dá)式語句。在表達(dá)式后面加分號就構(gòu)成表達(dá)式語句。任何表達(dá)式加上分號都可以成為語句,例如:
a=100;
/*由賦值表達(dá)式加分號構(gòu)成的賦值語句*/
a++;
都是一個(gè)語句,第一個(gè)語句的作用是使變量a的值等于100,第二個(gè)語句的作用是使變量a的值加1,即等于101。
但是,不是所有的表達(dá)式構(gòu)成的語句都有意義,如:
a+b;
是一個(gè)合法的語句,作用是完成a+b的操作,但是并不把a(bǔ)+b的結(jié)果賦給任何變量,即除了執(zhí)行運(yùn)算操作,不作其他任何操作。從實(shí)際的角度講,這樣的語句無實(shí)際意義。
(4)空語句。僅包含一個(gè)分號的語句稱為空語句。如:
;
程序在執(zhí)行這個(gè)語句時(shí),不進(jìn)行任何操作。
(5)復(fù)合語句。由大括號“{}”括起來的語句序列稱為復(fù)合語句。如:
{
a=1+2;
b=a+5;
printf("b=%d",b);
}
說明
(1)C語言語句的書寫沒有固定格式,一行中可以有多個(gè)語句,一個(gè)語句也可以在多行書寫,語句之間必須用分號分隔。
(2)一個(gè)語句必須在最后出現(xiàn)分號,分號是語句不可缺少的部分。如:
a=1;b=2;c=3; /*一行寫幾個(gè)語句*/
printf("Iama
student,\n"); /*一個(gè)語句分多行書寫*/ 3.3賦值語句
賦值語句是由賦值表達(dá)式再加上分號構(gòu)成的表達(dá)式語句。
其一般形式為
變量=表達(dá)式;
賦值語句的功能和特點(diǎn)都與賦值表達(dá)式相同。它是程序中使用最多的語句之一。在賦值語句的使用中需要注意以下幾點(diǎn):
(1)由于在賦值符“=”右邊的表達(dá)式又可以是一個(gè)賦值表達(dá)式,因此,下述形式
變量=(變量=表達(dá)式);
是成立的,從而形成嵌套的情形。
其展開之后的一般形式為
變量=變量=…=表達(dá)式;
例如:
a=b=c=d=e=5;
按照賦值運(yùn)算符的右結(jié)合性,以上語句實(shí)際上等效于:
e=5;
d=e;
c=d;
b=c;
a=b;
(2)注意在變量說明中給變量賦初值和賦值語句的區(qū)別。給變量賦初值是變量說明的一部分,賦初值后的變量與其后的其他同類變量之間仍必須用逗號間隔,而賦值語句則必須用分號結(jié)尾。例如:
inta=5,b,c;
(3)在變量說明中,不允許連續(xù)給多個(gè)變量賦初值。如下述說明是錯(cuò)誤的:
inta=b=c=5;
必須寫為
inta=5,b=5,c=5;
而賦值語句允許連續(xù)賦值。
(4)注意賦值表達(dá)式和賦值語句的區(qū)別。賦值表達(dá)式是一種表達(dá)式,它可以出現(xiàn)在任何允許表達(dá)式出現(xiàn)的地方,而賦值語句則不能。下述語句是合法的:
if((x=y+5)>0)z=x;
該語句的功能是:若表達(dá)式x=y+5大于0,則z=x。
下述語句是非法的:
if((x=y+5;)>0)z=x;
因?yàn)椤皒=y+5;”是語句,不能出現(xiàn)在表達(dá)式中。說明
(1)“=”號還可以是組合賦值號,如?+=、-=、*=、/=、%=?等。
(2)賦值語句由賦值表達(dá)式構(gòu)成,后面一定要跟分號。
(3)“=”具有方向性(向左),它與數(shù)學(xué)上的等號含義不同。數(shù)學(xué)上的等號在C中用?==號表示。如a=a+1在數(shù)學(xué)上不合法,但在C語言中卻是合法的。
(4)表達(dá)式值的類型最好與等號左邊的變量類型一致,否則系統(tǒng)自動(dòng)將右側(cè)表達(dá)式類型轉(zhuǎn)換成左側(cè)變量的類型。如x類型為int,則執(zhí)行“x=5.6;”后,x值為5(不四舍五入)。
(5)格式中的表達(dá)式可以包含另一個(gè)賦值表達(dá)式。如執(zhí)行“a=b=c=1;”后,a、b、c的值均為1。
3.4數(shù)據(jù)輸入/輸出的概念及在C語言中的實(shí)現(xiàn)
所謂輸入/輸出,是以計(jì)算機(jī)為主體而言的。本章介紹的是向標(biāo)準(zhǔn)輸出設(shè)備顯示器輸出數(shù)據(jù)的語句。
在C語言中,所有的數(shù)據(jù)輸入/輸出都是由庫函數(shù)完成的,因此都是函數(shù)語句。在使用C語言庫函數(shù)時(shí),要用預(yù)編譯命令
#include
將有關(guān)“頭文件”包括到源文件中。使用標(biāo)準(zhǔn)輸入/輸出庫函數(shù)時(shí)要用到“stdio.h”文件,因此源文件開頭應(yīng)有以下預(yù)編譯命令:
#include<stdio.h>
或
#include"stdio.h"
stdio是standardinput&outupt的意思。
考慮到printf和scanf函數(shù)使用頻繁,系統(tǒng)允許在使用這兩個(gè)函數(shù)時(shí)不加
#include<stdio.h>
或
#include"stdio.h"
3.5字符數(shù)據(jù)的輸入與輸出
3.5.1putchar函數(shù)(字符輸出函數(shù))
putchar函數(shù)是字符輸出函數(shù),其功能是在顯示器上輸出單個(gè)字符。
其一般形式為
putchar(字符變量);
例如:
putchar('A'); (輸出大寫字母A)
putchar(x); (輸出字符變量x的值)
putchar('\101'); (也是輸出字符A)
putchar('\n'); (換行)對控制字符則執(zhí)行控制功能,不在屏幕上顯示。
使用本函數(shù)前必須用文件包含命令:
#include<stdio.h>
或
#include"stdio.h"
【例3.1】
輸出單個(gè)字符。
程序如下:
#include<stdio.h>
main(){
chara=‘B’,b=‘o’,c=‘k’; /*定義字符變量a,b,c*/
putchar(a);putchar(b);putchar(b);putchar(c);putchar(‘\t’);
putchar(a);putchar(b);
putchar(‘\n’);
putchar(b);putchar(c);
}
程序運(yùn)行結(jié)果:
Book↙
Bo↙
ok3.5.2
getchar函數(shù)(鍵盤輸入函數(shù))
getchar函數(shù)的功能是從鍵盤上輸入一個(gè)字符。
其一般形式為
getchar();
通常把輸入的字符賦予一個(gè)字符變量,構(gòu)成賦值語句,如:
charc;
c=getchar();
【例3.2】
輸入單個(gè)字符。
程序如下:
#include<stdio.h>
voidmain(){
charc;
printf(“inputacharacter\n”);
c=getchar();
putchar(c);
}
程序運(yùn)行結(jié)果:
inputacharacter:↙
j↙
j說明
(1)getchar函數(shù)只能接收單個(gè)字符,輸入的數(shù)字也按字符處理。輸入多于一個(gè)字符時(shí),只接收第一個(gè)字符。
(2)使用本函數(shù)前必須包含文件“stdio.h”。
(3)在TC屏幕下運(yùn)行含本函數(shù)的程序時(shí),將退出TC屏幕而進(jìn)入用戶屏幕等待用戶輸入。輸入完畢再返回TC屏幕。
(4)程序最后兩行可用下面兩行的任意一行代替:
putchar(getchar());
printf("%c",getchar()); 3.6格式輸入與輸出
3.6.1
printf函數(shù)(格式輸出函數(shù))
printf函數(shù)稱為格式輸出函數(shù),其關(guān)鍵字最末一個(gè)字母f即為“格式”(format)之意。其功能是按用戶指定的格式,把指定的數(shù)據(jù)顯示到顯示器屏幕上。在前面的例題中我們已多次使用過這個(gè)函數(shù)。
1.printf函數(shù)調(diào)用的一般形式
printf函數(shù)是一個(gè)標(biāo)準(zhǔn)庫函數(shù),它的函數(shù)原型在頭文件“stdio.h”中。但作為一個(gè)特例,不要求在使用printf函數(shù)之前必須包含stdio.h文件。
printf函數(shù)調(diào)用的一般形式為
printf
("格式控制字符串",輸出表列)其中,格式控制字符串用于指定輸出格式,可由格式字符串和非格式字符串組成。格式字符串是以%開頭的字符串,在%后面跟有各種格式字符,以說明輸出數(shù)據(jù)的類型、形式、長度、小數(shù)位數(shù)等。如:
“%d”表示按十進(jìn)制整型輸出;
“%ld”表示按十進(jìn)制長整型輸出;
“%c”表示按字符型輸出。
非格式字符串在輸出時(shí)原樣照搬,在顯示中起提示作用。
輸出表列中給出了各個(gè)輸出項(xiàng),要求格式字符串和各輸出項(xiàng)在數(shù)量和類型上應(yīng)該一一對應(yīng)。
【例3.3】printf函數(shù)的應(yīng)用。
程序如下:
main()
{
inta=88,b=89;
printf(“%d%d\n”,a,b);
printf(“%d,%d\n”,a,b);
printf(“%c,%c\n”,a,b);
printf(“a=%d,b=%d”,a,b);
}
程序運(yùn)行結(jié)果:
88
89↙
88,
89↙
X,
Y↙
a=88,b=89說明
本例中四次輸出了a、b的值,但由于格式控制串不同,輸出的結(jié)果也不相同。第四行的輸出語句格式控制串中,兩格式串%d之間加了一個(gè)空格(非格式字符),所以輸出的a、b值之間有一個(gè)空格。第五行的printf語句格式控制串中加入的是非格式字符逗號,因此輸出的a、b值之間加了一個(gè)逗號。第六行的格式串要求按字符型輸出a、b值。第七行中為了提示輸出結(jié)果,又增加了非格式字符串。
2.格式字符串
在C語言中格式字符串的一般形式為
[標(biāo)志][輸出最小寬度][.精度][長度]類型
其中,方括號?[]?中的項(xiàng)為可選項(xiàng)。
各項(xiàng)的意義介紹如下:
(1)類型。類型字符用以表示輸出數(shù)據(jù)的類型,其格式符和意義如表3-1所示。
(3)輸出最小寬度。此項(xiàng)用十進(jìn)制整數(shù)來表示輸出的最少位數(shù)。若實(shí)際位數(shù)多于定義的寬度,則按實(shí)際位數(shù)輸出;若實(shí)際位數(shù)少于定義的寬度,則補(bǔ)以空格或0。
(4)精度。精度格式符以“?.?”開頭,后跟十進(jìn)制整數(shù)。本項(xiàng)的意義是:如果輸出的是數(shù)字,則表示小數(shù)的位數(shù);如果輸出的是字符,則表示輸出字符的個(gè)數(shù);若實(shí)際位數(shù)大于所定義的精度數(shù),則截去超過的部分。
(5)長度:長度格式符為h、l兩種,h表示按短整型量輸出,l表示按長整型量輸出。
【例3.4】格式字符串的使用1。
程序如下:
main()
{
inta=15;
floatb=123.1234567;
doublec=12345678.1234567;
chard=‘p’;
printf(“a=%d,%5d,%o,%x\n”,a,a,a,a);
printf(“b=%f,%lf,%5.4lf,%e\n”,b,b,b,b);
printf(“c=%lf,%f,%8.4lf\n”,c,c,c);
printf("d=%c,%8c\n",d,d);
}程序運(yùn)行結(jié)果:
a=15, 15,17,f↙
b=123.123459,123.123459,123.1235,1.231235e+002↙
c=12345678.123457,12345678.123457,12345678.1235↙
d=p, p↙
說明
本例第七行中以四種格式輸出整型變量a的值,其中“%5d”要求輸出寬度為5,而a值為15,只有兩位,故補(bǔ)三個(gè)空格。第八行中以四種格式輸出實(shí)型量b的值。其中“%f”和“%lf”格式的輸出相同,說明“l(fā)”符對“f”類型無影響?!?5.4lf”指定輸出寬度為5,精度為4,由于實(shí)際長度超過5,故應(yīng)該按實(shí)際位數(shù)輸出,小數(shù)位數(shù)超過4位部分被截去。第九行輸出雙精度實(shí)數(shù),“%8.4lf”指定精度為4位,故截去了超過4位的部分。第十行輸出字符量d,其中“%8c”指定輸出寬度為8,故在輸出字符p之前補(bǔ)加7個(gè)空格。使用printf函數(shù)時(shí)還要注意一個(gè)問題,那就是輸出表列中的求值順序。此順序?qū)τ诓煌木幾g系統(tǒng)不一定相同,可以從左到右,也可從右到左。C語言是按從右到左進(jìn)行的。請看下面兩個(gè)例子。
【例3.5】格式字符串的使用2。
程序如下:
main(){
inti=8;
printf("%d\n%d\n%d\n%d\n%d\n%d\n",++i,--i,i++,i--,-i++,-i--);
}
程序運(yùn)行結(jié)果:
8↙
7↙
8↙
8↙
-8↙
-8↙
【例3.6】格式字符串的使用3。
程序如下:
main(){
inti=8;
printf(“%d\n”,++i);
printf(“%d\n”,--i);
printf(“%d\n”,i++);
printf(“%d\n”,i--);
printf(“%d\n”,-i++);
printf("%d\n",-i--);
}程序運(yùn)行結(jié)果:
9↙
8↙
8↙
9↙
-8↙
-9↙
說明
這兩個(gè)程序中,例3.5程序用一個(gè)printf語句輸出,例3.6程序用多個(gè)printf語句輸出。但從結(jié)果可以看出是不同的。為什么結(jié)果會(huì)不同呢?就是因?yàn)閜rintf函數(shù)對輸出表中各量求值的順序是自右至左進(jìn)行的。在例3.5中,先對最后一項(xiàng)“-i--”求值,結(jié)果為-8,然后i自減1后為7。再對“-i++”項(xiàng)求值得?-7,然后i自增1后為8。再對“i--”項(xiàng)求值得8,然后i再自減1后為7。再求“i++”項(xiàng)得7,然后i再自增1后為8。再求“--i”項(xiàng),i先自減1后輸出,輸出值為7。最后才求輸出表列中的第一項(xiàng)“++i”,此時(shí)i自增1后輸出8。
但是必須注意,求值順序雖是自右至左,但是輸出順序還是從左至右,因此得到的結(jié)果是上述輸出結(jié)果。3.6.2
scanf函數(shù)(格式輸入函數(shù))
scanf函數(shù)稱為格式輸入函數(shù),即按用戶指定的格式從鍵盤上把數(shù)據(jù)輸入到指定的變量之中。
1.scanf函數(shù)的一般形式
scanf函數(shù)是一個(gè)標(biāo)準(zhǔn)庫函數(shù),它的函數(shù)原型在頭文件“stdio.h”中。與printf函數(shù)相同,C語言也允許在使用scanf函數(shù)之前不必包含stdio.h文件。
scanf函數(shù)的一般形式為
scanf("格式控制字符串",地址表列);其中,格式控制字符串的作用與printf函數(shù)的相同,但它不能顯示非格式字符串,也就是不能顯示提示字符串。地址表列中給出各變量的地址。地址是由地址運(yùn)算符“&”后跟變量名組成的。例如:
&a,&b
分別表示變量a和變量b的地址。這個(gè)地址就是編譯系統(tǒng)在內(nèi)存中給a、b變量分配的地址。在C語言中,使用了地址這個(gè)概念,這是與其他語言不同的。應(yīng)該把變量的值和變量的地址這兩個(gè)不同的概念區(qū)別開來。變量的地址是C編譯系統(tǒng)分配的,用戶不必關(guān)心具體的地址是多少。變量的地址和變量值的關(guān)系如下:
在賦值表達(dá)式中給變量賦值,如:
a=567
則a為變量名,567是變量的值,&a是變量a的地址。但在賦值號左邊是變量名,不能寫地址。而scanf函數(shù)在本質(zhì)上也是給變量賦值,但要求寫變量的地址,如?&a。這兩者在形式上是不同的。&是一個(gè)取地址運(yùn)算符,&a是一個(gè)表達(dá)式,其功能是求變量的地址。
【例3.7】scanf函數(shù)的應(yīng)用。
程序如下:
main(){
inta,b,c;
printf(“inputa,b,c\n”);
scanf(“%d%d%d”,&a,&b,&c);
printf("a=%d,b=%d,c=%d",a,b,c);
}
說明
在本例中,由于scanf函數(shù)本身不能顯示提示串,故先用printf語句在屏幕上輸出提示,請用戶輸入a、b、c的值。執(zhí)行scanf語句,則退出TC屏幕進(jìn)入用戶屏幕,等待用戶輸入。用戶輸入“789”后按下回車鍵,此時(shí),系統(tǒng)又將返回TC屏幕。在scanf語句的格式串中由于沒有非格式字符在“%d%d%d”之間作輸入時(shí)的間隔,因此在輸入時(shí)要用一個(gè)以上的空格或回車鍵作為每兩個(gè)輸入數(shù)之間的間隔,如:
789
或
7
8
9
2.格式字符串
格式字符串的一般形式為
%[*][輸入數(shù)據(jù)寬度][長度]類型
其中,有方括號?[]?的項(xiàng)為任選項(xiàng)。各項(xiàng)的意義如下:
(1)類型:表示輸入數(shù)據(jù)的類型,其格式符和意義如表3-3所示。
(2)“?*?”符:用以表示該輸入項(xiàng)讀入后不賦予相應(yīng)的變量,即跳過該輸入值。如:
scanf("%d%*d%d",&a,&b);
當(dāng)輸入為“123”時(shí),把1賦予a,2被跳過,3賦予b。
(3)輸入數(shù)據(jù)寬度:用十進(jìn)制整數(shù)指定輸入數(shù)據(jù)的寬度(即字符數(shù))。例如:
scanf("%5d",&a);
若輸入“12345678”,則只把12345賦予變量a,其余部分被截去。
又如:
scanf("%4d%4d",&a,&b);
若輸入“12345678”,則把1234賦予a,而把5678賦予b。
(4)長度:長度格式符為l和h,l表示輸入長整型數(shù)據(jù)(如%ld)和雙精度浮點(diǎn)數(shù)(如%lf),h表示輸入短整型數(shù)據(jù)。
使用scanf函數(shù)還必須注意以下幾點(diǎn):
(1)scanf函數(shù)中沒有精度控制,如“scanf(”%5.2f“,&a);”是非法的,不能用此語句輸入小數(shù)為2位的實(shí)數(shù)。
(2)scanf中要求給出變量地址,只給出變量名會(huì)出錯(cuò)。如“scanf(”%d“,a);”是非法的,應(yīng)改為“scnaf(”%d“,&a);”才是合法的。
(3)在輸入多個(gè)數(shù)值數(shù)據(jù)時(shí),若格式控制串中沒有非格式字符作輸入數(shù)據(jù)之間的間隔,則可用空格、Tab或回車作間隔。C編譯程序在碰到空格、Tab、回車或非法數(shù)據(jù)(如對“%d”輸入“12A”時(shí),A即為非法數(shù)據(jù))時(shí)即認(rèn)為該數(shù)據(jù)結(jié)束。
(4)在輸入字符數(shù)據(jù)時(shí),若格式控制串中無非格式字符,則認(rèn)為所有輸入的字符均為有效字符。例如:
scanf(“%c%c%c”,&a,&b,&c);
若輸入為
def
則把?‘d’?賦予a,‘’?賦予b,‘e’?賦予c。
只有當(dāng)輸入為
def
時(shí),才能把?‘d’?賦于a,‘e’?賦予b,‘f’?賦予c。
如果在格式控制中加入空格作為間隔,如:
scanf("%c%c%c",&a,&b,&c);
則輸入時(shí)各數(shù)據(jù)之間可加空格。
【例3.8】scanf函數(shù)的格式控制應(yīng)用1。
程序如下:
main(){
chara,b;
printf(“inputcharactera,b\n”);
scanf(“%c%c”,&a,&b);
printf("%c%c\n",a,b);
}
說明
由于scanf函數(shù)?"%c%c"?中沒有空格,因此若輸入“MN”,輸出結(jié)果只有“M”。若輸入改為“MN”,則可輸出“MN”兩字符。
【例3.9】scanf函數(shù)的格式控制應(yīng)用2。
程序如下:
main(){
chara,b;
printf(“inputcharactera,b\n”);
scanf(“%c%c”,&a,&b);
printf("\n%c%c\n",a,b);
}
說明
本例中scanf格式控制串?"%c%c"?之間有空格,則輸入的數(shù)據(jù)之間可以有空格間隔。如果格式控制串中有非格式字符,則輸入時(shí)也要輸入該非格式字符。例如:
scanf("%d,%d,%d",&a,&b,&c);
其中用非格式符“,”作間隔符,故輸入時(shí)應(yīng)為
5,6,7
又如:
scanf("a=%d,b=%d,c=%d",&a,&b,&c);
則輸入應(yīng)為
a=5,b=6,c=7
如輸入的數(shù)據(jù)與輸出的類型不一致,雖然編譯能夠通過,但結(jié)果將不正確。
【例3.10】scanf函數(shù)的格式控制應(yīng)用3。
程序如下:
main(){
inta;
printf(“inputanumber\n”);
scanf(“%d”,&a);
printf(“%ld”,a);
}
程序運(yùn)行結(jié)果:
inputanumber:
1234567890
722
說明
由于輸入數(shù)據(jù)類型為整型,而輸出語句的格式串中說明為長整型,因此輸出結(jié)果和輸入數(shù)據(jù)不符。如改動(dòng)程序如下:
【例3.11】scanf函數(shù)的格式控制應(yīng)用4。
程序如下:
main(){
longa;
printf(“inputalonginteger\n”);
scanf(“%ld”,&a);
printf("%ld",a);
}
程序運(yùn)行結(jié)果:
inputalonginteger
1234567890
1234567890
當(dāng)輸入數(shù)據(jù)改為長整型后,輸入、輸出數(shù)據(jù)相等。
【例3.12】
輸入三個(gè)小寫字母,輸出其ASCII碼和對應(yīng)的大寫字母。
程序如下:
main(){
chara,b,c;
printf("inputcharactera,b,c\n");
scanf("%c%c%c",&a,&b,&c);
printf("%d,%d,%d\n%c,%c,%c\n",a,b,c,a-32,b-32,c-32);
}
程序運(yùn)行結(jié)果:
inputcharactera,b,c↙
abc↙
97,98,99↙
A,B,C↙
說明
在ASCII碼中,小寫字母正好比大寫字母大32。
【例3.13】
輸出各種數(shù)據(jù)類型的字節(jié)長度。
程序如下:
main(){
inta;
longb;
floatf;
doubled;
charc;
printf("\nint:%d\nlong:%d\nfloat:%d\ndouble:%d\nchar:%d\n",sizeof(a),sizeof(b),sizeof(f),sizeof(d),sizeof(c));
}程序運(yùn)行結(jié)果:
↙
int:4↙
long:4↙
float:4↙
double:8↙
char:1↙
說明
在VC++?中,int整型長度為4字節(jié),sizeof(k)為求數(shù)據(jù)k的字節(jié)數(shù)的函數(shù)。
3.7順序結(jié)構(gòu)程序?qū)嵗?/p>
【例3.14】
輸入正方形的邊長,計(jì)算正方形的周長。
分析:
要計(jì)算機(jī)出正方形的周長,需要以下步驟:
①輸入邊長;
②運(yùn)行公式計(jì)算出周長;
③輸出周長值。
根據(jù)以上分析,畫出計(jì)算正方形周長程序的流程圖如圖3-8所示。圖3-8例3.14流程圖輸入數(shù)據(jù)可以使用scanf函數(shù);計(jì)算周長可以使用算術(shù)表達(dá)式;顯示周長可以使用printf函數(shù)。根據(jù)流程圖,可以編寫出如下程序:
main()
{
floatx;
printf(“請輸入正方形的邊長:”);
scanf(“%f”,&x); /*輸入正方形的邊長*/
x=4*x; /*計(jì)算正方形的周長*/
printf(“正方形的周長是:%f\n”,x); /*顯示周長*/
}
運(yùn)行程序時(shí),如果輸入5,屏幕顯示如下信息:
請輸入正方形的邊長:5↙
正方形的周長是:25.000000
【例3.15】
輸入兩個(gè)整數(shù)給變量x和y,然后輸出x和y的值,交換x和y的值后再輸出x和y的值。
分析:
完成本題需要4個(gè)步驟:
①輸入兩個(gè)整數(shù)給x和y;
②輸出x和y;
③交換x和y的值;
④輸出x和y。
根據(jù)以上分析,可畫出程序的流程圖如圖3-9所示。
輸入、輸出可以使用printf函數(shù)和scanf函數(shù)完成;交換變量x和y的值可以先把x的值保存在另一個(gè)變量t中,再把y的值賦給x,最后把t的值賦給y。根據(jù)流程圖3-9,容易寫出如下程序:圖3-9例3.15流程圖
main()
{
intt,x,y;/*變量t為中間變量*/
printf(“請輸入兩個(gè)整數(shù):”);
scanf(“%d%d”,&x,&y);
printf(“交換前:x=%dy=%d\n”,x,y);
t=x;
x=y;
y=t;
printf("交換后:x=%dy=%d\n",x,y);
}程序運(yùn)行時(shí),屏幕顯示如下信息:
請輸入兩個(gè)整數(shù):56↙
交換前:x=5y=6
交換后:x=6y=5程序第7行至第9行的作用是交換x和y的值,請注意分析這個(gè)程序段各條語句的作用。交換x和y值不能簡單地用“x=y;”和“y=x;”這兩條語句,如果沒有把x存放的數(shù)據(jù)保存到其他變量,就執(zhí)行“x=y;”語句,把y的值賦給x,將使x和y具有相同的值,丟失x中原來的值,也就無法實(shí)現(xiàn)兩個(gè)數(shù)值的交換了。
提示:讀者可以思考一下交換兩個(gè)變量值的其他算法,如兩兩異或。
【例3.16】計(jì)算一元二次方程ax2?+?bx?+?c?=?0的實(shí)根,a、b、
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課題申報(bào)書課題進(jìn)度表格
- 課題的項(xiàng)目申報(bào)書
- 翻譯課題項(xiàng)目申報(bào)書范文
- 腫瘤護(hù)理課題申報(bào)書
- 出租噴涂車間合同范本
- 變更土地合同范本
- 紅色文化產(chǎn)業(yè)課題申報(bào)書
- 醫(yī)學(xué)課題申報(bào)書意見
- 合同范本 工商
- 肝硬化課件(共45張)
- 家長會(huì)課件:小學(xué)語文二年級家長會(huì)課件
- 2024年西安電力高等??茖W(xué)校單招職業(yè)技能測試題庫及答案解析
- 城鄉(xiāng)的規(guī)劃法解讀
- 中職數(shù)學(xué)基礎(chǔ)模塊上冊學(xué)業(yè)水平考試第四章三角函數(shù)單元測試及參考答案
- 2024年全國鄉(xiāng)村醫(yī)生資格考試專業(yè)基礎(chǔ)知識復(fù)習(xí)題庫及答案(共150題)
- 山東信息職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試參考試題庫(含答案)
- 農(nóng)林行業(yè)政策分析
- 蘇教版六年級下冊數(shù)學(xué)第三單元第1課《解決問題的策略(1)》課件(公開課)
- 食品加工安全生產(chǎn)安全培訓(xùn)
- 類案檢索報(bào)告
評論
0/150
提交評論