
01C语言程序的结构认识找一个c程序示例它要简简单单的用来讲解c语言的基本构成还有它的格式以及良好的书写风格从而让小伙伴对c语言有个初步的认知。例1计算两个整数之和的c程序#include main()int a,b,sum;a20; /*定义变量a,bsum为整型变量*/b15; /*把整数20赋值给整型变量a*/sumab; /*把整数15赋值给整型变量b*/首先将两个数进行相加运算并把得到的和赋值给一个定义为整型的变量sum 然后运用printf函数输出“a%d,b%d,sum%d\n”其中参数分别涉及整型变量a 整型变量b 和那个被赋值了的整型变量sum呢。重点说明2、在C语言里被称作“主函数”的main()一个C程序存在且仅仅有一个main函数任何一个C程序始终是从main函数起始执行main函数后面的那一对圆括号是不可以省略掉的。3、由大括号{ }所括起来的那部分内容被称作是main函数的函数体而这一部分内容便是计算机将会去执行的内容。4、每一句话后面都有着一个分号在{ }里面于c语言当中我们将以一个分号作为结尾的一句话称作是一个c语言的语句分号是语句结束的标志。5、执行这条由c语言系统提供给我们直接用于屏幕输出的函数即printf(“a%d,b%d,sum%d\n”,a,b,sum)用户就能看到运行的有关结果本程序运行完毕以后会在显示器上面显示这类结果就是a20,b15,sum35。6、# include留意是以#号开始的并非以分号结束这一行不存在分号因而不是语句在c语言里称作命令行或者称之为“预编译处理命令”。7、程序里被 /* 开头且以 */ 结尾的那部分意味着是程序的注释部分注释能够添加在程序的任意位置是为了把程序的可读性给提高才添加的然而计算机在执行主函数内容之际会完全无视注释部分换句话讲就是计算机将注释部分当作在主函数里不存在。02C程序的生成过程C语言编写的程序首先是源文件经由编译这一过程才生成目标文件呢再者经过连接这个步骤最终生成可执行文件呀。扩展名为.c属于源程序扩展名为.obj属于目标程序扩展名为.exe属于可执行程序。03标识符在开展程序编写举动的时候务必要针对函数、变量之类选取取名这般的名字被称作标识符。于C语言范畴之内标识符的命名规则处于如下情形编程时标识符不能和程序里有特殊意思的关键字一样不能与用户编写的函数名相同不能与C语言库函数相同在程序里各种标识符最好不要重复这样方便区分。挑选变量名跟其他标识符时要留意做到 “见名知义”。标识符分为如下三类1、关键字关键字有着特定含义是专门用以说明c语言特定成分的一类标识符它不可以用作用户的标识符。2、预定义标识符在C语言里预定义标识符有着特定相应的含义然而它能够被用作用户标识符预定义标识符被分成了两类1库函数的名称像是printfscanfsinisdigit这类。2、编译处理命令名比如define,include3、用户标识符将用户根据自身需要自行定义的那种标识符称作用户标识符。于任何情形下不管怎么去进行自定义标识符这一行为均务必要同标识符所具备的那条命名规则三个方面相契合。04常量对于在程序运行时其值不可以被更替的量称作常量。常量具备5种类型分别是整型常量实型常量字符常量字符串常量以及符号常量。4.1 数值转换数值的四种表现形式计算机内部数字是以二进制形式进行存放与表示的用户所输入的普通十进制数字都得被计算机转化成二进制才可以在计算机内部存储。同样计算机的运算结果是二进制通常要把它转化成十进制数再输出给用户去阅读而这种转换一般是由计算机自动达成的。1将十进制转换二进制、八进制和十六进制除法把十进制数拿来除以2把余数记录下来让得到的商接着除以2一直到商是0为止随后把每次相除所获取的余数 顺着从后面往前面的方向倒着排列所得到的余数数字序列便是该十进制数对应的二进制数。 八进制还有十六进制的转换办法跟上面是一样的。以十进制形式存在的数字 13当把它转换成为二进制数的时候所得到的值是 1101要是将其进行八进制的转换结果即为 015而把它转换成十六进制的话最终呈现的是 D。2将二进制、八进制和十六进制转换成十进制积和相加把二进制的每一个数位按照从低到高的顺序右边算作低位左边算作高位分别乘上20、21、22……接着把这些数值进行求和。3二进制与八进制、十六进制数之间的相互转换4.2 数形常量整型常量存有三种形式其一乃是十进制整型常量其二是八进制整型常量其三为十六进制整型常量。请注意在c语言里头并不存在能够直接去表示二进制的整型常量于c语言源程序当中是不会出现二进制的。书写方式如下一种被称作十进制整型常量的有这些123 0 -24 还有那个被叫做85L也就是长整型常量等另一种是八进制整型常量包含051 -026 0773 等再有就是十六进制整型常量像0x55 , 0x1101 , 0x 这里的0x单独存在有点特殊, 0x5AC0 , -0xFF。这里面的L代表长整型。4.3 实型常量实型常量有两种表示形式小数形式和指数形式。它的小数形式呈现为5.40.074-23.0 其指数形式则是5.4e04.3e-3-3.3e4。1小数部分为0的实型常量可以写为453.0 或453。2以小数形式进行表示的时候小数点的两侧都必定得存在数字不可以写成 “.453“ 以及 “453.“ 这种样子而应当写成 “0.453“ 以及 “453.0“ 这种形式。3采用指数写法之际e的前面必定得有数字e之后的指数务必是整数要留意整数阶码能够是正数能够是负数还能够是八进制数、十六进制数不过必定均为整数。4.4 字符常量标志字符常量的是一对单引号‘ ’在c语言里存在两类字符常量。1像由一对单引号括起来的这样的一个字符比如‘a ’还有‘r’ 以及‘#’。然而要注意哦 ′a′ 与 ′A′ 它们可是两个不一样的字符常量呢。2一对单引号将其括起反斜杠\在开头后面跟着若干数字或者字母像‘\n’这样其中“\“有着转义的含义后面跟不同字符会表示不同意思这类字符常量被称作转义字符。4.5 字符串常量C语言里被双引号包围起来的由好些个字符构成的序列就是字符串常量。例“ni hao” “happy”等等。4.6 符号常量由宏定义“#define”这种方式所定义的常量被称作符号常量在C程序里会有标识符可用来代表一个常量。例计算圆的面积的c程序。#include#define PI 3. main()float rs;r12.5;SPI *r*r;printf(“s %f ”,s);说明将#define当作宏定义在这个程序里所有有PI出现的地方全都是代表3.同步PI被称作符号常量。依照习惯我们使用大写字母去表示符号常量用小写字母表示变量如此这般比较易于区分。05变量值能够改变的量被称作变量变量需具备变量名它在内存里占据特定的存储单元该存储单元中存放着此变量的值不同类型的变量其存储单元大小各异变量在使用之前必须进行定义。5.1 整型变量整型变量被划分成4种分别是基本型也就是int还有短整型它可以是short int 或者short另外还有长整型其可以是long int 或者 long以及无符号型包括unsigned int unsigned shortunsigned long。针对上述四种整型数据不同的编译系统给予的规定中所涉及的占用位数还有数值范围是不大一样的。类型说明符对于单词signed而言它是用来表明“有符号”这种情况的也就是存在正负数的区分范畴要是不书写signed的话其实也会隐含着被说明为有符号这样的意思而unsigned这个词则是用以说明“无符号”的情形即仅仅表示正数。5.2 实型变量在C语言里边实型变量被划分成了单精度类型也就是float 以及双精度类型也就是double 这两种类型。如:float a , b ; double m ;在vc当中float型数据在内存里占据4个字节也就是32位double型数据占8个字节。单精度实数能提供7位有效数字双精度实数可提供15至16位有效数字。实型常量不存在float型和double型之分一个实型常量能够赋给一个float型或者double型变量可变量依据其类型截取实型常量里相应的有效数字。留意实型变量仅能够存放实型值不可以运用整型变量去存放实型值并且也不可以以实型变量去存放整型值。5.3 字符变量字符变量用来存放字符常量定义形式char 变量名关键字char它定义字符型数据类型这种数据类型占用一个字节的存储单元。字符型变量cr1字符型变量cr2 在这cr1被赋值为字符常量 Acr2被赋值为字符常量 B。对于字符变量当把一个字符赋予它时并非是把那个字符自身存进内存里头而是将跟该字符对应的ASCII码存到内存单元当中。由于字符于内存里是以ASCII码来存放的其存储形式跟整数的存储形式相类似故此在C语言当中字符型数据跟整型数据之间能够通用一个字符能够用字符的形式予以输出也能够用整数的形式进行输出字符数据也能够开展算术运算在这种时候就相当于针对它们的ASCII码开展运算。06类型的自动转换和强制转换当处于同一表达式里各数据的类型不一样的时候编译程序会自动将它们转变成为同一类型之后再开展计算转换的优先级是char小于intint小于floatfloat小于double也就是左边等级“低”的类型向右面进行转换。详细来讲要是在表达式里优先级处于最高位置的数据属于double型那么此表达式当中的其他数据全部会被转化成double型并且计算得出的结果同样是double型要是在表达式里优先级处于最高位置的数据是float型那么此表达式当中的其他数据全部会被转化成float型并且计算得出的结果同样是float型。在进行赋值运算这个行为的时候若赋值号左边跟右边两边的类型是不一样的情况则原本在赋值号右面的类型会朝着左边的类型进行转换这个动作当处于右边的类型比左边的类型要高这种状况的时候则在转换这个行为发生的过程中会针对右边的数据开展截取这个操作。剔除了自动进行的转换之外另外存在着强制进行的转换其表示的形式是这样的( 类型 )表达式。例int)(ab)探讨当把a的值赋予3.4这个数值把b的值赋予2.7这个数值(int)(a加上b)以及(int)a加上b各自的数值是多少呢07C运算符认识C语言的运算符范围很广可分为以下几类而且依据参与运算的对象的数量C语言运算符能够被划分成单目运算符像这样的双目运算符像 - 这种的以及三目运算符即?这样的。08算术运算符和算术表达式8.1 基本的算数运算符1(加法运算符或正值运算符如25)。2-(减法运算符或负值运算符如4-2)。3*(乘法运算符如3*8)。4/(除法运算符如11/5)。/的运算分为两种情况a、当“除”的左边与右边两边都属于整数范畴的时候所获取到的结果必定是整数需要留意的是此为仅仅只取整数部分并非进行四舍五入的操作举例来说5除以2所得到的值是2并非2.5而1除以2所得到的值是0。b、当“除”字左右两边之中至少存在一个属于实型数据也就是小数的时候最终所得的结果会是实型数据。举例来说5 除以 2.0其值是 2.5 7.0 除以 2.0其值是 3.5。5(%这个符号被称作模运算符或者也叫求余运算符%这个符号两侧都应当是整型数据就好比9%7得到的值是2这个情况)。需要加以说明的是面对运算对象是负数这种情况时所获取到的结果会依据编译器的不同而产生差异在vc当中结果的符号跟被除数是一样的举例来说13除以-2的结果是1而-15除以2的结果是-1。8.2 算术表达式和运算符的优先级与结合性一种表达式它是用算术运算符以及括号把运算量也就是操作数连接起来且符合C语言语法规则这种表达式叫算术表达式。运算对象涵盖函数、常量以及变量等呀。于计算机语言里头算术表达式进行求值的那种规律跟数学之中四则运算的规律相像它的运算规则以及要求是以下这些。8.3 自增自减运算符作用使变量的值增1或减1。就像i --i 于动用 i 之前先行让 i 的取值加一、减一。i i-- 在运用 i 之后致使 i 的取值加一、减一。1能够使用自增运算符 () 以及自减运算符 (--) 的仅仅是变量常量或者表达式是不可以使用的就像 10 这种情况还有 (x y) 这样的情况都是不符合规定的。2“”以及“--”的结合方向为“自右向左”像“-i”这种情况“i”的左边是负号运算符而右边是自增运算符负号运算以及自增运算都是按照“自右向左”来结合的这就等同于“-(i)”。循环语句里常常会用到自增或者自减运算符指针当中同样经常会用到这个运算符考生需要搞明白“i”以及“i”还有“i--”以及“--i”之间的区别格外要搞明白表达式的值以及变量的值。09赋值运算符与赋值表达式9.1 赋值运算符与赋值表达式表示赋值的符号 ““ 属于赋值运算符其作用在于把某一个数据给予一个变量或者是将一个变量所具有的值给予另一个变量由赋值运算符构建而成的表达式称作赋值表达式其一般的形式是变量名 表达式。程序里可多次给变量赋值每次赋值时与之对应的存储单元内的数据便会被更新一回内存里当下的数据是最后一次所赋的值的数据。例a12; 此表达式读作“将10的值赋值给变量a”。a、要是赋值号两边的运算对象的类型并非一致那么系统会自动开展类型转化转化所依据的规则是把赋值号右边表达式的值的类型转变成赋值号左边变量的类型。例int y3.5在变量y中最终存储的是整数3。b、 可以将复制表达式的值再赋值给变量形成连续赋值。好比举例来说x等于y等于25这属于一个连续赋值方面的表达式x等于y等于25等同于x等于括号里的y等于25因此表达式x等于y等于25最终所具有的值是25。9.2 复合的赋值运算符能够构成复合赋值运算符的方式是在赋值运算符的前面添加其他运算符。其中那些和算术运算存在关联的复合运算符分别有-*/% 这样。在两个符号间距其间是不可以存在空格的复合赋值运算符所具备的优先级是跟赋值运算符相一致的。表达式n 1它所表达且等同于的便是n n 1。其作用在于对待变量n当中秉持的值进行增1操作之后再向着以变量n进行赋值诸如此类的其他任何处于复合状态的赋值运算符所遵循执行的运算规则都是依照这样的原则依次顺延下去的。如求表达aa-a*a 的值,其中a的初值为12 。步骤起初开展“a - a * a”这种运算其效果等同于a等于a减去a乘以a也就是12减去144最终得到-132。2随后进行“a -132”这种运算其情形等同于a等于a加上-132同样等于264。9.3 逗号运算符和逗号表达式在c语言里头逗号除了当作分隔符之外还能够被用作一种 运算符也就是逗号运算符利用逗号运算符把几个表达式给连接起来像abcab*c之类的就被称作逗号表达式。一般形式为表达式1 表达式2 表达式3 …表达式n例x2,y3,z4具有从左至右结合性的逗号表达式是先求解表达式1接着依次求解表达式2一直到表达式n的值而表达式n的值就是整个逗号表达式的值上述那逗号表达式的值就是表达式z 4的值4要注意的是逗号运算符可是所有运算符中级别最低的。例有如下程序段main()int a2,b4,c6,x,y;y(xab),(bc);printf(y%d,x%d,y,x);程序显示结果为y6,x6拿去讨论把y等于括号里的x等于a加b逗号b加c改为y等于括号里的括号里的x等于a加b逗号b加c之后的程序结果会是怎样呢10关系运算符和关系表达式10.1 C语言中的逻辑值C语言里的逻辑值仅有两个分别是真true)以及假flase)用并非零的数来表征真用零来表示假故而针对任意一个表达式而言要是它的值是零那就意味着是一个假值要是它的值为不是零的数那就意味着是一个真值只要值不是零不管是正数还是负数亦或是整数又或者是实数均代表一个真值比如-5的逻辑值是真。10.2 逗号运算符和逗号表达式并且符号“”以及双竖线符号“||”它们进行运算时所针对的对象是两个所以呢这二者都属于双目运算符然而叹号“”它在进行运算时所针对的对象仅仅只有一个所以呀它属于单目运算符。关于逻辑运算下面进行举例说明1a且b只有在且两边均为“真”的情形下表达式a且b的值才会是真。值得注意的是在数学中关系式02a与b进行逻辑或运算即a||b当逻辑或两边存在一个为“真”的情况时该表达式a||b所具有的值便是真。3a这意味着取反即要是a呈现为真的状态那么A就会处于假的情况反过来讲也是如此比如说-5所具有的值便是0。在语言里由或者||所构成的逻辑表达式于某些特定情形下会出现“短路“状况。1存在这样一种情况即x且y且z惟有的情形为仅当x呈现真非0状态之时才有进而去判别y取值情况的必要性而仅当x以及y皆为真的状况下才会有去判别z取值情况的需求只要x为假那么便无需判别y以及z整个经由该逻辑关系所构成的表达式其值为0。有这样一句口诀来对此进行概括“一旦出现假值整个结果必然为假”。例并非5等于1并且自增i等于0并非5等于1这个表达式的值是0因此在计算机运行的时候就会跳过自增i等于0此表达式并非5等于1并且自增i等于0这个表达式的值是0。2在x||y||z时若x的值是真也就是非零那么就不用去判别y以及z的值此时整个表达式的值是1唯有x的值为假时才要去判别y的值只有当x和y的值一块儿为假时才要去判别z的值口诀是“一真必真”。11位运算11.1 位运算符数据于计算机里皆是以二进制数之形式而存放的位运算乃是指针对存储单元之中二进制位的运算C语言给出6种位运算符。11.2 位运算位运算符 |~ ∧ 按优先级从高到低排列的顺序是位运算符之中求反运算“~”它的优先级是最高的状况然而左移以及右移二者的位置状况是一样的处于第二阶梯紧接着的排列顺序是按位与“”、按位异或“∧”以及按位或“|”。其顺序是~ ∧ |。例1左移运算符“”右边的数指定移动的位数。例如设 a15 a2 表示把右移为十进制3)。应当予以说明的是针对有符号数而言在进行右移操作的时候符号位将会跟随着一起移动。当该数是正数的情形时最高位会补上0 而当其为负数的时候符号位呈现的是1 最高位究竟是补0还是补1 这是由编译系统的规定来决定的。针对例3来说设有一个二进制数a它是00 要是借助异或运算a∧b 从而让a的高4位进行取反操作并且使得a的低4位保持不变那么这个二进制数b是。剖析异或运算常常被用以让特定的位产生翻转只要把需要翻转的位跟1开展异或操作即可达成这是由于原先数里面值是1的位跟1开展异或运算会得到0 原先数里面值是0的位跟1开展异或运算最终结果会得1。然而与0开展异或的位会维持原来的值。异或运算还能够被用来交换两个值无需借助临时变量。C语言于全世界获普及推广不管在中国还是世各国C语言皆是高等学校一门基础的计算机课程C语言于计算机领域亦发挥重要作用。