C程序设计讲师:徐照东南大学土木工程学院建设与房地产系xvicar@yahoo.com.cn第3章最简单的C程序设计3.1常量与变量3.2C的数据类型3.3整型数据3.4浮点型数据运行3.5字符型数据3.6变量赋初值3.7各类数值型数据间的混合运算3.8算术运算符和算术表达式3.9赋值运算符和赋值表达式3.10逗号运算符和逗号表达式1.常量:在程序运行过程中,其值不能被改变的量整型常量:如1000,12345,0,-345实型常量十进制小数形式:如0.34-56.790.0指数形式:如12.34e3(代表12.34103)字符常量:普通字符:如‘a’转义字符:如‘\n’字符串常量:如“boy”符号常量:#definePI3.14163.1常量与变量单引号与双引号例3.1符号常量的使用#definePRICE30#includestdio.hintmain(){intnum,total;num=10;total=num*PRICE;printf(″total=%d\n″,total);return0}符号常量:用一个标识符代表一个常量。符号常量的值在其作用域内不能改变,也不能再被赋值。说明:程序中用#define命令行定义PRICE代表常量30,此后凡在本文件中出现的PRICE都代表30,可以和常量一样进行运算说明:如再用赋值语句给PRICE赋值是错的PRICE=40;/*错误,不能给符号常量赋值3.1常量与变量运行结果:total=3002.变量:在程序运行期间,变量的值是可以改变的变量必须先定义,后使用定义变量时指定该变量的名字和类型变量名和变量值是两个不同的概念变量名实际上是以一个名字代表的一个存储地址从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据3.1常量与变量3.常变量:constinta=3;4.标识符:一个对象的名字C语言规定标识符只能由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线例:sum,_total,month,Student_name,lotus_1_2_3,BASIC,li_lingM.D.John,¥123,3D64,ab大小写字母是不同的字符3.1常量与变量和常量区别数据类型所谓类型,就是对数据分配存储单元的安排,包括存储单元的长度(占多少字节)以及数据的存储形式不同的类型分配不同的长度和存储形式3.2C的数据类型3.2C的数据型数据类型基本类型整型类型基本整型短整型长整型双长整型字符型布尔型浮点类型单精度浮点双精度浮点复数浮点型枚举类型空类型派生类型指针类型数组类型结构体类型共用体类型函数类型算术类型纯量类型组合类型不同类型的数据存储单元长度不同不同类型数据存储方法不同1整型常量整型常量即整常数。在C语言中,整常数可用以下三种形式表示:(1)十进制整数。逢10进位如:123,-456.4。(2)八进制整数。采用0,1,2,3,4,5,6,7八个数字,逢八进位。如:(123)8表示八进制数123,等于十进制数83,-11表示八进制数-11,即十进制数-9。3.3整型数据(3)十六进制整数,它由0-9,A-F,组成,逢16进位。如:(123)16,代表16进制数123,等于十进制数291。-12等于十进制数-18。2整型变量(1)整型数据在内存中的存放形式数据在内存中是以二进制形式存放的。3.3整型数据(2)整型变量的分类共八种有符号基本整型有符号短整型有符号长整型有符号双长整型无符号基本整型无符号短整型无符号长整型无符号双长整型(signed)int(signed)short(int)(signed)long(int)(signed)longlong(int)unsignedintunsignedshortunsignedlongunsignedlonglong注意:括号表示其中的内容是可选的.3.3整型数据signedinta和inta等价符号位0表示正数,1为负数3整数类型的有关数据:类型类型说明符长度数的范围基本型int2或4个-215~215-1(-231~231-1)短整型short2字节-215~215-1长整型long4字节-231~231-1无符号整型unsigned2字节0~65535无符号短整型unsignedshort2字节0~65535无符号长整型unsignedlong4字节0~(232-1)双长整型longlong8字节-263~(263-1)无符号双长整型unsignedlonglong8字节0~(264-1)3.3整型数据通常long长整型为32位,short定为16位,int可以是16位也可以是32位,longlong是64位-32768~32767例如:整数13在内存中实际存放的情况:3.3整型数据例3.3整型变量的定义与使用#includestdio.hvoidmain(){inta,b,c,d;/*指定a、b、c、d为整型变量*/unsignedu;/*指定u为无符号整型变量*/a=12;b=-24;u=10;c=a+u;d=b+u;printf(″a+u=%d,b+u=%d\n″,c,d);}说明:可以看到不同种类的整型数据可以进行算术运算运行结果:a+u=22,b+u=-143.3整型数据例3.3整型数据的溢出#includestdio.hintmain(){inta,b;a=32767;b=a+1;printf(“%d,%d\n”,a,b);return0;}说明:一个整型变量只能容纳-32768~32767范围内的数,无法表示大于32767或小于-32768的数。遇此情况就发生“溢出”。运行结果:32767,-327683.3整型数据(1)一个整数,如果其值在-32768~+32767范围内,认为它是int型,它可以赋值给int型和longint型变量。(2)一个整数,如果其值超过了上述范围,而在-2147483637~+2147483647范围内,则认为它是为长整型。可以将它赋值给一个longint型变量。3.3整型数据不同数制之间的转换十进制:0123456789二进制:二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”八进制:采用0,1,2,3,4,5,6,7八个数字,逢八进位;十六进制:它由0-9,A-F,组成。与10进制的对应关系是:0-9对应0-9;A-F对应10-15;不同数制之间的转换转换所依据的原则是:如果两个数的值相等,则两数的整数部分和小数部分的值一定分别相等。因此,在转换时应对整数部分和小数部分分别进行转换。1.二、八、十六进制数十进制数:采用按权相加法【例1-1】求与(101011.01)2等值的十进数解:(101011.01)2=1×25+0×24+1×23+0×22+1×21+1×20+0×2-1+1×2-2=32+0+8+0+2+1+0+0.25=(43.25)10【例1-2】将八进制数32转换成十进数.解:(32)8=3×81+2×80=24+2=(26)10小练习:(101100.101)2转化为10进制(116.1)8转化为10进制1.二、八、十六进制数十进制数:采用按权相加法【例1-3】将十六进制数28F转换成十进数.解:(28F)16=2×162+8×161+15×160=512+128+15=(655)10小练习:(1C2)16转化为10进制2.十进制数转换成二进制数、八进制或十六进制数分别对整数部分和小数部分采用不同的方法。•整数部分x的转换采用除R取余法。x=Kn×2n+Kn-1×2n-1+…+K1×21+K0×20【例1-4】把18转换成二进制数。解:218………余0(K0)9………余1(K1)4………余0(K2)2………余0(K3)1………余1(K4)0结果为(18)10=(10010)22222小数部分的转换采用乘R取整法。将一个十进制纯小数x按二进制数的权展开则为:x=K-1×2-1+K-2×2-2+…+K-m×2-m将其乘以2后,可得K-1+(K-2×2-1+…+K-m×2-m+1)显然整数部分即为K-1。反复乘2,依次可得K-2,K-3,…,K-m,直到乘积的小数部分为0或者小数点后的位数达到精度要求为止。2.十进制数转换成二进制数、八进制或十六进制数【例1-5】将(0.8125)10转换成二进制数。解:0.8125×21.6250…………1(K-1)×21.2500……………..1(K-2)×20.5000………0(K-3)×21.0000………1(K-4)结果为(0.8125)10=(0.1101)2一直到算出1为止【例1-6】将(314)10转换成十六进制数。解:16314…………余A19…………余31…………余10所以(314)10=(13A)1616162.十进制数转换成二进制数、八进制或十六进制数3.二进制数与八进制数的相互转换二进制数八进制数以小数点为基准,“三位并一位”【例1-7】将(11101.1101)2转换成八进制数。解:011101.1101003564结果为(11101.1101)2=(35.64)8二进制数八进制数以小数点为基准,“一位拆三位”4.二进制数与十六进制数的相互转换二进制数十六进制数以小数点为基准,“四位并一位”二进制数十六进制数以小数点为基准,“一位拆四位”【例1-7】将(65.C4)16转换成二进制数。解:65.C40110010111000100结果为(65.C4)16=(1100101.110001)2各种进位制之间的对应关系十进制二进制八进制十六进制000011112102231133410044510155611066711177810001089100111910101012A11101113B12110014C13110115D14111016E15111117F161000020103.4字符型数据3.2.4字符型数据字符是按其代码(整数)形式存储的C99把字符型数据作为整数类型的一种字符型数据在使用上有自己的特点1.字符与字符代码大多数系统采用ASCII字符集字母:A~Z,a~z数字:0~9专门符号:29个:!”#&‘()*等空格符:空格、水平制表符、换行等不能显示的字符:空(null)字符(以‘\0’表示)、警告(以‘\a’表示)、退格(以‘\b’表示)、回车(以‘\r’表示)等3.4字符型数据字符’1’和整数1是不同的概念:字符’1’只是代表一个形状为’1’的符号,在需要时按原样输出,在内存中以ASCII码形式存储,占1个字节整数1是以整数存储方式(二进制补码方式)存储的,占2个或4个字节0011000100000000000000013.4字符型数据字符变量•字符型变量用来存放字符常量,注意只能放一个字符。•字符变量的定义形式如下:charc1,c2;•在本函数中可以用下面语句对c1,c2赋值:c1=‘a’;c2=‘b’;•一个字符变量在内存中占一个字节。3.4字符型数据字符数据在内存中的存储形式及其使用方法•一个字符常量存放到一个字符变量中,实际上并不是把该字符的字型放到内存中去,而是将该字符的相应的ASCII代码放到存储单元中。这样使字符型数据和整型数据之间可以通用。注意:一个字符数据既可以以字符形式输出,也可以以整数形式输出。3.4字符型数据例3.6向字符变量赋以整数。#includestdio.hvoidmain(){charc1,c2;c1=97;c2=98;printf(“%c%c\n”,c1,c2);printf(“%d%d\n”,c1,c2);}•说明:在第3和第4行中,将整数97和98分别赋给c1和c2,它的作用相当于以下两个赋值语句:c1=′a′;c2=′b′;因为’a’和’b’的ASCII码为97和98•运行结果:ab9798例3.7大小写字母的转换#includestdio.hvoidmain(