资源描述
第3章基本数据类型和表达式,在第二章中,我们从总体上介绍了一个C程序的基本结构,使读者对C程序有了大概的了解。本章将详细介绍C语言程序中使用的基本语法单位、数据类型、运算符和表达式。,3.1基本语法单位,任何一种语言都会根据自身的特点规定它自己特定的一套基本符号。例如,英语的基本符号是26个英文字母和一些标点符号。C语言作为一种程序设计语言,也有它的基本符号,程序就是由这些基本符号组成的。,3.1.1基本符号,程序中要对各种变量和各种函数起名,这些变量名、函数名都是由语言的基本符号组成的。C的基本符号包括:(1)数字10个(09);(2)英文字母大小写各26个(AZ,az);(3)特殊符号,主要用来表示运算符,它通常是由12个特殊符号组成。包括:+*/%=!=这里的type必须是有效的C数据类型,variable_list(变量表)可以由一个或多个由逗号分隔的多个标识符名构成。例如:inti,j,l;/定义三个整型变量i,j,l,3.3.2变量,1.整型变量main()inta,b,c,d;/*指定a,b,c,d为整型变量*/unsignedu;/*指定u为无符号整型变量*/a=22;b=-11;u=5;c=a+u;d=b+u;printf(a+u=%d,b+u=%dn”,c,d);运行结果为:a+u=27,b+u=6可以看到不同类型的整型数据可以进行算术运算。在本例中是int型数据与unsingnedint型数据进行相加减运算。,2.实型变量实型变量分为单精度(float型)和双精度(double型)。如:floatx,y;/*指定x,y为单精度实数*/doublez;/*指定z为双精度实数*/在一般系统中,一个float型数据在内存中占4个字节(32位),一个double型数据占8个字节(64位)。单精度实数提供7位有效数字,双精度提供1516位有效数字,数值的范围随机器系统而异。值得注意的是,实型常量是double型,当把一个实型常量赋给一个float型变量时,系统会截取相应的有效位数。,3.字符变量字符变量用来存放字符变量,注意只能存放一个字符,不要以为在一个字符变量中可以放字符串。字符变量的定义形式如下:charc1,c2;它表示c1和c2为字符变量,各放一个字符。因此可以用下面语句对c1、c2赋值:c1=a;c2=b;,3.3.3变量的初始化,变量的初始化是指在定义变量的同时,给变量赋以初值,使某些变量在程序开始执行时就具有确定的值。其形式为:=;例如:charc=A,ky=K;/*字符型变量c、ky初值分别为A、K*/intj,i=1;/*整型变量i初值为1,j没有赋初值*/floatsum=3.56;/*单精度变量sum初值为3.56*/如果对几个变量赋以相同的初值,不能写成:inta=b=c=3;而应写成:inta=3,b=3,c=3;,3.4表达式和运算符,表达式是由操作数和运算符组成,运算结果产生一个确定的值。操作数可以是常量、变量、函数和表达式,每个操作数都具有一种数据类型,通过运算得到的结果也具有一种数据类型,结果的数据类型与操作数的数据类型可能相同,也可能不相同。运算符指出了表达式中的操作数如何运算。C语言中,共有44种运算符,根据各运算符在表达式中的作用,表达式大致可以分成:算术表达式、关系表达式、逻辑表达式、条件表达式、赋值表达式和逗号表达式等。,3.4.1算术运算符,表3.4算术运算符下面是算术运算符的优先级:最高+、-(单目运算符取负号)*、/、%最低+、-,当“/”被用于整数或字符时,结果取整。模运算取整数除法的余数,所以“%”不能用于float和double类型。自增或自减运算符在操作数之前(+x,-x),C语言在引用操作数之前就先执行加1或减1操作;运算符在操作数之后(x+,x-),C语言就先引用操作数的值,而后再进行加1或减1操作。编译程序对同级运算符按从左到右的顺序进行计算。而+和-的结合方向是“自右向左”。如-i+,它相当于:-(i+)。,注:,3.4.2赋值运算符,赋值运算符分简单的赋值运算符和复合的赋值运算两种。简单的赋值运算的一般形式是:其中,“=”号是赋值运算符。其作用是将一个表达式的值赋给一个变量,同时该值作为赋值表达式的结果。例如:a=b=c=d=0;相当于:a=(b=(c=(d=0);floatf;f=23;/*先将23转换成23.00000,再存储在f中*/inti;i=3.56;/*变量i的值为3*/,=,在简单赋值运算符“=”之前加上其他运算符,就构成了复合赋值运算符。(1)复合运算符相当于两个运算符的结合。例如:a+=b相当于a=a+b,但并不等价。(2)在复合赋值运算中,对于赋值号右边是复杂的表达式时,例如:x*=y+10z相当于x=x*(y+10z)而不是x=x*y+10z,即将右端表达式看作一个整体和x进行有关运算。用赋值运算符将一个变量和一个表达式连接起来的式子称为“赋值表达式”。它的一般形式为:赋值表达式也可以包含复合的赋值运算符。例:设a的初值为8,表达式:a+=a-=a*a也是一个赋值表达式,根据优先级和结合性,此赋值表达式的求解过程为:)先进行“a-=a*a”的运算,它相当于a=aa*a=88*8=-56;)再进行“a+=-56”,的运算,相当于a=a+(-56)=-5656=-112。,3.4.3关系运算符,关系运算是逻辑运算中比较简单的一种。所谓“关系运算”实际上是“比较运算”。将两个值进行比较,判断比较的结果是否符合给定的条件。例如,a3是一个关系表达式,大于号“”是一个关系运算符,如果a的值为5,则满足给定的条件“a3”,因此该表达式的值为“真”(即“条件满足”);如果a的值为2,不满足“a3”条件,则称关系表达式的值为“假”。C语言提供6种关系运算符,见表3.5。,3.4.3关系运算符,表3.5关系运算符说明:参加比较的数据可以是字符型、整型和浮点型数据。前4种关系运算符(、=)的优先级相同,后两种优先级相同。前四种高于后两种。例如:“”优先于“=”。而“”与“3”(因为关系运算符优先于&)。在关系运算符两侧的5和3作为数值参加关系运算,“53”的值为1,在进行“1&2”的运算,此时1和2均是逻辑运算的对象,均作为“真”处理,因此结果为1。再往下进行“1|84-!0”的运算。根据优先次序,先进行“!0”运算,结果为1,因此,要运算的表达式变成:“1|84-1”,即“1|83”,关系运算符“”两侧的8和3作为数值参加比较,“83&2|84-!0,3.4.5位运算符,位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。C语言提供了6个位操作运算符。这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型。表3.8为C语言提供的位运算符列表:表3.8位运算符表,3.4.6逗号运算符,C语言提供一种特殊的运算符一逗号运算符。用逗号将若干个表达式连接起来。如:3+5,6+8,称为逗号表达式。逗号表达式的一般形式为:逗号表达式的求解过程是:先求解表达式1,再求解表达式2,直到求解完表达式n,最后一个逗号表达式的值是整个逗号表达式的值。逗号运算符又称为“顺序求解运算符”。逗号运算符是所有运算符中级别最低的。因此,下面两个表达式的作用是不同:x=(a=3,6*3)x=a=3,6*3表达式是一个赋值表达式,将一个逗号表达式的值赋给x,x的值为18。表达式相当于“x=(a=3),6*3”,是一个逗号表达式,它包括一个赋值表达式和一个算术表达式,x的值为3。,,,3.4.7条件运算符,C语言提供了一个可以代替某些条件语句的条件运算符。条件运算符要求有三个操作对象,称三目运算符,它是C语言中唯一的一个三目运算符。条件表达式的一般形式为:说明:(1)条件运算符的执行顺序:先求解表达式1,若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值。若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值。(2)条件运算符优先于赋值运算符(3)条件运算符的结合方向为“自右至左”。(4)通常用条件表达式取代简单的条件语句,表达式1?表达式2:表达式3,Operatorprecedenceandassociativity,3.5各类数值型数据间的混合运算,在C语言中,允许不同类型的数据之间进行某些混合运算,如整型、单精度型、双精度型、字符型数据之间进行混合运算。,例:假设i为int型,f为float型变量。运算表达式:10+a+i*f,运算次序依次为:1)进行10+a的运算,a自动转换成整型97,然后执行相加,结果为整型值107。2)进行i*f的运算,首先f自动转换成面double型,然后把int型的i转换成double型,两个double型数据进行算术乘,结果是double型。3)整型值107与i*f的积相加。由于i*f的值是double型,先将整型数107转换成double型,然后再相加,结果为double型。,图3.2数据类型转换,
展开阅读全文