
C程序设计基础知识.ppt
35页单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,中国地质大学(北京),计算机高级语言(,C语言)第1章C程序设计基础知识,柯凡,教三楼,206,第1章C程序设计基础知识,1,.1 变量,1.2 常量,1.3 算术运算符与算术表达式,1.4 赋值运算符与赋值表达式,1.5 自加、自减、逗号运算符,1.6*位运算,1.1 变量,变量:在程序运行过程中值可以改变的量,定义变量的目的是要求计算机在内存中为数据开辟存储空间,假设内存是,512MB,,既有,512*1024*1024,个存储单元(每个字节为一个单元),每个存储单元都有一个编号,里面可以存放数据,不同类型的数据所占据空间的大小也不同,数据与内存的关系如同房客与宾馆之间的关系,每个变量要具备,3,个要素:,变量名,变量的数据类型,变量的值,标识符,标识符:为函数、变量等取的符号化的名称,标识符,的命名规则:,1),由字母,数字,下划线组成,以字母或下划线开头,不同的系统对标识符的长度的规定不同),例如:sum,_t1_2,n5 等,2)C语言的关键字不能作为标识符,32个关键字,如int、long、if等详见教材,3)C的标识符,区分大小写,,如Sum和sum是不同的,4)变量名取名尽量做到“见名知意”,变量名,变量名名除了遵循标识符规定外,还需要注意以下规则:,1)在同一个函数体内,变量名不能重复定义,2)所有变量的定义语句必须放在函数体的最开始处,3)变量要强制定义,即变量要先定义后使用,4)尽量避免定义与库函数中函数名同名的变量,如printf、scanf等,容易造成混乱,变量的定义方法,变量定义的语法格式:,变量类型 变量名列表;,例如:int a,b;,unsigned int c,d;long f;,变量定义的同时还可以为变量指定初始值,例如:int a=5;,数据类型,基本数据类型,整型:int,short,unsigned,signed 2字节,long 4字节,字符型:char,unsigned char,signed char 1字节,实型,单精度型:float 4字节,双精度型:double 8字节,long double 10字节,枚举类型:enum,构造类型,数组,结构体,共用体,指针类型,空类型,示例1-1:求计算式35+80的值,#include,void main(),整形变量,int a,b,c;,a=35;,b=80;,c=a+b;,printf(value=%dn,c);,本程序的其他写法:,int a=35,b=80;,a=a+b;,printf(value=%dn,a);,int a;,a=35+80;,printf(value=%dn,a);,int a,b;,a=35;,b=80;,a=a+b;,printf(value=%dn,a);,int a=35,b=80,c;,c=a+b;,printf(%d+%d=%dn,a,b,c);,使用int型数据,要注意允许值的范围,当超过取值范围后会发生溢出,例1-2:,整形变量的溢出,#include,void main(),short int a;,a=32767;,a=a+1;,printf(Result is:%dn,a);,运行结果为:,Result is:-32768,char,每一个字符变量只能存放一个字符,在内存中存放的是该字符的,ASCII,码值,字符数据的运算,字符数据可以进行加减乘除等各种运算,参加运算的数据是该字符对应的,ASCII,码值。
字符数据可以和整型数据相互通用,可以彼此赋值,字符变量,示例1-3:,#include,void main(),char c1,c2;,c1=a;c2=b+1;,printf(%c,%cn,c1,c2);,printf(%d,%dn,c1,c2);,输出结果:,a,c,97,99,1.2 常量,常量:在程序运行过程中值不变的量包括:,1)整型常量,2)实型常量,3)字符常量,4)字符串常量,5)符号常量,6)const常量 (新的C标准适用),1)整型常量,默认为十进制:如,123,-456,八进制:以0开头,如012,十六进制:以0 x或0X开头,如0X12、0 x7B,默认为int型,末尾加l或L表示long型,如:123L、0 x7AL,默认为signed型,末尾加u或U表示unsigned型,如:123u、0 x7AU,2)实型常量,只能用十进制表示:,1)小数方式:如,12.3,-4.56,.25,2)指数方式:数+e或E+指数,如1.2e3,23.4E-4,而1.2e2.3,.e2,E4均不合法,3)默认为双精度类型,末尾加f或F表示单精度,如1.2f,-2.3F,3)字符常量,1)由一对单引号括起来的一个字符,如:,a,A,注意区分:,5和5:5表示字符5,5表示整数5,2)转义字符:单引号括起来的是以开头加其他字符,用来表示特殊字符,如:,n表示换行 t表示水平制表符,一个单引号 一个双引号,一个反斜线 0空字符,ddd八进制ASCII码代表的字符,如101,xhh十六进制ASCII码代表的字符,如x41,4)字符串常量,一对双引号括起来的多个字符,如:hello、How are you!,区分字符串和字符:,字符串常量除了包含双引号中的所有字符,还隐含一个特殊字符0,如a实际包含a和0两个字符,其中0用来标识一个字符串的结束,输出时没有任何显示。
请思考0、0、0的区别,5)符号常量,给常量值取名,(遵循标识符的命名规则),增加了程序的可维护性和可读性,符号常量仍然是常量,值在程序运行中不可改变,为区别变量,符号常量通常用大写字母表示,“定义”符号常量使用编译预处理指令#define,格式:#define 符号常量名 常量值,如:#define MAX_VALUE 35,编译预处理命令在编译时完成,将符号常量用值来替换,因此常量值后面不要加分号,例1-4:求圆的面积,#include,#define PI 3.1415926,void main(),float r,area;,printf(Input the circles radius:);,scanf(%f,area=PI*r*r;,printf(The area is:%fn,area);,6)const常量,新的C语言规范中,允许在定义变量之前加上const修饰符,将定义一个具有特定数据类型、具有符号化名称的常量,程序在运行时,系统在内存中为const常量分配存储空间,const常量的定义格式:,const 数据类型 常量名=常量值;,例如:const float PI=3.1415926;,const常量通过C语句来定义,只能在定义的时候赋初值,在程序运行过程中,不能修改该常量的值,1.3 算术运算符与算术表达式,算数,运算符,示例,+,3+5,、,+10,-,3-5,、,-1.9,*,5.6*6,/,5/3、5.0/3 、5/3.0、,5.0/3.0,(两个整数相除,结果也是整数。
如:5/3=1),(分子或分母为实型,结果为double型),%,(,模运算符即求余运算符,),9%4 结果为1(9整除4后的余数),(只适用于整型数据),算术表达式,用算术运算符和扩号将运算对象连接起来并且符合C语言规则的式子叫算术表达式,运算对象包括常量,变量,函数,例如:a*b/c-1.5+a,算术运算符的优先级和结合性,优先级:,先*/%、再+-如x-y%4,尽量通过添加括号()明确优先级关系,结合性,左结合,即对同等优先级的运算符,从左向右,1.4 赋值运算符与赋值表达式,赋值运算符:=,作用:将右边的数据、变量或表达式的值赋给左边的变量,赋值表达式:,赋值运算符前加上其它运算符构成的运算符,赋值方法:变量=表达式,注意:左侧必须是变量,不能是表达式,例如:a=a+1;,合法,含义是将变量a所对应的值取出来,加1运算后,将运算结果写回a对应的内存单元;赋值,表达式的值为a的值,例如:a+1=2;,不合法,=左边是表达式,优先级:低于算术运算符,先计算=右边的表达式,再执行赋值运算,结合性:右结合(自右至左),例如:a=b=c=5;合法,例如:a=b=3=c=5;不合法,变量赋值与变量赋初值是不同的,比较:,变量赋初值:int a=5;,变量赋值:int a;a=5;,类型转换,若赋值运算符两侧数据类型不一致,系统要自动进行类型转换:,赋值运算符右边的类型向左边的类型转换,表达式计算时也存在数据类型转换,各种数值型数据间的混合运算,整型、实型、字符型(与整型数据通用)数据间可以进行混合运算。
但在进行运算时,不同类型的两个数据运算前要先转换成同一类型,再运算这种转换是系统自动进行的,称为自动类型转换(隐含转换)转换规则如图,说明:,图中横向向左的箭头表示必定进行的转换例如:两个,float,型数据进行运算时,要先转换为,double,型数据两个,char,型数据进行运算时,要先转换为,int,型数据,纵向的箭头表示当参加运算的对象类型不同时进行类型转换的方向,例如:,double,型数据和,int,型数据进行运算时,,int,型数据要转换为,double,型再运算,不同类型的数据转换是从低级向高级数据类型转化的多个类型不同的数据进行运算时,不是一次性的将所有数据全部转化为同一类型后运算,而是按照运算顺序的需要一步一步进行的,例如:有,double d;float f;int i;long e;,表达式,10+a+i*f-d/e,的求解方式,在自动类型转换过程中,数据在转换过程中,精度不提高,也不改变原变量的类型,只是改变了值的表现形式,强制类型转换,为了解决自动类型转换所带来的“不确定性”,可以采用强制类型转换,在赋值之前将表达式的计算结果强制转换为某种类型,再赋值给某个变量,形式:(类型名)(表达式),例如:,(double)a/*,将,a,的值转换成,double,类型*,/,(int)(x+y)/*,将,x+y,的值转换成,int,类型*,/,(float)(5%3)/*,将,5%3,的值转换成,float,类型*,/,说明:,类型转换,仅仅是为了本次运算或赋值的需要而对变量的数据长度进行一时性的转换,并不能改变数据说明时对该变量规定的数据类型,复合算数赋值运算符,赋值运算符与算术运算符的组合,有5个:,+=、-=、*=、/=、%=,基本使用格式为:,变量 算术运算符=表达式,它等价于:,变量=变量 算术运算符 表达式,例如:表达式a+=2等价于a=a+2,例如:表达式a*=3+5 相当于a=a*(3+5),1.5 自加、自减、逗号运算符,自加+和自减-是独特高效的运算符,也很容易混淆,使变量的值加一或加一,单目运算符,操作对象只能是变量不能是表达式或常量,常用于整型数据的运算,前缀方式:将+或-放在变量的前面,功能:先执行变量与1相加或相减的运算,将运算结果写回变量,最后取该变量的值参与运算,例如:x=+y;等价于y=y+1;x=y;,后缀方式:将+或-放在变量的后面,功能:先取出变量的值参与运算,运算完成后,再执行变量与1加或减的运算,最后将运算结果写回变量中,例如:x=y+;等价于x=y;y=y+1;,逗号运算符,逗号,用于连接多个表达式组合成一个表达式,整个表达式称为逗号表达式,逗号表达式的一般形式为:,表达式1,表达式2,表达式3,结合性:左结合,逗号表达式从左至右,逐个计算每个表达式的值,直到完成最后一个表达式的计算,,最后一个表达式的值作为整个逗号表达式的值,优先级:最低,例如:,3+5,6+8,a=3*5,a*4,(a=3*5,a*4),a+5,练习:阅读下面程序写出可能的运行结果,并与程序运行的实际情况对照,注意变量的初始化、赋值引起的值的变化,#include,void main(),int n1,n2=80;,char c1,c2=n2;,float f=80.6。
