您好,欢迎访问三七文档
第2页共41页C语言速成手册(零)序言、环境、你的第一个程序本文目的:介绍C语言最基本的用法,能对付NOIp就行本文特点:没有废话,不讲概念,只介绍语法适宜读者:已经学过其它语言,希望学习C语言的人;特别适合熟练Pascal并想转用C语言的OIer编程环境:就我个人而言,Windows下用Dev-C++,Linux下用EmacsA+B问题代码:#includestdio.hintmain(){inta,b;scanf(%d%d,&a,&b);printf(%d,a+b);return0;}第5页共41页C语言速成手册(一)基本数据类型、标准输出、函数语句和语句块和Pascal一样,C语言的每条语句以分号结尾。和Pascal一样,单词和语句间的空格、回车符对编译没有影响。C语言的语句块用花括号标识,也就是说字符{相当于Pascal的begin,字符}相当于Pascal的end;。语句块中最后一条语句末尾的分号不能省略。如果语句块里只有一条语句,语句块的标识可以省略。这就好像Pascal代码:fori:=1tondobeginwriteln('ILoveYou');end;里面的begin和end可以省略一样。注释的写法两种情形被认为是注释。符号//的后面(只限一行),以及符号/*和*/之间(可以跨行)。例如:/*======================THISISACOMMENT======================*///Thisisacomment.常用数据类型CPascalshortshortintintintegerlonglongintlonglongint64unsignedshortbyteunsignedintwordunsignedlongdwordunsignedlonglongqwordfloatrealdoubledoublecharchar定义常量为了告诉编译器某个变量不会改变,你可以在变量定义前加一个const。例如,下面的语句定义了一个常数:constintmaxn=2000;第6页共41页定义变量定义变量使用这样的格式:类型名变量名1,变量名2,...,变量名n;变量名的命名规则与Pascal相同:只能用大小写字母、数字或下划线,第一个字符不用数字。所不同的是,C语言中定义的名称要区分大小写。例如,下面的两条语句定义了三个整型变量和一个字符变量。inta,b,c;charch;和Pascal不同,变量的声明不一定要在整个代码前。你可以在程序中任意一个地方定义一个新的变量。定义的变量只能在当前函数(中的当前语句块)后面的代码中使用。也就是说,不同函数之间的变量不能混用,在某循环里定义的变量在循环外面是无效的。定义在函数外的变量将作为全局变量供后面的函数使用。基本数学运算作用CPascal加++减--乘**除//或div取余%mod除法的结果是整数还是小数取决于参与运算的数是整数还是小数。10/4等于2,但写成10.0/4或10/4.0就得2.5了。关于字符类型C语言中的字符用一对单引号''标注。例如,'A'表示字符A。无法打印或可能产生冲突的字符用反斜杠加一个字符来表示,这叫做转义符。常用转义符如下:\n换行\tTab\a响铃\双引号\'单引号\?问号\\反斜杠因此,'\''表示一个单引号,虽然它看上去像是两个字符。字符类型可以依照ASCII码进行数学运算。例如,字符变量ch可能被赋值为'A'+2(这样ch就等于'C'),而'0'+'1'则等于'a'。第7页共41页C语言中的赋值和Pascal不一样,C语言的赋值只用一个等号,等号前没有冒号。声明变量时后面可以跟一个等号赋初始值。下面的语句都是合法的:inta=3,b=106,c=a+b,d;charch=c-'0';d=a*b;类型转换与“名词动用”C语言中,不同类型的变量可以相互赋值,程序将自动转换类型(即使是数字与字符之间)。C语言中也存在“使动”用法(类似于Pascal中使用int64(a)扩展变量长度的用法)。假如a是整型,(double)a表示“实数版的a”;假如ch是一个字符,(int)ch就相当于Pascal中的ord(ch)。考虑下面的代码:inta;intb;charc;doubled,e;a='z';b=20.736;c=b+28;d=a/b;e=(double)a/b;这段代码中,a最终被赋值为122,b得到的值是20,而c的值则为字符'0';d获得的值为6.0,而e的值是6.1。标准输出输出使用printf函数。printf函数的使用方法如下:printf(字符串,待输出表达式1,待输出表达式2,...,待输出表达式n);C语言的字符串用一对双引号注明,里面允许有转义符。printf将把字符串输出到屏幕上。字符串中可以有若干个标识,这些标识帮后面待输出的内容“占一个位置”。常用的标识格式为%[x][.y](c|d|f|e),其中x表示输出占的宽度,y表示保留位数;c,d,e,f四个字母表示输出类型,你需要选择一个。c表示输出字符,d(也可以用i)表示输出整数,f表示输出小数,e用科学计数法表示小数。printf后面的参数依次“填入”这些标识。注意d和e,f不能混用,也就是说,你不能把一个小数输出成整数格式,或把整数输出成小数格式(除非事先转了类型)。特别地,%%表示输出一个百分号。观察下列代码片段第8页共41页printf(WelcometoMatrix67.com\n);printf(4+5=%d\nand4-5=%d\n\n,4+5,4-5);inta=102;printf(2*a=%.5d\n,2*a);printf(2*a=%f\n,(double)2*a);printf(2*a=%8d\n,2*a);printf(2*a=%8.5d\n,2*a);printf(a=\'%c\'\n\n,a);doubleb=7;printf(a/b=%f\n,a/b);printf(a/b=%e\n,a/b);printf(a/b=%.9f\n,a/b);printf(a/b=%.3f\n,a/b);printf(a/b=%8.3f\n,a/b);printf(b/a=%.3f%%\n\n,b/a*100);charc='A';printf(c=%c\n,c);printf(c=%3c\n,c);printf(c=%d\n,c);printf(%c%c%c%c%c%c%d.com\n,c+12,c+32,c+51,c+49,c+40,c+55,a-35);程序输出的结果为:WelcometoMatrix67.com4+5=9and4-5=-12*a=002042*a=204.0000002*a=2042*a=00204a='f'a/b=14.571429a/b=1.457143e+001a/b=14.571428571a/b=14.571a/b=14.571b/a=6.863%第9页共41页c=Ac=Ac=65Matrix67.com函数的定义、返回和调用定义一个函数的格式如下:函数返回类型函数名(参数类型1参数名1,参数类型2参数名2,...,参数类型n参数名n){函数内容}如果某个函数不返回任何数据(相当于Pascal中的“过程”),函数返回类型要写成void。如果不写返回类型,函数默认返回类型为int。如果某个函数不带任何参数,参数表一般留空(也可以用一个void代替)。为了强调某个参数在整个函数中始终不变,类型前可以标明const。函数的返回使用下面的语句:return表达式;执行这条语句将立即终止该函数的运行。下面定义的一个函数可以返回三个数的平均值:doubleaverage(doublea,doubleb,doublec){doublesum=a+b+c;returnsum/3;}C语言也支持函数的内联,方法是在函数返回类型前加inline。例如:inlinedoubleaverage(doublea,doubleb,doublec){doublesum=a+b+c;returnsum/3;}函数的调用方法和Pascal一样。如果调用函数所带的参数类型和定义的不一样,程序会自动转换类型。下面的语句合法地调用了刚才定义的函数:num=average(2,6.5,4.23);第10页共41页有一点不同的是,当所调用的函数不带参数时仍然要写括号,例如:voidwriteMessage(){printf(WelcometoMatrix67.com);}voidoutput(){writeMessage();}C语言同样支持递归调用。由于C语言也只能调用前面定义过的函数,因此C同样需要类似于向前引用的方法。具体方法是把需要提前引用的函数的第一行复制一份提到前面去。下面的两种做法都是正确的,其中第一种方法允许在output函数里调用后面的average,第二种则允许在这句话后面的所有函数中调用它。voidoutput(){doubleaverage(doublea,doubleb,doublec);printf(%f,average(2,6.5,4.23));}doubleaverage(doublea,doubleb,doublec){doublesum=a+b+c;returnsum/3;}doubleaverage(doublea,doubleb,doublec);voidoutput(){printf(%f,average(2,6.5,4.23));}doubleaverage(doublea,doubleb,doublec){doublesum=a+b+c;returnsum/3;}事实上,向前引用时参数名已经没有意义,因此参数名可以省略,直接写成这样:doubleaverage(double,double,double);C语言中也允许在函数中定义子函数(函数的嵌套)。标准的C语言不支持在函数中定义子函数(函数的嵌套),虽然某些编译器可能支持。第11页共41页一个完整的程序代码的构成代码前几行用于包含头文件,每行包含一个,格式如下:#include头文件名常用的头文件有stdlib.h,stdio.h,string.h,math.h等等,分别提供一些常用函数、输入输出函数、字符串函数和数学相关函数。注意我们之前用的printf函数是属于stdio.h里的,因此要使用该函数必须在代码最开头加入#includestdio.h。接下来是若干个函数。这些函数里必须有一个名为main的函数,它返回的值是一个int类型,代表程序的退出代码(0=正常退出)。程序会自动寻找这个函数作为主函数执行。下面的代码是一个完整的C程序代码,这是我们的第一个完整的程序代码:#includestdio.hdoubleaverage(doublea,doubleb,doublec){doublesum=a+b+c;returnsum/3;}intmain(){doublea=24;doubleb=102;doublec=77;printf(Matrix%d.com原创\n转贴请注明出处,(int)average(a,b,c));return0;}第12页共41页C语言速成手册(二)布尔值、条件判断、循环逻辑运算符作用CPascal等于===不等于!=小于大于小于等于==大于等于==且&&and或||or非!notC语言的if语句C语言中if语句的写法如下:if(表达式){表达式为真时执行的内容}之前说过,如果执行的内容只有一句话,花括号可以省略。下面的语句将返回整数a的绝对值:if(a0)a=-a;下面的语句用于实现排序网络中的比较算子:if(ab){intc=a;a=b;b=c;}第13页共41页C语言中也有elseif和else的用法,但和Pascal不同的是else的前一条语句末要保留分号。下面的语句用于判断三边长分别为a,b,c的三角形是什么三角形:if(a+bc&&b+
本文标题:c语言速成手册
链接地址:https://www.777doc.com/doc-2908662 .html