《c语言第2讲基本数据类型与表达式.ppt》由会员分享,可在线阅读,更多相关《c语言第2讲基本数据类型与表达式.ppt(49页珍藏版)》请在三一办公上搜索。
1、第 2 讲 C语言的基本数据类型与表达式,2.1 C语言的基本数据类型 2.2 常量与变量 2.3 运算符与表达式 2.4 数据类型转换,一、数据类型概述,本讲中将对基本类型中的前三类进行介绍和学习。,2.1 C语言的基本数据类型,变量:指以标识符为名字,其值可以改变的量。,在学习各种数据类型之前,我们先简单了解一下常量和变量的概念。,常量:指在程序运行中,其数值不能被改变的量。,变量 代表计算机内存中的某一存储空间,变量的类型决定了该存储空间的长度和其中存放数据的编码方式及存储格式。变量的类型也决定了该存储空间中存放数据的数据形式和取值范围。,*八进制的数码范围为07;018*十六进制的数码
2、除了数字09外,还使用英文字母a f(或A F)表示1015。如:0 x1e,注意!,二、整型(采用定点整数的存储格式,只能表示纯整数),1、整型常量:,(1)十进制形式:与数学上的整数表示相同;例如:12,-100,0(2)八进制形式:在数码前加数字0;例如:012=1*81+2*80=10(十进制)(3)十六进制形式:在数码前加0X(数字0和字母X)。例如:0 x12=1*161+2*160=18(十进制),举例,在16位操作系统中,一般用字节表示一个int型变量,且 long型(字节)int型(字节)short型(字节)。在VC+6.0环境中,用4字节表示一个int型变量,且 long型
3、(字节)int型(4字节)short型(字节)。查看变量的字节数,即其长度,使用函数sizeof(类型名),2、整型变量的分类:,根据数据所占的存储长度的不同分为:int、short、long;同样存储长度的数据又分unsigned、signed;故可组合出六种类型。,3、整型变量的值域:,由机器中数据的存储长度决定,2、实型变量的分类及值域:关键字 字节数 取值范围 精度(位)float 4 3.410-38 3.41038 7 double 8 1.710-308 1.710308 15,注意,三、实型,1、常量:(1)十进制小数形式:由数字和小数点组成;例如:3.4,4.,.3。(2)指
4、数形式:“十进制小数”+“e(或E)”+“十进制数整数”。例如:12.5e-6 表示12.510-6。,小数点不能单独出现;0.0.e或E的两边必须有数,且其后面必须为整数;如:6E0.2 e5,字符形式 功能 n 换行 t 横向跳格 b 退格 r 回车 反斜杠字符 单引号字符 ddd 8进制数表示的ASCII码对应的字符 xhh 16进制数表示的ASCII码对应的字符,四、字符类型,1、常量:(1)用单引号括起来的一个字符;如:A、1、?等。注意(1)数值0、字符0、字符0 的区别(2)大小写对应字母的ASCII值相差32(A为65,a为97)(2)用单引号括起来的由反斜杠()引导的转义字符
5、。,4、字符串常量:是用一对双引号括起来的字符序列。注意:每个字符串的后面都有一个0结束符。如:“SHANGHAI”,“AbcdeFGHijk”,“How are you”。,注意,a与“a”的区别strlen()与sizeof()的区别,例如:字符A的ASCII码为:65D(十进制)=41H(十六进制)=101Q(八进制)字符A可以表示为A、x41、101。,2、字符型变量的分类:char 和 unsigned char;,3、值域(字符型可参与数学运算,也可看成一种一字节的整型变量)每个字符型数据在内存中占一个字节;包括ASCII字符表中的所有字符(可显示字符和非显示字符)。,举例,一、常
6、量与符号常量 常量是指在程序运行中,其数值不能被改变的量。常量又可分为直接常量和符号常量。,2.2 常量与变量,120、0120、072;0 xFFFF、0 x1e;120L,200L;长整型常量 3.14、5.12E-6;a、#、n、101;099、12f、0 xg、48EA;E-6、6.4E+4.8;changsha、+?ab;、p、ab;,1、直接常量:是在程序中直接引用的数据。,请判断这些常量正确与否:,定义形式:#define 标识符 常量数据 例如:#define PI 3.14159 在程序预处理时,凡是出现标识符PI的地方都将用数据3.14159来替换。如:2*2.3*PI 就
7、等价于 2*2.3*3.14159。,变量是指以标识符为名字,其值可以改变的量。变量代表计算机内存中的某一存储空间,该存储空间 中存放的数据就是变量的值。在同一程序块中,变量不能被重复定义。使用变量时必须“先定义,后使用”。,2、符号常量 是用标识符来表示一个数据;在程序不能给它赋值。,二、变量,2、变量初始化 在定义变量的同时给变量一个初始值。,注意,int a=5,b=3;int a=b=c=3;int a,b,c;a=b=c=3;,例如:int a,b,c;float x,y;char c1,c2;或 int c1,c2;定义变量就是在内存中划出一块相应类型的存储空间存放该变量的值。,#
8、include main()int x,y,z,w;/*定义x,y,z,w为整型变量*/unsigned int k;/*定义k为无符号整型变量*/x=10;y=-20;k=30;z=x+k;w=y+k;printf(“x+k=%d,y+k=%dn”,z,w);,例2-1:,程序运行结果为:x+k=40,y+k=10,变量根据作用域的不同可分为局部变量和全局变量,根据存储方式的不同可分为静态存储变量和动态存储变量,这些我们将在后面详细介绍。,1、以下合法的字符型常量是 A x13 B 081 C 65 D n2、已知大写字母A的ASCII码是65,小写字母a的ASCII码是97。以下不能将变量
9、c中的大写字母转换为对应小写字母的语句是 A c=(c-A)%26+a B c=c+32 C c=c-A+a D c=(A+c)%26-a3.以下选项中,合法的一组C语言数值常量是A)028 B)12.C).177 D)0 x8A.5e-3 0Xa23 4e1.5 10,000.0 xf 4.5e0 0abc 3.e54.以下关于long、int和short类型数据占用内存大小的叙述中正确的是A)均占4个字节 B)根据数据的大小来决定所占内存的字节数C)由用户自己定义D)由C语言编译系统决定5.以下选项中不属于字符常量的是A)CB)CC)xCCD)072,实验内容,实验二题目2:完成从键盘输入
10、一个10以内的数字,在屏幕上输出这个数字的3次方。题目3:从键盘上输入两个数字,在屏幕上输出这两个的加减乘除的结果。,在数学里当多个运算符一起组成一个表达式时,我们规定了优先级(先乘除后加减)和结合规则(从左至右)。同样,在C语言中,我们也规定了每个运算符的结合规则及运算符之间的优先级。,2.3 运算符与表达式,运算符:就是表示某种运算功能的符号。按操作功能运算符大致可分为:算术运算符、关系运算符、逻辑运算符、赋值运算符、条件运算符、逗号运算符以及位运算符等。,表达式:是由操作数和运算符组成的序列。如:1+2*3-4、35-7、a=b%2 等都是C语言中的表达式。,下面分类介绍各种运算符:,%
11、(取余)(注意:取余运算的操作数只能是整数,结果的符号与被除数相同),一、算术运算符和算术表达式,1、运算符+(加):3+4、+3-(减):3-5、-5*(乘):3*5/(除):5/2、5.0/2(注意,此二种形式,结果不同),5%3的值为2;-5%3的值为-2;5%(-3)的值为2;-5%(-3)的值为-2;12.3%3 若a%b 的结果为0,则有a能被b整除,2、算术表达式 用算术运算符和括符将操作数连接起来的式子。优先级:()*、/、%+、-结合性:从左至右;表达式的值:数值型(int、long、unsigned、float、double);,例如:已知:float a=2.0;int
12、b=6,c=3;求解:a*b/c-1.5+a+fabs(-5)=?,float a=2.0;int b=6,c=3;a*b/c-1.5+a+fabs(-5),12.0/3,5,4.0-1.5,2.5+97(int),99.5+5,104.5,思考 int a=1,b=2;表达式a/b+3的结果是多少?,等价于:j=i;i+;所以i的值为4,j的值为3,等价于:i+;j=i;所以i的值为4,j的值为4,(1)i=3;j=i+;(2)i=3;j=+i;,3、自增与自减运算符(+、-),+i,-i:使用之前使i的值增1(或减1);,i+,i-:使用之后使i的值增1(或减1);,分析下面几种情况中i与
13、j的值:,当+、-不与其他运算符混合使用时,+i与i+都等价于 i=i+1,-i与i-都等价于 i=i-1,如:i=2;j=-i+;求执行完这两句后i与j的值分别是多少,结合性:自右至左。,分析:“+”与”-“是同优先级,且都高于“=”按结合规则,等价于:j=-(i+);结果:i的值为3,j的值为-2。,再看几个例子:如:设i=3,k=(i+)+(i+)k=i=,设a=3,b=(+a)+(+a)b=a=,10,5,题盘练习,(1)例题:1-3。运算符/及%的应用(函数fun的功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a的十位数和个位数依次放在c数的千位和十位上
14、,b数的十位和个位数依次放在c数的百位和个位上。)(2)作业:2-3;3-3;4-3;51-3;53-3;72-3;88-3;4-2;5-2;注意:掌握两个数的输入方法!,1、6种关系运算符:=!=2、关系表达式:用关系运算符将表达式连接起来的式子 优先级:(=)(=!=)结合性:自左至右;表达式的值:若为真,则结果为1;若为假,则结果为0。,35 值为:32 值为:设x=-2;-3x-1 值为:设x=1;2x4 值为:,例如,二、关系运算符和关系表达式,求如下关系表达式的值:,0,0,0,1,算术运算符优先级高于关系运算符3+(43)*4 值为:3+43*4 值为,3,1,注意,不能用数学里
15、习惯的关系运算符连用表示区间关系!,2、逻辑表达式:用逻辑运算符将表达式连接起来的式子 优先级:!&|结合性:自左至右;表达式的值:若为真,则结果为1;若为假,则结果为0。,三、逻辑运算符和逻辑表达式,1、3种逻辑运算符:&|!,参与逻辑运算的操作数叫逻辑量。,逻辑量可以是整型、实型、字符型和指针类型,其中,0,0.0,0,NULL代表假,其余逻辑量代表真。,int a=5;float b=3.5;!a()!(a 0)()(a 0)(),例如,0,1,1,0,0,0,1,1,0,0,0,1,例如表达式运算如下:,混合优先级:!高 算术运算符 关系运算符&和|赋值运算符 低,4-0,1&2,8
16、4,1,0,1,5 3&2|8 4-!5,例如:(1)a=0;b=1;c=a+执行后:a为,b为,c为。,逻辑或优化和逻辑与优化:,在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。,1,1,0,(2)a=1;b=1;c=0;d=-a|b-|(c=b+3);执行后:a为,b为,c为,d为。,0,0,0,1,例如:(1)n是小于m的偶数:(2)year是闰年:(能被4整除但不能被100整除,或能被400整除),逻辑表达式一般用于控制语句中的条件:,n m&n%2=0,year%4=0&year%100!=0|year%400
17、=0,以下程序运行后的输出结果为:#include void main()int x=20;printf(%d,0 x20);printf(%dn,0 x 2009-9若a是数值类型,则逻辑表达式(a=1)|(a!=1)的值是()A.1 B.0 C.2 D.不知道a的值,不能确定,例如:(1)x=(y=12)/4(2)x=y=12/4(3)x=(y=12/4)(4)(x=y)=12/4,四、赋值运算符和赋值表达式,1、赋值运算符=(执行功能:把=右边的表达式的值,存入=左边的变量对应的存储空间,即给此变量赋值)3=2+1 a=a+2,2、赋值表达式:用赋值运算符将变量和表达式连接起来的式子 形
18、式:=求值规则:将“=”右边表达式的值赋给左边的变量。优先级:!算术关系&|赋值 结合性:自右至左;表达式的值:被赋值变量的值。,y值为12,x值为3,表达式的值为3,y值为3,x值为3,表达式的值为3,y值为3,x值为3,表达式的值为3,练习:设a=12,计算表达式a+=a-=a*12和a+=a-=a*=12的值,3、复合赋值运算符*=、/=、%=、+=、-=,=,&=、=、=复合运算符是一个运算符,但功能上,是两个运算符功能的组合。,例如:a+=b 相当于 a=a+b a*=b 相当于 a=a*b,注意:a*=b+c 相当于 a=a*(b+c)而不是 a=a*b+c,优先级:与=是同一优先
19、级。结合性:自右至左;表达式的值:被赋值变量的值。,-264,0,求值规则:先求解表达式1的值 若为真(非0),求解表达式2,并把表达式2的值 作为整个条件表达式的值 若为假(0),求解表达式3,并把表达式3的值作 为整个条件表达式的值,四、其它运算符,1、条件运算符?和:,它们与三个操作数组组成三元运算。形式为:?:,优先级:逻辑条件赋值,结合性:自右至左;,2、逗号运算符:,形式:表达式1,表达式2,表达式n 求值规则:从左至右依次计算各表达式的值;优先级:最低;结合性:自左至右;表达式的值:最后一个表达式的值。,又如:y=x10?x/10:x0?x:-x 当x的值为整型的15时,表达式的
20、结果为:当x的值为整型的5时,表达式的结果为:,1,5,例如:int max,a=5,b=3;max=ab?a:b 求max的值,max的值为5,例如:a b y 表达式 y=a=4,b=5,a+b y=(a=4,b=5,a+b)y=(a=4,b=5),a+b y=a=(4,b=5),a+b,4,5,4,9,4,5,9,9,4,5,9,5,5,5,5,10,形式有三种:sizeof 变量名 sizeof(变量名)sizeof(类型名)结果为整型数。,int a;float x;printf(“%d,%d”,sizeof a,sizeof x);printf(“%d,%d”,sizeof(int
21、),sizeof(float);以上两个printf语句结果均为,例如,3、求字节运算符:sizeof 作用:求得变量或某种数据类型所需的字节数。,4,4,4,4,C语言允许整型、实型、字符型数据进行混合运算。有3种转换方式:自动转换、赋值转换和强制转换。一、类型自动转换,2.4 数据类型转换,特点:由数值存储位数少的向多的转换;整型向实型转换!操作数为相同类型的不转换,仍取原类型,特别注意此时可能带来的错误!,int x=2;float y=1.6;char c=A;则:c+1/x*y=,例如,char c=68.5;printf(“%c”,c);,65(int)+0(int)*1.6(fl
22、oat),65(float),二、赋值转换 在赋值时将赋值符右边值的类型转换成与其左边变量类型一致的类型。,有下列几种情况:(1)实型 整型(字符型):去掉小数部分;,(2)整型(字符型)实型:补足有效位;,float f=23;23.00000 7位double f=A;65.0000000000000 15位,例如:int a=2,b=5;float x=4.4;则有:表达式 结果 b/a(float)b/a(float)(b/a)(int)x%a+x(int)x%(a+x),三、强制类型转换 形式:(类型名)表达式 强制类型转换时,得到所需类型的中间变量,原来变量的类型不会改变。,2,2
23、.5,2.0,4.4,2006-9,1、若变量x、y已正确定义并赋值,以下符合C语言语法的表达式是 A.+x,y=x-B x+1=y C x=x+10=x+y D double(x)/102、以下关于逻辑运算符两侧运算对象的叙述中正确的是 A 只能是整数0或1 B 只能是整数0或非0整数 C 可以是结构体类型的数据 D.可以是任意合法的表达式3、若有定义int x,y;并以正确给变量赋值,则以下选项中与表达式(x-y)?(x+):(y+)中的条件表达式(x-y)等价的是 A(x-y)0)B(x-y)0)D(x-y)=0)4、有以下程序 main()int x,y,z;x=y=1;z=x+,y+
24、,+y;printf(%d,%d,%dn,x,y,z);A 2,3,3 B 2,3,2 C.2,3,1 D 2,2,1,2006-9,5、有以下程序 main()int a=0,b=0;a=10;/*给a赋值 b=20;/*给b赋值*/printf(a+b=%dn,a+b);/*输出计算结果*/A.a+b=10 B a+b=30 C 30 D 出错6、以下选项中,值为1的表达式是 A 1-0 B.1-0 C 1-0 D 0-07、设有定义:float x=123.4567;,则执行以下语句的输出结果是()printf(%fn,(int)(x*100+0.5)/100.0);,123.46000
25、0,注意:0的ASCII值为48,依次类推,8、以下程序运行后的输出结果是()main()int m=011,n=11;printf(%d%dn,+m,n+);9、以下程序运行后的输出结果是()main()int x,a=1,b=2,c=3,d=4;x=(ax)?x:d;printf(%dn,x);,10 11,1,2007-4,1、若有代数式 以下正确表示该代数式的C语言表达式是 A sqrt(abs(nx+ex)B sqrt(fabs(pow(n,x)+pow(x,e)C.sqrt(fabs(pow(n,x)+exp(x)D sqrt(fabs(pow(x,n)+exp(x)2、设有定义:
26、int k=0;以下选项的四个表达式中与其他三个表达式的值不相同的是 A.k+B k+=1 C+k D k+13、有以下程序,其中%u表示按无符号整数输出 main()unsigned int x=0 xFFFF;printf(%un,x);程序运行后的输出结果是 A-1 B.65535 C 32767 D 0 xFFFF4、以下选项中,当x为大于1的奇数时,值为0的表达式是 A x%2=1 B x/2 C x%2!=0 D.x%2=0,注意:考虑的是表达式的值,不是变量k的值,2007-4,5、执行以下程序后的输出结果是 main()int a=10;a=(3*5,a+4);printf(a
27、=%dn,a);6、以下程序后的输出结果是#include main()printf(“%dn”,strlen(“IBMn0121”);(请注意转义字符)7、已定义char ch=$;int i=1,j;执行j=!ch2.设有条件表达式:(EXP)?i+:j-,则以下表达式中(EXP)完全等价的是A)(EXP=0)B.)(EXP!=0)C)(EXP=1)D)(EXP!=1),a=14,9,1,2007-9,3.已有定义:charc;程序前面已在命令行中包含ctype.h文件,不能用于判断c中的字符是否为大写字母的表达式是A)isupper(c)B.)A=c=ZC)A=c后,输出结果是A)A,B
28、 B)A,68 C.)65,66 D)65,685.以下正确的字符串常量是A)B)abcC)OlympicGamesD.),isupper用法:#include 功能:判断字符c是否为大写英文字母说明:当c为大写英文字母(A-Z)时,返回非零值,否则返回零。附加说明:此为宏定义,非真正函数。,2008-4,1.当变量c的值不为2,4,6时,值也为“真”的表达式是A)(c=2)|(c=4)|(c=6)B.)(c=2后b的值为【6】。3.设变量已经正确定义为整型,则表达式n=i=2,+i,i+的值为【7】。注意逗号表达式外有无括号的问题。,0,3,2010-3,1.若有定义:double a=22
29、;int i=0,k=18;则不符合C语言规定的赋值语句的是()A a=a+,i+;B i=(a+k)=(i+k);C.i=a%11;D i=!a;2.以下关于C语言数据类型使用的叙述中错误的是A若要准确无误差的表示自然数,应使用整数类型B 若要保存带有多位小数的数据,应使用双精度类型C 如要处理如“人员”信息等还能有不同类型的相关数据,应自定义结构体类型D.若只处理“真”和“假”两种逻辑值,应使用逻辑类型3.若a是数值类型,则逻辑表达式(a=1)|(a!=1)的值是A.1 B 0 C 2 D不知道a的值,不能确定4.设x为int型变量,请写出一个关系表达式,用以判断x同时为3和7的倍数时,关系表达式的值为真x%3=0&x%7=0,题库练习,四舍五入:66-3(强制类型转换)条件表达式:50-1,笔试课后作业,笔试模拟试卷:第一套题选择题 17填空题 6,7第二套题选择题 13,14,15,16填空题 6,7第三套题选择题13,14,15,16,17第四套题选择题:14,16,17,18,19填空题 6,
链接地址:https://www.31ppt.com/p-6504237.html