第03講順序結構程序設計_第1頁
第03講順序結構程序設計_第2頁
第03講順序結構程序設計_第3頁
第03講順序結構程序設計_第4頁
第03講順序結構程序設計_第5頁
已閱讀5頁,還剩41頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第3章順序結構程序設計為了讓計算機處理各種數據,首先就應該把源數據輸入到計算機中;計算機處理結束后,再將目標數據信息以人能夠識別的方式輸出。C語言中的輸入輸出操作,是由C語言編譯系統提供的庫函數來實現。3.1格式化輸出——printf()函數3.2格式化輸入——scanf()函數3.3單個字符輸入輸出——getchar()和putchar()函數3.4順序結構程序設計[Return]3.1格式化輸出——printf()函數

printf()函數的作用:向計算機系統默認的輸出設備(一般指終端或顯示器)輸出一個或多個任意類型的數據。

3.1.1printf()函數的一般格式

[案例3.1]已知圓半徑radius=1.5,求圓周長和圓面積。

/*案例代碼文件名:AL3_1.C。*/

main()

{floatradius,length,area,pi=3.1415926;

radius=1.5;

length=2*pi*radius; /*求圓周長*/

area=pi*radius*radius; /*求圓面積*/

printf(“radius=%f\n”,radius); /*輸出圓半徑*/

printf(“length=%7.2f,area=%7.2f\n”,length,area);/*輸出圓周長、面積*/

}

程序運行結果如下:

radius=1.500000length=9.42,area=7.07

printf()函數的一般格式如下:printf("格式字符串"[,輸出項表]);

1.格式字符串。“格式字符串”也稱“轉換控制字符串”,可以包含三種字符:(1)格式指示符。格式指示符的一般形式如下:%[標志][寬度][.精度][F|N|h|L][類型]

常用的標志字符如表3-1所示,常用的寬度指示符如表3-2所示,常用的精度指示符如表3-3所示,長度修飾符如表3-4所示,類型轉換字符如表3-5所示。

(2)轉義字符

例如,[案例3.1]中printf()函數中的'\n'就是轉義字符,輸出時產生一個“換行”操作。

(3)普通字符除格式指示符和轉義字符之外的其它字符。格式字符串中的普通字符,原樣輸出。

例如,[案例3.1]中“printf("radius=%f\n",radius);”語句中的“radius=”,“printf("length=%7.2f,area=%7.2f\n",length,area);”語句中的“length=”、“area=”等都是普通字符。

2.輸出項表輸出項表是可選的。如果要輸出的數據不止1個,相鄰2個之間用逗號分開。下面的printf()函數都是合法的:(1)printf("Iamastudent.\n");

(2)printf("%d",3+2);

(3)printf("a=%fb=%5d\n",a,b); 必須強調:(1)“格式字符串”中的格式指示符,必須與“輸出項表”中、輸出項的數據類型一致,否則會引起輸出錯誤。(2)如果格式說明的個數少于輸出項的個數,多余的輸出項不予輸出。如果格式說明的個數多于輸出項的個數,多余的格式項輸出不定值或0。

3.1.2格式指示符

輸出不同類型的數據,要使用不同的類型轉換字符。1.類型轉換字符d──以帶符號的十進制整數形式輸出。[案例3.2]類型轉換字符d的使用。/*案例代碼文件名:AL3_2.C。*/main(){intnum1=123;longnum2=123456;/*用4種不同格式輸出int型數據num1的值*/

printf("num1=%d,num1=%5d,num1=%-5d,num1=%2d\n",num1,num1,num1,num1);/*用3種不同格式,輸出long型數據num2的值*/

printf("num2=%ld,num2=%8ld,num2=%5ld\n",num2,num2,num2);printf("num1=%ld\n",num1);} 程序運行結果如下:num1=123,num1=□□123,num1=123□□,num1=123num2=123456,num2=□□123456,num2=123456num1=123 對于整數,還可用八進制無符號形式(%o(小寫字母o))和十六進制無符號形式(%x)輸出。對于unsigned型數據,也可用%u格式符,以十進制、無符號形式輸出。所謂無符號形式是指,不論正數還是負數,系統一律當作無符號整數來輸出。例如,printf("%d,%o,%x\n",-1,-1,-1);

2.類型轉換字符f──以小數形式、按系統默認的寬度,輸出單精度和雙精度實數。[案例3.3]類型轉換字符f的使用。/*案例代碼文件名:AL3_3.C。*/main(){floatf=123.456;doubled1,d2;d1=1111111111111.111111111;d2=2222222222222.222222222;

printf("%f,%12f,%12.2f,%-12.2f,%.2f\n",f,f,f,f,f);printf("d1+d2=%f\n",d1+d2);}

程序運行結果如下:

123.456001,□□123.456001,□□□□□□123.46,123.46□□□□□□,123.46d1+d2=3333333333333.333010

(%lfdouble型輸入格式)3.類型轉換字符c──輸出一個字符(只占一列寬度)。[案例3.4]類型轉換字符c的使用。/*案例代碼文件名:AL3_4.C。*/main(){charc='A';

inti=65;

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

printf("i=%d,%c",i,i);}程序運行結果如下:

c=A,□□□□A,65i=65,A

需要強調的是:在C語言中,整數可以用字符形式輸出,字符數據也可以用整數形式輸出。將整數用字符形式輸出時,系統首先求該數與256的余數,然后將余數作為ASCII碼,轉換成相應的字符輸出。4.類型轉換字符s──輸出一個字符串。[案例3.5]類型轉換字符s的使用。/*案例代碼文件名:AL3_5.C。*/

main(){printf("%s,%5s,%-10s","Internet","Internet","Internet");printf("%10.5s,%-10.5s,%4.5s\n","Internet","Internet","Internet");} [程序演示]程序運行結果如下:Internet,Internet,Internet□□,□□□□□Inter,Inter□□□□□,Inter

注意:系統輸出字符和字符串時,不輸出單引號和雙引號。3.1.3使用說明

(1)printf()可以輸出常量、變量和表達式的值。但格式控制中的格式說明符,必須按從左到右的順序,與輸出項表中的每個數據一一對應,否則出錯。例如,printf("str=%s,f=%d,i=%f\n",“Internet",1.0/2.0,3+5,"CHINA");是錯誤的。(2)格式字符x、e、g可以用小寫字母,也可以用大寫字母。使用大寫字母時,輸出數據中包含的字母也大寫。除了x、e、g格式字符外,其它格式字符必須用小寫字母。例如,%f不能寫成%F。(3)格式字符緊跟在“%”后面就作為格式字符,否則將作為普通字符使用(原樣輸出)。例如,“printf(”c=%c,f=%f\n“,c,f);”中的第一個c和f,都是普通字符。

[Return]3.2格式化輸入——scanf()函數scanf()函數是用來從外部輸入設備向計算機主機輸入數據的。

3.2.1scanf()函數的一般格式

[案例3.6]已知圓柱體的底半徑radius=1.5,高high=2.0,求其體積。

/*案例代碼文件名:AL3_6.C。*/

main()

{floatradius=1.5,high=2.0,pi=3.14159,vol;

vol=pi*radius*radius*high;/*求體積*/

printf(“vol=%7.2f\n”,vol); /*輸出求出的體積*/

}

[案例3.7]已知圓柱體的底半徑為radius,高為high,求其體積。/*案例代碼文件名:AL3_7.C。*//*功能:說明函數scanf()的格式及作用。*/main(){floatradius,high,vol,pi=3.1415926;

printf("Pleaseinputradius&high:");

scanf("%f%f",&radius,&high); /*從鍵盤輸入兩個實數賦給變量radius,high*/

vol=pi*radius*radius*high;printf("radius=%7.2f,high=%7.2f,vol=%7.2f\n",radius,high,vol);} 程序運行結果如下:

Pleaseinputradius&high:1.5□2.0↙radius=□□□1.50,high=□□□2.00,vol=□□14.14

在程序中給計算機提供數據,可以用賦值語句,也可以用輸入函數。在C語言中,可使用scanf()函數,通過鍵盤輸入,給計算機同時提供多個、任意的數據。1.scanf()函數的一般格式scanf("格式字符串",輸入項首地址表);(1)格式字符串。格式字符串可以包含3種類型的字符:格式指示符、空白字符(空格、Tab鍵和回車鍵)和非空白字符(又稱普通字符)。格式指示符與printf()函數的相似,空白字符作為相鄰2個輸入數據的缺省分隔符,非空白字符在輸入有效數據時,必須原樣一起輸入。(2)輸入項首地址表──由若干個輸入項首地址組成,相鄰2個輸入項首地址之間,用逗號分開。輸入項首地址表中的地址,可以是變量的首地址,也可以是字符數組名或指針變量。變量首地址的表示方法:&變量名其中“&”是地址運算符。例如,[案例3.7]中的“&radius”是指變量radius在內存中的首地址。

2.scanf()函數的功能:從鍵盤上接收格式化輸入。運行[案例3.7]的程序時,從鍵盤上輸入2個實數,分別存入&radius、&high起始的存儲單元中,即輸入兩個實數分別賦給radius和high。

3.2.2

格式指示符格式指示符的一般形式為:%[*][寬度][F|N][h|l]類型字符

1.類型字符類型字符如表4.3所示。例如,在[案例3.7]的scanf()函數語句中,格式字符串“%f%f”。

2.寬度n

指定該項輸入數據所占列數為n。換句話說,讀取輸入數據中相應的n位,但按需要的位數賦給相應的變量,多余部分被舍棄。

例如,scanf("%3c%3c",&ch1,&ch2);printf("ch1=%c,ch2=%c\n",ch1,ch2);

假設輸入“abcdefg”,則系統將讀取的“abc”中的“a”賦給變量ch1;將讀取的“def”中的“d”賦給變量ch2,所以printf()函數的輸出結果為:ch1=a,ch2=d。3.賦值抑制字符*表示本輸入項對應的數據讀入后,不賦給相應的變量(該變量由下一個格式指示符輸入)。例如,scanf("%2d%*2d%3d",&num1,&num2);printf("num1=%d,num2=%d\n",num1,num2);

假設輸入“123456789”,則系統將讀取“12”并賦值給num1;讀取“34”、但舍棄掉(“*”的作用);讀取“567”并賦值給num2。所以,printf()函數的輸出結果為:num1=12,num2=567。3.2.3數據輸入操作1.如果相鄰2個格式指示符之間,不指定數據分隔符(如逗號、冒號等),則相應的2個輸入數據之間,至少用一個空格分開,或者用Tab鍵分開,或者輸入1個數據后,按回車,然后再輸入下1個數據。例如,scanf("%d%d",&num1,&num2);

假設給num1輸入12,給num2輸入36,則正確的輸入操作為:12□36↙

或者:12↙36↙

注:使用“↙”符號表示按回車鍵操作,在輸入數據操作中的作用是,通知系統輸入操作結束。

2.“格式字符串”中出現的普通字符(包括轉義字符形式的字符),務必原樣輸入。例如,scanf("%d,%d",&num1,&num2);

假設給num1輸入12,給num2輸入36,正確的輸入操作為:12,36↙

另外,scanf()函數中、格式字符串內的轉義字符(如\n),系統并不把它當轉義字符來解釋,從而產生一個控制操作,而是將其視為普通字符,所以也要原樣輸入。例如:scanf("num1=%d,num2=%d\n",&num1,&num2);

假設給num1輸入12,給num2輸入36,正確的輸入操作為:

num1=12,num2=36\n↙提高人機交互性建議:為改善人機交互性,同時簡化輸入操作,在設計輸入操作時,一般先用printf()函數輸出一個提示信息,再用scanf()函數進行數據輸入。例如,將scanf("num1=%d,num2=%d\n",&num1,&num2);改為:

printf("num1=");scanf("%d",&num1);printf("num2=");scanf("%d",&num2);3.輸入數據時,遇到以下情況,系統認為該數據結束:(1)遇到空格,或者回車鍵,或者Tab鍵。(2)遇到輸入域寬度結束。例如“%3d”,只取3列。(3)遇到非法輸入。例如,在輸入數值數據時,遇到字母等非數值符號(數值符號僅由數字字符0-9、小數點和正負號構成)。4.使用格式說明符“%c”輸入單個字符時,空格和轉義字符均作為有效字符被輸入。例如,scanf("%c%c%c",&ch1,&ch2,&ch3);printf("ch1=%c,ch2=%c,ch3=%c\n",ch1,ch2,ch3);假設輸入:A□B□C↙,則系統將字母'A'賦值給ch1,空格'□'賦值給ch2,字母'B'賦值給ch3。

3.3單個字符輸入輸出getchar()和putchar()3.3.1單個字符的輸出──putchar()函數[案例3.8]putchar()函數的格式和使用方法。/*案例代碼文件名:AL3_8.C*//*功能:說明putchar()函數的格式和使用方法。*/#include"stdio.h"/*編譯預處理命令:文件包含*/main(){charch1='N',ch2='E',ch3='W';putchar(ch1);putchar(ch2);putchar(ch3); /*輸出*/

putchar('\n');putchar(ch1);putchar('\n'); /*輸出ch1的值,并換行*/putchar('E');putchar('\n'); /*輸出字符'E',并換行*/putchar(ch3);putchar('\n');}

程序運行結果如下:

NEWNEW

1.putchar()函數的格式:putchar(ch);其中ch可以是一個字符變量或常量,也可以是一個轉義字符。2.putchar()函數的作用:向終端輸出一個字符。(1)putchar()函數只能用于單個字符的輸出,且一次只能輸出一個字符。另外,從功能角度來看,printf()函數可以完全代替putchar()函數。(2)在程序中使用putchar()函數,務必牢記:在程序(或文件)的開頭加上編譯預處理命令(也稱包含命令),即:

#include"stdio.h"

表示要使用的函數,包含在標準輸入輸出(stdio)頭文件(.h)中。3.3.2單個字符的輸入──getchar()函數[案例3.9]說明getchar()函數的格式和作用。/*案例代碼文件名:AL3_9.C*//*功能:說明getchar()函數的格式和作用。*/#include"stdio.h" /*文件包含*/main(){charch;

printf("Pleaseinputtwocharacter:");

ch=getchar(); /*輸入1個字符并賦給ch*/

putchar(ch);putchar('\n');

putchar(getchar()); /*輸入一個字符并輸出*/

putchar('\n');}

程序運行情況如下:

Pleaseinputtwocharacters:ab↙ab1.getchar()函數的格式:getchar();2.getchar()函數的作用:從系統隱含的輸入設備(如鍵盤)輸入一個字符。另外,從功能角度來看,scanf()函數可以完全代替getchar()函數。(1)getchar()函數只能用于單個字符的輸入,一次輸入一個字符。(2)程序中要使用getchar()函數,必須在程序(或文件)的開頭加上編譯預處理命令:

#include"stdio.h“

[Return]3.4順序結構程序設計

在順序結構程序中,各語句(或命令)是按照位置的先后次序,順序執行的,且每個語句都會被執行到。

[案例3.10]輸入任意三個整數,求它們的和及平均值。

/*案例代碼文件名:AL3_10.C*/

/*功能:設計一個順序結構程序,求三個整數的和及平均值。*/

main()

{intnum1,num2,num3,sum;

floataver;

printf("Pleaseinputthreenumbers:");

scanf("%d,%d,%d",&num1,&num2,&num3);/*輸入三個整數*/

sum=num1+num2+num3;/*求累計和*/

aver=sum/3.0; /*求平均值*/

printf("num1=%d,num2=%d,num3=%d\n",num1,num2,num3);

printf("sum=%d,aver=%7.2f\n",sum,aver);

}

思考題:能否將“aver=sum/3.0;”中“3.0”改為“3”?[案例3.11]求方程ax2+bx+c=0的實數根。a,b,c由鍵盤輸入,a≠0且b2-4ac>0。/*案例代碼文件名:AL3_11.C。*//*功能:設計一個順序結構程序,求方程的根。*/#include"math.h" /*為使用求平方根函數sqrt(),包含math.h頭文件*/main(){floata,b,c,disc,x1,x2;

printf("Inputa,b,c:");

scanf("%f,%f,%f",&a,&b,&c); /*輸入方程的三個系數的值*/

disc=b*b-4*a*c; /*求判別式的值賦給disc*/x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);printf("\nx1=%6.2f\nx2=%6.2f\n",x1,x2);}

[案例3.12]從鍵盤輸入一個小寫字母,要求用大寫字母形式輸出該字母及對應的ASCII碼值。/*案例代碼文件名:AL3_12.C。*/#include"stdio.h"main(){charc1,c2;

printf("Inputalowercaseletter:");c1=getchar();putchar(c1);printf(",%d\n",c1);c2=c1-32; /*將大寫字母轉換成對應的小寫字母*/printf("%c,%d\n",c2,c2);}

程序運行情況如下:

Inputalowercaseletter:a↙a,97A,65

在順序結構程序中,一般包括以下幾個部分:

1.程序開頭的編譯預處理命令。在程序中要使用標準函數(又稱庫函數),除printf()和scanf()外,其它的都必須使用編譯預處理命令,將相應的頭文件包含進來。。

2.順序結構程序的函數體中,是完成具體功能的各個語句和運算,主要包括:

(1)變量類型的說明。(2)提供數據語句。(3)運算部分。(4)輸出部分。

[Return]1、有以下程序:main(){charc1,c2;inta1,a2;scanf("%d%c%d%c",&a1,&c1,&a2,&c2);printf("%d,%c,%d,%c\n",a1,c1,a2,c2);

}要求變量a1、a2賦值為10和20,c1、c2賦值為字符X和Y,選擇正確的輸入方式:10X20Y<回車>B)10X20Y<回車>C)10X<回車>D)10X<回車>

20Y<回車>20Y<回車>

E)10X20Y<回車>

F)10X20Y<回車>

2、設有定義:inta;floatb;執行scanf(“%2d%f”,&a,&b);語句時,若輸入876543.0<回車>,a和b的值分別是876和543.000000B)87和6.000000C)87和543.000000D)76和543.0000003、執行以下程序時輸入1234567,則輸出結果是

1234

#include<stdio.h>main(){inta=1,b;

scanf("%2d%2d",&a,&b);

printf("%d%d\n",a,b);}4、有以下程序段

char

ch;intk;

ch='a';k=12;

printf("%c,%d,",ch,ch,k);printf("k=%d\n",k);

已知字符a的ASCII十進制代碼為97,則執行上述程序段后輸出的結果是

A)因變量類型與格式描述符的類型不匹配輸出無定值

B)輸出項與格式描述符個數不符,輸出為零值或不定值

C)a,97,12k=12

D)a,97,k=12

2007.92008.42008-91.若變量已正確定義為int型,要通過語句scanf("%d,%d,%d",&a,&b,&c);給a賦值1、給b賦值2、給c賦值3,以下輸入形式中錯誤的是(μ代表一個空格符)A)μμμ1

溫馨提示

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

評論

0/150

提交評論