




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第3章最簡單的C程序設(shè)計格式化輸入輸出學習內(nèi)容關(guān)鍵字:const如何使用scanf()和printf()讀取和顯示字符串如何使用getchar()和putchar()讀取和顯示單個字符使用C預處理器的#define指令和ANSI
C的const修飾符創(chuàng)建符號常量。前導程序#include<stdio.h>#include<math.h>intmain(){doublea,b,c,disc,x1,x2,p,q;
scanf("%lf%lf%lf",&a,&b,&c);disc=b*b–4*a*c;p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;
printf("x1=%7.2f\nx2=%7.2f\n",x1,x2);return0;}常量和C預處理器有時需要在程序中使用常量,例如:circumference=3.14159*diameter;circumference=pi*diameter;為什么使用符號常量一個名字比一個數(shù)字獲得的信息更多owed=0.015*housevalue;owed=taxrate*housevalue;修改方便常量和C預處理器如何建立符號常量聲明一個變量,并設(shè)置該變量等于所需的常量floattaxrate;taxrate=0.015;C預處理器#defineTAXRATE0.015格式:首先是#define,其次是常量的符號名,接著是常量的值#defineNAMEvalueconst修飾符常量和C預處理器#defineTAXRATE0.015intmain(){...bill=TAXRATE*sum;...}輸入的代碼常量和C預處理器intmain(){...bill=0.015*sum;...}預處理器的工作編譯器常量和C預處理器/*pizza.c--usesdefinedconstantsinapizzacontext*/#include<stdio.h>#definePI3.14159intmain(void){floatarea,circum,radius;printf("Whatistheradiusofyourpizza?\n");scanf("%f",&radius);area=PI*radius*radius;circum=2.0*PI*radius;printf("Yourbasicpizzaparametersareasfollows:\n");printf(“circumference=%1.2f,area=%1.2f\n”,circum,
area);return0;}常量和C預處理器#define語句也可以用于定義字符和字符串常量#defineBEEP‘\a’#defineTEE‘T’#defineESC‘\033’#defineOOPS“Nowyouhavedoneit!”符號名后面的所有內(nèi)容都被用來替代它/*下面的定義是錯誤的*/#defineTOES=20digits=fingers+TOES;digits=fingers+=20;常量和C預處理器const修飾符創(chuàng)建符號常量的第二種方法constintMONTHS=12;//MONTHSasymbolicconstantfor12常量和C預處理器系統(tǒng)定義的明顯常量頭文件limits.h:提供有關(guān)整數(shù)類型的大小限制的詳細信息例如: #defineINT_MAX+32767 #defineINT_MIN-32768頭文件float.h:提供有關(guān)浮點類型的大小限制的詳細信息例如:FLT_DIG:float類型支持的有效位的個數(shù)DBL_DIG:double類型支持的有效位的個數(shù)LDBL_DIG:longdouble類型支持的有效位的個數(shù)常量和C預處理器//defines.c--usesdefinedconstantsfromlimit.handfloat.#include<stdio.h>#include<limits.h>//integerlimits#include<float.h>//floating-pointlimitsintmain(void){printf("Somenumberlimitsforthissystem:\n");printf("Biggestint:%d\n",INT_MAX);printf("Onebyte=%dbitsonthissystem.\n",CHAR_BIT);printf("Largestdouble:%e\n",DBL_MAX);printf("Smallestnormalfloat:%e\n",FLT_MIN);printf("floatprecision=%ddigits\n",FLT_DIG);printf("floatepsilon=%e\n",FLT_EPSILON);
return0;}研究和利用printf()和scanf()printf()函數(shù)輸出函數(shù)請求printf()打印變量的指令取決于變量的類型。轉(zhuǎn)換說明:以%號開始的特定字符,例如:%d:整數(shù)%c:字符研究和利用printf()和scanf()轉(zhuǎn)換說明輸出%a(%A)浮點數(shù)、十六進制數(shù)字和p-記數(shù)法(C99)%c一個字符%d(%i)有符號十進制整數(shù)%e(%E)浮點數(shù)、e-記數(shù)法%f浮點數(shù)、十進制記數(shù)法%g(%G)根據(jù)數(shù)值不同自動選擇%f或%e。%e格式在指數(shù)小于-4或者大于等于精度時使用%o無符號八進制整數(shù)%p指針%s字符串%u無符號十進制整數(shù)%x(%X)十六進制整數(shù)%%打印一個百分號研究和利用printf()和scanf()/*printout.c--usesconversionspecifiers*/#include<stdio.h>#definePI3.141593intmain(void){intnumber=5;floatespresso=13.5;intcost=3100;printf(“The%dCEOsdrank%fcupsofespresso.\n”,number,
espresso);printf("Thevalueofpiis%f.\n",PI);printf("Farewell!thouarttoodearformypossessing,\n");printf("%c%d\n",'$',2*cost);
return0;}研究和利用printf()和scanf()使用printf()使用格式: printf(Control-string,item1,item2,…);item1,item2…:要打印的項目,可以是變量、變量和表達式控制字符串:一個描述項目如何打印的字符串。每個要打印的項目包含一個轉(zhuǎn)換說明符。實際要打印的字符。轉(zhuǎn)換說明。研究和利用printf()和scanf()研究和利用printf()和scanf()使用printf()只打印一個語句,不需要任何轉(zhuǎn)換說明;
printf("Farewell!thouarttoodearformypossessing,\n");只打印數(shù)據(jù),無須加入任何說明內(nèi)容printf("%c%d\n",'$',2*cost);打印%,需要用兩個%號:%%pc=2*6;printf(“Only%d%%ofSally’sgribbleswereedible.\n”,pc);研究和利用printf()和scanf()printf()的轉(zhuǎn)換說明修飾符:可以在%和定義轉(zhuǎn)換字符之間插入修飾符對基本的轉(zhuǎn)換說明加以修改。標志:5種標志(-、+、空格、#和0)??梢杂辛銈€或多個digit(s):字段寬度的最小值.digit(s):精度h:和整數(shù)轉(zhuǎn)換符一起使用,表示(unsigned)short
inthh:和整數(shù)轉(zhuǎn)換符一起使用,表示signed(unsigned)charl:和整數(shù)轉(zhuǎn)換符一起使用,表示(unsigned)long
intll:和整數(shù)轉(zhuǎn)換符一起使用,表示(unsigned)long
long
intL:和浮點說明符一起使用,表示longdoublez:和整數(shù)轉(zhuǎn)換符一起使用,表示一個size_t值研究和利用printf()和scanf()printf()的轉(zhuǎn)換說明修飾符標志-:項目是左對齊的。+:有符號的值若為正,則顯示正號;若為負顯示減號符號(空格):有符號的值若為正,則顯示帶前導空格;若為負顯示減號符號+標志會覆蓋空格標志研究和利用printf()和scanf()printf()的轉(zhuǎn)換說明修飾符標志#:使用轉(zhuǎn)換說明的可選形式。%o:以0開始%x或%X:以0x或0X對于所有的浮點形式,#保證了即使不跟任何數(shù)字,也打印一個小數(shù)點字符。%g或%G:防止尾隨零被刪除0:對于所有的數(shù)字格式,用前導零而不是用空格填充字段寬度。如果出現(xiàn)-標志或者指定了精度(對于整數(shù))則忽略該標志研究和利用printf()和scanf()printf()的轉(zhuǎn)換說明修飾符.digit(s)%e、%E和%f轉(zhuǎn)換:將小數(shù)點的右邊打印的數(shù)字的位數(shù)。%g和%G轉(zhuǎn)換:有效數(shù)字的最大位數(shù)。%s轉(zhuǎn)換:將要打印的字符的最大數(shù)目。整數(shù)轉(zhuǎn)換:將要打印的數(shù)字的最小位數(shù);如果有必要,要使用前導0來達到這個位數(shù)。只使用”.”表示其后跟隨一個零,例如%.f與%.0f相同使用修飾符和標志示例/*width.c--fieldwidths*/#include<stdio.h>#definePAGES931intmain(void){printf("*%d*\n",PAGES);printf("*%2d*\n",PAGES);printf("*%10d*\n",PAGES);printf("*%-10d*\n",PAGES);
return0;}*931**931**
931**931
*使用修飾符和標志示例//floats.c--somefloating-pointcombinations#include<stdio.h>intmain(void){constdoubleRENT=3852.99;//const-styleconstant
printf("*%f*\n",RENT);printf("*%e*\n",RENT);printf("*%4.2f*\n",RENT);printf("*%3.1f*\n",RENT);printf("*%10.3f*\n",RENT);printf("*%10.3e*\n",RENT);printf("*%+4.2f*\n",RENT);printf("*%010.2f*\n",RENT);
return0;}*3852.990000**3.852990e+03**3852.99**3853.0**
3852.990**3.853e+03**+3852.99**0003852.99*使用修飾符和標志示例/*flags.c--illustratessomeformattingflags*/#include<stdio.h>intmain(void){printf("%x%X%#x\n",31,31,31);printf("**%d**%d**%d**\n",42,42,-42);printf("**%5d**%5.3d**%05d**%05.3d**\n",6,6,6,6);
return0;}1f1F0x1f**42**42**-42****6**006**00006**006**使用修飾符和標志示例/*strings.c--stringformatting*/#include<stdio.h>#defineBLURB"Authenticimitation!"intmain(void){printf("/%2s/\n",BLURB);printf("/%24s/\n",BLURB);printf("/%24.5s/\n",BLURB);printf("/%-24.5s/\n",BLURB);
return0;}/Authenticimitation!//Authenticimitation!//Authe//Authe/不匹配的轉(zhuǎn)換/*intconv.c--somemismatchedintegerconversions*/#include<stdio.h>#definePAGES336#defineWORDS65618intmain(void){shortnum=PAGES;shortmnum=S;printf("numasshortandunsignedshort:%hd%hu\n",num,num);printf("-numasshortandunsignedshort:%hd%hu\n",mnum,mnum);printf("numasintandchar:%d%c\n",num,num);printf("WORDSasint,short,andchar:%d%hd%c\n“,WORDS,WORDS,WORDS);return0;}numasshortandunsignedshort:336336-numasshortandunsignedshort:-33665200numasintandchar:336PWORDSasint,short,andchar:6561882R不匹配的轉(zhuǎn)換試圖把一個大于255的值轉(zhuǎn)換成字符,將發(fā)生什么事情不匹配的轉(zhuǎn)換/*floatcnv.c--mismatchedfloating-pointconversions*/#include<stdio.h>intmain(void){floatn1=3.0;doublen2=3.0;longn3=2000000000;longn4=1234567890;printf("%.1e%.1e%.1e%.1e\n",n1,n2,n3,n4);printf("%ld%ld\n",n3,n4);printf("%ld%ld%ld%ld\n",n1,n2,n3,n4);
return0;}3.0e+003.0e+003.1e+461.7e+266200000000012345678900107426611201074266112不匹配的轉(zhuǎn)換參數(shù)傳遞堆棧printf()的返回值返回值:由函數(shù)計算并返回給調(diào)用程序的值??梢再x給變量可以用于計算可以作為參數(shù)傳遞printf()函數(shù)的返回值:打印輸出用途的附帶功能,通常很少用到。正確情況:返回打印的字符的數(shù)目有輸出錯誤:返回一個負數(shù)printf()的返回值/*prntval.c--findingprintf()'sreturnvalue*/#include<stdio.h>intmain(void){intbph2o=212;intrv;rv=printf("%dFiswater'sboilingpoint.\n",bph2o);printf("Theprintf()functionprinted%dcharacters.\n",rv);return0;}212Fiswater'sboilingpoint.Theprintf()functionprinted32characters.打印較長的字符串可以在多行放置一個語句,例如:
printf("Theprintf()functionprinted%dcharacters.\n",rv);不能在引號括起來的字符串中間斷行。例如:printf("Theprintf()functionprinted%d
characters.\n",rv);字符串中使用\n符號來表示換行字符,但在字符串中不能通過回車鍵產(chǎn)生實際的換行字符。如果必須分割一個字符串,有三種方法供選擇打印較長的字符串/*longstrg.c--printinglongstrings*/#include<stdio.h>intmain(void){printf("Here'sonewaytoprinta");printf("longstring.\n");printf("Here'sanotherwaytoprinta\longstring.\n");printf("Here'sthenewestwaytoprinta""longstring.\n");/*ANSIC*/return0;}打印較長的字符串三種方法使用多個printf()語句用反斜線符號(/)和回車鍵組合來結(jié)束第一行。下一行要從最左邊開始,不能縮進采用字符串連接的方法:一個雙引號后面跟著另一個用雙引號引起來的字符串,而且兩者之間僅有空白字符分隔。例如:printf("Hello,younglovers,whereveryouare.");printf(“Hello,young”
“l(fā)overs”
",whereveryouare.");printf("Hello,younglovers"
",whereveryouare.");使用scanf()scanf()函數(shù):可以讀取各種格式的數(shù)據(jù)把輸入的字符串轉(zhuǎn)換成各種形式:整數(shù)、浮點數(shù)、字符和C的字符串。printf()函數(shù)把整數(shù)、浮點數(shù)、字符和C的字符串轉(zhuǎn)換為在屏幕上顯示的字符scanf()函數(shù)控制字符:輸入將被轉(zhuǎn)換成的格式參數(shù)列表:指向變量的指針基本變量類型的值:變量名前加上一個&字符數(shù)組:不要使用&使用scanf()//input.c--whentouseinclude<stdio.h>intmain(void){intage;//variablefloatassets;//variablecharpet[30];//stringprintf("Enteryourage,assets,andfavoritepet.\n");scanf("%d%f",&age,&assets);//usethe&herescanf("%s",pet);//no&forchararrayprintf("%d$%.2f%s\n",age,assets,pet);
return0;}使用scanf()scanf()函數(shù)使用空格(換行、制表符和空格)來決定怎樣把輸入分成幾個字段。依次把轉(zhuǎn)換說明與字段相匹配,并跳過它們之間的空格。唯一的例外就是%c說明,即使下一個字符是空白字符,它也讀取那個字符。使用scanf()scanf()函數(shù)所用的轉(zhuǎn)換說明字符與printf()函數(shù)所用的幾乎相同。主要區(qū)別:printf()函數(shù):%f、%e、%E、%g和%G同時用于float類型和double類型scanf()函數(shù):%f、%e、%E、%g和%G只用于float類型,用于double類型時要求使用l修飾符。使用scanf()轉(zhuǎn)換說明符意義%c字符%d有符號十進制整數(shù)%e,%f,%g,%a浮點數(shù)%E,%F,%G,%A浮點數(shù)%i有符號十進制整數(shù)%o有符號八進制整數(shù)%p指針(地址)%s字符串%u無符號十進制整數(shù)%x,%X有符號十六進制整數(shù)使用scanf()scanf()的轉(zhuǎn)換修飾符*:滯后賦值digit(s):最大字段寬度,在達到最大字段寬度或者遇到第一個空白字符時停止對輸入項的讀取hh:把整數(shù)讀作signedchar或unsignedcharll:把整數(shù)讀作longlong或unsignedlonglong使用scanf()scanf()的轉(zhuǎn)換修飾符h、l或L:%hd和%hi:shortint%ho、%hx和%hu:unsignedshortint%ld和%li:longint%lo、%lx和%lu:unsignedlongint%le、%lf和%lg:double%Le、%Lf和%Lg:longdouble%d、%i、%o和%x:int%e、%f和%g:float從scanf()的角度看輸入假定使用一個%d說明符讀取一個整數(shù)開始每次讀取一個輸入字符,跳過空白字符(空格、制表符和換行符)直到遇到一個非空白字符。如果發(fā)現(xiàn)一個數(shù)字字符或者一個符號(+或-),那么將它保存之并讀取下一個字符;如果接下來的字符是一個數(shù)字,保存這個數(shù)字,并讀取下一個字符。持續(xù)讀取和保存字符直到遇到一個非數(shù)字的字符。已讀到整數(shù)的尾部。非數(shù)字字符放回輸入,下一次讀取時,從這個字符開始。計算讀取的數(shù)字的數(shù)值,放到指定變量中從scanf()的角度看輸入假定使用一個%d說明符讀取一個整數(shù)如果使用了字段寬度,那么scanf()在字段結(jié)尾或者在第一個空白字符處終止。如果第一個非空白字符不是數(shù)字,比如是A,停止在那里(即使使用帶有多個說明符的scanf()語句,并把它放回輸入沒有把任何值賦給指定的變量程序下一次讀取時,從這個位置開始其他的數(shù)字說明符讀取輸入與使用%d情況相同。從scanf()的角度看輸入%s說明符:讀取一個單詞非空白字符以外的所有字符都是可接受的跳過所有空白字符直到遇到第一個非空白字符保存再次遇到空白字符之前的所有字符不能通過字段寬度使得scanf()用一個%s說明符讀取多于一個字的輸入把字符串保存到指定的數(shù)組中時,添加終止的’\0’使得數(shù)組內(nèi)容成為一個C字符串%c說明符:讀取任意的一個字符如果下一個輸入字符是一個空格或者換行符,將會把這個空格或者換行符賦給指定的變量;不會跳過空白字符格式字符串中的常規(guī)字符scanf("%d,%d",&n,&m);輸入:88,12188,12188,121scanf("%d,%d",&n,&m);輸入:88,12188,12188,121除了空格字符之外的普通字符一定要與輸入字符串準確匹配。例如:格式字符串中的常規(guī)字符除了%c以外的說明符會自動跳過輸入項之前的空格scanf(“%d%d”,&n,&m);scanf(“%d%d”,&n,&m);在格式字符串中%c之前有一個空格,會跳到第一個非空白字符處scanf(“%c”,&ch):讀取第一個字符scanf(“
%c”,&ch):讀取第一個非空字符scanf()的返回值返回成功讀入的項目的數(shù)目沒有讀取任何項目,返回值為0檢測到“文件結(jié)尾”,返回EOF(stdio.h)printf()和scanf()的*修飾符printf()函數(shù)的*修飾符使用*代替字段寬度的數(shù)字,必須使用一個參數(shù)告訴函數(shù)字段寬度應(yīng)該是什么例如:%*d,%*.*fprintf()和scanf()的*修飾符/*varwid.c--usesvariable-widthoutputfield*/#include<stdio.h>intmain(void){unsignedwidth,precision;intnumber=256;doubleweight=242.5;printf("Whatfieldwidth?\n");scanf("%d",&width);printf("Thenumberis:%*d:\n",width,number);printf("Nowenterawidthandaprecision:\n");scanf("%d%d",&width,&precision);printf("Weight=%*.*f\n",width,precision,weight);printf("Done!\n");
return0;}Whatfieldwidth?6Thenumberis
:
256:Nowenterawidthandaprecision:8
3Weight=
242.500Done!printf()和scanf()的*修飾符scanf()函數(shù)的*修飾符把它放在%和說明符字母之間時,它使函數(shù)跳過相應(yīng)的輸入項目。例如:%*d,%*fprintf()和scanf()的*修飾符/*skip2.c--skipsoverfirsttwointegersofinput*/#include<stdio.h>intmain(void){intn;printf("Pleaseenterthreeintegers:\n");scanf("%*d%*d%d",&n);printf("Thelastintegerwas%d\n",n);
return0;}Pleaseenterthreeintegers:2004
2005
2006Thelastintegerwas2006printf的用法提示在想打印幾列數(shù)據(jù)時,指定固定寬度是很有用的默認的字段寬度是數(shù)字的寬度,例如:printf("%d%d%d\n",val1,val2,val3);執(zhí)行多次:122341222452322334232210001如果指定足夠大的固定寬度使輸出更加整齊清晰printf("%9d%9d%9d\n",val1,val2,val3);結(jié)果:
12
234
1222
4
5
23
22334
2322
10001printf的用法提示如果語句中要嵌入一個數(shù)字,那么指定和期望數(shù)字寬度同樣小或更小的字段寬度通常會比較有用例如:printf("CountBepporan%.2fmilesin3hours.\n",distance);可能產(chǎn)生:CountBepporan10.22milesin3hours.如果改成%10.2f:CountBepporan
10.22milesin3hours.
字符數(shù)據(jù)的輸入輸出1.用putchar函數(shù)輸出一個字符從計算機向顯示器輸出一個字符putchar函數(shù)的一般形式為:putchar(c)字符數(shù)據(jù)的輸入輸出例3.8先后輸出BOY三個字符。解題思路:定義3個字符變量,分別賦以初值B、O、Y用putchar函數(shù)輸出這3個字符變量的值字符數(shù)據(jù)的輸入輸出#include<stdio.h>intmain(){chara='B',b='O',c='Y';putchar(a);putchar(b);putchar(c);putchar('\n');return0;}向顯示器輸出字符B向顯示器輸出換行符字符數(shù)據(jù)的輸入輸出#include<stdio.h>intmain(){chara='B',b='O',c='Y';putchar(a);putchar(b);putchar(c);putchar('\n');return0;}改為inta=66,b=79,c=89;字符數(shù)據(jù)的輸入輸出putchar(’\101’)(輸出字符A)putchar(’\’’)(輸出單撇號字符’)字符數(shù)據(jù)的輸入輸出2.用getchar函數(shù)輸入一個字符向計算機輸入一個字符getchar函數(shù)的一般形式為:getchar()字符數(shù)據(jù)的輸入輸出
例3.9從鍵盤輸入BOY三個字符,然后把它們輸出到屏幕。解題思路:用3個getchar函數(shù)先后從鍵盤向計算機輸入BOY三個字符用putchar函數(shù)輸出字符數(shù)據(jù)的輸入輸出#include<stdio.h>intmain(){chara,b,c;a=getchar();
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度高空作業(yè)安全協(xié)議承諾書與高空作業(yè)設(shè)備檢測維修合同
- 2025年度智慧城市保安員聘用合同范本
- 2025年度高校學生社會實踐基地實習服務(wù)合同
- 2025年普洱貨運從業(yè)資格證考些什么內(nèi)容
- 2025年福建貨運從業(yè)資格證考試試題
- 2025年沈陽貨運從業(yè)資格證考試題答案大全及解析
- 2025年金華年貨運從業(yè)資格證考試從業(yè)從業(yè)資格資格題庫及答案
- 擬發(fā)言稿進行發(fā)言
- 辦公室文印服務(wù)合同
- 辦公室安全指導書
- 古詩詞誦讀《客至》課件+2023-2024學年統(tǒng)編版高中語文選擇性必修下冊
- 閩教版2023版3-6年級全8冊英語單詞表
- 《橋梁工程計算書》word版
- 學術(shù)論文的寫作與規(guī)范課件
- 香港牛津新魔法Newmagic3AUnit4Mycalendar單元檢測試卷
- 中考《紅星照耀中國》各篇章練習題及答案(1-12)
- 中華人民共和國特種設(shè)備安全法(節(jié)選)
- 長RP心動過速的心電圖鑒別診斷
- 施工現(xiàn)場安全隱患檢查(附標準規(guī)范)
- 吞咽障礙及吞咽功能的評定
- 一年級數(shù)學三分鐘演講.ppt
評論
0/150
提交評論