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语言系统提供给我们使用的屏幕输出函数用户能够看到运行结果当该本程序运行之后将会在显示器上显示如下结果即a等于20b等于15sum等于35此函数就是printf(“a%d,b%d,sum%d\n”,a,b,sum);。6、这一行它以#号开头它不以分号结尾。而这一行没有分号所以它不是语句。在c语言中它通常都被称之为“一个命令行”或者它也可以叫做“预编译处理命令”。7、程序里那以 /* 开头并且以 */ 结尾的部分意味着是程序的注释部分注释能够添加在程序的任何一处位置是为了提升程序的可读性才添加的但当计算机执行主函数内容之际完全不理会注释部分换句话讲就是计算机把注释部分当作在主函数中并不存在。02C程序的生成过程C程序先是源文件经编译之后生成目标文件接下来经连接过程之后生成可执行文件。扩展名为.c 的是源程序扩展名为.obj 的是目标程序扩展名为.exe 的是可执行程序。03标识符于编写程序之际务必要给函数、变量之类予以命名而这般的名字称作标识符。在C语言里标识符的命名规则是下面这样的在程序里标识符是不可以跟其中具有特殊意义的关键字保持相同的也不能够和用户所编制的函数名一样更不能与C语言库函数相同并且在程序当中各种标识符最好是不要出现重复的情况这样才方便去进行区分。当选择变量名以及其他标识符的时候应该要注意达成“见名知义”这个要求。标识符分为如下三类1、关键字关键字有着特定含义在完全不是一般范畴的它是专门被用来对C语言一些特定成分做出说明的被划定为一类标识符并且它绝对不可以被用作用户所使用的标识符。2、预定义标识符预定义标识符在c语言里有着特定的含义然而它能够被用作用户标识符预定义标识符被划分成为两类。1、像printf这样的库函数的名字还有scanfsin以及isdigit等。2、编译处理命令名比如define,include3、用户标识符可以被用户依据自身需求去自行定义的标识符被称作是用户标识符。不管以怎样的方式去进行自定义标识符都必然是要符合标识符的三条命名规则的。04常量于程序运行阶段那其值无法被改变的量被称作常量常量存在5种类型分别是整型常量实型常量字符常量字符串常量以及符号常量。4.1 数值转换数值的四种表现形式数字在计算机内部是以二进制形式来表示以及存放的用户所输入的普通十进制数字都得被计算机给转换成二进制才能够在计算机内部进行存储同样的计算机的运算结果也是二进制一般情况下要把它转换成十进制数才会输出给用户去阅读而这种转换通常是由计算机自动达成的。1将十进制转换二进制、八进制和十六进制除法把十进制数拿来除以2把余数记录下来得到的那个商再接着除以2一直到商变为0之后把每次相除所得到的余数按照从后往前的顺序逆序排列起来这样所得的余数数字序列就是这个十进制数所对应的二进制数。八进制以及十六进制的转换法子和上面所说的是一样的。转换成二进制数的值是1101的十进制数13转换而成的八进制是015转换成十六进制是D。2将二进制、八进制和十六进制转换成十进制产品进行求和操作把二进制之中的每一个数位自低位朝着高位的方向右边的方向是低位左边所在的方向是高位分别去乘以二十、二十一、二十二等等接着把这些所得出来的值进行求和。3二进制与八进制、十六进制数之间的相互转换4.2 数形常量整型常量存在着三种形式一种乃是十进制整型常量另一种属于八进制整型常量还有一种为十六进制整型常量。留意于c语言里不存在直接用以表示二进制的整型常量于c语言源程序范围之内不会出现二进制。书写方式如下分别来看不同类型的整型常量十进制整型常量有123 0 -24 85L这里的L表明这是长整型常量 等八进制整型常量有051 -026 O773等十六进制整型常量有0x55 0x1101 0x 0x5AC0 -0xFF。其中L代表长整型。4.3 实型常量实型常量有两种表示形式小数形式和指数形式。呈现为小数形式的是5.4 0.074 以及-23.0 呈现为指数形式的是5.4e0 4.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将字符‘A’赋值给cr1把字符‘B’赋予cr2。把一个字符赋予给一个字符型变量之际可不是将该字符自身存进记忆里而是把该字符所对应的ASCII代码存进内存的单元之中。内存里字符是以ASCII码存放的其存储形式跟整数的存储形势相像于是C语言里字符型数据跟整型数据之间能够通用一个字符能用字符形式输出也能用整数形式输出字符数据还能做算术运算这时就如同对它们的ASCII码开展运算。06类型的自动转换和强制转换要是在同一个表达式里各个数据的类型不一样那么编译程序会自动将它们转变为同一类型之后才开展计算。转换的优先级是这样的char较int级别低int较float级别低float较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.51除以2的数值是0。b、当“除”字左边或者右边至少存在一个属于实型数据也就是小数的时候所得到的结果会成为实型数据举例来说5除以2点0的数值是2点57点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的值进行加1操作、减1操作而i还有i--则是在使用i之后才使得i的值进行加1操作、减1操作。1变量是能用自增运算符 ()以及自减运算符(--) 的唯一对象常量或者表达式那就不能用类似10这种的、还有像(xy)这样的情况都是不符合规格要求的。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就如同a等于12减去12乘以12等于12减去144等于-132。2接着进行“a-132”这种运算此操作意味着a等于a加上-132就等同于a等于264。9.3 逗号运算符和逗号表达式在c语言这一范畴里逗号除了具备作为分隔符还能被用作一种运算符也就是逗号运算符它能用逗号运算符把几个相关的表达式相互连接起来像在这样举其中的例子ab cab * 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 的比值的值便是真。3取反用!a来表示若a是真的那么!A就是假的反过来也是这样比如说!-5这个的值是0。在语言里头由或者||组合而成的逻辑表达式于某些特定情形之下会出现“短路“这种状况。1x并且y并且z唯有在x为真非0的情形下才要对y的值加以判别只有x与y均为真的时候才需去对z的值进行判别只要x为假那就不必对y和z进行判别整个表达式的值归于0。口诀“一假必假”。例因为51这个表达式的值是0所以在计算机运行过程当中就会跳过i0这个表达式进而51i0这个表达式的值是0。2假如出现x||y||z这种情况一旦x之所具备的值呈现为真的状态也就是并非零这个数值那么就没有必要去判别y以及z各自所具有的值并且整个借助这些所构成的表达式最终得出来的值显现为1唯有在x的值呈现出假的情形时才会有需要去判别y的值的这种情况发生只有当x的值以及y的值同时都呈现出假的状况时才会有需要去判别z的值的这种情况出现有这样一句口诀“一真必真”。11位运算11.1 位运算符对于计算机而言数据皆是以二进制数那般的形式去存在的位运算所谓的就是针对存储单元之中二进制位的那些位运算C语言进行提供六种有关于位的运算符。11.2 位运算位运算符 |~ ∧ 按优先级从高到低排列的顺序是位运算符里求反运算“~”的优先级是最高的左移和右移的优先级相同它们处于第二的位置接下来的顺序是按位与“”、按位异或“∧”以及按位或“|”。顺序是~ ∧ |。例1左移运算符“”右边的数指定移动的位数。例如设 a15 a2 表示把右移为十进制3)。需要说明的是针对有符号数而言在进行右移这个操作的时候符号位会跟着一起移动。要是是正数的情况嘛最高位会补0而要是负数的情况呢符号位是1至于最高位补0还是补1这是由编译系统的规定来决定的。将例3当中设定二进制数a它为00 要是历经通过异或运算a∧b 以此让 a的处于高位的4位进行取反操作而处于低位的4位保持不变那么此二进制数b究竟是什么啊分解说明异或运算常常可用来达成使特定位置进行翻转的操作只要把那些需要进行翻转的位拿来与数字1展开异或计算就能够达成了 因为原来的数字当中值是1的位跟数字1做异或运算会得到0 值 原来数字里头值是0的位和数字1开展异或运算最终结果会得到1。然而和数字0展开异或计算的位会持续维持原来的值。异或运算还能够被用来实现交换两个数值的操作 并且不需要借助临时变量。对于C语言而言它是在全世界范围内开展普及推广任务的不管具体指向中国还是世界各个国家它都皆是以一种极为基本的计算机课程的形式存在于高等学校之中并且C语言也是在计算机这个极为关键的领域发挥着极其重要的作用的。