1、第第2章章 数据类型、运算符和表达式数据类型、运算符和表达式本章内容本章内容C语言的标识符和关键字语言的标识符和关键字 1C语言的基本数据类型语言的基本数据类型 2运算符和表达式运算符和表达式 3数据的输入输出数据的输入输出 4Company Logo学习目标学习目标掌握掌握C语言的标识符和关键字语言的标识符和关键字1掌握掌握C语言的基本数据类型语言的基本数据类型 2掌握不同数据类型的转换掌握不同数据类型的转换3掌握各种运算符的使用方法及其优先级和结合性掌握各种运算符的使用方法及其优先级和结合性 4掌握字符数据输入输出函数掌握字符数据输入输出函数getchar和和putchar的用法的用法 5
2、Company Logo2.1 C语言的标识符和关键字语言的标识符和关键字 2.1.1 标识符标识符 标识符是对变量名、函数名、标号和其他各标识符是对变量名、函数名、标号和其他各种用户定义的对象种用户定义的对象命名命名。命名规则:标识符由字母、数字、下划线组成,且第命名规则:标识符由字母、数字、下划线组成,且第1个字个字符必须是符必须是字母或下划线字母或下划线。注意:注意:标识符区分大小写标识符区分大小写 标识符的有效长度取决于具体的标识符的有效长度取决于具体的C编译系统编译系统 标识符的书写一般采用具有一定实际含义的单词,这样标识符的书写一般采用具有一定实际含义的单词,这样可提高程序的可读性
3、可提高程序的可读性 标识符不能与标识符不能与C语言的语言的关键字关键字同名,也不能与同名,也不能与自定义函自定义函数数或或C语言库函数语言库函数同名。同名。Company Logo2.1.2 关键字关键字 具有固定名字和特定含义的特殊标识符,也称具有固定名字和特定含义的特殊标识符,也称保留字,不允许程序设计者将它们另作别用。保留字,不允许程序设计者将它们另作别用。C语言的关键字有语言的关键字有32个。个。数据类型定义:数据类型定义:typedef数据类型:数据类型:char,double,enum,float,int,long,short,struct,union,unsigned,void,
4、signed,volatile,auto,extern,register,static,const运算符:运算符:sizeof语句:语句:break,case,continue,default,do,else,for,goto,if,return,switch,whileCompany Logo2.2 C语言的基本数据类型语言的基本数据类型 2.2.1 基本数据类型基本数据类型 Company Logo2.2.2 常量与变量常量与变量 1.常量常量 在程序运行过程中不能改变的量称为常量在程序运行过程中不能改变的量称为常量 直接常量:直接常量:-3、2、1.25、a 符号常量:符号常量:用一个标
5、识符代表一个常量用一个标识符代表一个常量 常量分为数值常量和符号常量常量分为数值常量和符号常量 说明说明:符号变量定义格式:符号变量定义格式:#define 标识符标识符 常量常量Company Logo【例例2.1】常量使用常量使用#define PRICE 30/*宏定义语句*/#include int main(void)int sum,num;/*定义变量sum和num为int类型*/num=5;/*使num的值为5*/sum=num*PRICE;/*计算sum的值为num与PRICE的乘积*/printf(sum=%dn,sum);/*输出sum=150*/return 0;运行结果
6、:运行结果:sum=150 程序中用程序中用#define命令行定义命令行定义PRICE代表常量代表常量30,此后凡在本文件中出现的此后凡在本文件中出现的PRICE都代表都代表30,可以和常量一样进行运算可以和常量一样进行运算如再用赋值语句给如再用赋值语句给PRICE赋值是错的赋值是错的 PRICE=40;/*错误,不能给符号常量赋值错误,不能给符号常量赋值Company Logo2.变量变量在程序运行过程中其值可改变的量叫变量在程序运行过程中其值可改变的量叫变量(1 1)变量定义的一般形式:数据类型)变量定义的一般形式:数据类型 变量名变量名 (2 2)变量的初始化:就是对变量预先设置初值。
7、)变量的初始化:就是对变量预先设置初值。注意:注意:1、变量必须先定义后使用。、变量必须先定义后使用。2、变量的值是可改变的。、变量的值是可改变的。3、每一个变量有一个确定的数据类型。、每一个变量有一个确定的数据类型。4、区分变量名和变量值。、区分变量名和变量值。Company Logo【例例2.2】变量的定义变量的定义#include int main(void)int a=5,b=6,total=0;tatal=a+b;printf(total=%dn,total);return 0;说明:说明:错把错把total写成写成tatal,程序编译,程序编译 时,会报告时,会报告tatal未定义
8、未定义 Company Logo2.2.3 整型数据整型数据 1整型常量整型常量整型常量就是整常数整型常量就是整常数,在,在C语言中有语言中有3中表示形式中表示形式(1)十进制整数:十进制整数:如如250,12等,每个数字位是等,每个数字位是09。(2)八进制整数:八进制整数:最高位为最高位为0,如十进制的,如十进制的128,用八进制表示为,用八进制表示为 0200。每个数字位是。每个数字位是07。(3)十六进制整型常量:十六进制整型常量:以以0 x或或0X开头,如十进制的开头,如十进制的128,用十,用十六进制表示为六进制表示为0 x80或或0X80,每个数字位可以是,每个数字位可以是09,
9、AF。Company Logo2.2.3 整型数据整型数据2.整型变量整型变量(1)整型变量的分类)整型变量的分类共六种共六种有符号基本整型有符号基本整型有符号短整型有符号短整型有符号长整型有符号长整型无符号基本整型无符号基本整型无符号短整型无符号短整型无符号长整型无符号长整型(signed)int(signed)short(int)(signed)long(int)unsigned intunsigned short(int)unsigned long(int)Company Logo整数类型的有关数据整数类型的有关数据类型说明符所占位数(bit)数的取值范围intshort16long32
10、1632对于整型变量的取值范围,在对于整型变量的取值范围,在C语言中由系统确定各类型数据语言中由系统确定各类型数据所占内存字节数,一般以一个机器字(所占内存字节数,一般以一个机器字(word)存放一个)存放一个int型型数据,而数据,而long int型数据的字节数应不小于型数据的字节数应不小于int型,型,short型应型应不大于不大于int型。型。Company Logo(2)整型变量的定义)整型变量的定义定义变量及初始化(在定义变量的同时给变量赋初值的方法)定义变量及初始化(在定义变量的同时给变量赋初值的方法)的一般形式为:的一般形式为:类型说明符类型说明符 变量变量1=值值1,变量,变
11、量2=值值2,;说明:说明:1.类型说明符可以是表类型说明符可以是表2-1所列的任何一种类型,类型说明符所列的任何一种类型,类型说明符与变量名之间至少要有一个空格间隔。与变量名之间至少要有一个空格间隔。2.在一个类型说明符后,可定义多个相同类型的变量,但变在一个类型说明符后,可定义多个相同类型的变量,但变量间要用逗号间隔。量间要用逗号间隔。3.最后一个变量名后必须用最后一个变量名后必须用“;”结束;结束;4.内的为可选项,即为变量的初始化。内的为可选项,即为变量的初始化。Company Logo整型变量的定义整型变量的定义 int a,b,c;/*定义定义a,b,c为整型变量为整型变量*/sh
12、ort x=8;/*定义定义x为短整型变量,且赋初值为为短整型变量,且赋初值为8*/unsigned long m=65538,n;/*定义定义m,n为无符号长整型变量,并为为无符号长整型变量,并为m赋初值为赋初值为65538*/Company Logo(3)整型数据的溢出)整型数据的溢出每一种数据类型都有其各自的有效范围,若超过该类型的范围每一种数据类型都有其各自的有效范围,若超过该类型的范围就会溢出,即显示的数据是错误的,但运行时并不报错。就会溢出,即显示的数据是错误的,但运行时并不报错。#include int main(void)int x,y;x=32767;y=x+2;printf
13、(x=%d,y=%dn,x,y);return 0;运行结果:运行结果:若用若用Turbo C2.0编译器,其结果为:编译器,其结果为:X=32767,y=-32767若用若用Visual C+6.0编译器,其结果为:编译器,其结果为:X=32767,y=32769这是由于这是由于Turbo C2.0的整型数据占的整型数据占2个字个字节节,Visual C+6.0的整型数据占的整型数据占4个字节个字节【例例2.3】整型数据的溢出整型数据的溢出Company Logo2.2.4 实型数据实型数据TEXT1.实型常量实型常量实型也叫浮点型,实型常量也叫实数或浮点数,在实型也叫浮点型,实型常量也叫实
14、数或浮点数,在C语言中,语言中,实数只用十进制表示。实数有两种表示形式。实数只用十进制表示。实数有两种表示形式。两种表两种表示形式示形式小数小数指数指数0.1233e-3注意注意:字母字母e(或或E)之前之前必须有数字,且必须有数字,且e后面的后面的 指数必须为整数:指数必须为整数:Company Logo2.实型变量实型变量(1)实型变量分类)实型变量分类实型变量分为单精度(实型变量分为单精度(float型)、双精度(型)、双精度(double型)、长双型)、长双精度(精度(long double型)三类。型)三类。位数位数数的范围数的范围有效数字有效数字float32double64lon
15、g double128Company Logo(2)实型变量的定义及初始化)实型变量的定义及初始化例如:例如:float x=123456.789;double y=123456.789;说明:说明:x为单精度型变量,被赋值为为单精度型变量,被赋值为9位,但只接收前位,但只接收前7位有位有效位,最后两位小数不起作用。效位,最后两位小数不起作用。y为双精度型变量,能接收为双精度型变量,能接收全部全部9位数字并存储起来。位数字并存储起来。演示演示Company Logo(3)实型数据的舍入误差)实型数据的舍入误差实型变量由有限的存储单元组成,能提供的有效数字有限,这实型变量由有限的存储单元组成,能
16、提供的有效数字有限,这样就存在舍入误差。样就存在舍入误差。#include int main(void)float x=4.56789e10,y;y=x+11;printf(%en,y);return 0;程序的运行结果为:程序的运行结果为:4.567890e+010 一个浮点型变量只能保证的有效数字是一个浮点型变量只能保证的有效数字是7位有效数字,后面位有效数字,后面的数字是无意义的,并不准确地表示该数。应当避免将一个很大的数字是无意义的,并不准确地表示该数。应当避免将一个很大的数和一个很小的数直接相加或相减,否则就会的数和一个很小的数直接相加或相减,否则就会“丢失丢失”小的数小的数。【例例
17、2.4】Company Logo2.2.5 字符型数据字符型数据1.字符型常量字符型常量字符型常量是由单引号括起来的一个字符,如,字符型常量是由单引号括起来的一个字符,如,A,*和和8等等都是合法的字符型常量。除此之外,在都是合法的字符型常量。除此之外,在C语言中还允许使用一些语言中还允许使用一些特殊的字符常量,即以反斜杠字符特殊的字符常量,即以反斜杠字符开头的字符序列,称为开头的字符序列,称为“转转义字符义字符”,如表,如表2.3所示。所示。字符形式字符形式功功 能能n换行换行t横向跳格(即跳到下一个输出区)横向跳格(即跳到下一个输出区)v竖向跳格竖向跳格b退格退格r回车回车f走纸换页走纸换
18、页反斜杠字符反斜杠字符单撇号字符单撇号字符双撇号字符双撇号字符a报警,相当于报警,相当于007ddd13位位8进制数所代表的字符进制数所代表的字符xhh12位位16进制数所代表的字符进制数所代表的字符演示演示Company Logov 字符常量是用单引号,而非双引号,且只包括一字符常量是用单引号,而非双引号,且只包括一个字符。个字符。v C语言允许在字符语言允许在字符后面紧跟后面紧跟13位八进制数位八进制数或在或在后面紧跟后面紧跟12位十六进制数来表示相应位十六进制数来表示相应系统中所使用的字符的编码值。系统中所使用的字符的编码值。v 由由开头的转义字符,将开头的转义字符,将后的字符转换为另后
19、的字符转换为另外的字符,不同于字符原有的意义,仅代表一个外的字符,不同于字符原有的意义,仅代表一个单个字符,而不代表多个字符,它仅代表相应系单个字符,而不代表多个字符,它仅代表相应系统中的一个编码值。统中的一个编码值。Company Logo【例例2.5】转义字符的使用转义字符的使用#include int main(void)printf(abE tbcdn);printf(efgn);return 0;程序的运行结果如下:程序的运行结果如下:AbE cdefgCompany Logo2.字符变量字符变量 字符型变量用来存放字符常量,注意只能放字符型变量用来存放字符常量,注意只能放一个字符。
20、一个字符。字符变量的定义形式如下:字符变量的定义形式如下:在本函数中可以用下面语句对在本函数中可以用下面语句对c1,c2赋值:赋值:c1=a;c2=b;一个字符变量在内存中占一个字节。一个字符变量在内存中占一个字节。字符数据既可以用字符形式输出,也可以用字符数据既可以用字符形式输出,也可以用整数形式输出。整数形式输出。Company Logo字符型与整型数据的相互赋值字符型与整型数据的相互赋值#include int main(void)int m;char c;m=A;/*字符赋值给整型变量字符赋值给整型变量*/c=65;/*整数赋值给字符变量整数赋值给字符变量*/printf(%c,%dn
21、,m,m);printf(%c,%dn,c,c);return 0;程序的运行结果如下:程序的运行结果如下:A,65A,65在在C语言中,允许对字符变量赋整型值,输出时,允许把字符变语言中,允许对字符变量赋整型值,输出时,允许把字符变量按整型量输出;也允许对整型变量赋字符值,把整型量按字符量按整型量输出;也允许对整型变量赋字符值,把整型量按字符量输出,当整型量按字符量处理时,只有低八位参与处理。量输出,当整型量按字符量处理时,只有低八位参与处理。【例例2.6】Company Logo3.字符串常量字符串常量字符串常量是字符串常量是括起来的字符序列括起来的字符序列合法的字符串常量合法的字符串常量
22、:“How do you do.”,“CHINA”,“a”,“$123.45”。Company Logoc=“a”;c=“CHINA”;a是字符常量,是字符常量,“a”是字符串常量!是字符串常量!如:如:假设被指定为字符变量假设被指定为字符变量:char cc=a;Company Logo它的长度不是它的长度不是14个,而是个,而是15个,最后一个字符为个,最后一个字符为0。但输出时。但输出时不输出,系统在遇到它后就停止输出。注意,在写字符串时不不输出,系统在遇到它后就停止输出。注意,在写字符串时不能加上能加上0。Company Logo2.2.6 数据类型的转换数据类型的转换 转换方式有两种
23、:一种是自动类型转换;另一种是强制类型转换。转换方式有两种:一种是自动类型转换;另一种是强制类型转换。1.自动类型转换自动类型转换 double float高低高低 longunsignedint char,short假设已指定假设已指定i为整型变量,为整型变量,f为为float型变量,型变量,d为为double型变量,型变量,e为为long型变量,表达式为:型变量,表达式为:10+a+i*f-d/e 则表达式的运行次序?则表达式的运行次序?注意:注意:在赋值表达在赋值表达式中,赋值号右边式中,赋值号右边的类型要先转换成的类型要先转换成赋值号左边的类型,赋值号左边的类型,结果为赋值号左边结果为
24、赋值号左边的类型。的类型。Company Logo2.强制类型转换强制类型转换 一般形式为:一般形式为:(类型名类型名)(表达式表达式)(double)a 将变量将变量a强制转换为强制转换为double类型类型(int)(x+y)将将x+y的值强制转换为的值强制转换为int类型类型(float)(5%3)将将5%3的值强制转换为的值强制转换为float类型类型(float)x/y 将将x强制转换成强制转换成float类型后,再与类型后,再与y进行除法运算进行除法运算 注意:注意:1.表达式应该用括号括起来。表达式应该用括号括起来。2.进行强制类型转换时,得到的是一个所需类型的中间变量,进行强制
25、类型转换时,得到的是一个所需类型的中间变量,原来变量的类型并未发生改变。原来变量的类型并未发生改变。Company Logo2.3 运算符和表达式运算符和表达式 1.基本算术运算符基本算术运算符+加法运算符,或正值运算符加法运算符,或正值运算符。如如2+9=11,+6 减法运算符,或负值运算符。如减法运算符,或负值运算符。如9-5=4,-5 乘法运算符。如乘法运算符。如4*8=32/除法运算符。如除法运算符。如7/2=3,两个整数相除结果为整数,两个整数相除结果为整数,舍去小数舍去小数%求模运算符,或称求余运算符,要求两侧均为整型求模运算符,或称求余运算符,要求两侧均为整型数。如数。如9%2=
26、1 Company Logo运算结合方向运算结合方向:1.自左向右自左向右,为为 2.自右向左自右向左,为为若在运算量的两侧的运算符有相同的优先级,则若在运算量的两侧的运算符有相同的优先级,则按它们的结合方向顺序处理。按它们的结合方向顺序处理。算术运算符的结合方向为算术运算符的结合方向为“自左至右自左至右”,即先左后右,即先左后右 。优先级优先级:Company Logo注意:注意:1.算术运算符为双目运算符,即运算对象为两个。算术运算符为双目运算符,即运算对象为两个。2.两整数相除,结果仍为整数。若不为整数,则采用两整数相除,结果仍为整数。若不为整数,则采用“向零靠拢取整向零靠拢取整”的方法
27、。即取整后向零靠拢。的方法。即取整后向零靠拢。7/2值为值为3,而非,而非4;7/-2的值为的值为-3,而非,而非-43.参加运算的两数中若有一个为参加运算的两数中若有一个为float或或double型,则结型,则结果为果为double型。型。4.“%”为求模运算符或求余运算符,要求参加运算的两数为求模运算符或求余运算符,要求参加运算的两数必须为整数,且结果的符号与被除数的符号相同。必须为整数,且结果的符号与被除数的符号相同。7%2=1 7%4=37%(-2)=1 7%(-4)=3-7%2=-1 -7%4=-3-7%(-2)=-1 -7%(-4)=-3Company Logo由算术运算符和圆括
28、号将运算对象连接起由算术运算符和圆括号将运算对象连接起来的有意义的式子称为算术表达式。在表来的有意义的式子称为算术表达式。在表达式中,使用左、右圆括号可以改变运算达式中,使用左、右圆括号可以改变运算的处理顺序。的处理顺序。Company Logo2.自增和自减运算符(自增和自减运算符(+、-)自增自增1自减自减1+i:先使先使i值值+1,再使用再使用i值值;i+:先使用先使用i值值,再使再使i值值+1.-i:先使先使i值值1,再使用再使用i值值;i-:先使用先使用i值值,再使再使i值值1例如:若在以下每个语句中例如:若在以下每个语句中i初值为初值为3,则,则 j=i+;j的值为的值为3,然后,
29、然后i为为4 printf(%d,i+);打印出打印出3,然后,然后i为为4 j=+i;j的值为的值为4,i也为也为4 printf(%d,+i);打印出打印出4,i也为也为4 j=-i;j的值为的值为2,i也为也为2 j=i-;j的值为的值为3,然后,然后i为为2Company Logo注意:注意:v +和和-运算符只能用于变量,而不能用于常量或表达式。运算符只能用于变量,而不能用于常量或表达式。如:如:(i+j)+或或5-是不合法的。是不合法的。v +和和-的结合方向是的结合方向是“自右至左自右至左”。如:。如:i=4,则则-i-相相当于当于-(i-)结果为结果为-4,而,而i的值为的值为
30、3。v 在较复杂的表达式中,运算符的组合原则是尽可能多地自在较复杂的表达式中,运算符的组合原则是尽可能多地自左而右将若干个字符组成一个运算符。如:左而右将若干个字符组成一个运算符。如:a+b等价等价于于(a+)+b,而不是,而不是a+(+b)。v 在只需对变量本身进行增在只需对变量本身进行增1或减或减1,而表达式的值无关紧,而表达式的值无关紧要的情况下,前缀运算和后缀运算的效果完全相同。要的情况下,前缀运算和后缀运算的效果完全相同。Company Logo程序举例程序举例【例例2.7】算术运算程序举例算术运算程序举例【例例2.8】增增1和减和减1运算符举例运算符举例 Company Logo2
31、.3.2 赋值运算符和赋值表达式赋值运算符和赋值表达式 符号符号“”为赋值运算符为赋值运算符,作用是作用是将赋值运算符右边的表达将赋值运算符右边的表达式的值赋给其左边的变量。式的值赋给其左边的变量。x=12;作用是执行一次赋值操作(运算),将作用是执行一次赋值操作(运算),将12赋给变量赋给变量x a=5+x;作用是将表达式作用是将表达式5+x的值赋给变量的值赋给变量a注意:注意:在赋值号在赋值号“=”的左边只能是变量,而不能是常量或表达式,的左边只能是变量,而不能是常量或表达式,如不能写成:如不能写成:2=x;或或 x+y=a+b;Company Logo +=-=*=/=%=&=|=例如:
32、例如:a+=5 等价于等价于a=a+5 x*=y+8 等价于等价于x=x*(y+8)a%=2 等价于等价于a=a%2 x%=y+8等价于等价于x=x%(y+8)Company Logo一般形式一般形式:例如:例如:x=5 赋值表达式赋值表达式“x=5”的值为的值为5,x的值也为的值也为5 x=7%2+(y=5)赋值表达式的值为赋值表达式的值为6,x的值也为的值也为6,y的值为的值为5 a=(b=6)或或a=b=6 赋值表达式的值为赋值表达式的值为6,a、b的值均为的值均为6a+=a*(a=5)相当于相当于a=5+5*5,赋值表达式的值为,赋值表达式的值为30,a的值最终也是的值最终也是30赋值
33、表达式加上一个分号则可构成赋值语句,即赋值表达式加上一个分号则可构成赋值语句,即:变量变量=表达式表达式;C语言规定:可以在定义变量的同时给变量赋值,也叫给变量语言规定:可以在定义变量的同时给变量赋值,也叫给变量初始化。初始化。注意:注意:赋值语句不是赋值表达式,表达式可以用在其它语句赋值语句不是赋值表达式,表达式可以用在其它语句或表达式中,而语句只能作为一个单独的语句使用。或表达式中,而语句只能作为一个单独的语句使用。Company Logo练习练习 Company Logo将两个表达式连接起来将两个表达式连接起来,又称为又称为“顺序求顺序求值运算符值运算符”。3+5,6+83+5,6+8
34、逗号可作为参数之间的分隔符使用逗号可作为参数之间的分隔符使用,如:,如:scanf(%f%f%f,&f1,&f2,&f3);scanf(%f%f%f,&f1,&f2,&f3);先求解表达式先求解表达式1,再求解表达式,再求解表达式2,最后求解表最后求解表达式达式n。整个逗号表达式的值是表达式。整个逗号表达式的值是表达式n的值。的值。例如:例如:printf(“%d”,(1+2,4+5,9+1);输出结果为10Company Logo注意:注意:v逗号运算符的优先级是所有运算符的优先级中最逗号运算符的优先级是所有运算符的优先级中最低的。低的。v并不是任何地方出现的逗号都是逗号运算符,有并不是任何
35、地方出现的逗号都是逗号运算符,有时必须加上括号以示区别。时必须加上括号以示区别。v在许多情况下,使用逗号表达式的目的仅仅是为在许多情况下,使用逗号表达式的目的仅仅是为了得到各个表达式的值,而不是一定要得到和使了得到各个表达式的值,而不是一定要得到和使用整个逗号表达式的值。用整个逗号表达式的值。Company Logo2.3.6 sizeof运算符运算符sizeof运算符有两种用法:运算符有两种用法:sizeof(表达式表达式)运算结果是得到表达式计算结果所占用的字节数。运算结果是得到表达式计算结果所占用的字节数。例如,当例如,当x是整型变量时,是整型变量时,sizeof(x)的值是的值是2。s
36、izeof(类型名类型名)运算结果是得到某种类型的量所占用的字节数。运算结果是得到某种类型的量所占用的字节数。例如,例如,sizeof(float)的值是的值是4。sizeof运算符可以出现在表达式中,如:运算符可以出现在表达式中,如:x=sizeof(float)-2;printf(%dn,sizeof(double);Company Logo2.4 数据的输入输出数据的输入输出 2.4.1 C语言的输入输出语言的输入输出 从计算机向外部输出设备从计算机向外部输出设备(显示器显示器,打印机打印机)输出输出数据。数据。从输入设备从输入设备(键盘键盘,鼠标鼠标,扫描仪扫描仪)向计算机输入向计算机
37、输入数据。数据。使用输入输出函数前,必须在程序的开头加上:使用输入输出函数前,必须在程序的开头加上:#include Company Logo2.4.2 字符数据的输入输出字符数据的输入输出 Company Logo【例例2.10】从键盘输入一个字符,并输出该字符及其后续字符。从键盘输入一个字符,并输出该字符及其后续字符。#include stdio.hint main(void)char c;c=getchar();/*从键盘读入字符从键盘读入字符*/putchar(c);/*在屏幕上输出读入的字符在屏幕上输出读入的字符*/putchar(c+1);/*在屏幕上输出读入字符的后续字符在屏幕上
38、输出读入字符的后续字符*/putchar(n);/*输出换行输出换行*/return 0;注意:注意:putchar函数不仅可以输出能在屏幕上显示的字符,函数不仅可以输出能在屏幕上显示的字符,也能输出转义字符,如也能输出转义字符,如putchar(n)输出一个换行符。输出一个换行符。Company Logo2.4.3 格式输入与输出格式输入与输出 1.printf函数函数(1)printf函数概述函数概述 注意:注意:格式控制串是双引号括起来的字符串,包括格式说明和格式控制串是双引号括起来的字符串,包括格式说明和普通字符。格式说明由普通字符。格式说明由“%”和格式字符组成,普通字符原样输和格式
39、字符组成,普通字符原样输出,格式说明在输出时由输出项表列中的数据替换。输出项表出,格式说明在输出时由输出项表列中的数据替换。输出项表列中的多个数据项用逗号分隔,每个数据项都为表达式。若格列中的多个数据项用逗号分隔,每个数据项都为表达式。若格式控制串中没有格式说明,则输出项表列可省略。式控制串中没有格式说明,则输出项表列可省略。例如例如Company Logo2.printf函数的格式说明函数的格式说明格式说明都是由格式说明都是由%开始,依次由标志字符、宽度指示符、精开始,依次由标志字符、宽度指示符、精度指示符、格式修饰符和格式字符组成,其一般格式为:度指示符、格式修饰符和格式字符组成,其一般格
40、式为:%flagswidth.prech|I|L格式字符格式字符具体格式说明见教材表具体格式说明见教材表2.5表表2.9Company Logo3.printf函数的使用函数的使用(1)有符号数和无符号数的输出)有符号数和无符号数的输出 int a=-1;printf(%d,%u,%x,%o,a,a,a,a);输出结果为:输出结果为:1,4294967295,ffffffff,37777777777(2)输出数据宽度)输出数据宽度int a=123,b=12345;printf(%d,%4d,%4d,a,a,b);输出结果:输出结果:123,123,12345Company Logo(3)浮点
41、数的输出)浮点数的输出float x=111111.111,y=222222.222;printf(%f,%10f,%10.2f,%-10.2f,%.2f,x+y,x,x,x,x);输出结果:输出结果:333333.328125,111111.109375,111111.11,111111.11,111111.11(4)字符数据的输出)字符数据的输出char c=a;printf(%c,%d,c,c);输出结果:输出结果:a,97 Company Logo(5)字符串的输出字符串的输出printf(%3s,%6.3s,%-6.3s,%.3sn,hello,hello,hello,hello);
42、输出结果:输出结果:hello,hel,hel,hel(6)浮点数规范化输出)浮点数规范化输出float x=123.456;printf(%e,%10e,%10.2e,%-10.2e,%.2en,x,x,x,x,x);输出结果:输出结果:1.234560e+002,1.234560e+002,1.23e+002,1.23e+002,1.23e+002Company Logo二二 scanf函数函数 1.scanf函数概述函数概述函数作用:从键盘上按指定的格式输入数据,并将输入数据函数作用:从键盘上按指定的格式输入数据,并将输入数据的值赋给相应的变量。的值赋给相应的变量。一般格式:一般格式:s
43、canf(“格式控制字符串格式控制字符串”,输入项表列,输入项表列)注意:注意:“格式控制字符串格式控制字符串”规定数据输入格式,包括普通字符规定数据输入格式,包括普通字符和格式说明,普通字符在输入时要原样输入,格式说明要与输和格式说明,普通字符在输入时要原样输入,格式说明要与输入项表列中的数据项依次对应。入项表列中的数据项依次对应。“输入项表列输入项表列”由一个或多个由一个或多个变量地址组成,有多个时,各变量地址之间用逗号变量地址组成,有多个时,各变量地址之间用逗号“,”分隔。分隔。Company Logoint a,b;scanf(%d%d,&a,&b);例如:例如:运行时输入:运行时输入
44、:23 下面的输入均为合法下面的输入均为合法 数据之间用一个或多个空格,也可用回车键或跳格键(数据之间用一个或多个空格,也可用回车键或跳格键(Tab键)分隔键)分隔(1)23(2)2 3(3)2(按(按Tab键)键)3 以下的输入为不合法:以下的输入为不合法:2,3 注意:注意:在在scanf函数的格式控制串函数的格式控制串中用指定的字符作为输入数据间的中用指定的字符作为输入数据间的分隔,则在实际输入数据时必须在分隔,则在实际输入数据时必须在数据间原样输入指定的分隔字符,数据间原样输入指定的分隔字符,否则会出错。否则会出错。Company Logo2.scanf函数的格式说明函数的格式说明 s
45、canf函数的格式说明以函数的格式说明以%开始,以格式字符结束,中间可插开始,以格式字符结束,中间可插入附加字符,其一般格式为:入附加字符,其一般格式为:%*widthh|l格式字符格式字符“*”表示本输入项在输入后不赋给任何变量表示本输入项在输入后不赋给任何变量“width”表示输入为正整数时,指定其输入数据所占宽度表示输入为正整数时,指定其输入数据所占宽度“h|l”表示修饰其后的格式字符。表示修饰其后的格式字符。具体格式说明见教材表具体格式说明见教材表2.10和表和表2.11Company Logo3.scanf函数的使用说明函数的使用说明(1)输入有符号十进制数可以用格式字符)输入有符号
46、十进制数可以用格式字符d,对,对unsigned型变量所需要的数据,可以用格式字符型变量所需要的数据,可以用格式字符u、d、o或或x。(2)可以指定输入数据所占的列数,系统自动按它截取所需可以指定输入数据所占的列数,系统自动按它截取所需的数据。例如的数据。例如;scanf(%3d%d,&a,&b);运行时若输入数据:运行时若输入数据:12345 系统自动将系统自动将123赋给变量赋给变量a,将剩下的,将剩下的45赋给变量赋给变量b。(3)输入有符号八进制、十进制、十六进制整数可用格式字符)输入有符号八进制、十进制、十六进制整数可用格式字符i。例如:。例如:scanf(“%i”,&a);输入数据
47、按哪种进制转换取决于运行时的输入。输入数据按哪种进制转换取决于运行时的输入。Company Logo(4)输入)输入float型的数据时,可用格式字符型的数据时,可用格式字符f或或e;对于;对于double型型数据则要用格式字符数据则要用格式字符lf或或le。例如。例如;float x;double y;scanf(%f,&x);scanf(%lf,&y);(5)输入实数时,可以规定输入宽度,但不能规定精度。例)输入实数时,可以规定输入宽度,但不能规定精度。例如:如:float x;scanf(%5f,&x);若输入为若输入为12.3456,系统自动截取前,系统自动截取前5个字符,即个字符,即
48、12.34赋给变赋给变量量x。以下语句是不合法的:以下语句是不合法的:scanf(%5.2f,&x);Company Logo(6)输入字符时,用格式字符)输入字符时,用格式字符c,而且在输入字符时,空格,而且在输入字符时,空格字符和字符和“转义字符转义字符”都作为有效字符输入。例如:都作为有效字符输入。例如:scanf(%c%c%c,&c1,&c2,&c3);运行时输入为:运行时输入为:abc(7)附加说明符)附加说明符“*”表示跳过它指定的列数。例如:表示跳过它指定的列数。例如:scanf(%d%*d%d,&a,&b);运行时输入为:运行时输入为:123456(8)在输入数据时,遇以下情况
49、时表示数据输入结束。)在输入数据时,遇以下情况时表示数据输入结束。遇空格、回车、跳格(遇空格、回车、跳格(Tab)时;)时;按指定的宽度结束;按指定的宽度结束;遇非法输入;遇非法输入;遇文件结束符遇文件结束符EOF。Company Logo2.3.5 条件运算符条件运算符 格式:格式:表达式表达式1?表达式表达式2:表达式表达式3 C语言中唯一的三目运算符语言中唯一的三目运算符 常常用条件表达式构成一个赋值语句。如:常常用条件表达式构成一个赋值语句。如:x=表达式表达式1?表达式表达式2:表达式表达式3;功能:判断功能:判断表达式表达式1的值,如果成立就将的值,如果成立就将表达式表达式2的的值赋给变量值赋给变量x x,否则就将,否则就将表达式表达式3的值赋给变量的值赋给变量x xCompany Logo【例例2.9】输入两个整数,并将其中的较大者显示出来。输入两个整数,并将其中的较大者显示出来。#include int main(void)int a,b,max;scanf(%d,%d,&a,&b);max=(ab)?a:b;printf(MAX=%dn,max);return 0;条件运算符也可以嵌套使用。如:条件运算符也可以嵌套使用。如:grade=(score=90)?A:(score=70)?C:B;Company Logo