C語言課件第04講_第1頁
C語言課件第04講_第2頁
C語言課件第04講_第3頁
C語言課件第04講_第4頁
C語言課件第04講_第5頁
已閱讀5頁,還剩28頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

C語言程序的基本語句

數(shù)據(jù)的輸入輸出

第四講Begin:第三章基本語句與順序結(jié)構(gòu)程序設(shè)計

3.1C語言程序的基本語句3.1C語言程序的基本語句

C語言語句分為五類:表達式語句、函數(shù)調(diào)用語句、控制語句、復(fù)合語句、空語句。1.表達式語句由一個表達式組成一個語句。

如:++p;/*自增運算表達式加分號構(gòu)成語句*/N+=10;/*復(fù)合賦值表達式加分號構(gòu)成語句*/a+b;/*a+b表達式加分號構(gòu)成語句*/2.函數(shù)調(diào)用語句由一次函數(shù)調(diào)用加上分號“;”組成。形式:函數(shù)名(實參列表);如:printf(“VeryGood!\n”);/*輸出VeryGood!*/max(x,y,z);/*調(diào)用自定義函數(shù)max,求x,y,z中的最大數(shù)*/4.復(fù)合語句:用{}括起來組成的一個語句

如:if(a>b)

{x=0;b=b+1;x=a;}5.空語句:僅由一個分號構(gòu)成的語句3.控制語句:控制程序的流程

如:if…else語句,while語句,return語句等。

如:while(getchar()!='\n')

;

/*空語句*/3.1C語言程序的基本語句功能:通過標(biāo)準(zhǔn)輸出設(shè)備(如顯示器)輸出一組數(shù)據(jù)。

輸出形式由“格式控制”字符串規(guī)定。3.3.1

格式輸出:printf()函數(shù)和scanf()函數(shù)一般形式:

printf(“格式控制字符串”,輸出表列);3.3數(shù)據(jù)輸入輸出

printf函數(shù)是一個標(biāo)準(zhǔn)庫函數(shù),它的函數(shù)原型在頭文件“stdio.h”中。1.printf()函數(shù)格式控制:由雙引號括起來的字符串,用于指定要輸出的數(shù)據(jù)的格式。2)格式說明:用來指定需輸出數(shù)據(jù)的輸出格式的,其形式為:

%[<修飾符>]格式字符格式字符用以說明輸出數(shù)據(jù)的類型,形式,長度,小數(shù)位數(shù)等。它包括:

1)普通字符:按原樣輸出的字符;

輸出表列:需要輸出的數(shù)據(jù)列表,彼此間用逗號分隔。它可是任意合法的表達式。要求格式字符串和各輸出項在數(shù)量和類型上應(yīng)該一一對應(yīng)。

3.3.1格式輸出:printf()函數(shù)和scanf()函數(shù)用于輸出的修飾符3.3.1格式輸出:printf()函數(shù)和scanf()函數(shù)用于輸出的格式字符格式符功

能形

式d輸出十進制整數(shù)%d、%md、%ld、%mldo以八進制形式輸出整數(shù)%o、%mo、%lox以十六進制形式輸出整數(shù)%x、%mx、%lxu以十進制形式輸出一個無符號的數(shù)%uc輸出一個字符%cs輸出一個字符串%s、%ms、%m.nsf以小數(shù)的形式輸出實數(shù)%f、%m.nf、%lfe以標(biāo)準(zhǔn)指數(shù)的形式輸出實數(shù)%e、%m.neg根據(jù)實數(shù)的大小自動按f或e的形式選擇輸出格式%g3.3.1格式輸出:printf()函數(shù)和scanf()函數(shù)例:格式輸出:printf()函數(shù)printf("a+b=%5.2f",c);附加格式符格式符輸出表列普通字符格式說明符格式控制3.3.1格式輸出:printf()函數(shù)和scanf()函數(shù)(1)d格式字符%d:按整型數(shù)據(jù)的實際長度輸出%md:m為指定的輸出長度。如果數(shù)據(jù)位小于m,則左端補以空格;大于m,則按實際位輸出。例:printf(“%4d,%4d”,a,b);

若a=12,b=12345,則輸出

12,12345%ld:輸出長整型數(shù)據(jù)。%d的輸出范圍為-32768~32767,輸出超過該范圍的整型數(shù)就會出錯,此時用%ld輸出。其輸出格式和功能與%d相同,如:%8ld3.3.1格式輸出:printf()函數(shù)和scanf()函數(shù)(2)o格式字符以八進制數(shù)形式輸出整數(shù),且不帶符號。對于長整數(shù)可用“%lo”輸出。功能同十進制輸出。(3)x格式字符以十六進制數(shù)形式輸出整數(shù),且不帶符號。對于長整數(shù)可用“%lx”輸出。功能同十進制輸出。(4)u格式字符用來輸出unsigned型數(shù)據(jù),即無符號數(shù),輸出十進制數(shù)。用%o,%x輸出負(fù)數(shù)時會發(fā)生錯誤。3.3.1格式輸出:printf()函數(shù)和scanf()函數(shù)(5)c格式字符一個整數(shù),如果在0~255之間,也可用字符形式輸出,系統(tǒng)會將該整數(shù)轉(zhuǎn)換成相對應(yīng)的ASCII碼字符;同時,一字符也可以用整數(shù)形式輸出。例:charc=‘a(chǎn)’;printf(“%c”,c);用來輸出一個字符。inta=65;printf(“%c”,a);intc=‘A’;printf(“%d”,c);輸出A輸出65如:printf(“%3c”,c),則輸出c格式字符也可以指定輸出字?jǐn)?shù)寬度

A3.3.1格式輸出:printf()函數(shù)和scanf()函數(shù)(6)s格式字符%s:用來輸出一個字符串例:printf(“%s”,“Hello!”);輸出Hello!,不包括“”%ms:輸出的字符串占m列。如果字符串長度小于m,則左端補以空格;長度大于m,則輸出整個字符串。%-ms:如果串長小于m,則字符串向左靠,右補空格,其余同上。%m.ns:輸出的字符串占m列,但只取字符串中左端n個字符,這n個字符輸出在m列的右側(cè),左端補空格。%-m.ns:其他意義同%m.ns,右補空格。3.3.1格式輸出:printf()函數(shù)和scanf()函數(shù)例:printf(“%30s”,“Hello!”);輸出Hello!

printf(“%7s”,“Hello!”);輸出Hello!(7)f格式字符%f:不指定字段寬度,整數(shù)部分全部輸出,小數(shù)部分輸出6位。%m.nf:指定輸出數(shù)據(jù)占m列,其中有n位小數(shù)。若數(shù)值長度小于m,則左端補以空格。%-m.nf:功能同上,右端補以空格。(8)e格式字符%e:不指定字段寬度,系統(tǒng)自動給出6位小數(shù),指數(shù)部分占4位。其中“e”占1位,指數(shù)符號占1位,指數(shù)占2位。3.3.1格式輸出:printf()函數(shù)和scanf()函數(shù)例:printf(“%e”,123.456);輸出:1.234560e+026位小數(shù)部分4位指數(shù)部分%m.ne,%-m.ne,%me

:中m,-的意義和前相同,n是指數(shù)據(jù)的小數(shù)部分輸出的位數(shù)。(9)g格式字符用來輸出實數(shù),根據(jù)數(shù)值大小,自動選f或e格式,且不輸出無意義的零。3.3.1格式輸出:printf()函數(shù)和scanf()函數(shù)#include<stdio.h>voidmain(){inta=1234;floatf1=12.34567,f2=678.9;printf("1)%d,%6d,%-6d,%2d;\n",a,a,a,a);printf("2)%f,%10.4f,%3.2f;\n",f1,f1,f1);printf("3)%e,%e;\n",f1,f2);printf("4)%8e,%14e;\n",f1,f1);printf("5)%10.7e,%10.3e;\n",f1,f1);}實例:程序運行結(jié)果:1)1234,1234,1234,1234;2)12.345670,12.3457,12.35;3)1.234567e+01,6.78900e+02;4)1.234567e+01,1.234567e+01;5)1.2345670e+01,1.235e+01;

printf使用時的注意事項(1)格式控制字符串可以不包含任何格式控制符。(2)當(dāng)格式控制字符串中既含有普通字符,又包含有格式控制符時,則表達式的個數(shù)應(yīng)與格式控制符的個數(shù)一致。此時,常規(guī)字符原樣輸出,而格式控制符的位置上輸出對應(yīng)的表達式的值,其對應(yīng)的順序是:從左到右的格式控制符對應(yīng)從左到右的表達式。(3)

如果格式控制字符串中格式控制符的個數(shù)多于表達式的個數(shù),則余下的格式控制符的值將是不確定的。(4)不同類型的表達式要使用不同的格式轉(zhuǎn)換符,同一表達式如果按照不同的格式轉(zhuǎn)換符來輸出,其結(jié)果可能是不一樣的。

printf(“howareyou?\n”);//只有一個字符串參數(shù),輸出為:howareyou?printf(“howoldareyou?\n”,20);//帶有兩個參數(shù),20沒有意義,輸出為:howoldareyou?已知:

inta=2;函數(shù)調(diào)用:

printf("a*a=%d,a+5=%d\n",a*a,a+5);實際輸出:

a*a=4,a+5=7

printf("5+3=%d,5-3=%d,5*3=%d",5+3,5-3);

輸出結(jié)果將是:5+3=8,5–3=2,5*3=-28710輸出隨機charch='A';printf("ch=%c",ch);//輸出結(jié)果:ch=A

(以字符形式輸出)printf("ch=%d",ch);//輸出結(jié)果:ch=65

(以'A'字符的ASCII碼形式輸出)2、格式輸入:scanf()函數(shù)功能:從終端輸入任何類型的多個數(shù)據(jù)

格式:scanf("格式控制",地址表列);格式控制:由雙引號括起來的字符串,用于指定要輸入的數(shù)據(jù)的格式。1)普通字符:按原樣輸入的字符;

2)格式說明:用來指定需輸入數(shù)據(jù)的輸入格式的,其形式為:

%[<修飾符>]格式字符3.3.1格式輸出:printf()函數(shù)和scanf()函數(shù)地址表列:由若干個變量地址組成的表列。地址是由”&”運算得到的?!埃Α笔侨≈愤\算符,單目運算符,右結(jié)合性。例:&a,&chr,&i,分別表示變量a,chr,i的地址,該地址是在編譯連接時系統(tǒng)分配給變量a,chr,i的地址。3.3.1格式輸出:printf()函數(shù)和scanf()函數(shù)用于輸入的修飾符用于輸入的格式字符3.3.1格式輸出:printf()函數(shù)和scanf()函數(shù)格式輸入的使用與注意:輸入數(shù)據(jù)時采用的分隔符應(yīng)與格式控制中的分隔符一致。例1:

scanf("%d%f%d",&a,&b,&c);

格式符中無普通字符時,可用空格、Tab鍵、回車鍵作分隔符。如:123.45678↙或12(Tab)3.45(Tab)678例2:

scanf("%d,%f,%d",&a,&b,&c);

必須采用格式:12,3.45,678↙例3:

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

必須采用格式:a=12,b=345↙3.3.1格式輸出:printf()函數(shù)和scanf()函數(shù)無符號數(shù)可用%d、%o、%x

格式輸入。輸入格式符帶有*:表示該數(shù)據(jù)不賦值。

例:scanf("%d%*d%d",&a,&c);

鍵入:1234567

則a=12,c=567,34未賦值。數(shù)據(jù)輸入時不可規(guī)定精度,但可確定寬度。

例:scanf(”%3f%3c”,&a,&b);

合法。

例:scanf(”%3.2f%3c”,&a,&b);

非法。3.3.1格式輸出:printf()函數(shù)和scanf()函數(shù)用c格式符輸入字符時,空格、轉(zhuǎn)義字符均為有效字符。

scanf("%c%c%c",&a,&b,&c);

若鍵入ABC

則a=A,b=B,c=C

若鍵入ABC

則a=A,b=,c=B

若鍵入AB

則C未送,結(jié)果已出為:a=A,b=

,c=B3.3.1格式輸出:printf()函數(shù)和scanf()函數(shù)在下列情況下可認(rèn)為數(shù)據(jù)輸入結(jié)束:遇空格、回車、跳格鍵(Tab)時;遇寬度結(jié)束;非法輸入。3.3.1格式輸出:printf()函數(shù)和scanf()函數(shù)在格式控制字符串中可包含轉(zhuǎn)義字符。

例:1)printf(“1)%s\n”,“VeryGood!”);

2)printf(“2)\“%s\”\n”,“VeryGood!”);

輸出結(jié)果:VeryGood!“VeryGood!”使用scanf函數(shù)注意事項

(總結(jié))

(1)如果相鄰兩個格式控制符之間,不指定數(shù)據(jù)分隔符(如逗號、冒號等),則相應(yīng)的兩個輸入數(shù)據(jù)之間,至少用一個空格分隔,或者用Tab鍵分隔,或者輸入一個數(shù)據(jù)后,按回車,然后再輸入下一個數(shù)據(jù)。

(2)格式控制字符串中出現(xiàn)的常規(guī)字符(包括轉(zhuǎn)義字符),務(wù)必原樣輸入。

(3)為改善人機交互性,同時簡化輸入操作,在設(shè)計輸入操作時,一般先用printf()函數(shù)輸出一個提示信息,再用scanf()函數(shù)進行數(shù)據(jù)輸入。

(4)當(dāng)格式控制字符串中指定了輸入數(shù)據(jù)的域?qū)抴idth時,將讀取輸入數(shù)據(jù)中相應(yīng)的width位,但按需要的位數(shù)賦給相應(yīng)的變量,多余部分被舍棄。例如:

scanf("%d%d",&num1,&num2);

假設(shè)給num1輸入12,給num2輸入36,則正確的輸入操作為:

12□36↙

或者

12↙36↙

使用“↙”符號表示按回車鍵操作,在輸入數(shù)據(jù)操作中的作用是,通知系統(tǒng)輸入操作結(jié)束。例如:

scanf("%d:%d:%d",&h,&m,&s);

假設(shè)給h輸入12,給m輸入30,給s輸入10,正確的輸入操作為:

12:30:10↙

例如:

scanf("num1=%d,num2=%d\n",&num1,&num2);

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

num1=12,num2=36\n↙例如:將scanf("num1=%d,num2=%d\n",&num1,&num2);改為:

printf("num1=");scanf("%d",&num1);

printf("num2=");scanf("%d",&num2);例如:

scanf("%3c%3c",&ch1,&ch2);

假設(shè)輸入abcdefg↙,則系統(tǒng)將讀取的“abc”中的'a'賦給變量ch1;將讀取的"def"中的'd'賦給變量ch2。使用scanf函數(shù)注意事項(總結(jié))

(5)當(dāng)格式控制字符串中含有抑制符‘*’時,表示本輸入項對應(yīng)的數(shù)據(jù)讀入后,不賦給相應(yīng)的變量(該變量由下一個格式指示符輸入)。

(6)使用格式控制符%c輸入單個字符時,空格和轉(zhuǎn)義字符均作為有效字符被輸入。

(7)輸入數(shù)據(jù)時,遇到以下情況,系統(tǒng)認(rèn)為該數(shù)據(jù)結(jié)束:

遇到空格,或者回車鍵,或者Tab鍵。

遇到輸入域?qū)挾冉Y(jié)束。例如“%3d”,只取3列。

遇到非法輸入。比方說,在輸入數(shù)值數(shù)據(jù)時,遇到字母等非數(shù)值符號。

(8)當(dāng)一次scanf調(diào)用需要輸入多個數(shù)據(jù)項時,如果前面數(shù)據(jù)的輸入遇到非法字符,并且輸入的非法字符不是格式控制字符串中的常規(guī)字符,那么,這種非法輸入將影響后面數(shù)據(jù)的輸入,導(dǎo)致數(shù)據(jù)輸入失敗。例如:

scanf("%2d%*2d%3d",&num1,&num2);

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

假設(shè)輸入123456789↙

輸出結(jié)果為:num1=12,num2=567。

例如:

scanf("%c%c%c",&ch1,&ch2,&ch3);

假設(shè)輸入:A□B□C↙,則系統(tǒng)將字母'A'賦值給ch1,空格'□'賦值給ch2,字母'B'賦值給ch3。

例如:

scanf("%d",a);

如果輸入為:12a3↙,a的值將是12。例如:

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

如果輸入為:12a34↙,那么a的值將是12,b的值將無法預(yù)測。正確的輸入是:12,34↙

例:自增、自減運算符程序?qū)嵗?main(){inti;i=1;printf(“1)i=%d;2)i=%d;3)i=%d;4)i=%d;5)i=%d;6)i=%d;7)i=%d;\n",i,i++,i,i--,++i,i,--i);}1001100程序運行結(jié)果:1)i=1;2)i=0;3)i=0;4)i=1;5)i=1;6)i=0;7)i=0;不同的編譯系統(tǒng)對輸出表列中的求值順序不一定相同。可以從左到右,也可從右到左。

TC和BC是按從右到左進行的。main(){inta;floatb;charc;

printf("按格式%%d%%f%%c送數(shù):");scanf("%d%f%c",&a,&b,&c);printf("a=%d,b=%f,c=%c,\n",a,b,c);

printf("按格式%%d,%%f,%%c送數(shù):");scanf("%d,%f,%c",&a,&b,&c);printf("a=%d,b=%f,c=%c,\n",a,b,c);

printf("按格式%%6d%%6f%%6c送數(shù):");scanf("%6d%6f%6c",&a,&b,&c);printf("a=%d,b=%f,c=%c,\n",a,b,c);}程序運行結(jié)果:按格式%d%f%c送數(shù):23

4.5pa=23,b=4.500000,c=p,按格式%d,%f,%c送數(shù):23,4.5,pa=23,b=4.500000,c=p,按格式%6d%6f%6c送數(shù):234.5000p

a=23,b=4.500000,c=p,程序?qū)嵗?:main(){chara,b,c,d,e;scanf("%c%c%c",&a,&b,&c);scanf("%3c%3c",&d,&e);

printf("%c,%c,%c\n",a,b,c);printf("%c,%c\n",d,e);}程序?qū)嵗?:程序運行結(jié)果:1234

5

1,2,34,5程序運行結(jié)果(錯誤):1234

5

1,2,3,【例】錯誤的格式化輸出

#include<stdio.h>voidmain(){

inta=10,b=100;floatf=2;

printf("a=%d,b=%d\n",f,b);

printf("a=%f,b=%d\n",a,b);

printf("a=%ld,b=%d\n",120,b);}a=2.000000,b=100a=10.000000,b=100a=120,b=100期望的運行結(jié)果:a=0,b=0a=0.000000,b=-192a=6553720,b=-28770實際的運行結(jié)果(BC3.1下):a=0,b=1073741824a=0.000000,b=2012780960a=120,b=100實際的運行結(jié)果(VC6.0下):Why?輸出float型數(shù)據(jù)f,卻使用了%d,a的不正常輸出會影響到下一個表達式的正常輸出輸出int型數(shù)據(jù)a,卻使用了%f

,a的不正常輸出會影響到下一個表達式的正常輸出

輸出int型數(shù)據(jù)120,卻使用了%ld。在BC3.1下,因為整型和長整型所占內(nèi)存單元的大小不同(整型占2字節(jié),長整型占4字節(jié)),整型不會自動轉(zhuǎn)換成長整型,所以不會正常輸出120,同時也會影響到下一個表達式的輸出。但在VC6.

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論