【文档说明】C语言__数据类型、运算符与表达式课件.ppt,共(60)页,815.501 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-44470.html
以下为本文档部分文字说明:
第2章数据类型、运算符和表达式CompanyLogo本章内容C语言的标识符和关键字1C语言的基本数据类型2运算符和表达式3数据的输入输出4CompanyLogo学习目标掌握C语言的标识符和关键字1掌握C语言的基本数据类型2掌握不同数据类型的转换3
掌握各种运算符的使用方法及其优先级和结合性4掌握字符数据输入输出函数getchar和putchar的用法5CompanyLogo2.1C语言的标识符和关键字2.1.1标识符标识符是对变量名、函数名、标号和其他各种用户定义的对象命名。命名规则:标识符由字母、数字、下划线组成,且
第1个字符必须是字母或下划线。注意:标识符区分大小写标识符的有效长度取决于具体的C编译系统标识符的书写一般采用具有一定实际含义的单词,这样可提高程序的可读性标识符不能与C语言的关键字同名,也不能与自定义函数或C语言库函数同名。CompanyLogo2.1.2关键字具有固定名字
和特定含义的特殊标识符,也称保留字,不允许程序设计者将它们另作别用。C语言的关键字有32个。数据类型定义:typedef数据类型:char,double,enum,float,int,long,short,struct,union,unsigned,v
oid,signed,volatile,auto,extern,register,static,const运算符:sizeof语句:break,case,continue,default,do,else,for,goto,if,return,switch,whileCompany
Logo2.2C语言的基本数据类型2.2.1基本数据类型数据类型构造类型指针类型空类型(无值类型)void数组结构体struct共用体union基本类型整型int字符型char实型(浮点型)单精度实型float双精度实型doubleCompanyLogo2.2.2常量与变量1.常量在程
序运行过程中不能改变的量称为常量直接常量:-3、2、1.25、’a‟符号常量:用一个标识符代表一个常量常量分为数值常量和符号常量说明:符号变量定义格式:#define标识符常量CompanyLogo【例2.1】常
量使用#definePRICE30/*宏定义语句*/#include<stdio.h>intmain(void){intsum,num;/*定义变量sum和num为int类型*/num=5;/*使num的值为5*
/sum=num*PRICE;/*计算sum的值为num与PRICE的乘积*/printf("sum=%d\n",sum);/*输出sum=150*/return0;}运行结果:sum=150说明:程序中用#define命令行定义PRICE代表常量30,此后
凡在本文件中出现的PRICE都代表30,可以和常量一样进行运算说明:如再用赋值语句给PRICE赋值是错的PRICE=40;/*错误,不能给符号常量赋值CompanyLogo2.变量在程序运行过程中其值可改变的量叫变量(1)变量定义的一般形式:
数据类型变量名(2)变量的初始化:就是对变量预先设置初值。注意:1、变量必须先定义后使用。2、变量的值是可改变的。3、每一个变量有一个确定的数据类型。4、区分变量名和变量值。CompanyLogo【例2.2】变量的定义#include<stdio.h>intmain(void){inta=5,
b=6,total=0;tatal=a+b;printf("total=%d\n",total);return0;}说明:错把total写成tatal,程序编译时,会报告tatal未定义CompanyLogo2.2.3整型数据1.整型常量整型常量就是整常数,在C语言中有3中表示形式(1
)十进制整数:如250,-12等,每个数字位是0~9。(2)八进制整数:最高位为0,如十进制的128,用八进制表示为0200。每个数字位是0~7。(3)十六进制整型常量:以0x或0X开头,如十进制的128,用十六进制表
示为0x80或0X80,每个数字位可以是0~9,A~F。CompanyLogo2.2.3整型数据2.整型变量(1)整型变量的分类共六种有符号基本整型有符号短整型有符号长整型无符号基本整型无符号短整型无符号长整型(signed)int(signed)short(int)(signed
)long(int)unsignedintunsignedshort(int)unsignedlong(int)注意:括号表示其中的内容是可选的。CompanyLogo整数类型的有关数据类型说明符所占位数(bit)数的取值范围
int16-32768~32767short16-215~215-1long32-231~231-1unsigned160~65535unsignedshort160~65535unsignedlong320~(232-1)对于整型变量的取值范围,在C语言中由系统确定各类型
数据所占内存字节数,一般以一个机器字(word)存放一个int型数据,而longint型数据的字节数应不小于int型,short型应不大于int型。CompanyLogo(2)整型变量的定义定义变量及初始化(在定义变量
的同时给变量赋初值的方法)的一般形式为:类型说明符变量1[=值1],变量2[=值2],……;说明:1.类型说明符可以是表2-1所列的任何一种类型,类型说明符与变量名之间至少要有一个空格间隔。2.在一个类型说明符后,可定义多个相同类型的变量,但变量间要用逗号间隔。3.最后一个变量名后必须用
“;”结束;4.[]内的为可选项,即为变量的初始化。CompanyLogo整型变量的定义inta,b,c;/*定义a,b,c为整型变量*/shortx=8;/*定义x为短整型变量,且赋初值为8*/unsi
gnedlongm=65538,n;/*定义m,n为无符号长整型变量,并为m赋初值为65538*/CompanyLogo(3)整型数据的溢出每一种数据类型都有其各自的有效范围,若超过该类型的范围就会溢出,即显示的数据是错误的,但运行时并不报错。#include<
stdio.h>intmain(void){intx,y;x=32767;y=x+2;printf("x=%d,y=%d\n",x,y);return0;}运行结果:若用TurboC2.0编译器,其结果为:X=32767,y=-3276
7若用VisualC++6.0编译器,其结果为:X=32767,y=32769这是由于TurboC2.0的整型数据占2个字节,VisualC++6.0的整型数据占4个字节【例2.3】整型数据的溢出Company
Logo2.2.4实型数据TEXT1.实型常量实型也叫浮点型,实型常量也叫实数或浮点数,在C语言中,实数只用十进制表示。实数有两种表示形式。两种表示形式小数指数0.1233e-3注意:字母e(或E)之前必须有数字,且e后面的指数必须为整数:e3、2.1e3.5、.e3、e1e3、1.8e-3
、-123e-6、-.1e-3CompanyLogo2.实型变量(1)实型变量分类实型变量分为单精度(float型)、双精度(double型)、长双精度(longdouble型)三类。类型位数数的范围有效数字float3210-37~10386~7
位double6410-307~1030815~16位longdouble12810-4931~10493218~19位CompanyLogo(2)实型变量的定义及初始化例如:floatx=123456.789;doubley=123456.789;说明:x为单精度型变量,被赋值为9位
,但只接收前7位有效位,最后两位小数不起作用。y为双精度型变量,能接收全部9位数字并存储起来。演示CompanyLogo(3)实型数据的舍入误差实型变量由有限的存储单元组成,能提供的有效数字有限,这样就存在舍入误差。#include<stdio
.h>intmain(void){floatx=4.56789e10,y;y=x+11;printf("%e\n",y);return0;}程序的运行结果为:4.567890e+010说明:一个浮点型变量只能保证的有效数字是7位有效数字,后面的数字是无意义的,并不准确地表示该数。应当避免将一个
很大的数和一个很小的数直接相加或相减,否则就会“丢失”小的数。【例2.4】CompanyLogo2.2.5字符型数据1.字符型常量字符型常量是由单引号括起来的一个字符,如,'A','*'和'8'等都是合法
的字符型常量。除此之外,在C语言中还允许使用一些特殊的字符常量,即以反斜杠字符'\'开头的字符序列,称为“转义字符”,如表2.3所示。字符形式功能\n换行\t横向跳格(即跳到下一个输出区)\v竖向跳格\b退
格\r回车\f走纸换页\\反斜杠字符'\'\'单撇号字符\"双撇号字符\a报警,相当于’\007‟\ddd1~3位8进制数所代表的字符\xhh1~2位16进制数所代表的字符演示CompanyLogo字符常量是用单引号,而
非双引号,且只包括一个字符。C语言允许在字符'\'后面紧跟1~3位八进制数或在'\'后面紧跟1~2位十六进制数来表示相应系统中所使用的字符的编码值。由'\'开头的转义字符,将'\'后的字符转换为另外的字符,不同于字符原有的意义,仅代表一个单个字符,而不代表多个字符,它仅代表
相应系统中的一个编码值。CompanyLogo【例2.5】转义字符的使用#include<stdio.h>intmain(void){printf("ab\'E\'\t\bcd\n");printf("efg\n");return0;}程序的运行结果如下:
Ab‟E‟cdefgCompanyLogo2.字符变量字符型变量用来存放字符常量,注意只能放一个字符。字符变量的定义形式如下:charc1,c2;在本函数中可以用下面语句对c1,c2赋值:c1=„a‟;c2=„b‟
;一个字符变量在内存中占一个字节。字符数据既可以用字符形式输出,也可以用整数形式输出。CompanyLogo字符型与整型数据的相互赋值#include<stdio.h>intmain(void){intm;charc;m=
'A';/*字符赋值给整型变量*/c=65;/*整数赋值给字符变量*/printf("%c,%d\n",m,m);printf("%c,%d\n",c,c);return0;}程序的运行结果如下:A,65A,65在C语言中,允许对字符变量赋整型值,输出时,允许把字符变量按整型
量输出;也允许对整型变量赋字符值,把整型量按字符量输出,当整型量按字符量处理时,只有低八位参与处理。【例2.6】CompanyLogo3.字符串常量字符串常量是一对双撇号括起来的字符序列合法的字符串常量:“Howdo
youdo.”,“CHINA”,“a”,“$123.45”C规定:在每一个字符串常量的结尾加一个“字符串结束标志”,以便系统据此判断字符串是否结束。C规定以字符„\0‟作为字符串结束标志。CompanyLogoc=“a”;c=“CHINA”;结论:不能把一个字符串常量赋给一个字符变量。特
别注意:„a‟是字符常量,“a”是字符串常量!如:假设C被指定为字符变量:charcc=’a’;CompanyLogo如:有一个字符串常量“Iamastudent”,实际上在内存中是:它的长度不是14个,而是15个,最后一个字符为'\0'。但输出时不输出,系统在遇到它后就停止输出。注意,在写字符串
时不能加上'\0'。CompanyLogo2.2.6数据类型的转换转换方式有两种:一种是自动类型转换;另一种是强制类型转换。1.自动类型转换doublefloat高低转换方法:longunsignedintchar,sh
ort假设已指定i为整型变量,f为float型变量,d为double型变量,e为long型变量,表达式为:10+'a'+i*f-d/e则表达式的运行次序?注意:在赋值表达式中,赋值号右边的类型要先转换成赋值号左边的类型,结果为
赋值号左边的类型。CompanyLogo2.强制类型转换一般形式为:(类型名)(表达式)(double)a将变量a强制转换为double类型(int)(x+y)将x+y的值强制转换为int类型(float)(5%3)将5
%3的值强制转换为float类型(float)x/y将x强制转换成float类型后,再与y进行除法运算注意:1.表达式应该用括号括起来。2.进行强制类型转换时,得到的是一个所需类型的中间变量,原来变量的类型并未发生改变。CompanyLogo2.3运算符和表达
式2.3.1算术运算符和算术表达式1.基本算术运算符+加法运算符,或正值运算符。如2+9=11,+6–减法运算符,或负值运算符。如9-5=4,-5乘法运算符。如4*8=32/除法运算符。如7/2=3,两个整数相除结果为整数,舍去小数%求
模运算符,或称求余运算符,要求两侧均为整型数。如9%2=1CompanyLogo运算结合方向:1.自左向右,为左结合性2.自右向左,为右结合性若在运算量的两侧的运算符有相同的优先级,则按它们的结合方向顺序处理。算
术运算符的结合方向为“自左至右”,即先左后右。优先级:(),,/,%,+,–CompanyLogo注意:1.算术运算符为双目运算符,即运算对象为两个。2.两整数相除,结果仍为整数。若不为整数,则采用“向零靠拢取整”的方法。即取整后向零靠拢。7/2值为3,而非4;7/-2的值为
-3,而非-43.参加运算的两数中若有一个为float或double型,则结果为double型。4.“%”为求模运算符或求余运算符,要求参加运算的两数必须为整数,且结果的符号与被除数的符号相同。7%2=17%4=37%(-2)=17%(-4)=3-7%2=-1-7%4=-3-7%(-2)=-1-
7%(-4)=-3CompanyLogo由算术运算符和圆括号将运算对象连接起来的有意义的式子称为算术表达式。在表达式中,使用左、右圆括号可以改变运算的处理顺序。CompanyLogo2.自增和自减运算符(++、--)++自增1––自减1++i
:先使i值+1,再使用i值;i++:先使用i值,再使i值+1.--i:先使i值–1,再使用i值;i--:先使用i值,再使i值–1例如:若在以下每个语句中i初值为3,则j=i++;j的值为3,然后i为4printf("%d",i++);打印出3,然后
i为4j=++i;j的值为4,i也为4printf("%d",++i);打印出4,i也为4j=--i;j的值为2,i也为2j=i--;j的值为3,然后i为2CompanyLogo注意:++和--运算符只能用于变量,而不能用于常量或表达式。
如:(i+j)++或5--是不合法的。++和--的结合方向是“自右至左”。如:i=4,则-i--相当于-(i--)结果为-4,而i的值为3。在较复杂的表达式中,运算符的组合原则是尽可能多地自左而右将若干
个字符组成一个运算符。如:a+++b等价于(a++)+b,而不是a+(++b)。在只需对变量本身进行增1或减1,而表达式的值无关紧要的情况下,前缀运算和后缀运算的效果完全相同。CompanyLogo程序举例【例2.7】算术运算程序举例
【例2.8】增1和减1运算符举例CompanyLogo2.3.2赋值运算符和赋值表达式1.赋值运算符符号“=”为赋值运算符,作用是将赋值运算符右边的表达式的值赋给其左边的变量。x=12;作用是执行一次赋值操作(运算),将12赋给变量xa=5+
x;作用是将表达式5+x的值赋给变量a注意:在赋值号“=”的左边只能是变量,而不能是常量或表达式,如不能写成:2=x;或x+y=a+b;CompanyLogo2.复合赋值运算符:在"="号之前加一个其它运算符+=-=*=/=%=<<=>>=&=|=^=例如
:a+=5等价于a=a+5x*=y+8等价于x=x*(y+8)a%=2等价于a=a%2x%=y+8等价于x=x%(y+8)CompanyLogo3.赋值表达式一般形式:<变量><=><表达式>例如:x=5赋值表达式“x=5”的值为5,x的值也为5x=7%2+(y=
5)赋值表达式的值为6,x的值也为6,y的值为5a=(b=6)或a=b=6赋值表达式的值为6,a、b的值均为6a+=a*(a=5)相当于a=5+5*5,赋值表达式的值为30,a的值最终也是30赋值表达式加上一个分号则可构成赋值语句,即:变量=表
达式;C语言规定:可以在定义变量的同时给变量赋值,也叫给变量初始化。注意:赋值语句不是赋值表达式,表达式可以用在其它语句或表达式中,而语句只能作为一个单独的语句使用。CompanyLogo练习CompanyLogo2.3.4逗号运算符和逗号表达式逗号运算符:将两个表达式连接起来,又
称为“顺序求值运算符”。如:3+5,6+8逗号可作为参数之间的分隔符使用,如:scanf("%f%f%f",&f1,&f2,&f3);一般形式:表达式1,表达式2,…,表达式n求解过程:先求解表达式1,再求解表达式2,…,最后求解表达式n。整个逗号表达式
的值是表达式n的值。例如:printf(“%d”,(1+2,4+5,9+1));输出结果为10CompanyLogo注意:逗号运算符的优先级是所有运算符的优先级中最低的。并不是任何地方出现的逗号都是逗号运算符,有时必须加上括号以示区别。
在许多情况下,使用逗号表达式的目的仅仅是为了得到各个表达式的值,而不是一定要得到和使用整个逗号表达式的值。CompanyLogo2.3.6sizeof运算符sizeof运算符有两种用法:sizeof(表达式)运算结果是得到表达
式计算结果所占用的字节数。例如,当x是整型变量时,sizeof(x)的值是2。sizeof(类型名)运算结果是得到某种类型的量所占用的字节数。例如,sizeof(float)的值是4。sizeof运算符可以出现在表达式中,如:x=sizeof(float
)-2;printf("%d\n",sizeof(double));CompanyLogo2.4数据的输入输出2.4.1C语言的输入输出所谓输入输出是以计算机主机为主体而言的输出:从计算机向外部输出设备(显示器,打印机)输出数据。输入
:从输入设备(键盘,鼠标,扫描仪)向计算机输入数据。C语言本身不提供输入输出语句,输入和输出操作是由C函数库中的stdio.h中的函数实现的。使用输入输出函数前,必须在程序的开头加上:#include<st
dio.h>CompanyLogo2.4.2字符数据的输入输出2.字符输出函数字符型变量整型变量一般形式:putchar(c)函数作用:向终端(显示器或打印机)输出一个字符,函数调用成功,返回输入的字符,否则返回EOF(-1)1.字符输入函数一般形
式:getchar()函数作用:从终端(或系统隐含指定的输入设备)输入一个字符,若函数调用成功,返回输入的字符,否则返回EOF(-1)。CompanyLogo【例2.10】从键盘输入一个字符,并输出该字符及其
后续字符。#include"stdio.h"intmain(void){charc;c=getchar();/*从键盘读入字符*/putchar(c);/*在屏幕上输出读入的字符*/putchar(c+1);/*在屏幕上输出读入字符的后续字符*/putcha
r('\n');/*输出换行*/return0;}注意:putchar函数不仅可以输出能在屏幕上显示的字符,也能输出转义字符,如putchar('\n')输出一个换行符。CompanyLogo2.4.3格式输入与输出1.printf函数(1)printf函数
概述一般格式:printf(格式控制串,输出项表列)函数作用:向终端(或系统隐含指定的输出设备)输出若干个任意类型的数据。注意:格式控制串是双引号括起来的字符串,包括格式说明和普通字符。格式说明由“%”和格式字符组成,普通字符原样输出,格式说明在输出时由输出项表
列中的数据替换。输出项表列中的多个数据项用逗号分隔,每个数据项都为表达式。若格式控制串中没有格式说明,则输出项表列可省略。例如CompanyLogo2.printf函数的格式说明格式说明都是由%开始,依次由标志字符、宽度指示符、精度指
示符、格式修饰符和格式字符组成,其一般格式为:%[flags][width][.prec][h|I|L]格式字符具体格式说明见教材表2.5~表2.9CompanyLogo3.printf函数的使用(1)有符号数和无符号数的输出inta=-1;printf("%d,%u,%x,%o",a,a,a,
a);输出结果为:1,4294967295,ffffffff,37777777777(2)输出数据宽度inta=123,b=12345;printf("%d,%4d,%4d",a,a,b);输出结果:
123,□123,12345CompanyLogo(3)浮点数的输出floatx=111111.111,y=222222.222;printf("%f,%10f,%10.2f,%-10.2f,%.2f",x+y,x,x,x,x);输出结果:333333.328125,111
111.109375,□111111.11,111111.11□,111111.11(4)字符数据的输出charc='a';printf("%c,%d",c,c);输出结果:a,97CompanyLogo(5)字符串的输出printf("%3s,%6.3s,%-6.3s,%.3s\n"
,"hello","hello","hello","hello");输出结果:hello,□□□hel,hel□□□,hel(6)浮点数规范化输出floatx=123.456;printf("%e,%10e,%10.2e,%-10.2e,%.2e\n"
,x,x,x,x,x);输出结果:1.234560e+002,1.234560e+002,□1.23e+002,1.23e+002□,1.23e+002CompanyLogo二scanf函数1.scanf函数概述函数作用:从键盘上按指定的格式输入数据,并将输入数据的
值赋给相应的变量。一般格式:scanf(“格式控制字符串”,输入项表列)注意:“格式控制字符串”规定数据输入格式,包括普通字符和格式说明,普通字符在输入时要原样输入,格式说明要与输入项表列中的数据项依次对应。“输
入项表列”由一个或多个变量地址组成,有多个时,各变量地址之间用逗号“,”分隔。CompanyLogointa,b;scanf("%d%d",&a,&b);例如:运行时输入:2□3↙下面的输入均为合法数据之
间用一个或多个空格,也可用回车键或跳格键(Tab键)分隔(1)2□□□□3↙(2)2↙3↙(3)2(按Tab键)3↙以下的输入为不合法:2,3注意:在scanf函数的格式控制串中用指定的字符作为输入数据间的分隔,则在实际输入数据时必须在数据间原样输入指
定的分隔字符,否则会出错。CompanyLogo2.scanf函数的格式说明scanf函数的格式说明以%开始,以格式字符结束,中间可插入附加字符,其一般格式为:%[*][width][h|l]格式字符“*”表示本输入项在输
入后不赋给任何变量“width”表示输入为正整数时,指定其输入数据所占宽度“h|l”表示修饰其后的格式字符。具体格式说明见教材表2.10和表2.11CompanyLogo3.scanf函数的使用说明(1)输入有
符号十进制数可以用格式字符d,对unsigned型变量所需要的数据,可以用格式字符u、d、o或x。(2)可以指定输入数据所占的列数,系统自动按它截取所需的数据。例如;scanf("%3d%d",&a,&b);运行时若输入数据:12345↙系统自动将123赋给变量a
,将剩下的45赋给变量b。(3)输入有符号八进制、十进制、十六进制整数可用格式字符i。例如:scanf(“%i”,&a);输入数据按哪种进制转换取决于运行时的输入。CompanyLogo(4)输入float型的数据时,可用格式字符f或e;对于double型数据则要用格式字符lf或le。例如;flo
atx;doubley;scanf("%f",&x);scanf("%lf",&y);(5)输入实数时,可以规定输入宽度,但不能规定精度。例如:floatx;scanf("%5f",&x);若输入为12.3456,系统自动截取前5个字符,即12.34赋给变量x。以下语句是不
合法的:scanf("%5.2f",&x);CompanyLogo(6)输入字符时,用格式字符c,而且在输入字符时,空格字符和“转义字符”都作为有效字符输入。例如:scanf("%c%c%c",&c1,&c2,&c3);运行时输入为:a
□b□c↙(7)附加说明符“*”表示跳过它指定的列数。例如:scanf("%d%*d%d",&a,&b);运行时输入为:12□34□56↙(8)在输入数据时,遇以下情况时表示数据输入结束。①遇空格、回车、跳格(Tab)时;②按指定的
宽度结束;③遇非法输入;④遇文件结束符EOF。CompanyLogo2.3.5条件运算符格式:表达式1?表达式2:表达式3C语言中唯一的三目运算符常常用条件表达式构成一个赋值语句。如:x=表达式1?表达式2:表达式3;功能:判断表达式1的值,如
果成立就将表达式2的值赋给变量x,否则就将表达式3的值赋给变量xCompanyLogo【例2.9】输入两个整数,并将其中的较大者显示出来。#include<stdio.h>intmain(void){inta,b,max;scanf
("%d,%d",&a,&b);max=(a>b)?a:b;printf("MAX=%d\n",max);return0;}条件运算符也可以嵌套使用。如:grade=(score>=90)?'A':(score<=70)?'C':'B';