APP下载

C语言基础知识大全

消息来源:baojiabao.com 作者: 发布时间:2024-05-19

报价宝综合消息C语言基础知识大全

C语言程式的结构认识

用一个简单的c程式例子,介绍c语言的基本构成、格式、以及良好的书写风格,使小伙伴对c语言有个初步认识。

例1:计算两个整数之和的c程式:

#include main { int a,b,sum; /*定义变数a,b,sum为整型变数*/ a=20; /*把整数20赋值给整型变数a*/ b=15; /*把整数15赋值给整型变数b*/ sum=a+b; /*把两个数之和赋值给整型变数sum*/ printf(“a=%d,b=%d,sum=%d\\n”,a,b,sum); /*把计算结果输出到显示屏上*/ }

重点说明:

1、任何一个c语言程式都必须包括以下格式:

main { }

这是c语言的基本结构,任何一个程式都必须包含这个结构。括号内可以不写任何内容,那么该程式将不执行任何结果。

2、main----在c语言中称之为“主函式”,一个c程式有且仅有一个main函式,任何一个c程式总是从main函式开始执行,main函式后面的一对圆括号不能省略。

3、被大括号{ }括起来的内容称为main函式的函式体,这部分内容就是计算机要执行的内容。

4、在{ }里面每一句话后面都有一个分号(;),在c语言中,我们把以一个分号结尾的一句话叫做一个c语言的语句,分号是语句结束的标志。

5、printf(“a=%d,b=%d,sum=%d\\n”,a,b,sum); ----通过执行这条c语言系统提供给我们直接使用的屏幕输出函式,使用者即可看到执行结果,本程式执行后,将在显示器上显示如下结果:

a=20,b=15,sum=35

6、#include

注意:(1)以#号开头 (2)不以分号结尾 这一行没有分号,所以不是语句,在c语言中称之为命令列,或者叫做“预编译处理命令”。

7、程式中以 /*开头并且以*/结尾的部分表示程式的注释部分,注释可以新增在程式的任何位置,为了提高程式的可读性而新增,但计算机在执行主函式内容时完全忽略注释部分,换而言之就是计算机当做注释部分不存在于主函式中。

C程式的生成过程

C程式是先由原始档经编译生成目标档案,然后经过连线生成可执行档案。

源程式的副档名为 .c ,目标程式的副档名为 .obj , 可执行程式的副档名为 .exe 。

识别符号

在编写程式时,必须为函式、变数等命名,这个名字称为识别符号。C语言中识别符号的命名规则如下:

识别符号只能由字母、数字、下划线组成;

识别符号的第一个字母必须是字母和下划线;

识别符号区分大小写字母,如If和if是两个完全不同的识别符号。

合法识别符号如下: A6, b_3 , _mn 非法的识别符号如下: ab#12 , 8m , tr3:4 , yes no

识别符号不能与程式中具有特殊意义的关键字相同,不能与使用者编制的函式名、C语言库函式相同,在程式中各种识别符号尽量不要重复,以便区分。选择变数名和其他识别符号时,应注意做到 “见名知义”。

识别符号分为如下三类:

1、关键字

关键字是具有特定含义的,专门用来说明c语言特定成分的一类识别符号,不能用作使用者的识别符号。

auto break case char union do double else enum extern goto if int long short signed static sizof struct switch unsigned void for while typedef continue float return typedef default

2、预定义识别符号

预定义识别符号在c语言中也有特定的含义,但可以用作使用者识别符号,预定义识别符号分为两类:

(1)、库函式名字,比如(printf,scanf,sin,isdigit等) (2)、编译处理命令名,比如(define,include)

3、使用者识别符号

使用者根据需要自己定义的识别符号称为使用者识别符号。无论如何自定义识别符号,都必须符合识别符号的三条命名规则。

常量

在程式执行中,其值不能被改变的量称为常量。常量有5种类型:整型常量、实型常量、字元常量、字串常量和符号常量。

(一)数值转换

数字的四种表现形式:

①:二进位制:所有数字由0,1构成,逢二进一,二进位制数中不会出现2.。 例: ②:八进位制:以数字0(注意不是以字母O,o)开头,所有数字由0~7构成,逢八进一,八进位制数中不会出现8。 例:0112,0123,077等 ③:十进位制:所有数字由0~9构成,逢十进一,十进位制数中不会出现10。 例:0,12,-15等 ④:十六进位制:以0x或者0X(数字0加字母x)开头,所有数字由0~9,A~F(或者a~f)构成,逢十六进一(其中A、B、C、D、E、F分别代表10、11、12、13、14、15) 例:0x4A、0X14c7等

在计算机内部,数字均以二进位制形式表示和存放,使用者输入的普通十进位制数字都要被计算机转换成二进位制才能在计算机内部储存,同样计算机的运算结果也为二进位制,一般要将其转换成十进位制数再输出给使用者阅读,这种转换通常由计算机自动实现。

(1)将十进位制转换二进位制、八进位制和十六进位制

除法:将十进位制数除以2,记录余数,得到的商继续除以2,直到商为0,然后将各次相处所得的余数从后往前逆序排列,所得余数数字序列就是该十进位制数对应的二进位制数。八进位制和十六进位制转换方法同上。

例:十进位制数13转换成二进位制数的值为1101,转换八进位制为015,转换成十六进位制为D.

(2)将二进位制、八进位制和十六进位制转换成十进位制

乘积求和:将二进位制的每一位从低位到高位(右边为低位,左边为高位)分别乘以20,21,22。。。。,然后将这些积求和。

例如:=(13)10 (317)8= (23E)16=

(3)二进位制与八进位制、十六进位制数之间的相互转换

①:二进位制转八进位制:从右往左每三位一组转换成十进位制数,将所得资料组合就是对应的八进位制数(注意:高位不足三位补零)。 例:(010 110 111)2=(267)8 ②:二进位制转十六进位制:从右往左每四位一组转换成十进位制数,将所得资料组合就是对应的十六进位制数(注意:高位不足四位补零)。 例:(0101 1011)2=(5B)16 ③:八进位制转化二进位制:每一位数字转换为三位二进位制数字 例:(13)8=(001 011)2= (注意:去掉前面的两个00,因为0在高位没有意义) ④:十六进位制转化二进位制:每一位数字转换为四位二进位制数字 例:(E3)16=(1110 0011)2

(二)整型常量

整型常量有3种形式:十进位制整型常量、八进位制整型常量和十六进位制整型常量。

(注意:c语言中没有直接表示二进位制的整型常量,在c语言源程式中不会出现二进位制。)

书写方式如下:

十进位制整型常量:123 , 0 ,-24 , 85L(长整型常量) 等 八进位制整型常量:051 ,-026 ,0773 等 十六进位制整型常量:0x55 , 0x1101 , 0x , 0x5AC0 , -0xFF。 其中L为长整型。

(三)实型常量

实型常量有两种表示形式:小数形式和指数形式。

小数形式: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后面的指数必须为整数(注意:整数阶码可以是正数,负数,也可以是八进位制数、十六进位制数,但必须为整数)。

(四)字元常量

字元常量的标志是一对单引号‘ ’,c语言中的字元常量有两类:

(1)由一对单引号括起来的一个字元,如‘a ’, ‘r’ ,‘#’。注意: ′a′ 和 ′A′ 是两个不同的字元常量。

(2)由一对单引号括起来,以反斜杠\\开头,后跟若干数字或者字母,比如‘\\n’,其中“\\“是转义的意思,后面跟不同的字元表示不同的意思,这类字元常量叫转义字元。具体如图所示 。

转义字元 转义字元的意义 ASCII码

\\n 回车换行 10 \\t 横向跳到下一制表位置 9 \\b 退格 8 \\r 回车 13 \\f 走纸换页 12 \\\\ 反斜线符"\\" 92 \\\' 单引号符 39 \\” 双引号符 34 \\a 鸣铃 7 \\ddd 1~3位八进位制数所代表的字元 \\xhh 1~2位十六进位制数所代表的字元

(五)字串常量

C语言中,以双引号括起来的,由若干个字元组成的序列即为字串常量。

例:“ni hao” “happy”等等。

(六)符号常量

符号常量是由宏定义“#define“定义的常量,在C程式中可用识别符号代表一个常量。

例:计算圆的面积的c程式。

#include #define PI 3. main { float r,s; r=12.5; S=PI *r*r; printf(“s= %f ”,s); }

说明:

#define 是宏定义,此程式中所有出现PI的地方都代表3.,同时PI称为符号常量。习惯上我们用大写字母来表示符号常量,小写字母表示变数,这样比较容易区别。

变数

变数就是其值可以改变的量。变数要有变数名,在内存中占据一定的储存单元,储存单元里存放的是该变数的值。不同型别的变数其储存单元的大小不同,变数在使用前必须定义。

(一)整型变数

整型变数分为4种:基本型(int)、短整型(short int 或short)、长整型(long int 或 long)和无符号型(unsigned int ,unsigned short,unsigned long)。

不同的编译系统对上述四种整型资料所占用的位数和数值范围有不同的规定。

型别说明符

单词signed来说明“有符号”(即有正负数之分),不写signed也隐含说明为有符号,unsigned用来说明“无符号”(只表示正数)。

(二)实型变数

C语言中,实型变数分为单精度型别( float )和双精度型别( double )两种。如:

float a , b ; double m ;

在vc中,float 型资料在内存中占4个字节(32位),double型资料占8个字节。单精度实数提供7位有效数字,双精度实数提供15~16位有效数字。实型常量不分float型和double型,一个实型常量可以赋给一个float 型或double型变数,但变数根据其型别撷取实型常量中相应的有效数字。

注意:实型变数只能存放实型值,不能用整型变数存放实型值,也不能用实型变数存放整型值。

(三)字元变数

字元变数用来存放字元常量,定义形式:

char 变数名;

其中关键字char定义字元型资料型别,占用一个字节的储存单元。

例:char cr1,cr2; cr1= ‘A’ , cr2=‘B’ ;

将一个字元赋给一个字元变数时,并不是将该字元本身储存到内存中,而是将该字元对应的ASCII码储存到内存单元中。例如,字元 ′A′ 的ASCII码为65,在内存中的存放形式如下:0

由于在内存中字元以ASCII码存放,它的储存形式和整数的储存形式类似,所以C语言中字元型资料与整型资料之间可以通用,一个字元能用字元的形式输出,也能用整数的形式输出,字元资料也能进行算术运算,此时相当于对它们的ASCII码进行运算。

型别的自动转换和强制转换

当同一表示式中各资料的型别不同时,编译程式会自动把它们转变成同一型别后再进行计算。 转换优先级为:

char

即左边级别“低“的型别向右边转换。具体地说,若在表示式中优先级最高的资料是double型,则此表示式中的其他资料均被转换成double型,且计算结果也是double型;若在表示式中优先级最高的资料是float型,则此表示式中的其他资料均被转换成float型,且计算结果也是float型。

在做赋值运算时,若赋值号左右两边的型别不同,则赋值号右边的型别向左边的型别转换;当右边的型别高于左边的型别时,则在转换时对右边的资料进行撷取。

除自动转换外,还有强制转换,表示形式是:

( 型别 )(表示式); 例:(int)(a+b)

讨论:当a值赋值为3.4,b值赋值为2.7,(int)(a+b)和(int)a+b的值分别为多少?

C运算子认识

C语言的运算子范围很广,可分为以下几类:

算术运算子:用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(%)、自增(++)、自减(--)共七种。

赋值运算子:用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,

逗号运算子:用于把若干表示式组合成一个表示式。

关系运算符:用于比较运算。包括大于(>)、小于(=)、小于等于(

逻辑运算子:用于逻辑运算。包括与(&&)、或、非(!)三种。

条件运算子:这是一个三目运算子,用于条件求值(?:)。

位操作运算子:参与运算的量,按二进位制位进行运算。包括位与(&)、位或、位非(~)、位异或(^)、左移(>)六种。

8、指标运算子:用于取内容(*)和取地址(&)二种运算。

9、求字节数运算子:用于计算资料型别所占的字节数(sizeof)。

10、特殊运算子:有括号,下标,成员(→,.)等几种。

另外,按参与运算的物件个数,C语言运算子可分为:单目运算子 (如 !)、双目运算子 (如+,- )和三目运算子 (如 ? : )。

算术运算子和算术表示式

一、 基本的算术运算子

(1)+(加法运算子或正值运算子,如2+5)。

(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。

二、 算术表示式和运算子的优先级与结合性

算术表示式是用算术运算子和括号将运算量(也称算子)连线起来的、符合C语言语法规则的表示式。运算物件包括函式、常量和变数等。

在计算机语言中,算术表示式的求值规律与数学中的四则运算的规律类似,其运算规则和要求如下。

(1)在算术表示式中,可使用多层圆括号,但括号必须配对。运算时从内层圆括号开始,由内向外依次计算各表示式的值。

(2)在算术表示式中,对于不同优先级的运算子,可按运算子的优先级由高到低进行运算,若表示式中运算子的优先级相同,则按运算子的结合方向进行运算。

(3)如果一个运算子两侧的算子型别不同,则先利用自动转换或强制型别转换,使两者具有相同型别,然后进行运算。

三、 自增自减运算子

作用:使变数的值增1或减1。

如:++i,--i (在使用i之前,先使i的值加1、减1)。 i++,i-- (在使用i之后,使i的值加1、减1)。

(1)只有变数才能用自增运算子 (++)和自减运算子(--),而常量或表示式不能用,如10++或(x+y)++都是不合法的。

(2)++和--的结合方向是“自右向左“,如 -i++ ,i的左边是负号运算子,右边是自增运算子,负号运算和自增运算都是 “自右向左“结合的,相当于 -(i++)。

在循环语句中常用到自增(减)运算子,在指标中也常用到该运算子,考生要弄清楚“i++”和“++i”及“i--”和“--i”的区别,特别弄清楚表示式的值和变数的值。

赋值运算子与赋值表示式

一、赋值运算子与赋值表示式

赋值符号 “=“就是赋值运算子,作用是将一个数据赋给一个变数或将一个变数的值赋给另一个变数,由赋值运算子组成的表示式称为赋值表示式。一般形式为:

变数名 = 表示式

在程式中可以多次给一个变数赋值,每赋一次值,与它相应的储存单元中的资料就被更新一次,内存中当前的资料就是最后一次所赋值的那个资料。

例:a=12; 此表示式读作“将10的值赋值给变数a”。

a、如果赋值号两边的运算物件型别不一致,系统会自动进行型别转换,转换的规则:将赋值号右边表示式的值的型别转换成赋值号左边变数的型别,

例:int y=3.5; 在变数y中最终储存的是整数3。

b、 可以将复制表示式的值再赋值给变数,形成连续赋值。

例如:x=y=25 是一个连续赋值表示式,x=y=25 等价于x=(y=25),所以表示式x=y=25 最终的值为25 。

二、复合的赋值运算子

在赋值运算子之前加上其他运算子可以构成复合赋值运算子。其中与算术运算有关的复合运算子是:+=,-=,*=,/=,%= 。

两个符号之间不可以有空格,复合赋值运算子的优先级与赋值运算子的相同。表示式n+=1等价于n=n+1,作用是取变数n中的值增1再赋给变数n,其他复合的赋值运算子的运算规则依次类推。

如求表达a+=a-=a*a 的值,其中a的初值为12 。

步骤:

(1)先进行“a-=a*a“运算,相当于a=a-a*a=12-144=-132 。 (2)再进行“a+=-132“运算,相当于 a=a+(-132)==-264 。

逗号运算子和逗号表示式

在c语言中,逗号除了作为分隔符,还可以用作一种运算子----逗号运算子,用逗号运算子将几个表示式连线起来,例如a=b+c,a=b*c等称为逗号表示式。

一般形式为:

表示式1 ,表示式2 ,表示式3 , …,表示式n

例:x=2,y=3,z=4

逗号表示式具有从左至右的结合性,即先求解表示式1,然后依次求解表示式2,直到表示式n的值。表示式n的值就是整个逗号表示式的值。上述的逗号表示式的值就是表示式z=4的值4.需要注意的是,逗号运算子是所有运算子中级别最低的。

例:有如下程式段:

main { int a=2,b=4,c=6,x,y; y=(x=a+b),(b+c); printf("y=%d,x=%d",y,x); }

程式显示结果为:y=6,x=6

讨论:将y=(x=a+b),(b+c);改为y=((x=a+b),b+c) 的程式结果?

关系运算符和关系表示式

一、 C语言中的逻辑值

C语言中的逻辑值只有两个:真(true)和假(flase)。用非零代表真,用零代表假。因此,对于任意一个表示式,如果它的值为零,就代表一个假值,如果它的值为非零,就代表一个真值。只要值不是零,不管是正数,负数,整数,实数,都代表一个真值。例如-5的逻辑值为真。

二、 逻辑表示式

“&&”和“||”的运算物件有两个,故它们都是双目运算子,而!的运算物件只有一个,因此它是单目运算子。逻辑运算举例如下:

(1)a&&b: 当&&两边都为“真”时,表示式a&&b的值才是真。

值得注意的是:在数学中,关系式0

(2)a||b: 当||两边有一个为“真”时,表示式a||b的值就是真。

(3)!a: 表示取反,如果a为真,则!A为假,反之亦然。例如!-5的值就为0.

在C语言中,由&&或||组成的逻辑表示式,在某些特定情况下会产生“短路“现象。

(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的值,口诀:“一真必真”。

位运算

一、 位运算子

在计算机中,资料都是以二进位制数形式存放的,位运算就是指对储存单元中二进位制位的运算。C语言提供6种位运算子。

二、位运算

位运算子 & |~> ∧ 按优先级从高到低排列的顺序是:

位运算子中求反运算“~“优先级最高,而左移和右移相同,居于第二,接下来的顺序是按位与 “&“、按位异或 “∧“和按位或 “|“。顺序为~ > & ∧ | 。

例1:左移运算子“

例如: a

例2:右移运算子“>>”是双目运算子。其功能是把“>> ”左边的运算数的各二进制全部右移若干位,“>>”右边的数指定移动的位数。

例如: 设 a=15, a>>2 表示把右移为十进位制3)。

应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正数时,最高位补0,而为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定。

例3:设二进位制数a是00 ,若通过异或运算a∧b 使a的高4位取反,低4位不变,则二进位制数b是。

解析:异或运算常用来使特定位翻转,只要使需翻转的位与1进行异或操作就可以了,因为原数中值为1的位与1进行异或运算得0 ,原数中值为0的位与1进行异或运算结果得1。而与0进行异或的位将保持原值。异或运算还可用来交换两个值,不用临时变数。

如 int a=3 , b=4;,想将a与b的值互换,可用如下语句实现: a=a∧b;

b=b∧a;

a=a∧b;

所以本题的答案为: 。

C语言作为一门非常适合程式设计入门的语言,打好基础的重要性不言而喻。所以老九君特此奉上这一篇干货,希望小伙伴们能从中受益。“我自己是一名从事了10年的老程序员,辞职目前在做讲师,今年年初我花了一个月整理了一份最适合2018年学习的c++干货,从最基础的到深入的都有整理,送给每一位程式设计小伙伴,这里是小白聚集地,欢迎初学和进阶中的小伙伴。"

加企鹅群:263515231(招募中)

2020-01-19 01:50:00

相关文章