下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
10小时学会C语言.txt偶尔要回头看看,否则永远都在追寻,而不知道自己失去了什么。男人掏钱是恋人关系,女人掏钱是夫妻关系,男女抢着掏钱是朋友关系。男人爱用眼睛看女人,最易受美貌迷惑;女人爱用心看男人,最易受伤心折磨。计算器程序讲义10小时学会C语言☆ 不要完全相信书上及老师所讲的内容,只有自己实作オ是真的。☆ 李栋梁Sep.22,1997参考书目:10小时学会C语言[修订版] 施保旭着儒林出版社1997年6月初版3版page2page2410132132404655第一章C语言简介与TurboC的使用第二章C程序的结构第三章常数与变数第四章基本输出入函式第五章流程图与抉择指令第六章循环与自动重复第七章数组与指针第八章函数与呼叫第九章档案存取第一章C语言简介与TurboC的使用©C语言的优点:〇效率高:C语言的编译器会产生最小的程序代码。〇可移植性/移植性高:经过些许的修改,可以在不同的平台使用。〇功能强而有弹性。〇需要记忆的东西很少,易于写作。TurboC的安装:已安装在学校主机。TurboC的环境设定:TurboC安装的目录必须设定在PATH的系统变量。如:PATH-C:\TC;C:\D0S: 如此TC才能正常工作。TurboC的使用只要设定好PATH变量,在DOS提示号输入TC,就可以执行TurboC的整合环境了。TC将编辑(Edit)、编译(Compile)、连结(Link)、除错(Debug)、档案管理(File)、...等等的功能整合在ー起,所以我们称之为整合环境。最好先用CD的指令,变更工作目录到你要写C的目录,再执行TC.这样所产生的档案,就会里这个目录里面,便于备份与管理。移动光标方向键ーtI一可以用来移动光标。删除文字将光标移到你要删除的文字上,再按下Del键即可。将光标移到要删除文字的右边,再按下BS退位键也可以。加载文字文件(C语言原始码文件)按下功能键F3或按F10选File-Load就会出现ー个询问窗口要求输入文件I LoadFileNameI*.C其中的文件名可以使用万用字符・或?,或直接指定你要的檔名。若是使用万用字符,TC会再秀出ー个窗口让你选择所要的档案,你可以用方向键移动反白光棒,按Enter键则是选择反白的档案。储存编辑的文字文件按下功能键F2或按F10选FilefSave就会储存目前编辑档案。若你想另外取ー个档名,并加以存盘,就必须按F10选File-Writeto就会出现ー个询问窗口要求输入文件名:I NewName 1输入新的档名,按下Enter即可。
◎编译并执行目前的所编辑的程序TurboC是ー・种编译语言系统,你所写的程序,经过TC的编译(pass1)及连结(pass2)后,产生可执行档(.exe),才能在PC上执行。按下Ctrl+F9或按F10选Run-Run,TC会编译目前所编辑的程序,如果没有错误发生,TC会立即执行所编辑的程序。TC在执行完程序后,会立刻切换回到TC的整合环境,如果你还想看刚オ程序执行的结果,可以按下Alt+F5或按F10选Run-Userscreen,就会切换到执行画面,再按ド任何ー键,就会回到TC的整合环境。◎结束TurboC按下Alt+X或按F10选FilefQuit便可结束TurboC。若你还有已编修尚未储存的档案,TC会问你要不要存。I Verify 1|NONAME.Cnotsaved.Save?(Y/N)|要存就按Y,不想存就按N.・第二章C程序的结构◎C程序的结构:范例文件名范例原始码范例文件名范例原始码范例执行结果|#include<stdio.h>Imain()3|{I printf("Hello!");I}IHello!第一列:^include<stdio.h>是用来定义ー些函式的原型(prototype)、数据结构(struct)或是常数(constant)。C在使用变量之前,该变量都要先行宣告(declear)オ可使用,而使用函式也是ー样,必须先宣告它的原型才可以。宣告函式的原型是为了让C能在编辑时作数据的型别检查,以减少错误的发生。内建的函式原型定义都放在INCLUDE'・5中,用»include<stdio.h>就会将INCLUDE'stdio.h这个档引含。stdio.h由档名可知道是跟标准输出入(standard1/0)有关,档内定义了档案输出入、屏幕输出、键盘输入等相关函式的原型、数据结构及常数。本例中的printfO就属于标准输出的函式。引含,h档并不会让你的执行档变大或是变慢,而且还能让编辑器作正确的型别检查,所以要养成写#include的习惯。☆虽然在某些状况下,不加»include〇所产生的执行档,一样可以正常的执行。
第二列:main()mainO就是主程序。程序在执行时,就是由这个函式开始执行。在C语言中,内定的型别是int,所以原来的mainO相当于是 intmain(int)★在这里正确的写法应该是voidmain(void), 因为在这个简单的程序中,没有回传值,也没有输入参数。☆回传值,是指ー个函式在执行后传回的数值。☆输入参数,是指ー个函式可由参数决定执行的结果,这个部分在第八章中有详细的说明。第三列:(第五列:}在第三列及第五列之间,属于mainO函式的程序代码。(表示程序由此开始,}表示程序到此结束。第四列:printf("Hello!");是本程序要求系统做动作的指令,称之为「叙述」。在C语言中,每ー叙述都以分号(つ做为结束。在这个程序中,利用缩排的方式,使程序的层次分明,增加可读性。在C语言中,调位字符(如:空白(space)、定位(tab)及换列字符)在编译时都会被忽略,所以可适时加入调位字符,使程序好看一点。要注意的是,别把ー个完整的个体拆开,如:main、printf等,这些字本身是一个完整的个体,不可予以拆开。而在各个个体之间,可以任意加入调位字符。☆C语言中的英文字母是有分大小写的,printfO与PrintFO不同,内建的函式大多是小写的,你自己写的函式,则可以用大写来做区隔。◎printf的功用printfO的功用是在屏幕上输出数据。在TC中,在编辑区内输入printf,再将光标移到printf这个字上,按下Ctrl+F!就会看到以下Help画面:Help1Help1ー这是TC的Help窗ロprintf:formattedoutputtostdoutintprintf(constchar*format,・・・);Prototypeinstdio.hPrintformatsavariablenumberofargumentsaccordingtotheformat,andsendstheoutputtostdout.Returnsthenumberofbytesoutput.Intheeventoferror,itreturnsEOF.I-printf是将格式化的I 数据输出到stdoutI-printf的语法II-要用printfI-printf是将格式化的I 数据输出到stdoutI-printf的语法II-要用printf应该|#include的檔I-使用说明:不同的格式! 须要不同的参数,这些! 数据会送到stdout。传I 回值是输出的byte数,I 若发生错误则传回EOFI一可参考相关指令:ecvt,fprintf,putc,puts,scanf,vprintfprintf的话法: intprintf(constchar*format,...);其中constchar*format指的是ー个格式化的字符串。const是常数的意思,在此表示format这个字符串指针传入printf函式后,它的值不会被改变。... 指的是不定参数,参数的数目取决于format字符串的内容,这些参数,通常是ー些你要秀出来的变量。简单来说:printf("输出格式(含控制字符串)”,要印出的数据);在c语言中是用双引号(つ来引含字符串,也就是在双引号内的数据,是ー个字符串。本章只介绍%d这个控制字符串,其它的控制字符串在第四章会讲到。%d表示以整数10进位的方式秀出数据。在输出格式(含控制字符串)内有几个%d,在要印出的数据内就要有几个整数来对应。1 11arith.c1 I11 1I^include<stdio.h> |21voidmain(void)31{ 1-1Iprintf("%d+%d=%d\n",8,2,8+2): |5|printf(z,%d-%d=%d\n”,8,2,8-2); |6|printf("%d*%d=%d\n",8,2,8*2); |7|printf(,z%d/%d=%d\n”,8,2,8/2); |81} 11 11 1I8+2=10 ||8-2=6 ||8*2=16 ||8/2=4 |i r我们以第四列的叙述作说明:printf("%d+%d=%d\n",8,2,8+2):在输出格式(含控制字符串)内有3个%d,所以在要印出的数据的部分有8,2,及8+2三个整数对应,所以输出来的结果就是8+2=10在输出格式(含控制字符串)的最后有、n符号,这是ー个控制字符,表示要更换到下一列,其它的控制字符在第四章会提到。若将本例中的\n都删除,那秀出的结果会像这样子:8+2=108-2=68*2=168/2=4◎C的四则运算计算机语言用的四则运算符号几乎都是相同的:四则运算符号意义范例结果+加法4+26-减法(或代表负号)4-22*乘法4*28/除法4/22相关运算符号意义范例结果++变数值加1i++或++ii值加1ーー变数值减1iー或ーii值减1%整数除法的余数4%20在书中提到C语言没有提供次方的功能,指的是在某些计算机语言可以用・・表示次方,如:2**3,表示2的3次方;有的用"表示,如:2'8,表示2的8次方。在C语言,没有运算符号可以表示次方,但是C语言有提供次方的函式:pow(),pow(2,3)表示2的3次方。ー个式子如果有多个运算的话,C是以先乘除后加减的方法来运算,当然我们也可以用括号()来改变这个法则,只要有括号,就优先运算。另外,在C语言内中括号[]及大括号{}是有其它的用途,所以在作数学运算时,只要用括号,就只能用小括号(),小括号可以多层,C在运算时,是由最内层开始运算。范例:(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◎批注(Comments)通常老师会耍求初学者在程序的每一列加上批注,这是为了让初学者知道自己在写些什么程序代码,了解为什么要这样写,而不只是照著书Keyin程序。写批注有助于自己了解程序的内容,便于日后的修改。但写批注对于某些程序设计师而言可说是ー种噩梦,因为写批注所花的时间可能会与写程序的时间相去不远,认为写批注只是在浪费时间。对ー个相当好的程序设计师而言,也许写批注真的是浪费时间,因为好的程序代码本身就已经隐含了批注,这也是写程序相当高的境界。对一般的程序设计师而言,写ー些批注还是比较好的作法,特别是某些程序代码是你花了一段时间オ想到的「特殊」方法,加上一些批注,说明一下这个「特殊」的方法,以后要修改才能快速进入状况,否则,你可能会佩服自己当时是如何想到的这个方法,又再花一段时间才知道自己在写些什么程序代码。讲了这么多批注的正反面(正面居多)论调,在C语言中要如何写批注呢?只要用Z・和・Z将你要的批注内容包起來就可以了。C在编译时,会将/**/内的数据略去,就如同调位字符ー样。唯一的例外是:当/**/在ー组双引号”内时,它们就属于这组双引号所包含的字符串。在C++语言中则可用〃当批注.comments,corcomments,cpp111#include<stdio.h> /*prototype:printf()*/2|3|voidmain(void)//mainprogram(4|/・所有的程序代码都变成批注,所以这个程序日前是空的・/5|/*printf(线d+%d=刎、n”,8,2,8+2); */ |6|/*printf("%d-%d=%d\n”,8,2,8-2): |7|printf("%d・紀=%d\n”,8,2,8*2); |8|9|printf(/z%d/%d=%d\n*,8,2,*/8/2);//division |10|L} //endofprogram◎巢状批注(NestedComments)nestcomO.c123123456/*这个程序必须把巢状批注的设定打开,オ不会有错误・//*printf("刎+%d=%d\n”,8,2,8+2);7891011*/7891011*/printf(\d-%d=%d\n",8,2,8-2printf(,z%d*%d=%d\n”,8,2,8*2);printf(,z%d/%d=%d\n,z,8/2上面的例子,有四组批注Z**/,其中第三组及第四组的批注之间有部分重迭。想要Compile没有错误,必须第5列的/・与第10列的・/配,也就是第5列到第10列都是批注;另外第?列的/・与第7列的・/配,也就是第7列是批注。这种批注方式,我们称之为巢状批注。TurboC内定是不可使用巢状批注的,上面的例子会是第5列的/・与第7列的・/配,结果在第!0列的・/会变成是多余的,造成Compile错误。打开巢状批注的方法:按下F10-OptionsfCompilerSourceNestedcommentsOff将Off设为On就可以了。◎巢状批注的使用时机在前面的例子只是为了说明巢状批注,也许你会觉得这样的用法是自找麻烦,但是以下的例子,你就会认为有巢状批注的功能还是比较好的。在nestcoml.c中,每一列的printf():后面都加上了批注。若要把这几列程序变成批注,不使用巢状批注,就会像nestcom2.cー样,必须在每一列的printf():前后再加上/**/,若是使用巢状批注,就像nestcom3.cー样,只要在这几列的前后加/**/就可以了。nestcoml.c12345612345678910^include<stdio.h>/*prototype:printf()*/voidmain(void)(/・这个程序在每一个叙述后都加上了批注・/printf("刎+printf("%d-printf(,z%d*printfC%d/%d=%d\n〃,%d=%d\n〃,%d=%d\n”,%d=%d\n",8,2,8+2);8,2,8-2);8,2,8*2);8,2,8/2);/*8 + 2 = 10 *//*8 - 2 = 6 *//*8 * 2 = 16 *//♦8 / 2 = 4 */12345678910111234567891011nestcom2.c^include<stdio.h>/*prototype:printf()*/voidmain(void){/・这个程序不用把巢状批注的设定打开,也不会有错误・//*printf('d+%d=%d\n〃,8,2,8+2);*///*8+2=10*//*printf("紀-%d=%d\n〃,8,2,8-2);*/ノ/*8-2=6*//*printf(,z%d*%d=%d\n,z,8,2,8*2);*///*8*2=16*//*printf("紀/%d=%d\n〃,8,2,8/2);*///*8/2=4*/nestcom3.c^include<stdio.h>/♦prototype:printf()*/voidmain(void)(/・这个程序也必须把巢状批注的设定打开,オ不会有错误・/printf("%d+printf("%d+%d=%d\n”,8,printf("%d-%d=%d\n”,8,printf("%d*%d=刎、n”,8,printf("紀/%d=%d\n”,8,2, 8+2 ); /* 8 + 2 = 10 */2, 8-2 ); /* 8 - 2 = 6 */2, 8*2 ); /* 8 * 2 = 16 */2, 8/2 ); /* 8 / 2 = 4 */•第三章常数与变数C语言的数据可分为常数(constant)及变量(variable),常数指的是固定不变的数,例如:0,1,2等数值,或是用双引号定义的字符串,我们也称之为字符串常数。变量指的是数值可以改变的数,例如:ー个整数变量,我们可以把它设成1,然后再改为10,或是其它的整数数值。ー个程序若没有变量,那纯粹只是将常数秀出来而已,好比是用文字编辑器编辑ー个档案,再用type把它秀出来ー样。有了变量,就可以做不同的变化。
◎变量的型态 Char,int,long,float,doubleetc.〇◎变数的命名如同档案的命名,变量的名字要取得有意义,在C中,名字可以取得很长,但是要用英文的,所以你可以把变量用中翻英来命名。◎变量的命名规则〇变量名称的第一个字符必须是英文字母(A到Z或a到z)或是底线(一)。〇第二个字符以后可以使用前述字符,再加上数字0到9。〇变量名称的大小写是不同的。〇变量名称的最前面32个字符有效。〇不可以使用「保留字」当变量的名称,保留字是给编译器使用,不可以当成变量名称。TC有以下的保留字:流程:ifelsefordowhileswitchdefaultcasebreakcontinuegotoreturn型别:charintlongfloatdoublevoidregistersignedunsignedshortnearfarhugetypedefstructunionenumautoconststaticvolatileexterninterruptcdeclpascalasm运算:sizeof缓存器:_AX_AH_AL_cs_CS_BX_BL_ds_DS_CX_CH_CL_es_ES_DX_DH_DL_ss_SS_SI_DI_BP_SP◎变量的设定使用变量时,应该先考虑这个数可能的数值范围,用以选定变量的型别,例如:用ー个数来存班上的人数,ー个合班的大班级可能超过百人,但最大不太可能超过千人,所以选ー种变量型别可存!000以下的数值,在此可选整数。若是要用ー个数来存你的存款,则整数的上限32767可能某些同学ー个月的薪资就是它的数倍,所以要选长整数,它的上限是2147483647»在数学运算时,想要有小数的就要用浮点数(float).在C语言中,变量宣告的语法如下:型别变量名称1[,变量名称2例如:intlongfloatcharcharNumberOfStudent;例如:intlongfloatcharcharNumberOfStudent;MoneyInBank,interest;RateOflnterest;EndOfString;0neStudentName[9];/・学生人数・//・银行存款*//・利息利率・//・字符串结束・//・学生姓名・/在宣告变量时,我在宣告变量时,我们可以设定变量的初始值(initialvalue),语法如下:I型别 变量名称『初始值1[,变量名称2二初始值2 ; |例如:intlongNumber0fStudent=60;MoneyI例如:intlongNumber0fStudent=60;MoneyInBank=l000000L;floatRate0fInterest=5.0;charcharEndOfString='、〇';OneStudentName[9]="王大明/・学生人数*//・银行存款・//・利息利率in%*//・字符串结束・//*学生姓名・/注意:在银行存款的设定数值1000000后加上一个L,表示这个常数数值1000000是ー个长整数。因为C语言内定的型别是整数,为了防止不可预期的状况发生,最好是自己把它设定成你想要的型别,不要假设TC会帮你做好好的,要假设TC很笨不会帮你做,这样在发展大程序要除错时,就可以把问题简化,不必再考虑是不是数据型别错误,只要把程序流程或算法搞定就可以了。在TC中,不加L,结果还是正确的,但是在其它的环境下可能会不同。多加一个L并不会使程序变大或变慢,又能保障正确使用,何乐不为。〇复习一下字符与字符串:char字符只占ー个byte,以ー组单引号’引含字符数据,其表示法如下:〇单一字符: ‘A’ 、‘a' 、‘〇‘。〇八进制数值:'\101'、'\141'、’\60'、'、〇'〇十六进制数值:'\x41'、'\x61'、'\x30'、'\x0'字符串则是由一个以上的字符所组成的,而且以’、〇’这个字符做为结尾。表示法:"123"、"ABC","abc"o以上的三个例子都是占4bytes.用strlenO可以取得字符串的长度(不含,\0,字符)。如:intStringLen=strlen("123");这样,StringLen就等于3。☆在使用strlenO时,必须加入#include<string.h>◎设定叙述前面一经说明了变量在宣告时给定初值的方法,接下来是在程序执行的过程中设定变量数值的方法。即然是变量,表示它的数值可能在程序执行的过程中会改变多次,如果一个变量在整个程序执行中都不会改变,或许你该把它设成常数。在设定变量时,可以用等号=来设定变量新值,语法如下:!变量名称=表达式(表达式、函式传回数值或两者混合);这个意思是等号左边「变量名称」的数值会等于等号右边「表达式」的运算结果。在C中,等号=是用来设定变量数值的,所以在等号的左边必须是变量,不可以是常数。在逻辑上的相等,在C中是用两个等号==来表示,有关逻辑的表示,在第五章中会作介绍。以下我们来看ー些设定的例子,计算圆的面积:PI=3.1415926:r=4:area=PI*r*r;以下是用变量的方式表示的范例:var.c#include<stdio.h>voidmain(void)(inti,j;i=10;j=2;printf(,z%d+%dprintf(,z%d-%d=%d\n”,i=%d\n",ij,j,i+j);i-j);printf(〃%d*%d=%d\n”,ij1i*j):printf(/z%d/%d=%d\n”,ij,i/j);i=20;j=2;printf(/z%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,j1i/j)10+2=1210-2=810*2=2010/2=520+2=2220-2=1820*2=4020/2=10变量使用的有效范围:整体变量(GlobalVariable):整体程序内区域变量(LocalVariable):函式内静态变量(StaticVariable):单ー程序内・第四章基本输出入函式这一章将介绍ー些基本输出入的函式,使用者经由这些函式可以与计算机沟通,让程序读取使用者的输入部分。程序依使用者不同的要求,做不同的事,再将结果输出给使用者。◎输出指令:printfO在第二章中,曾经谈过printf指令,现在来详细的探讨它。printf是一种格式化的输出指令,换句话说,你可以用它来编排你所要的输出格式。printf的一般型式如下:Iprintf("控制字符串”,表达式1,表达式2,...);控制字符串是你打算要秀出的讯息,其中利用%与、这两个字符,来控制数值的输出格式。控制字符串中每ー个%符号,表示在后面有一个表达式与它对应,表达式的值会代入这个%的位置。在%后的字符表示代入数的型别,常用的句柄如下表:printf的句柄|代表代入的数值型别|%c |字符%d |十进制之整数|%ld|%fI%lf|%LfI%s1十进制之长整数 1浮点数 1倍精浮点数 1长倍精浮点数 1字符串1表达式的型别必须跟句柄所代表的型别相符,否则会秀出不可预期的资料。另ー个控制符号、,其实只是定义字符而已。在上一章已经介绍了字符的各种表示法,如:‘\x41’表示A字符。在C语言中,将一些特殊的控制字符另外定义,这些控制字符大部份跟光标的控制有关,如下表:1 11控制字符1Dec1 1 i|HexIi i!功能 11 11\n1101|OxOA1 11换列,也就是将光标移到下一列11\t|9|0x091将光标移到下ー个定位(l+8n) |1\b|8|0x08!退一格,类似按下左键 I1\a17|0x07!喇叭叫一声 |1\r|13|OxOD!回到列首 11\f|12|OxOC!跳页,在列表时控制列表机跳页|1w|92|0x5C1印出、字符 1IV|39|0x271印出’字符 1ヽ|34|0x221印出”字符 1|\xHH1|OxHH!印出OxHH所表示的字符 |*|%%i |37i|0x25i1印出%字符 11 1其中,%字符的定义与在控制字符串中的表示法不同,其余的字符在定义上与在控制字符串中的表示法都相同。printf在做输出时,你也可以指定保留多少位置给对应的表达式放结果。指定的方式是在%之后加一个数值,如%5d!表示保留5个字符空间给ー个十进制整数;%121d:表示保留12个字符空间给ー个十进制长整数。如果要输出数据的长度比你指定的保留空间还要大时,printf就不理会你的设定,把要输出的数据完整的输出,所以,你在设定保留空间时,应该注意输出数据的范围及长度,保留够大的空间,确保输出格式的整齐。在浮点数方面,你除了可以指定保留的空间外,还可以指定小数点后要取几位。如%8.3f:表示保留8个字符空间给ー个浮点数,小数部分则是占3个字符空间,由于小数点本身占ー个字符,所以整数部分占8-(3+1)=4个字符空间。printf在输出数据时,如果你指定保留的空间比要秀的数据长度还要大时,那printf先秀一些空白,再秀出数据,使总长度等于你所指定的宽度,这样等于是让输出的数据向右对齐。如果你想要让数据是向左対齐的话,可以在指定宽度时使用负数,如%-5d!表示保留5个字符空间给ー个十进制整数,若数据长度不足
5,则在秀出资料后补空白。〇整数(int)及长整数(long)%-+wdfint%-+wIdflongt t tI I 1 若有指定,则保留w个字符II 若无指定,秀出长度将由数据决定I 1 若有指定,则一定会秀出正负号I 若无指定,则只有负数会秀出负号1 若有指定,则向左对齐若无指定,则向右对齐〇浮点数(float)、倍精浮点数(double)及长倍精浮点数(longdouble)- + w . p f float- + w . p Iffdouble- + w . p Lf longdoublet t t tIII1—若有指定,则保留P个字符给小数III 若无指定,内定是保留6个字符给小数I|1 若有指定,则保留w个字符含小数及小数点II 若无指定,秀出长度将由数据决定I 1 若有指定,则一定会秀出正负号I 若无指定,则只有负数会秀出负号1 若有指定,则向左对齐若无指定,则向右对齐说了这么多,只有自己试试看オ知道!以下是个简单的例子:print.c1#include<stdio.h>343456789123456);123456);123 );123 );123 );12.345):printf("|%ld|\n",printf("%51d|\n”,printf(*|%d|\n*,printf("1%123456);123456);123 );123 );123 );12.345):10printf(*|%9f|\n*,12.345):11printf("%9.2f|\n",12.345);12printf%-9.2f|\n",12.345);13)|123456| 一123456大于3276?要长整数才能表示,所以用%ld|123456| 一11231所保留的5个字符不够使用,所以TC视同你没设|123| 一保留5个字符,只使用3个字,向右靠齐1123| 一保留5个字符,只使用3个字,向左靠齐|12.345000 +小数没有指定,所以TC使用内定的6个小数。|12.345000 -保留9个字符,小数部分仍使用内定值| 12.35| 十保留9个字符,小数2个字符,向右靠齐112.35 —保留9个字符,小数2个字符,向左靠齐◎输入指令:scanf()C语言使用scanf指令来读取keyboard输入的数据。scanf的一般型式如下:Iscanf("控制字符串”,&变量1,&变量2scanf与printf可以说是相对的,ー个用来做输入,ー个用来做输出。scanf的控制字符串与printf几乎是ー样。IscanfIscanf的句柄代表输入的数值型别I|%c|%dI|%c|%dI%ld*I%DI%fI%lfI%LfI%s字符十进制之整数十进制之长整数十进制之长整数浮点数倍精浮点数长倍精浮点数字符串★注意:没有%F这种句柄,课本有误!%D的句柄只能用在scanf(),在printf()中无法使用。在用scanf时还有一点要注意,在控制字符串后的变量,使用的是指针(pointer)。什么是指标?指针就是指向内存的ー个地址,在那个地址存放着数据。例如:ー个整数变量i,它是存在内存的某ー个地址,那个地址在C语言中,是以&i来表示,我们通常称&i是i的地址,也称为i的指标。以下是常用的变量及其指针(因为它的地址同定不会改变,也称为指标常数):charc;inti;long1;floatf;doubled;longdoubleId;/・字符/・整数/・长整数/・浮点数/・倍精浮点数/・长倍精浮点数*/*/*/*/*/*//*C的指针是&C*//*i的指标是&i*//*!的指标是&1*//*f的指标是&f*//*d的指标是&d*//*Id的指标是&ld*/charstr[80];/・字符数组(字符串)・ノ//*str[80]的指标是inta[100];/・整数数组*//*a[100]的指标是alongb[100];/・长整数数组*//*b[100]的指标是bfloatc[100];/・浮点数数组*//*c[100]的指标是c以下的范例,将第三章的范例var.c变量改由scanf输入:1 11io.c || 1r1|ttinclude<stdio.h>12|voidmain(void)3|{4|inti,j;5|6|printf〈Enter2integers:*)7|scanf("%d%d”,&i,&j);/*用i与j的指标&i,&j*/18|printf(*Now,Ifindthat..\n");9|printf(*%d+%d=%d\n”,ij,i+j):10|printf(*%d-%d=%d\n”,ij,i-j);11|printf(*%d*%d=%d\n”,ij,i*j);12|printf(*%d/%d=%d\n”,ij,i/j):13|)1 1|Enter2integers:204•相当于i=20,j=4 ||Now,Ifindthat...|20+4=24|20-4=16|20*4=80|20/4=5iiscanf在读取多笔数据时,是把调位字符(如:空白、定位(tab)及换列字符)当作数据的分隔的记号,也就是利用scanf输入多笔数据时,必须用调位字符分隔输入的数据。如本例中,输入的i值与j值,可以用空白区隔,也可以用换列或定位来区隔。在结束输入时则要用换列字符,也就是说要按Enter«进阶的程序设计师通常不会用scanf作为数据的输入,因为只要输入的格式有ー点点错误,scanf所得到的结果就无法预期。大部分的程序设计师会用getsO这个函式读入字符串,gets是以换列字符作为结束记号,所以,利用gets可以读入包含空白及定位的字符串。读入的字符串可以用atoi()转成整数、用atol()转成长整数、用atofO转成浮点数。更进阶的程序设计师则是自行设计输入函式,并加入ー些设定防止输入错误发生,例如,在输入整数的函式中,使用者只有按下数字键オ有反应,若按下非数字键,则不会反应。也可以限定使用者输入的数据长度,防止输入的数值过大,等等。以下的范例,将华氏温度(下)换算成摄氏
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论