1、1,第3-4讲 基本数据类型与运算,2,例1 求一个数的平方根,C程序结构引例,输入,处理,输出,/* 例1 求一个数的平方根 */#include #includemain() double x,s;printf(“input number: ”);scanf(“%lf”,printf(“Square root of %lf is %lf.n”,x,s);,3,C程序结构引例,例2 求a,b两个数的和与积,并输出,/* 例2 */#include main() int a,b,sum,mult; a=10; b=24; sum=a+b; mult=a*b; printf(”sum= %dn,
2、sum); printf(”multiply= %dn,mult); getch();,4,本讲主要内容,第2章2.1-2.6,重点:变量命名规则 基本数据类型的使用 常用运算符的使用,本讲小结,5,1 基本数据类型,1.1 C语言的数据类型,C数据类型,6,1 基本数据类型,1.2 基本数据类型数据的表示形式,整型数据,实型数据,字符型数据,7,1 基本数据类型,1.3 基本数据类型的存储长度,sizeof使用示例,可通过sizeof运算符得到某种数据类型的数据字节数,返回主菜单,8,2 变量和常量,2.1 变量的定义,在程序运行过程中,其内存单元中存放的数据值可以根据需要随时改变。(其值可
3、变),内存单元,变量存储单元的大小由什么确定?,注意:变量必须先定义,才能使用。否则编译系统将给出变量未定义的错误信息(Undeclared Identifieraidentifai ),9,2 变量和常量,2.2 变量的定义标识符(名字),10,2 变量和常量,2.2 变量的定义自定义标识符命名规则,自定义标识符由英文字母、数字和下划线构成开头字符必须是字母或下划线(不能为数字)不能使用关键字(建议也不要使用预定义标识符),标识符命名原则:常用取简,专用取繁,见名知义,标识符的长度:一般长度为8不同的C编译系统有不同的规定:Turbo C 2.0 最长可允许32个字符;VC+ 6.0 标识符
4、最长可允许247个字符。,11,2 变量和常量,2.2 变量的定义C语言的基本字符集,C语言的基本符号集采用ASCII码字符集,包括:(1)大小写英文字母各26个。(2)10个阿拉伯数字09。(3)其他特殊符号,包括以下运算符和操作符: + - * / % = = != & | ! & | = + - ?: () . - # sizeof += -= *= /= %= &= = |= ,12,练习,sum, a#3, Sum,n2, 2student, _average, !sum_2, a_3,number.3,student_2_name,num-1,mouth, PI, s123, ar
5、ea, name_1 ,45D, ab, day-1, m.m 请问:上面的标识符哪些是合法的,哪些是不合法的?,13,2 变量和常量,2.2 变量的定义变量的定义变量定义的一般格式:,存储类别 类型符 变量名表 ;,引例中变量的定义,14,2 变量和常量,2.2 变量的定义变量的初始化变量的初始化,就是在定义变量的同时赋予其与类型相一致的初值,并且与问题解决意义相一致的初值。,int n;float num;float sum;int i;float avg;或者int n,i;float num,sum,avg;,15,2 变量和常量,2.3 常量(Constants),对于常量,在程序运
6、行期间,其内存单元中存放的数据值不能改变。,常量,直接常量符号常量,思考题:什么样的情况需要定义符号常量?,为了区别程序中的符号常量名和变量名,习惯上用大写字母命名符号常量。,16,2 变量和常量,2.3 常量(Constants),十进制的整型常量:如123、-789、0等。八进制的整型常量:以0开头的常量是八进制整型常量。如023表示八进制数23,它等价于十进制数的19; 十六进制的整型常量:以0x开头的数是十六进制整型常量。如0x123表示十六进制数123。,整型常量(三种):,17,2 变量和常量,2.3 常量(Constants),小数形式:由数字、小数点和可能的正负号组成。例如:3
7、.1416,-12.76,0.12,.12,12.,12.0都是C语言合法的实数。指数形式:由尾数部分、字母e或E和指数部分组成。如十进制数320 000.0用指数法可表示为3.2e5,其中3.2称为尾数,5为指数,e也可用E表示。字母e或E之前(即尾数部分)必须有数字,e后的指数部分必须是整数,如e-5、7.2e2.5都是不合法的实数。,实型常量(只有十进制两种):小数形式和指数形式,18,2 变量和常量,2.3 常量(Constants),字符常量只能用单引号括起来,不能用双引号或其他括号。字符常量只能是一个字符,不能是字符串。字符可以是字符集中的任意字符。字符在内存中以ASCII码存放。
8、,字符常量:,如:a、x、?、$。 注意,a和A是不同的字符常量。 a : ASCII码:97 A : ASCII码:65,19,2 变量和常量,2.3 常量(Constants),双引号括起来的字符序列。字符串常量在内存中的存放:每一个字符均以其ASCII码存放,且最后添加一个“空字符”0。注意:0和0不同,0是编码为0的字符(空操作字符),而0则是数字0,其编码为48。,字符串常量:,例: How do you do., CHINA CHINA存放在内存中的情况是:(6字节存储器,不是5字节),C H I N A 0,最后一个字符.。,思考: a和”a”有什么区别?,20,2 变量和常量,
9、2.4 整型变量,整型变量的分类(IBMPC)基本型(整型) int 2字节 短整型 short 或 short int 2字节 长整型 long 或 long int 4字节 无符号整型:unsigned 2字节无符号短整型:unsigned short 2字节 无符号长整型:unsigned long 4字节 C语言标准没有规定整型变量在计算机内存中所占的字节数,它与具体的机器和操作系统有关。,21,2 变量和常量,2.4 整型变量,整型变量的定义实例1main() int a,b,c,d; unsigned int u; a = 12; b = -24; u = 10; c = a +
10、u; d = b+u; printf(a+u = %d, b+u = %dn, c, d); 程序运行显示:a+u = 22, b+u = -14,22,2 变量和常量,2.4 整型变量,整型变量的定义实例2P22main() int a=3,b=5; printf(a+b = %dn, a+b); 程序运行显示:a+b = 8,23,补充,基本数据类型数据的存储形式整型变量的存储,Int型:,32767,-32768,unsigned int型:,最大65535,最小0,最高位为符号位,最大,最小,24,2 变量和常量,2.5 实型变量,单精度: float 4字节(32位) 双精度: do
11、uble 8字节(64位) 例1:float x,y; /* 指定x、y为单精度实型变量 */ double z; /* 指定z为双精度实型变量 */注意:实型常量不分float和double。例2:float a; a=123456.711 注意:float型变量只能接受7位有效数字,最后两位数字不起作用。double 型变量能接受16位有效数字。,25,2 变量和常量,2.4 实型变量,实型变量的定义实例1main() float a; a=123456.76543; printf(a = %fn, a); 程序运行显示:a=123456.76525,26,2 变量和常量,2.4 整型变量
12、,实型变量的定义实例2main( )float a; double b;a = 33333.333333;b = 33333.33333333;printf(“a=%fnb=%fn”,a,b);程序运行显示:,27,补充:,基本数据类型数据的存储形式(续)实型变量的存储实型变量以浮点数指数形式存放字符型变量的存储 字符型变量存放字符ASCII码值,-0.314159*102,28,2 变量和常量,2.6 字符变量,字符变量用来存放一个字符常量.字符变量在内存中占一字节。变量赋初值:在定义变量的同时指定其初值。例1: char c1,c2; /* 定义c1、c2为字符变量 */ c1 = a;
13、c2 = b;例2: char c1=a;等效: char c1; c1=a;,29,2 变量和常量,2.5 字符变量,例3main() char c1,c2; c1 = 97; c2 = 98; printf(%c %c,c1,c2); 该例的输出是:a b注意:字符以ASCII码存储,其存储方式与整数类似。从而,C语言允许字符和整数之间进行运算。,相当于:c1 = a; c2 = b;因为:字符以ASCII码存放,a的ASCII码为97,b的ASCII码为98。,97,98,c1 c2,30,2 变量和常量,2.5 字符变量,例4P26main()char a,b; a=120;b=121
14、; printf(“%c,%cn%d,%dn”,a,b,a,b);程序运行显示:,31,2 变量和常量,2.5 字符变量,例5P26main()char a,b; a=x;b=y; a=a-32;b=b-32; printf(“%c,%cn%d,%dn”,a,b,a,b);程序运行显示:,32,2 变量和常量,2.6 变量初始化,在定义变量的同时指定其初值。例: int a = 3; float f = 3.56; char c = a; int a, b, c = 5; 注意:多个变量指定相同的初值。 int a = b = c = 3 ; int a = 3, b = 3, c = 3;
15、,33,2 变量和常量,2.7 各类数据类型混合运算,整型、实型(包括单、双精度)、字符型数据可以混合运算。例、 10 + a + 1.5 - 8765.1234 * b混合运算时,先转换成同一种类型,然后进行运算。转换规则如图所示。,34,2 变量和常量,2.7 各类数据类型混合运算,例: int i; float f; double d; long e; 10 + a + i*f - d/e,整型,双精度,此转换过程是由系统自动进行的。,35,3 运算符与表达式,运算:是对数据的加工处理的过程。,运算符:用来表示各种不同运算的符号。,表达式(Expression):是将运算量用运算符连接起
16、来组成的式子,其中的运算量可以是常量、变量或函数。,引例中的运算符与表达式,P29表2-3 C语言运算符分类,36,3 基本运算符与表达式,3.1 基本的算术运算,+、,/(除),%(求余),+(取正),(取负),课堂练习:比较5*4/2与5/2*4的结果如设m、n均为整型变量(n0),则m-m/n*n的结果是什么?-7/4、-8%5、8%-5结果是什么?,双目运算符,结合性为从左至右,单目运算符,结合性为从右至左,符号同被除数,37,3 基本运算符与表达式,3.2 算术表达式,算术表达式:用算术运算符和括号将运算对象连接起来、符合C语法规则的式子。如:a*b/c - 1.5 + a b*b-
17、4*a*c 3.1415926*r*r 运算符的优先级:先乘除、后加减;先括号。运算符的结合性:运算对象两侧的运算符优先级相同时,运算符的结合方向(左右)。左结合性:结合方向为从左至右(先左后右,简称左结合)。算术运算符为左结合。P31 表2.5右结合性:结合方向为从右至左(先右后左,简称右结合)。赋值运算符”=“为右结合。,例: a = b + c 由于赋值运算符=优先级低,先执行右边的b+c,再赋值给a。,38,3 基本运算符与表达式,3.3 赋值运算符和赋值表达式,1.赋值运算符:”=”。一般形式:变量名=表达式; 说明:1.”=“左边必须是变量名.2.”=“与数学中的含义不同,没有相等
18、的含义。X=x+13.在一个赋值表达式中,可出现多个”=“,右结合。,例: a = b =c=7; 相当于a=(b=(c=7);,练习: float a,b; a = b =34+a;,39,3 基本运算符与表达式,3.3 赋值运算符和赋值表达式,2.复合赋值运算符一般形式:变量名 双目运算符=表达式;等价于:变量名=变量名 双目运算符 表达式,例: a *= b +71; 相当于a=a*(b+71);,练习: a+=1;相当于:,3. 赋值表达式 自学 P33,40,3 基本运算符与表达式,3.3 赋值运算符和赋值表达式,2.复合赋值运算符一般形式:变量名 双目运算符=表达式;等价于:变量名
19、=变量名 双目运算符 表达式,例: a *= b +71; 相当于a=a*(b+71);,练习: a+=1;相当于:,3. 赋值表达式 自学 P33,41,3 基本运算符与表达式,3.3 赋值运算符和赋值表达式,课堂练习:1、a += 3; 等价语句 a = a + 3; 2、x *= y + 8; 等价语句 x = x*(y+8) 3、x %= 3; 等价语句 x = x % 3;4、x - =(y+2);等价语句 x=x -(y+2),42,3 基本运算符与表达式,3.4 逗号运算,表达式1,表达式2,表达式n,从左到右逐一计算各表达式,并以表达式n的值为逗号运算表达式的结果,课堂练习:假
20、设a=3,求表达式的值a=3*5,a*4(a=3*5,a*4),a+5,43,3 基本运算符与表达式,3.4 逗号运算,例: main() int a,b,c; a=2; b=(a,a*4); c=(5,4),a=5,10); printf(%d,%d,%dn,a,b,c); 注意:逗号可以作运算符,也可以作分隔符。,44,3 基本运算符与表达式,3.5 自增、自减运算符,+,-,+i:在使用i之前使i加1 i+:在使用i之后使i加1 -i:在使用i之前使i减1 i-:在使用i之后使i减1,课堂练习:如果x=4,分析下面表达式的结果:(x+)+(x+)(+x)+(+x),结果为:9。?,结果为
21、:11。?,45,3 基本运算符与表达式,3.5 自增、自减运算符,例main() int a; a = 3; printf(%d, a+); printf(%d, a); ,46,3 基本运算符与表达式,3.5 自增、自减运算符,提示:自增自减运算符特点:右结合性。自增自减运算符的运算对象只能是变量。,例: i = 3; j = +i; /* 先使i加1,再赋给j。*/ 执行后:j=4, i=4 i = 3; j = i+; /* 先把i赋给j,再使i加1。*/ 执行后:j=3,i=4 i = 3; j = (i+)+(i+)+(i+); 执行后:j=9, i=6 i = 3; j = (+
22、i)+(+i)+(+i); 执行后:j=18, i=6 注意:不要写成j+i形式。,47,3 基本运算符与表达式,3.5 自增、自减运算符(续),课堂练习:设i的值为2,表达式i+-1的值是多少?表达式执行以后,i的值是多少?设i的值为3,j的值为2,表达式-(i+)+(+j)的值是多少?表达式执行以后,i和j的值分别是多少?设i的值为5,表达式i/i+和i+/+i的值分别是多少?表达式执行以后,i的值分别是多少?,48,3 基本运算符与表达式,3.7 混合运算时数据类型的转换显式类型转换,(类型说明符) (表达式),(float) a 把a转换为实型 (int)(x+y) 把x+y的结果转换
23、为整型,返回主菜单,49,3 基本运算符与表达式,例: (double)a; /* 将a转换为double类型 */(int)(x+y); /* 将x+y的值转换为int类型 */(float)(5 % 3); /* 将5%3的值转换为float类型 */注意:(int)(x+y); /* 将x+y的值转换为int类型 */(int)x+y; /* 将x的值转换为int类型,再与y相加 */ (int) (x); (int) x; (表达式仅为一个变量时,括号可以省略) int (x); /* 变量x的类型不发生变化*/ 说明:强制类型转换时,得到一个所需类型的中间变量,原来变量的类型不发生变
24、化。,50,4 常用数学库函数,附录3,课堂练习:请根据附录3表格给出的函数,写出下面代数式对应的C语言表达式:,51,课堂作业:,2.1 指出下面哪些是合法的变量名: 123 abc a+b a_b pad ?12 Li_Li *P2.2 a在内存中占 个字节,“a”在在内存中占 个字节.2.3 写出下面程序的运行结果: main() char ch; ch=B; /*B的ascii码的值为66*/ printf(“%c,%dn”,ch,ch), 1 2B 66,52,2.4 写出下面程序的运行结果:main() int a=10, b , c , d ; a+=6; b = (c=20,
25、6, a+2 ); printf(a=%d,b=%d,c=%dn,a,b,c); ,运行结果:a=16,b=18,c=20,课堂作业:,53,2.5写出下面程序的运行结果: main() int a=4; int b,c; c=a+(b=2); a+=a-=a*a; printf(%d,%d,%dn,a,b,c); 2.6 写出下面程序的运行结果: main() int a,b,c=9; a=3,b=4; c%= a+b; printf(“%dn”,c) ,运行结果:-24,2,6运行结果:2,课堂作业:,54,2.7 写出下面程序的运行结果: main()int i,j,m,n;i=8;j=
26、10;m=+i;n=j+;printf(%d,%d,%d,%dn,i,j,m,n);,运行结果:9,11,9,10,课堂作业:,55,2.8 写出下面程序的运行结果: main()float x=5.4;int i;i=(int)x;printf(”x=%f,i=%dn,x,i);,运行结果:x=5.400000,i=5,课堂作业:,56,本讲小结,介绍了C语言的数据类型重点学习了的变量的定义及初始化重点学习了C语言的基本数据类型及存储形式重点学习了C语言的算术运算符及表达式介绍了C语言中常用的数学函数请同学们重点阅读教材附录B,57,作业,思考题教材P38-39,T1-3请大家准备程序设计方
27、法的资料,下次课课前讨论。重点理解结构化程序设计方法的有关知识作业教材P39 4(1),58,谢谢,59,引例中变量的定义,返 回,分析求n个数的平均值的算法,输入,处理,输出,int n;float num;float sum;int i;float avg;或者int n,i;float num,sum,avg;,60,sizeof使用示例,返 回,#include main() int i,j; long s; float a,b; double f1,f2; char ch; printf(%d,%d,%dn, sizeof(int),sizeof(i),sizeof(10); pri
28、ntf(%d,%dn, sizeof(long),sizeof(s); printf(%d,%dn, sizeof(50000),sizeof(10L); printf(%d,%d,%dn, sizeof(float),sizeof(b),sizeof(9.8F); printf(%d,%d,%dn, sizeof(double),sizeof(f1),sizeof(9.8); printf(%d,%dn, sizeof(char),sizeof(ch); printf(%d,%dn, sizeof(A),sizeof(101);,返 回,61,引例中的运算符和表达式,分析求n个数的平均值的算法,输入,处理,输出,#include main () int n=0,i=0; float num=0.0,sum=0.0,avg=0.0; scanf(%d,返 回,62,32个关键字:(系统定义,不能重作其它定义),返 回,63,字符集,字符(Character)是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。 常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等。,返 回,