计算机程式讲义_第1页
计算机程式讲义_第2页
计算机程式讲义_第3页
计算机程式讲义_第4页
计算机程式讲义_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

If算檄程式^羲

10小日寺^^C^言

不要完全相信害上及老白币所^的内容,只有自己^作才是真的。

李蝌Sep.22,1997

参考耆目:1o小畤擘曾c^言[修言]版]施保旭著儒林出版社1997年6月初版3版

内容

■第一章Cgg言曾介舆TurboC的使用

■第二章C程式的结横

■第四章基本输出入函式

■第五章流程BI典抉择指令

■第六章退圈舆自勤重禳

■第七章障列典指襟

■第八章函数典呼叫

■第九章槽案存取

■第一章C告吾言曾介舆TurboC的使用

◎C^言的侵黑占:

O效率高:C^言的褊群器曾崖生最小的程式碣。

O可摘性/移植性高:乐罐遇些^的修改,可以在不同的平台使用。

O功能强而有弹性。

O需要1出意的束西很少,易於嘉作。

◎TurboC的安装:已安装在擘校主檄。

TurboC的璟境言殳定:TurboC安装的目^必须^定在PATH的系统燮数。

如:PATH=C:\TC;C:\DOS;……如此TC才能正常工作。

◎TurboC的使用

只要言殳定好PATH燮数,在DOS提示虢输入TC,就可以孰行TurboC的整合璟境了。TC揩

褊辑(Edit)、编群(Compile)、速结(Link)、除^g(Debug)、槽案管理(File)、…等等的功能整合在一起,

所以我俯耦之焉整合琪境。

最好先用CD的指令,建更工作目^到你要嘉C的目^,再轨行TC,道檬所崖生的槽案,就曾

桂道他目^^面,便於借份典管理。

◎移勤游襟

方向维一门―可以用来移勤游檄。

◎删除文字

揩游本票移到你要删除的文字上,再按下Del维即可。

招游木票移到要删除文字的右遏,再按下BackSpace(6)退位维也可以。

◎载入文字槽(C^言原始礁槽)

按下功能维F3或按F10逗File-Load就曾出现一彳固前冏视窗要求输入槽名:

------------LoadFileName--------------

*.c

其中的槽名可以使用离用字元(*或?),或直接指定你要的槽名。

若是使用离用字元,TC曾再秀出一他视窗^你逗撵所要的槽案,

你可以用方向维移勤反白光棒,按Enter维即是逗撵反白的槽案。

◎储存编辑的文字槽

按下功能维F2或按F1051File-Save就曾^存目前区扁制W案。

若你想另外取一他槽名,加加以存槽,就必须按F1031File-Writeto

就曾出现一彳固前冏视窗要求输入槽名:

输入新的槽名,按下Enter即可。

◎编葬加轨行目前的所褊辑的程式

TurboC是一槿言系统,你所嘉的程式,

TC的褊群(pass1)及速结(pass2)彼,崖生可轨行槽(.exe),才能在PC上轨行。

按下Ctrl+F9或按F10逗RunfRun,

TC曾褊群目前所褊辑的程式,如果没有金昔^^生,TC曾立即轨行所褊辑的程式。

TC在轨行完程式接,曾立刻切换回到TC的整合璟境,如果你遢想看刚才程式轨行的结果,可

以按下Alt+F5或按F10逗Run-Userscreen,就曾切换到轨行重面,再按下任何一维,

就曾回到TC的整合璟境。

◎跳到另一他视窗

按Alt-1'Alt-2•••Alt-9、Alt-0

◎系吉束TurboC

按下Alt+X或按F10逗File—Quit便可结束TurboC。

若你遢有已编修向未^存的槽案,TC曾冏你要不要存。

-----------------Verify-----------------------------

NONAME.Cnotsaved.Save?(Y/N)

要存就按丫,不想存就按N。

■第二章C程式的结情

◎C程式的结横:

第一歹[|:#include<stdio.h>

是用来定羲一些函式的原型(prototype)、瓷幽吉瓶struct)或是常州constant)。

C在使用燮数之前,^建数都要先行宣告(declare)才可使用,而使用函式也是一檬,必须

先宣告它的原型才可以。宣告函式的原型是篇了^C能在编辑畤作资料的型别检查,以减

少金昔的彝生。内建的函式原型定羲都放在C:\TC\INCLUDE\*.H中,用include

<stdio.h>就曾符C:\TC\INCLUDE\stdio.h道彳固槽引含。stdio.h由槽名可知道是跟襟津输

出入(standardI/O)有H,槽内定羲了槽案输出入、螯幕输出、维篮输入等相函式的原型、

资料结情及常数。本例中的printf()就腐於木票型翰出的函式。引含.h槽她不曾^你的轨

行槽燮大或是燮慢,而且逮能翩&器作正硅的型别检查,所以要叠成嘉include的雪惯。

☆雎然在某些状,兄下,不加include<>所筐生的轨行槽,一檬可以正常的轨行。

第二列:main()

main()就是主程式。程式在轨行畤,就是由道他函式^始轨行。在C^言中,内定的型

别是int,所以原来的main()相常於是intmain(int)

★在逼5里正硅的嘉法^^是voidmain(void),因篇在其固碗里的程式中,波有回傅

值,也没有输入参数。

☆回傅值,是指一彳固函式在轨行接停回的数值。

☆输入参数,是指一彳固函式可由参数决定轨行的结果,适值1部分在第八章中有辞初1的^明。

第三列:{

第五列:}

在第三列及第五列之,匾於main()函式的程式礁。

(表示程式由此^始,}表示程式到此结束。

第四列:printf("Hello!");

是本程式要求系统做勤作的指令,耦之篇「叙述」(statement)。在C^言中,每一叙述都

以分虢⑴做:B结束。在造彳固程式中,利用缩排的方式,使程式的次分明,增加可^性。

在言中,位字元(如:空白(space)、定位(tab)及换列字元)在编群日寺都曾被忽略,

所以可遹畤加入^位字元,使程式好看一黠。要注意的是,别把一彳固完整的低111拆^,如:

main、printf等,造些字本身是一他完整的他醴,不可予以拆^。而在各他他醴之^,可以

任意加入^位字元。

☆C言吾言中的英文字母是(casesensitive)有分大小瘾的,printf。舆PrintF()不同,内建

的函式大多是小嘉的,你自己嘉的函式,刖可以用大嘉来做国隔。

◎printf的功用

printf()的功用是在螯幕上输出资料。在TC中,在编辑显内输入printf,再揩游本票移到

printf逼他|字上,按下Ctrl+F1就曾看到以下Help重面:

Help

printf是招格式化的资料输出到

printf:formattedoutputtostdoutstdout

intprintf(constchar*format,...);printf的^法

要用printf

Prototypeinstdio.hinclude的槽

Printformatsavariablenumberofarguments使用^明:不同的格式须要不同

accordingtotheformat,andsendstheoutputto的参数,造些资料曾送到

stdout.Returnsthenumberofbytesoutput.Inthestdout°傅回值是输出的byte

eventoferror,itreturnsEOF.

数,若彝生^^即J傅回EOF

Seealsoecvt,fprintf,putc,puts,scanf可参考相^指令

在用TC的整合璟境中,只要招游檄移到想迤一步了解的指令或内建的函式上,

按下Ctrl+F1就可以叫出TC的Help1兑明视窗,得到^指令或函式的相SB兑明。

printf的|吾法:intprintf(constchar*format,...);

其中constchar*format指的是一他l格式化的字串。const是常数的意思,在此表示

format道他字串指檄傅入printf函式彼,它的值不曾被改燮。

…指的是不定参数,参数的数目取决於format字串的内容,造些参数,通常是一些你要秀

出来的燮数。:printf("输出格式(含控制字串)",要印出的资料);

在C1吾言中是用曼引虢(")来引含字串,也就是在曼引虢内的资料,是一他字串。本章只介

貂%d道彳固控制字串,其他的控制字串在第四章曾t善到。%d表示以整数10迤位的方式

秀出资料。在输出格式(含控制字串)内有黑彳固%d,在要印出的资料内就要有黑彳固整数来望寸

我什号以第四列的叙述作^明:

printf("%d+%d=%d\n",8,2,8+2);

在输出格式(含控制字串)内有3彳固%d,所以在要印出的资料的部分有8,2,及8+2三他整数封

m,所以输出来的结果就是8+2=10

在输出格式(含控制字串)的最彳爰有\n符虢,道是一彳固控制字元,表示要更换到下一列,其他的

控制字元在第四章曾提到。

若符本例中的\n都删除,那秀出的结果曾像道檬子:

8+2=108-2=68*2=168/2=4

◎C的四期Jig算

重月第^言用的四即建算符虢黑乎都是相同的:

四^^算符虢息、我靶例结果

+加法4+26

-减法(或负虢)4-22

*

乘法4*28

/除法4/22

++燮数值加1i++或++ii值加1

燮数值减1i”或一iiffiM1

%整数除法的绘数4%20

在耆中提到c1吾言没有提供次方的功能,指的是在某些重月翻吾言可以用**表示次方,如:2**

3,表示2的3次方;有的用人表示,如:2A8,表示2的8次方。在C言吾言,没有建

算符虢可以表示次方,但是C1吾言有提供次方的函式:pow()>pow(2,3)表示2的3次方。

一他I式子如果有多值1^1算的^,C是以先乘除彳爰加减的方法来建算,常然我优也可以用括虢()来

改燮造他法期」,只要有括虢,就侵先^算。另外,在C^言内中括虢[]及大括虢{}是有其他

的用途,所以在作数^^算畤,只要用括虢,就只能用小括虢(),小括虢可以多隔,C在^算畤,

是由最内Jf始^算。

靶例:(1+2*(3+4))*5-6*7/2+8

=(1+2*(7))*5-6*7/2+8

=(15)*5-6*7/2+8

=75-42/2+8

=75-21+8

=62

◎解(Comments)

通常老白市曾要求初擘者在程式的每一列加上注解,道是篇了^初擘者知道自己在嘉些什麽程

式碣,了解焉什麽要道檬嘉,而不只是照著耆Keyin程式。嘉注解有助於自己了解程式的

内容,便於日彼的修改。但嘉解封於某些程式^^自市而言可^是一槿噩萝,因禹嘉注解所

花的畤可能曾典嘉程式的畤相去不逮,言忍禹嘉注解只是在浪费畤。封一■(固相常好的程

式^^自币而言,也^^注解真的是浪费日寺,因禹好的程式礁本身就已^^含了解,道也

是嘉程式相常高的境界。封一般的程式言殳言伯币而言,嘉一些解遢是比较好的作法,特别是

某些程式礁是你花了一段畤IW才想到的「特殊」方法,加上一些注解,明一下道彳固「特殊」

的方法,以彼要修改才能快速迤入状况,否即,你可能曾佩服自己富日寺是如何想到的道他方

法,又再花一段畤才知道自己在嘉些什麽程式礁。

^了道麽多解的正反面(正面居多嵋俞^,在C言吾言中要如何嘉解呢?只要用/*和*/

招你要的I主解内容包起来就可以了。C在褊群日寺,/**/内的资料略去,就如同1周位字

元一檄。唯一的例外是:常/**/在一^^引虢"内日寺,它什号就腐於道^^引虢所包含的字

串。在C++言吾言中即可用〃常注解.

comments.corcomments.cpp靶例槽名

1#include<stdio.h>/*prototype:printf()*/靶例原始礁

2voidmain(void)//mainprogram

3(

4/*所有的程式礁都燮成曾主解,所以道他I程式目前是空的*/

5/*printf("%d+%d=%d\n",8,2,8+2);*/

6/*printf("%d-%d=%d\n",8,2,8-2);

7printf("%d*%d=%d\n",8,2,8*2);

8printf("%d/%d=%d\n",8,2,8/2);//division

9*/

10}〃endofprogram

靶例轨行结果

◎巢H犬注解(NestedComments)

nestcomO.c

1#include<stdio.h>

2voidmain(void)

3(

4/*他程式必须把巢状i£解的^定打^,才不曾有*/

5/*

6printf("%d+%d=%d\n",8,2,8+2);

7/*printf("%d-%d=%d\n",8,2,8-2);*/

8printf("%d*%d=%d\n",8,2,8*2);

9printf("%d/%d=%d\n",8,2,8/2);

10*/

11}

上面的例子,有四系且注解/**/,其中第三条且及第四系且的注解之^有部分重叠。想要Compile

有^^,必须第5列的/*舆第10列的*/配,也就是第5列到第10列都是注解;另外第7

列的/*舆第7列的*/配,也就是第7列是注解。道槿注解方式,我年号耦之扁巢状注解。

TurboC内定是不可使用巢状注解的,上面的例子曾是第5列的/*典第7列的*/配,结果

在第10列的*/曹建成是多绘的,造成Compile。

打^巢月犬注解的方法:

按下F10-Options—Compiler—Source—NestedcommentsOff

招OffOn就可以了。

◎巢月犬解的使用畤械

在前面的例子只是焉了^明巢状房主解,也^你曾受得适檬的用法是自找麻烦,但是以下的例子,你

就曾言忍篇有巢月犬注解的功能逮是比事交好的。在nestcoml.c中,每一列的printf();彳爰面都加上了

注解。若要把造黑列程式燮成注解,不使用巢状解,就曾像nestcom2.c一檬,必须在每一列

的printf();前彳爰再加上/**/,若是使用巢升底主解,就像nestcom3.c一檬,只要在造黑列的前彳爰

加/**/就可以了。

nestcoml.c

#include<stdio.h>/*prototype:printf()*/

voidmain(void){

/*道彳固程式在每一他1叙述彳麦都加上了1主解*/

printf("%d+%d=%d\n",8,2,8+2);/*8+2=10*/

printf("%d%d=%d\n",8,2,8-2);/*8-2=6*/

pnntf("%d*%d=%d\n",8,2,8*2);/*8*2=16*/

printf("%d%d=%d\n",8,2,8/2);/*8/2=4*/

)

nestcom2.c

#include<stdio.h>/*prototype:printf()*/

voidmain(void){

/*道他[程式不用把巢月犬注解的定打^,也不曾有*/

/*printf("%d+%d=%d\n",8,28+2);*//*8+2=10*/

/*pnntf("%d-%d%d\n",8,2,8-2);*//*8-2=6*/

/*printf("%d*%d%d\n",8,2,8*2);*//*8*2=16*/

/*printf("%d/%d%d\n",8,2,8/2);*//*8/2=4*/

nestcom3.c

#include<stdio.h>/*prototype:printf()*/

voidmain(void){

造彳固程式也必须把巢月犬注解的定打^,才不曾有^^*/

pnntf("%d+%d=%d\n",8,2,8+2);/*8+2=10*/

printf("%d-%d=%d\n",8,2,8-2);/*8-2=6*/

printf("%d*%d=%d\n",8,2,8*2);/*8*2=16*/

printf("%d/%d=%d\n",8,2,8/2);/*8/2=4*/

*

}

■第三章常数典燮数

C尚吾言的资料可分篇常数(constant)及建数(variable),常数指的是固定不燮的数,例如:0,1,2等

M,或是用曼引虢定羲的字串,我凭也耦之焉字串常数。燮数指的是数值可以改建的数,例如:

一他整数燮数,我什?可以把它^成1,然彳爰再改扁10,或是其他的整数数值。一值]程式若没有建

数,那触粹只是招常数秀出来而已,好比是用文字编辑器褊辑一彳固槽案,再用type把它秀出来一

W。有了燮数,就可以做不同的燮化。

◎燮数的型魅——Char,int,long,float,doubleetc.。

◎燮数的命名

如同槽案的命名,燮数的名字要取得有意羲,在C中,名字可以取得很:R,但是要用英文的,所

以你可以把建数用中翻英来命名。

◎燮数的命名规即

O建数名稀的第一他字元必须是英文字母(A到Z或a到z)或是底国泉(_)。

O第二彳固字元以彳爰可以使用前述字元,再加上数字0到9。

O燮数名耦的大小嘉是不同的。

O燮数名耦的最前面32彳固字元有效。

O不可以使用「保留字」富燮数的名耦,保留字是给编葬器使用,不可以常成燮数名耦。TC有

以下的保留字:

流程:ifelsefordowhile

switchdefaultcasebreakcontinue

gotoreturn

型别:charintlongfloatdouble

voidregistersignedunsigned

shortnearfarhuge

typedefstructunionenum

autoconststaticvolatileextern

interruptcdeclpascalasm

^算:sizeof

暂存器:_AX_AH_ALcs_CS

_BX_BH_BL_ds_DS

_CX_CH_CL_es_ES

_DX_DH_DLss_SS

_SI_DI_BPZSP

◎燮数的^定

使用燮数日寺,先考量道他I数可能的数值靶m,用以逗定燮数的型别,例如:用一他I数来存班上

的人数,一彳固合班的大班级可能超谩百人,但最大不太可能超谩千人,所以逗一槿燮数型别可存

1000以下的数值,在此可逗整数。

若是要用一他I数来存你的存款,即整数的上限32767可能某些同擘一彳固月的薪资就是它的数倍,

所以要逗晨整数,它的上限是2147483647。在数擘建算畤,想要有小数的就要用浮黑占数(float)。

在C^言中,燮数宣告的^法如下:

型别建数名耦1【,燮数名耦2[,…]];

例如:

intNumberOfStudent;/*擘生人数*/

longMoneyInBank,interest;/*金艮行存款*/

floatRateOflnterest;/*利息利率*/

charEndOfString;/*字串结束*/

charOneStudentName[9];/*阜生姓名*/

在宣告燮数日寺,我什?可以^定燮数的初始值(initialvalue),密吾法如下:

型别燮数名耦1=初始值1[,燮数名耦2=初始值2[,...]];

例如:

intNumberOfStudent=60;/*擘生人数*/

longMoneyInBank=1000000L;/*金艮行存款*/

floatRate0flnterest=5.0;/*利息利率in%*/

charEndOfString='\0';/*字串结束*/

charOneStudentName[9]="王大明";/*擘生姓名*/

注意:在金艮行存款的^定数值1000000接加上一他L,表示道彳固常数数值1000000是一他是

整数。因:BC1吾言内定的型别是整数,焉了防止不可颈期的状况樊生,最好是自己把它目殳

定成你想要的型别,不要假TC曾落你做好好的,要假^TC很笨不曾"你做,道檬在

樊展大程式要除^日寺,就可以把冏魅麓化,不必再考11是不是资料型别,只要把程式流

程或演算法搞定就可以了。在TC中,不加L,结果逮是正碓的,但是在其它的璟境下可

能曾不同。多加一他1L她不曾使程式燮大或燮慢,又能保障正硅使用,何槃不焉。

O禳雪一下字元典字串:

char字元只估一他byte,以一条且军引虢'引含字元资料,其表示法如下:

O罩一字元:'A'、'a'、'0'。

。八迤位数值:'\10T''\141'''\60'、'\0'

©十六迤位数值:'\x41'、'\x61'、"30'、'\x0'

字串即是由一他I以上的字元所系且成的,而且以'\0'道他字元做;B结尾。

表示法:"123"、"ABC"、"abc"。以上的三彳固例子都是估4bytes。

用strlen()可以取得字串的:R度(不含'\0'字元)。

如:intStringLen=strlen("123");

道檬,StringLen就等於3。

☆在使用strlen()密,必须加入^include<string.h>

◎定叙述

前面已系辑兑明了燮数在宣告畤系合定初值的方法,接下来是在程式轨行的谩程中i殳定燮数数值

的方法。即然是燮数,表示它的数值可能在程式轨行的谩程中曾改建多次,如果一他燮数

在整彳固程式轨行中都不曾改燮,或^你把它^成常数。

在言殳定燮数日寺,可以用等虢=来1殳定燮数新值,言吾法如下:

燮数名耦=^算式(建算式、函式停回数值或雨者混合);

道他I意思是等虢左遏「建数名耦」的教值曾等於等虢右遏算式」的^算结果。

在C中,等虢=是用来1殳定建数数值的,所以在等虢的左遏必须是燮数,不可以是常数。在诞

辑上的相等,在C中是用丽他等虢==来表示,有的表示,在第五章中曾作介貂。以下我

fH来看一些^定的例子,^算Bl的面稹:

PI=3.1415926;

r=4;

area=PI*r*r;

以下是用燮数的方式表示的靶例:

var.c

#include<stdio.h>

voidmain(void){

mti,j;

i=10;

j=2;

printf("%d+%d=%d\n",i,j,i+j);

printf("%d-%d=%d\n",i,j,i-j);

printf("%d*%d=%d\n",i,j,i*j);

printf("%d/%d=%d\n",i,J,i/j);

i=20;

j=2;

printf("%d+%d=%d\n",i,j,i+j);

printf("%d-%d=%d\n",i,j,i-J);

printf("%d*%d=%d\n",1,j,i*j);

printf("%d/%d=%d\n",i,j,i/j);

10+212

102=8

10*220

10/2=5

20+222

202=18

20*240

20/2=10

燮数使用的有效靶IS:

整醴燮数(GlobalVariable):整醴程式内

国域燮数(LocalVariable):函式内

静憩燮数(StaticVariable):罩一程式内

■第四章基本输出入函式

道一章符介貂一些基本输出入的函式,使用者^由道些函式可以典重月第潢通,^程式^取使用者的

输入部分。程式依使用者不同的要求,做不同的事,再揩结果输出给使用者。

◎输出指令:printf()

在第二章中,曾谩printf指令,现在来辞细的探制它。

printf是一槿格式化的输出指令,换句后舌^,你可以用它来编排你所要的输出格式。printf的

一般型式如下:

printf("控制字串",建算式1,建算式2

控制字串是你打算要秀出的in息,其中利用%w\道雨他字元,来控制数值的输出格式。控制

字串中每一0%符虢,表示在接面有一^^算式舆它罂寸)1,算式的值曾代入道他%的位置。

在%彳爰的字元表示代入数的型别,常用的控制礁如下表:

printf的控制碣代表代入的数值型别

%c字元

%d十暹位之整数

%ld十迤位之片整数

%f浮黠数

%lf倍精浮黑占数

%Lf:M倍精浮黠数

%s字串

^算式的型别必须跟控制碣所代表的型别相符,否即曾秀出不可^期的资料。另一他控制符虢\,

其^只是定羲字元而已。在上一章已^介貂了字元的各槿表示法'如:”4T表示A字元。在C

^言中,揩一些特殊的控制字元另外定羲,道些控制字元大部份跟游本票的控制有^,如下表:

控制字元DecHex功能

\n10OxOA换列,也就是符游襟移到下一列

\t90x09揩游才票移到下一他定位(1+8n)

\b80x08退一格,鬻i似按下左维

\a70x07喇叭叫一瞽

\r13OxOD回到列首

\f12OxOC跳直,在列表畤控制列表檄跳^

\\920x5C印出\字元

\'390x27印出‘字元

340x22印出"字元

\xHHOxHH印出OxHH所表示的字元

%%370x25印出%字元

其中,%字元的定羲典在控制字串中的表示法不同,其绘的字元在定羲上舆在控制字串中的表示

法都相同。

printf在做输出日寺,你也可以指定保留多少位置给罂寸鹰的^算式放结果。指定的方式是在%之彳爰

加一彳固数值,如%5d:表示保留5彳固字元空系合一■(固十迤位整数;

%12ld:表示保留12他字元空^给一他十迤位:R整数。

如果要输出资料的:R度比你指定的保留空^遢要大曰寺>printf就不理曾你的^定,把要输出的资料

完整的输出,所以,你在1殳定保留空^日寺,^^注意输出资料的轮圉及;R度,保留别大的空^,碓

保输出格式的整膂。

在浮黠数方面,你除了可以指定保留的空^外,遢可以指定小数黑占彳爰要取黑位。

如%8.3f:表示保留8彳固字元空IW系合一低浮黠数,小数部分即是估3彳固字元空IW,由於小数黑占

本身彳占一彳固字元,所以整数部分估8-(3+1)=4彳固字元空。

printf在输出资料日寺,如果你指定保留的空^比要秀的资料晨度遢要大日寺,那printf先秀一些空

白,再秀出资料,使^^度等於你所指定的寞度,道棣等於是^输出的资料向右封膂。如果你想要

资料是向左封膂的^,可以在指定竟:度日寺使用负数,如%-5d:表示保留5偃]字元空合一倜十

迤位整数,若资料艮度不足5,即在秀出资料彳爰襁空白。

O整飘int)及晨整熟long)

%-+wd-*int

%-+wId—long

“f11--------若有指定,刖保留w他字元

若辗指定,秀出是度揩由资料决定

-------------若有指定,即一定曹秀出正负虢

若辗指定,刖只有负数曾秀出负虢

-----------------若有指定,即向左封膂

若辗指定,即向右封膂

O浮黠数moat)、倍精浮黠瓢double)及晨倍精浮黠数(longdouble)

%-+w.pf—float

%-+w.pIffdouble

%-+w.pLfflongdouble

I|J若有指定,即保留p0字元给小数

若罪指定,内定是保留6彳固字元给小数

若有指定,即保留w他字元含小数及小数黠

若辗指定,秀出;R度符由资料决定

|_____________若有指定,即一定曹秀出正负虢

若辗指定,刖只有负数曾秀出负虢

I_________________若有指定,即向左封膂

若瓢指定,即向右封膂

^了道麽多,只有自己就就看才知道!以下是他I筋挈的例伊:print.c

voidmain(void){

printf("l%ldl\n",123456);

printf("l%51dl\n",123456);

pnntf("l%dl\n",123);

printf("l%5dl\n",123);

printf("l%-5dl\n",123);

printf("l%fl\n",12.345);

printf("l%9fl\n",12.345);

printf("l%9.2fl\n",12.345);

printf("l%-9.2fl\n",12.345);

11234561-123456大於32767要:M整数才能表示,所以用%ld

11234561一所保留的5彳固字元不别使用,所以TC视同你没官殳

11231

I1231一保留5值1字元,只使用3彳固字,向右靠膂

1123I「保留5他字元,只使用3彳固字,向左靠膂

112.3450001一小数没有指定,所以TC使用内定的6彳固小数。

112.3450001一保留9他字元,小数部分仍使用内定值

I12.351一保留9彳固字元,小数2彳固字元,向右靠膂

112.35I-保留9他字元,小数2偃[字元,向左靠膂

◎输入指令:scanf()

C言使用scanf指令来^取keyboard输入的资料。scanf的一般型式如下:

scanf("控制字串",&燮数1,&燮数2,.…);

scanfWprintf可以^是相封的,一彳固用来做输入,一彳固用来做输出。

scanf的控制字串舆printf黑乎是一檬。

scanf的控制SI代表输入的数值型别

%c字元

%d十迤位之整数

%ld十迤位之是整数

%D十迤位之房整数

%f浮黑占数

%lf倍精浮黑占数

%Lf艮倍精浮黠数

%s字串

★注意:没有%F逼槿控制碣,本有^!

%D的控制碣只能用在scanf(),在printf()中辗法使用。

在用scanf日寺遢有一黑占要注意,在控制字串彳爰的燮数,使用的是指檄(pointer)。

什麽是指檄?指檄就是指向吾己1意醴的一他位址,在那他位址存放著资料。

例如:一倜整敷燮数i,它是存在含出意11的某一■(固位址,那值1位址在C^言中,

是以&i来表示,我年号通常耦&i是i的位址,也耦舄i的指檄。

以下是常用的燮数及其指檄(因焉它的位址固定不曾改建,也耦焉指檄常数):

charc;/*字元*/1*C的指檄是&c7

inti;/*整数*//*i的指木票是&i7

long1;/*是整数*//*1的指檄是&I*/

floatf;/*浮黑占数*//*f的指才票是&f7

doubled;/*倍精浮黑占数*//*d的指檄是&d*/

longdoubleId;/*:R倍精浮黑占数*//*Id的指才票是&ld7

charstr[80];1*字元障列(字串)*//*str[80]的指檄是str*/

inta[100];/*整数障列*//*a[100]的指才票是a7

longb[100];/*是整数弹列*//*b[100]的指襟是b*/

floatc[100];/*浮黑占数障列7/*c[100]的指檄是c*/

以下的靶例,揩第三章的靶例var.c燮数改由scanf输入:IO.C

voidmain(void){

inti,j;

printf("Enter2integers:");

scanf("%d%d",&i,&j);/*用i舆J的指本票&i,&j*/

printf("Now,Ifindthat

printf("%d+%d=%d\n",i,J,i+j);

printf("%d-%d=%d\n",i,J,i-j);

printf("%d*%d=%d\n",i,j,i*j);

printf("%d/%d=%d\n",i,j,i/j);

Enter2integers:204一相富於i=20,j=4

Now,Ifindthat

20+4=24

20-4=16

20*4=80

20/4=5

scant在IS取多肇资料日寺,是把^位字元(如:空白、定位(tab)及换列字元)常作资料的分隔的言己虢,

也就是利用scanf输入多肇资料畤,必须用^位字元分隔输入的资料。如本例中,输入的i值典

j值,可以用空白显隔,也可以用换列或定位来IE隔。在结束输入日寺即要用换列字元,也就是^要

按Enter°

迤E皆的程式^^自市通常不曾用scanf作焉资料的输入,因篇只要输入的格式有一黠黑的scanf

所得到的结果就辗法颈期。大部分的程式言殳得I肺曾用gets()道他I函式^入字串,gets是以换列字

元作篇结束后己虢,所以,利用gets可以^入包含空白及定位的字串。^入的字串可以用atoi()樽

成整数、用atol()樽成辰整数、用atof()醇成浮黠数。

更迤睹的程式言殳言十自币即是自行^言十输入函式,加加入一些^定防止输入彝生,例如,在输入整

数的函式中,使用者只有按下数字维才有反J1,若按下非数字维,即不曾反J1。也可以限定使用者

输入的资料是度,防止输入的数值谩大,等等。

以下的靶例,符莘氏温度(°F)换算成据氏温度。C)

f2c.c

#include<stdio.h>

voidmain(void){

intf,c;

printf("EnterthetemperatureinF:");

scanf("%d",&f);/*用f的指才票&f*/

c=(f-32)*5/9;/*换算公式*/

printf("%ddegreesinFis%ddegreesinC.",f,c);

)

EnterthetemperatureinF:100

100degreesinFis37degreesinC.

莘氏温度(°F)舆撮氏温度(℃)的互换公式如下:

C=(F-32)*5/9

F=C*9/5+32

以下是本的靶例,揩年系己改用"日"来估算:

age.c

#include<stdio.h>

voidmain(void){

floatyears,days;

printf("Entertheageofyou:");

scanf("%f",&years);/*用years的指檄&years*/

days=years*365.25;/*换算公式*/

printf("Youare%fdaysold.",days);

)

Entertheageofyou:28.5

Youare10409.625000daysold.

◎幅I入指令:getche()

使用scanf()^取字元畤,必须再按下Enter维,^字元才曾被^取。

在某些埸合中,我福号希望每按一低I维,程式就曾^取,不用再按下EnterB,

例如:在^^^激中,每按下方向维,所控制的人物就依所按的方向移勤。

利用getche()可以逵到道他目的。getche的一般型式如下:

ch=getche();

Wgetche()所^到的字元僖给ch。此外,getche()曾^^到的字元先秀在螯幕上。

以下的^例,揩所按的维秀出其ASCII®:

code.c

#include<stdio.h>/*宣告printf()的原型*/

^include<conio.h>/*宣告getche()的原型*/

voidmain(void){

charch;

ch=getche();/*getche()曾傅回你所按下维的字元*/

printf("--Youtyped%c.\n",ch);

printf("Character%chasASCIIcode%d.\n",ch,ch);

)

A--YoutypedA.

CharacterAhasASCIIcode65.

道他靶例主要是用来查前一般字元的ASCIIW,1青勿输入方向维,否即它的结果可能^^你失

望。因篇方向维及功能维等特殊按维曹崖生雨他礁,必须^雨次才能得到正硅的结果。

第9行,用%c的控制字元,表示要秀出ch所代表的字元;

用%d的控制字元,表示要秀出ch所代表的数值。

作^本窖题第1。题,看看你所得到的结果典^本所列的的结果一不一檬?

■Help参考资料:

।----------------------Help---------------------

printf:formattedoutputtostdout格式化输出至stdout

I

intprintf(constchar*format,...);printf的^法

I

|Prototypeinstdio.h必须#include<stdio.h>

I

IPrintformatsavariablenumberofarguments不同的格式须要不同的

accordingtotheformat,andsendstheoutput参数,造些资料曾送到

|tostdout.Returnsthenumberofbytesoutput.Istdout°傅回彳直是输出

|Intheeventoferror,itreturnsEOF.1的byte数,若装生金昔

1期J傅回EOF

Seealsoecvtfprintfputc1

putsscanfvprintf1相US指令

1_1

1lieip-1

FormatSpecifiersIformat的格式

%[flags][width][.prec][FINIhl1]type[]表不不一■定要用

typeFormatofOutput格式化输出的型别:

dsigneddecimalintd带正负虢十迤位整数

isigneddecimalint1带正负虢十迤位整数

ounsignedoctalinto不带正负虢八迤位整数

uunsigneddecimalintu不带正翼虢十迤位整数

xinprintf=unsignedhexdecimalintx不带正负虢16迤位整数(小嘉)

lowercase;inscanf=hexadecimalint在scanf焉16迤位整数

Xinprintf=unsignedhexdecimalintX不带正负号虎16迤位整数(小嘉)

uppercase;inscanf=hexadecimallong在scanf篇16迤位;M整数

ffloatingpoint[-]dddd.dddf浮黠数例:314.159

eflo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论