1、C语言程序设计本章重点: 数据类型 算术运算符和算术表达式 赋值运算符和赋值表达式 逗号运算符和逗号表达式第三章 数据类型、运算符和表达式C语言有四种常用数据类型:字符、整型、单精度实型、双精度实型。类型范围c h a r (字符型) 0 2 5 5i n t(整型) - 3 2 7 6 8 3 2 7 6 7f l o a t(单精度型) 约精确到6位数d o u b l e(双精度型) 约精确到1 2位数除此之外,C语言还提供了几种其他类型,包括数组、指针、结构体、共用体(联合)、位域和枚举等。这些复杂类型在以后的章节中讨论。3.1 常量和变量一、常量1. 常量的概念在程序运行过程中,其值
2、不能被改变的量称为常量。2. 常量的分类整型常量 实型常量 字符常量 符号常量。二、变量1. 变量的概念在程序运行过程中,其值可以被改变的量称为变量。2. 变量名每个变量的名字即变量名,变量命名遵循标识符命名规则。3. 标识符和命名规则(1) 有效字符:只能由字母、数字和下划线组成,且以字母或下划线开头。(2) 有效长度:随系统而异,但至少前个字符有效。如果超长,则超长部分被舍弃。在TC V2.0中,变量名(标识符)的有效长度为个字符,缺省值为。(3) C语言的关键字不能用作变量名。(4) 特别注意C语言对英文字母的大小敏感,即同一字母的大小写,被认为是两个不同的字符。习惯上,变量名和函数名中
3、的英文字母用小写,以增加可读性。4. 变量的定义与初始化在语言中,要求对所有用到的变量,必须先定义、后使用;且在定义变量的同时可以赋初值(初始化)。(1) 变量定义的一般格式存储类型 数据类型 变量名, 变量名2;例如:int a, b, c;(2) 变量初始化的一般格式存储类型 数据类型 变量1=值1 ,变量2=值2 ;例如:int a=3, b=4, c=5;3.2 整型数据一、整型变量1. 分类根据占用内存字节数的不同,整型变量又分为类:(1)基本整型(类型关键字为int)(2)短整型(类型关键字为short int)(3)长整型(类型关键字为long int)(4)无符号整型。分为三种
4、,只能用来存储无符号整数(unsigned int)基本无符号整型(unsigned short)无符号短整型(unsigned long)无符号长整型2. 占用内存字节数与值域上述各类型整型变量占用的内存字节数,随系统而异。ANSI标准中的数据类型类型长度范围int1 6- 3 2 7 6 8 3 2 7 6 7short int16- 3 2 7 6 8 3 2 7 6 7long int32-2 1 4 7 4 8 3 6 4 8 2 1 4 7 4 8 3 6 4 9unsigned int160 6 5 5 3 5unsigned short80 255unsigned long32
5、0 4 2 9 4 9 6 7 2 9 63. 举例main ( )int a; short b;long c=2345678;unsigned u; a=-12; b=24; u=10;printf(%d,%d,%d,%d n, a,b,c,u);4. 说明上述各类型整型变量占用的内存字节数,随系统而异。在赋值和运算时可能溢出,导致不可确定结果。二、整型常量1. 三种表示形式整型常量即整常数,在语言中可用三种形式表示:(1)十进制。例如10、36。(2)八进制(以数字开头)。例如012。(3)十六进制(以数字+小写字母x开头)。例如0x36main ( )int a=123; int b=0
6、10+10;int c=0xffff;int d=10+010+0x10; printf(%d,%d,%d,%d n, a,b,c,d);2. 分类(1)基本整型。其数据范围与int型变量一样。(2)长整型(在数值后面加“L / l ”)。对数值很大的整型常量,可使用长整型常量表示,其取值范围可达-231231-1。例如:123l、315等。3. 说明(1)一个整型常量,可以赋给能容纳下其值的整型变量。例如,其值在-(-)的整型常量,可以赋给int型变量和long int型变量;其值在-(-)的整型常量,就只能赋给long int型变量。(2)常量无unsigned型。但一个非负整型常量,只要
7、它的值不超过相应变量的值域(即取值范围),也可以赋给unsigned型变量。(3)(4)3.3 实型数据一、实型变量1. 分类根据占用内存字节数的不同,整型变量又分为3类:(1)单精度型。类型关键字为float。(2)双精度型。类型关键字为double。(3)长双精度型。类型关键字为long double。(用的很少)类型比特数有效数字范围float326 7-3.4*10-38 3.4*1038double6415 16-1.7*10-3081.7*10308long double12818 19-1.2*10-49321.2*1049322. 举例main ( )float a; doub
8、le b;long double c=-24345345678.1234565433;a=-12.324234; b=23244.4543345; printf(%d,%d,%d n, a,b,c);二、实型常量1. 表示形式实型常量即实数,在语言中又称浮点数,其值有两种表达形式:(1)十进制形式。例如3.14、9.8。 (2)指数形式:E(e)。例如3.0+5等。2. 说明实型常量不分float型和double型。一个实型常量,可以赋给一个实型变量(float型或double型)。3.4 字符型数据一、字符常量1. 定义用一对单引号括起来的单个字符,称为字符常量。例如,A、! 等。2. 转义
9、字符语言还允许使用一种特殊形式的字符常量,就是以反斜杠“ ”开头的转义字符。注意:如果反斜杠或单引号本身作为字符常量,必须使用转义字符:、。字符形式含义ASCII代码n换行10t水平制表9b退格9r回车13f换页12反斜杠92单引号字符39”双引号字符34ddd任意字符三位八进制xhh任意字符二位十六进制3. 举例main()printf(“ ab ct derftgn”);printf(“htibbj k);”);printf(“x4F x4B x21 n”);printf(“x15 xAB n”);执行结果:f gdeh j k! 二、字符变量1. 变量的定义和存储字符变量的类型关键字为c
10、har,占用1字节内存单元。字符变量用来存储字符常量。将一个字符常量存储到一个字符变量中,实际上是将该字符的ASCII码值(无符号整数)存储到内存单元中。char ch1, ch2; /*定义两个字符变量:ch1,ch2*/ch1=a; ch2=b; /*给字符变量赋值*2. 说明(1)一个字符型数据,既可以字符形式输出,也可以整数形式输出。(2)允许对字符数据进行算术运算,此时就是对它们的ASCII码值进行算术运算3. 举例例1 main() char ch1,ch2;ch1=a; ch2=b; printf(“ch1=%c,ch2=%cn”,ch1,ch2);printf(“ch1=%d,
11、ch2=%dn”,ch1,ch2);程序运行结果:ch1=a,ch2=bch1=97,ch2=98 例2main() char ch1,ch2;ch1=a; ch2=B;/*字母的大小写转换*/printf(“ch1=%c,ch2=%cn”,ch1-32,ch2+32);程序运行结果:ch1=A,ch2=b4. 总结关于数据存储输出的总结1) 不同类型数据的存储长度不同,能表示数的有效范围也不同2) 不同类型数据赋值时应赋有效值3) 不同类型数据输出时应用相应输出格式符字符型(char)S000 0000整型(int)S000 00000000 0000实型(float)S000 000000
12、00 00000000 00000000 0000例1main() char c=128;printf(“%c”,c);printf(“%d”,c);c=256;printf(“%c”,c);printf(“%d”,c); 例2main() int x=3.5;int y=0x7fff;printf(“%d”,x);printf(“%d”,y);y=0x8000;printf(“%d”,y);y=0x10000;printf(“%d”,y);y=0x10001;printf(“%d”,y);例3main() long x=365;printf(“%d”,x);printf(“%Ld”,x);x
13、=0x8000;printf(“%d”,x);printf(“%Ld”,x);x=0x10000;printf(“%d”,x);printf(“%Ld”,x);x=0x110001;printf(“%d”,x);printf(“%Ld”,x);三、字符串常量1. 字符串常量的概念字符串常量是指用一对双引号括起来的一串字符。双引号只起定界作用。例如: China ,C program, YES , 33312-2341, A 等。2. 字符串的存储和长度C语言中,字符串常量在内存中存储时,系统自动在字符串的末尾加一个“串结束标志”,即ASCII码值为0的字符NULL,常用 0表示。因此在程序中,
14、长度为n个字符的字符串常量,在内存中占有n+1个字节的存储空间。例如,字符串China有5个字符,作为字符串常量 China 存储于内存中时,共占6个字节,系统自动在后面加上NULL字符,其存储形式为:China03. 说明要特别注意字符串与字符串常量的区别,除了表示形式不同外,其存储性质也不相同,字符 A 只占1个字节,而字符串常量 A 占2个字节。9 9 93.5 各类数值型数据见的混合运算先看下面例子,理解什么是数值数据的混合运算例1main() int x=3;long y=100float z;z=x+y;x=y+23;y=z+x;printf(“%d, %d, %d”, x, y,
15、 z);不同类型数值数据混合运算时应注意:简单类型赋值给复杂类型可以,反之则有问题3.6 算术运算符和算术表达式一、算术运算符和算术表达式1. 基本算术运算符+3+5 a+b-4-6 x-y*3*53.14*s/5/25.0/2-5/3%7%4(整数求余运算)用算术运算符、括号,把数值型常量、变量连接起来就是算术表达式例main() int x; folat y;x=5/2;y=5/2;printf(“%d, %f”, x, y);x=-5/2;y=5.0/2;printf(“%d, %f”, x, y);2. 自增、自减运算符作用是使变量的值增1或减1+i+i-i-ix=I+相当于 x=I;
16、 I=I+1;x=+I相当于 I=I+1;x=I; 例main() int i=10 , j=10;int x, y; x=i+;printf(“%d, %d”, x , i);x=+jprintf(“%d, %d”, x , j);y=x-;printf(“%d, %d”, y , x);x=100y=-x;printf(“%d, %d”, y , x);例main() int I=5, j=10;I+;printf(“%d”, I);printf(“%d”, I+);printf(“%d”, +I)printf(“%d, %d”, j+, j+);3. 说明不要写有二义性的语句或晦涩语句,
17、应写成多个简单语句。如x=y+zprintf(“%d, %d”, j+, j+)应写为多句,或用括号说明先计算哪部分3+(错误)二、算术运算符的优先级和结合性1. 优先级先乘除余,后加减 3+5%4-2*52. 结合性左结合性3*6 / 2*5右结合行a=b=33.7 赋值运算符和赋值表达式一、赋值运算符和赋值表达式1. 赋值运算符C中 “=”称为赋值运算符,它的作用是将一个表达式的值赋给一个变量。赋值运算符的一般形式为: 变量 = 赋值表达式 例如, x = 5 y = (float)5 / 2 如果表达式值类型与被赋值变量的类型不一致,系统将会把表达式的值转换成被赋值变量的数据类型,然后再
18、赋值给变量。2. 赋值表达式由赋值运算符,将一个变量和一个表达式连接起来的表达式,称为赋值表达式。(1)一般格式变量 = 表达式如: a=5+2(2)赋值表达式的值任何一个表达式都有一个值,赋值表达式也不例外。被赋值变量的值,就是赋值表达式的值。例如,z执行“a = 5+2”这个赋值表达式时,先把7的值赋给变量a,然后再让整个表达式的值等于a 的值3. 举例例main() int a,b;int x, y, z;a=5;b=a+2;x=y=b*10-5;printf(“%d, %d”, a, b);printf(“%d, %d”, x, y);printf(“%d”, z=a+b);二、复合赋
19、值运算符C语言还有以下的复合赋值运算符:+=,-=,*=,/=,%=它们的具体含义如下:x += 3 等价于x=x+3 y *= x + 6等价于y=y*(x+6),而不是y=y*x+6例main() int a,b;int x, y, z;a=5;b+=a;c-=b+5;x=10; y/=2; z%=yprintf(“%d, %d”, a, b);printf(“%d, %d”, x, y);3.8 逗号运算符和逗号表达式语言提供一种用逗号运算符“,”连接起来的式子,称为逗号表达式。逗号运算符又称顺序求值运算符。1. 一般形式表达式, 表达式, , 表达式n2. 求解过程自左至右,依次计算各
20、表达式的值,“表达式n” 的值即为整个逗号表达式的值。例如,逗号表达式“a = 3 * 5, a * 4”的值是60:先求解a = 3 * 5,得a=15;再求a * 4 = 60,所以逗号表达式的值=60。又例如,逗号表达式“(a = 3 * 5, a * 4), a + 5”的值=20:先求解a = 3 * 5,得a=15;再求a * 4=60;最后求解a + 5=20,所以逗号表达式的值=20。注意:并不是任何地方出现的逗号,都是逗号运算符。很多情况下,逗号仅用作分隔符。3. 举例例1main() int a,b;a=3*5, a*4;b=(a+=10,a+)printf(“%d, %d
21、”, a, b);printf(“%d”,a,4);printf(“%d”,(a,4);printf(“%d”,a,b=5);例2main() int a,b,c;a=1, b=2, c=a+b;/* a=1; b=2; c=a+b; */printf(“%d, %d, %d”, a, b);3+5;a;a=getch();printf(“%d”, a);getch();补充程序1 典型的绘图程序(满天繁星)#include #include main()int x,y;int color;int i;int GraphDriver = DETECT;initgraph( &GraphDriver, EGAVGA, );rectangle(0,0,630,470);for (i=1; i=1000; i+)x=random(640);y=random(480);color=random(16);putpixel(x,y,color);getch();closegraph(); 2 判断奇数和偶数(scanf和if)main() int c;clrscr();scanf(“”,&x,&y);if (x%y=0) prinf(“yes even”);else prinf(“no odd”);getch();作业1 输入三个数,求最大数2 求一元二次方程根程序第3章 第16页