C语言(第2章数据类型、运算符与表达式).ppt
2023/11/7,第1页,C语言程序设计,信息与计算机学院朱诚:zhucheng,2023/11/7,第2页,第二章 数据类型、运算符与表达式,预备知识:什么程序?,程序就是指令的有序集合,对应着一系列的数据加工步骤,2023/11/7,第3页,第二章 数据类型、运算符与表达式,例:求2个整数的和,并将结果显示出来(1)先准备2个整数 a=123,b=234;(2)计算 sum=a+b;(3)输出结果。这是人脑的思维形式,计算机该怎么办?,(1)将第一个操作数送入内存单元;(2)将第二个操作数送入内存单元;(3)CPU从内存中取数进行加法运算(4)将运算结果送入内存单元存储(5)将结果输出到输出设备(如显示器),2023/11/7,第4页,第二章 数据类型、运算符与表达式,#include“stdio.h”main()int a,b,c,sum;a=123;/*步骤1:将第一个操作数送入内存单元a中*/b=234;/*步骤2:将第一个操作数送入内存单元b中*/sum=a+b;/*步骤3和4:求两数相加之和并送内存单元sum中*/printf(“Sum is%d n”,sum);/*步骤5:将结果输出到显示器上*/,2023/11/7,第5页,第二章 数据类型、运算符与表达式,一个程序实际上包含两个主要部分:组织数据设计数据结构对数据结构进行加工的过程设计算法程序=数据结构+算法程序=数据结构+算法+程序设计方法+编程语言,2023/11/7,第6页,第二章 数据类型、运算符与表达式,C语言的数据类型数据结构指的是数据的组织形式C语言的数据结构是以数据类型的形式出现的数据类型决定:1.数据占内存字节数(内存空间大小)2.数据取值范围3.其上可进行的操作(运算),2023/11/7,第7页,第二章 数据类型、运算符与表达式,数据类型,2023/11/7,第8页,2.2.1 常量1、定义:在程序执行期间,其值不可改变的量称为常量2、类型:数值常量 例如:10,3,2.68,a,hello 等符号常量 即用一个符号代表一个常量 例如:#define PI 3.1415926 main()float r,l,s;r=2;l=2*PI*r;s=PI*r*r;printf(“l=%d,s=%d”,l,s);,第二章 数据类型、运算符与表达式,1、含义清楚2、方便修改,2023/11/7,第9页,第二章 数据类型、运算符与表达式,使用符号常量必须注意:符号常量必须先定义后才能用它表示一个数值。符号常量的值在其作用域内不能改变,也不能再被赋值。符号常量名习惯用大写字母表示。,2023/11/7,第10页,第二章 数据类型、运算符与表达式,2.2.2 变量1.定义:程序执行期间值可以改变的量;它代表内存中特定的存储单元。2.命名规则:变量名由标识符表示,只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。例如:下列标识符中,不合法的变量名有:M.D.John,12%gf,1add,_ce36,age(每个变量分配 4个 字节),2023/11/7,第11页,第二章 数据类型、运算符与表达式,注意*选变量名时,要尽量做到“见名知意”例如:name st_age xm nl class sum*大、小写字母是不同的字符,C变量名习惯用小写字母表示。*建议变量名的长度不要超过8个字符。*变量必须强制定义,即“先定义、后使用”,2023/11/7,第12页,第二章 数据类型、运算符与表达式,2.3 整型数据整型常量即整常数C语言中整常数可以是十进制、八进制(0开头)、十六进制(0 x开头)整型数据在内存中是以二进制形式存放的。整型变量整型变量的基本类型符号是:int在 int 前还可以加上修饰符号:short long signed unsigned,2023/11/7,第13页,第二章 数据类型、运算符与表达式,一个无符号整型变量中可以存放的正数的范围比一般整型变量中正数的范围扩大一倍。int a;/*变量a 的数值范围:-2147483 6482147483647*/unsigned int b;/*变量b的数值范围:-21474836482147483647*/,2023/11/7,第14页,第二章 数据类型、运算符与表达式,整型变量的使用定义:例如:int a,b;unsigned short x,y;long e,f;整型数据的溢出:例如:int a,b;a=32767;b=a+1;那么 b=?整型常量的类型,2023/11/7,第15页,第二章 数据类型、运算符与表达式,2.4 浮点型数据浮点数就是实数两种表示形式:十进制小数形式:0.123、123.123、3.1415936指数形式:123e3(123103)、123E3 注意:E和e前必须有数字、e和E后面必须是整数规范化的指数形式,2023/11/7,第16页,第二章 数据类型、运算符与表达式,浮点型变量浮点数在内存中的存放形式:,符号位,小数部分,指数部分,0.31415926 X 101,2023/11/7,第17页,第二章 数据类型、运算符与表达式,浮点型变量的分类:double:占8字节,提供1516位有效数字float:占4字节,提供7位有效数字Long double:占10字节,提供1819位有效数字浮点型数据的舍入误差,2023/11/7,第18页,第二章 数据类型、运算符与表达式,浮点型常量的类型:f2.456784523.65类型后缀f、F表示常量是一个单精度型浮点数l、L表示常量是一个长双精度型浮点数无任何后缀的浮点型常量视作双精度型,2023/11/7,第19页,第二章 数据类型、运算符与表达式,字符常量定义:用单引号括起来的单个普通字符或转义字符.字符常量的值:该字符的ASCII码值转义字符:反斜线后面跟一个字符或一个代码值表示,如 a A?n 101,2023/11/7,第20页,第二章 数据类型、运算符与表达式,例1 转义字符举例(ch3002.c,)main()printf(I say:How are you?n);printf(C Programn);printf(“Visual C+);,运行结果:(屏幕显示)I say:”How are you?”C ProgramVisual C+,例2 ch3003.cmain()printf(“Yb=n”);,运行结果:屏幕显示:=打印机输出:,2023/11/7,第21页,第二章 数据类型、运算符与表达式,字符变量字符型变量用来存放一个字符值(对应的ASCII值)字符变量的定义形式:char c1,c2;/c1和c2的字符变量c1=a;c2=$;/对c1h和c2赋值字符变量在内存中占一个字节空间字符数据与整型数据可以互相赋值,2023/11/7,第22页,第二章 数据类型、运算符与表达式,字符数据使用方法#include void main()char c1,c2;c1=97;c2=98;printf(“%c%c n”);printf(“%d%d n”);,运行结果a b97 98,2023/11/7,第23页,第二章 数据类型、运算符与表达式,例子2.7 大小写字母转换#include void main()char c1,c2;c1=a;c2=b;c1=c1-32;c2=c2-32;printf(“%c%c“,c1,c2);,运行结果:A B,2023/11/7,第24页,第二章 数据类型、运算符与表达式,字符串常量定义:用双引号(“”)括起来的字符序列存储:每个字符串尾自动加一个 0 作为字符串结束标志,例:char ch;ch=“A”;,2023/11/7,第25页,第二章 数据类型、运算符与表达式,2.6 变量赋 初值程序中经常要在使用变量前预先对它们设置初始值例如:int a=123;float f=3.1415926;char c=a;,2023/11/7,第26页,第二章 数据类型、运算符与表达式,2.3 各类数值型数据间的混合运算两种不同的数值型数据之间进行运算前,不同类型的数据要先转换成同一类型。可以避免数据溢出或运算精度下降。转换形式:隐式转换(由系统自动进行)显式转换(强制类型转换)隐式转换的转换规则:精度小的向精度大的类型转换取值范围小的向取值范围大类型转换参看课本P32页图2-2 强制类型转换符(类型)(double)(x+y)(int)(5*3.1415926),2023/11/7,第27页,第二章 数据类型、运算符与表达式,2.4.1 算术运算符和表达式(1)算术运算符:(+-*/%+-)关系运算符:(=!=)逻辑运算符:(!&|)位运算符:(|&)赋值运算符:(=及其扩展)条件运算符:(?:)见P55页,2023/11/7,第28页,第二章 数据类型、运算符与表达式,2.4.1 算术运算符和表达式(1)逗号运算符:(,)指针运算符:(*和&)求字节数:(sizeof)强制类型转换:(类型)分量运算符:(.和-)下标运算符:()其它:(()),2023/11/7,第29页,第二章 数据类型、运算符与表达式,运算符简介:模运算符(求余数运算符)1007?运算中数据类型的隐式转换:int a=5;int b=3;a/b=?double a=5;int b=3;a/b=?运算符的优先级和结合性:“左结合性”参见附录C建议:尽量使用()来直观表示运算的优先次序:区别 a*b/c*d 与(a*b)/(b*c),2023/11/7,第30页,自增、自减运算符+i 和-i(先改变 i 的值,然后用改变后的i值参与运算)i+和 i-(先使用 i 原来的值运算,运算完成后改变 i 的值)假设 i=5比较:j=i+和 j=+i 两个语句注意:+和 只能用于变量,不能用于常量和表达式。-i+相当于-(i+),第二章 数据类型、运算符与表达式,2023/11/7,第31页,第二章 数据类型、运算符与表达式,例:j=3;k=+j;j=3;k=j+;j=3;printf(“%d”,+j);j=3;printf(“%d”,j+);a=3;b=5;c=(+a)*b;a=3;b=5;c=(a+)*b;,/k=4,j=4,/k=3,j=4,/4,/3,/c=20,a=4,/c=15,a=4,2023/11/7,第32页,第二章 数据类型、运算符与表达式,关系运算符和关系表达式,6种关系运算符=!=,高,低,算术运算符,=,赋值运算符,=!=,2023/11/7,第33页,第二章 数据类型、运算符与表达式,例如:c a+b c(a+b)a=b=c a=(b=c)a=b=c+d a=(b=(c+d),2023/11/7,第34页,第二章 数据类型、运算符与表达式,用关系运算符将两个表达式连接起来(a+b)(c+d)(a=3)x注意区分等于(=)和赋值运算符(=)a=b a=b关系表达式的值是逻辑值“真”或“假”C语言用整型表示逻辑值,“真”1、非零、“假”0举例,a=3,b=2,c=1;d=ab;/*d=1*/f=abc;/*f=(ab)c=0*/,2023/11/7,第35页,第二章 数据类型、运算符与表达式,逻辑运算符和逻辑表达式,3种逻辑运算符及优先级&逻辑与|逻辑或!逻辑非,2023/11/7,第36页,第二章 数据类型、运算符与表达式,!a若a为“真”,!a为“假”若a为“假”,!a为“真”a&b若a、b都为“真”,则a&b为“真”若a、b不全为“真”,则a&b为“假”a|b若a、b都为“假”,则a|b为“假”若a、b不全为“假”,则a|b为“真”,2023/11/7,第37页,第二章 数据类型、运算符与表达式,运算符的优先级,2023/11/7,第38页,第二章 数据类型、运算符与表达式,2023/11/7,第39页,第二章 数据类型、运算符与表达式,逻辑表达式的值是逻辑值用整型表示逻辑值“真”1,“假”0把一个表达式的值作为逻辑值使用非零“真”,零“假”这里的非零与零,包括整型、浮点型等逻辑表达式中的运算符,只有会影响表达式求值时,才会执行a&b&c 若a为“假”,则不再判断b和ca|b|c 若a为“真”,则不再判断b和c,2023/11/7,第40页,赋值运算符和表达式简单赋值运算符符号:=格式:变量标识符=表达式作用:将一个数据(常量或表达式)赋给一个变量,第二章 数据类型、运算符与表达式,复合赋值运算符种类:+=-=*=/=%=&=|=含义:exp1 op=exp2 exp1=exp1 op exp2,x*=y+8,2023/11/7,第41页,第二章 数据类型、运算符与表达式,说明:结合方向:自右向左优先级:14左侧必须是变量,不能是常量或表达式,赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型,2023/11/7,第42页,第二章 数据类型、运算符与表达式,逗号运算符和表达式形式:表达式1,表达式2,表达式n结合性:从左向右优先级:15逗号表达式的值:等于表达式n的值用途:常用于循环for语句中,例 a=3*5,a*4 a=3*5,a*4,a+5例 x=(a=3,6*3)x=a=3,6*a例 a=1;b=2;c=3;printf(“%d,%d,%d”,a,b,c);printf(“%d,%d,%d”,(a,b,c),b,c);,/a=15,表达式值60,/a=15,表达式值20,/赋值表达式,表达式值18,x=18,/逗号表达式,表达式值18,x=3,/1,2,3,/3,2,3,2023/11/7,第43页,第二章 数据类型、运算符与表达式,运算符的优先级和结合性优先级见课本P61页表2-9结合性:大都是从左到右特殊:赋值运算符和条件运算符,2023/11/7,第44页,第二章 数据类型、运算符与表达式,本章主要内容回顾:C语言的数据类型常量与变量整型数据浮点型数据字符型数据变量赋初值与各类数值型数据简单混合运算算术运算符和表达式逗号运算符和逗号表达式,2023/11/7,第45页,第二章 数据类型、运算符与表达式,上机实验和习题课后练习(不用上交)14大题课后作业:(写到作业本上,下周交)5编程题(1)(2),2023/11/7,第46页,Any Question?,欢迎来信讨论,