1.语言变量声明和变量赋值1)基本数据类型在C语言中,仅有4种基本数据类型—整型、浮点型、指针和聚合类型(如数组和结构等),所有其他的类型都是从这4种基本类型的某种组合派生而来。整型:整型家族包括字符、短整型、整型和长整型,它们都分为有符号(signed)和无符号(unsigned)两种版本。规定整数值相互之间大小的规则很简单:长整型至少应该和整型一样长,而整型至少应该和短整型一样长。浮点类型:诸如3.14159和2.3×1023这样的数值无法按照整数存储。第一个数为非整数,而第二个数远远超出了计算机整数所表达范围,这样的数就可以用浮点数的形式存储。浮点数家族包括float、double和longdouble类型。通常,这些类型分别提供单精度、双精度以及在某种扩展精度的机器上提供扩展精度。ANSI标准仅仅规定longdouble至少和double一样长,而double至少和float一样长。标准同时规定了一个最小范围:所有浮点类型至少能够容纳从10-37到1037之间的任何值。指针:变量的值存储于计算机内存中,每个变量都占据一个特定的位置。每个内存的位置都由地址唯一确定并应用,就像一条街上的房子由他们的门牌号码标识一样,指针知识地址的另一个名字。2)变量声明形式只知道基本的数据类型是远远不够的,你还应该知道怎样声明变量。变量的基本形式是:说明符(一个或多个)声明表达式列表对于简单的类型,声明表达式列表就是被声明的标识符的基本类型。对于相对比较复杂的类型,声明表达式列表的每个条目实际上是一个表达式,显示被声明的名字的可能用途。例如:inta,doubleb;该语句就是一条声明语句,其中a,b就是变量名,该语句指明了变量a,b是int数据类型。所有变量在使用前都必须写在执行语句之前,也就是变量声明要与执行语句相分离,否则就是出现编译错误。3)变量命名C语言中任何的变量名都是合法的标示符。所谓标识符就是由字母、数字和下划线组成的但不以数字开头的一系列字符。虽然C语言对标示符的长度没有限制,但是根据ANSI标准,C编译器必须要识别前31个字符。C语言是对大小写敏感的,即C语言认为大写字母和小写字母的含义是不同的,因此a1和A1是不同的标识符。到目前为止,没有一种命名规则可以让所有的程序员赞同,程序设计教科书一般都不指定命名规则。常用的命名规则有匈牙利命名法和驼峰命名法等,在实际操作中,我们会采取相对简单方便的命名规则,即“类型首字母”+“_”+“变量用途英文缩写”,其中英文缩写首字母为大写,例如inti_Num,charc_Name[5]。4)变量赋值在一个变量声明中,你可以给一个标量变量指定一个初始值,方法是在变量名后面跟一个等号(赋值号),后面就是你想要给变量的值。例如:inti_Num=10;charc_Name[]=”student”;上述语句声明i_Num为一个整数变量,其初始值为10,声明c_Name为一个字符数组,其初始值为“student”。在C语言中,全局变量和静态变量,如果没有赋初值,则默认初始值int,float,char分别为0,0.0,’\0’,除了全局变量和静态变量以外,其他变量如果没有赋初值,则默认初始值为内存中的垃圾内容,对于垃圾内容不能有任何假设。注意:定义指针后,默认初始值不是0,而是随机的一个值,故定义指针后,一定要初始化。在实际操作中,变量的赋值都是以赋值语句的形式出现,赋值语句是由赋值表达式再加上分号构成的表达式语句。其一般形式为:变量=表达式;在赋值语句的使用中需要注意以下几点:a)由于在赋值符“=”右边的表达式也可以又是一个赋值表达式。下述形式:变量=(变量=表达式);该语句是成立的,从而形成了嵌套的情形。其展开后的一般形式为:变量=变量=…=表达式;例如:a=b=c=d=e=5;按照赋值运算符的右结合性,因此实际上等效于:e=5;d=e;c=d;b=c;a=b;b)注意在变量声明中给变量赋初值和赋值语句的区别给变量赋初值是变量说明的一部分,赋初值后的变量与其后的其他同类变量之间仍必须用逗号隔开,而赋值语句则必须用分号隔开。例如:inta=5,b,c;c)在变量声明中,不允许连续给多个变量赋初值。如下述说明就是错误的:inta=b=c=5;正确写法为:inta=5,b=5,c=5;但是,赋值语句允许连续赋值。d)注意赋值表达式和赋值语句的区别。赋值表达式是一种表达式,它可以出现在任何允许表达式出现的地方,而赋值语句则不能。下述语句是合法的:If((x=y+7)0)z=x;语句功能为若表达式x=y+5大于0则z=x。但是,下述语句是错误的:If((x=y+7;)0)z=x;因为x=y+7;是语句,不能出现在表达式中。实例:#include“stdafx.h”voidmain(){inti_Tmp,i_Type=8;floatf_Tmp;doubled_Tmp;charc_Tmp;d_Tmp=d_Tmp=f_Tmp=12;f_Tmp=i_Type;i_Tmp=i_Type+3;printf(a=%d,b=%d,c=%.3f,d=%.6lf,i_Tmp,i_Type,f_Tmp,d_Tmp);}参考书目:1.(美)KebbethA.reek.《C与指针》29-402.H.M.DeitelP.J.Deitel等《howtoprogramSecondEdition》19-232.算术运算符及使用方式C语言提供了最基本的算术运算符,如下表:运算符含义举例结果+加法运算符a+ba和b的和-减法运算符a-ba和b的差*乘法运算符a*ba和b的乘积/除法运算符a/ba除b的商%求余运算符a%ba除b的余数++自加运算符a++,++aa自加1--自减运算符a--,--aa自减11、+、-、*、/都适用于浮点类型和整数类型,当两个操作数都为整数时进行整数运算,其余情况则进行double型运算;当/除法运算符的两个操作数为整数时,结果为整数,舍去小数部分,例如5/3的结果为1;%求余运算符只接受两个整型操作数的运算,结果为余数2、++、--:作用是使变量自加1或自减1,例如i++、++i,都是使i的值加1,但其执行的步骤是不同的。例如:inti=3,j;j=i++;//i的值为4,j的值为3inti=3,j;j=++i;//i的值为4,j的值为4可见当变量在左侧时,先进行赋值运算再进行自加1操作,当变量在右侧时,先进行自加1操作再进行赋值运算。3、在赋值运算符之前加上算术运算符既构成复合运算符,例如:a+=b,等价于a=a+b。-=、*=、/=也是如此。3.位运算符及使用方式(、、~、|、&、^)位运算符是用来对二进制位进行操作,如下表:运算符含义左移右移~取反|按位或&按为与^按为异或、:移位运算符,例如左移运算符:inti=3;i=i4;3的二进制位为00000011,左移4位的结果为00110000,其操作中高位舍弃、低位补0,既i=48,等同于i乘以2的4次方。右移运算符则有所不同,操作中是低位舍弃,高位则有两种补位方式。一种为逻辑移位,高位补0;另一种为算术移位,当符号位为1时高位全部补1,当符号位为0时则高位全部补0。具体使用哪种移位方式则取决于当前的编译环境。~:取反运算符,为单目运算符,其操作是对操作数的二进制位按位求反,既1变0,0变1。例如i=5,二进制位为00000101,取反的结果为11111010。在计算机系统中,数值一律用补码来表示和存储,其中最高位为符号位,用0表示正,1表示负。补码的规定如下:a)对正数来说,最高位为0,其余各位代表数值本身,例如14的补码为00001110;对负数而言,则将该数绝对值的补码按位取反,再加1,得该数的补码,既-i=~i+1。例如-14的补码为14的二进制00001110取反加1得11110010。b)|、&、^:均为双目运算符,对操作数的二进位进行运行,且操作数以补码的方式出现。c)|按位或,两个对应的二进位至少有一个为1则为1,否则为0;&按位与,两个对应的二进位都为1则为1,否则为0;^按位异或,两个对应的二进位不同则为1,否则为0。例如:a=5;(00000101)b=14;(00001110)a|b=15;(00001111)a&b=4;(00000100)a^b=11;(00001011)4.关系运算符及使用方式(、=、、=、==、!=)运算符含义大于=大于或等于小于=小于或等于==等于!=不等于关系运算符用于比较两个数值之间的关系,例如:a3为关系表达式,大于号为关系运算符,当表达式成立时,“a3”的值为“真”,当“a3”不成立时,“a3”的值为“假”。其中应当注意的是关系表达式的返回值为整型值,而不是布尔型。表达式为真时返回值为1,表达式为假时返回值为0。5.逻辑运算符及使用方式(&&、||、!)运算符含义举例结果&&逻辑与a&&ba,b都为真则结果为真,否则为假||逻辑或a||ba,b至少有一个为真则结果为真,否则为假!逻辑非!a当a为真则结果为假,当a为假则结果为真其中应当注意逻辑或,例如a||b,当a为真时,C语言中直接跳过对b的判断,其返回值为“真”。当一个表达式包括几种运算符时,则以运算符的优先级对表达式进行运算,表达式的优先级如下:优先级运算符类型说明1初等运算符()、[]、-、.2单目运算符!、~、++、--、*(指针运算符)、&(取地址运算符)3算术运算符先乘除后加减4关系运算符、=、、=、==、!=5逻辑运算符&&、||6条件运算符三目运算符,例如?:7赋值运算符=8逗号运算符,6.指针的概念与使用1)指针的定义指针就是变量的地址,是一个常量。定义指针的目的就是为了通过指针访问内存单元。在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。指针变量定义的一般形式为:存储类型数据类型*指针变量名2)指针变量运算符1、取地址运算符:&该运算符表示的是对&后面的变量进行取地址运算。例:inta;则&a表示取变量a的地址,该表达式的值为变量a的首地址。2、指针运算符:*该运算符也称为“取内容运算符”,后面接一个指针变量。表示的是访问该指针变量所指向的变量,即访问指针所指向的存储空间中的数据。例:inta=7;int*p;p=&a;则*p表示指针变量p指向变量a,即*p就是a,所以*p=7。一个指针变量p在程序中通常有如下表示形式:p:指针变量,它的内容是地址量;*p:指针所指向的变量,是指针所指向的内存空间中的数据;&p:指针变量所占存储空间的地址;【例1】分析程序的运行结果源程序如下:#includestdio.hvoidLocate(){inti_a;int*pst_a;printf(\n请输入i_a的值:);scanf(%d,&i_a);pst_a=&i_a;printf(i_a的值为:%d\n,i_a);printf(pst_a的值为:%x\n,pst_a);printf(&i_a的值为:%x\n,&i_a);printf(*pst_a的值为:%d\n,*pst_a);printf(&pst_a的值为:%x\n,&pst_a);printf(\n);}运行结果:请输入i_a的值:3i_a的值为:3pst_a的值为:12fe8c&i_a的值为:12fe8c*pst_a的值为:3&pst_a的值为:12fe80以上实例中,12fe8c是pst_a的值,也就是i_a的地址;12fe80是pst_a的地址;两者有区别,不能混为一谈。3)地址与指针的概念指针可以有效地表示复杂的数据结构;动态分配内存;方便的使用字符串;有效而方便地使用数组;能直接处理内存地址。如果在程序中定义了一个变量,在编译时就给这个变量分配内存单元。系统根据程序中定义的变量的类型,分配一定长度的空间。例如,一般微机使用的C系统为整形变量分配两个字节,为实型变量分配4个字节。内存区的每一个字节有一个编号,这就是“地址”,它相当于旅馆中的房间号。在地址所标志的内存单元中