计算机二级C语言基础知识

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机⼆级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 < int < float < double
即左边级别“低“的类型向右边转换。

具体地说,若在表达式中优先级最⾼的数据是double 型,则此表达式中的其他数据均被转换成double型,且计算结果也是double型;若在表达式中优先级最⾼的数据是float型,则此表达式中的其他数据均被转换成float型,且计算结果也是float型。

在做赋值运算时,若赋值号左右两边的类型不同,则赋值号右边的类型向左边的类型转换;
当右边的类型⾼于左边的类型时,则在转换时对右边的数据进⾏截取。

除⾃动转换外,还有强制转换,表⽰形式是:
( 类型)(表达式);例:(int)(a+b)
讨论:当a值赋值为3.4,b值赋值为2.7,(int)(a+b)和(int)a+b的值分别为多少?
C运算符认识
C语⾔的运算符范围很⼴,可分为以下⼏类:
、算术运算符:⽤于各类数值运算。

包括加(+)、减(-)、乘(*)、除(/)、求余(%)、⾃增(++)、⾃减(--)共七种。

、赋值运算符:⽤于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共⼗⼀种。

<="" span="">
、逗号运算符:⽤于把若⼲表达式组合成⼀个表达式(,)。

、关系运算符:⽤于⽐较运算。

包括⼤于(>)、⼩于(<)、等于(==)、⼤于等于(="">=)、⼩于等于(<=)和不等于(!=)六种。

<="" span="">
、逻辑运算符:⽤于逻辑运算。

包括与(&&)、或(||)、⾮(!)三种。

、条件运算符:这是⼀个三⽬运算符,⽤于条件求值(?:)。

、位操作运算符:参与运算的量,按⼆进制位进⾏运算。

包括位与(&)、位或(|)、位⾮(~)、位异或(^)、左移(<<)、右移(>>)六种。

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:左移运算符“<<”是双⽬运算符。

其功能把“<< ”左边的运算数的各⼆进位全部左移若⼲位,由“<<”右边的数指定移动的位数,⾼位丢弃,低位补0。

="" <="" span="">
例如:a<<4 指把a的各⼆进位向左移动4位。

如a=00000011(⼗进制3),左移4位后为
00(⼗进制48)。

例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;。

相关文档
最新文档