(16)--第03章 顺序结构程序设计(1).ppt
第3章 顺序结构程序设计本章内容3.1 体重指数计算器3.2 常量与变量3.3 运算符和表达式3.4 基本数据输入输出3.5 顺序结构程序设计举例本章学习目标 掌握基本数据类型常量与变量的使用方法 理解基本数据类型的数据的内存映像 掌握运算符的操作含义和表达式计算规则 理解基本运算符的优先级和结合性 了解基本数据类型数据的输入与输出 具有运用顺序结构设计程序的能力学习导引顺序结构是程序设计中最为基本的结构顺序结构程序由多条语句顺序组成在执行过程中,严格按照从上到下的顺序执行整个程序都是顺序执行的,甚至多个程序也是顺序执行的通过基本数据类型及表达式,结合案例,理解顺序结构3.1 体重指数计算器体重指数(Body Mass Index,BMI)是用人们的体重(单位公斤)除以身高(单位米)的平方的值,它是WHO推荐的肥胖分类标准,用于衡量人体胖瘦程度以及是否健康BMI 分类WHO 标准亚洲标准中国参考标准相关疾病发病的危险性体重过低18.518.518.5低(但其它疾病危险性增加)正常范围18.524.918.522.918.523.9平均水平超重 252324增加肥胖前期 25.029.92324.92426.9增加I度肥胖 30.034.92529.92729.9中度增加II度肥胖35.039.930.039.930.039.9严重增加度肥胖 40.040.040.0非常严重增加3.1 体重指数计算器程序#includeintmain()floathight,weight,bmi;/*定义3个变量*/printf(请输入您的身高(厘米):);/*显示提示信息*/scanf(%f,&hight);/*输入身高*/printf(请输入您的体重(公斤):);/*显示提示信息*/scanf(%f,&weight);/*输入体重*/bmi=weight/(hight/100*hight/100);/*利用公式计算出bmi*/printf(您的体重指数是:%.2fn,bmi);/*输出bmi的值*/return0;请输入您的身高(厘米):182请输入您的体重(公斤):84您的体重指数是:25.363.1 体重指数计算器在C程序中所有变量必须先声明(定义)后使用,声明通常放在函数起始处声明用于说明变量名称、属性,有时给予初始化本程序获取从键盘输入的身高和体重,通过表达式计算出bmi的值,再输出体重指数值bmi。本程序main()函数的语句从上到下顺序执行,称为顺序控制结构程序顺序结构是程序设计的基础,只有掌握了顺序结构程序设计,才能编写出优秀的程序相比计算器和Excel计算BMI值,本程序具有良好的交互界面开发优秀的程序更加方便人们的工作和生活,这是程序设计的魅力所在3.2 常量与变量常量就是在程序运行过程中不能改变的量在程序运行时是可以改变的量为变量,在定义时,须指定变量的数据类型3.2 常量与变量变量的声明就是变量的定义,其基本格式为:数据类型 变量名1,变量名2,变量名n;可同时定义多个同类型变量,表示可选项,多个变量名之间用逗号分隔开,并以分号表示定义结束变量名的先后没有顺序,对于程序员没有影响。在编译时,在一个连续存储内存空间内为变量分配存储单元,这些变量的地址与顺序有关系3.2 常量与变量一个单精度浮点数类型的变量的定义:float bmi=25.36;在定义变量时,指定了变量的名称和数据类型;数据类型指明了编译时分配给该变量的内存单元大小、数据在内存单元的存储形式以及运算的规则,从而可以确定该变量的取值范围;实际上变量名就是该内存单元的符号地址。初始化bmi的值为25.36,名称、存储单元和值的三位一体:3.2 常量与变量3.2.1 整型常量与整型变量3.2.2 实型常量与实型变量3.2.3 字符常量与字符变量3.2.1 整型常量与整型变量1.整型常量在计算机中的数据都以二进制形式存储。在书写C源程序时,为了便于整型数据的表示和使用,整型常量有十进制、八进制和十六进制等三种十进制整数由数字09组成的序列,数值之前可以加正号(+)或负号(-),正号常常缺省,如8848、-10924、+2021等等常见的不合法的十进制整常数:074(不能有前导0)、26H(不能含有字母H)、11O(不能含有字符O)9876543210123456789(数值太大了,超出了表达范围)3.2.1 整型常量与整型变量1.整型常量八进制整数由数字0开头(即以0作为八进制数的前缀),后跟数字07。前缀0之前可以加正号(+)或负号(-),但八进制数通常是无符号数,如下:016(十进制为14)010101(十进制为4161)-0256(十进制-174)0177777(十进制为65535)常见的不合法的八进制整常数:61(无前缀0)、03E4(不能含有字母E)、059(不能包含了非八进制数码9)3.2.1 整型常量与整型变量1.整型常量十六进制整数前缀为0X或0 x,后跟数字09、字母AF或af。前缀0X或0 x之前可以加正号(+)或负号(-),但十六进制数通常是无符号数,如下:0Xbee(十进制为3054)-0 xFFF(十进制为-4095)0 xFF(十进制为255)常见的不合法的八进制整常数:E0F(无前缀0X或0 x)、78H(无前缀0X或0 x,且有非法字符H)3.2.1 整型常量与整型变量2整数在内存中存放形式 无论常量为十进制、八进制、或十六进制,在计算机系统中,有符号整数的数值在内存中都是以二进制补码形式存放的。在Visual C+6.0中,为整数分配两个字节(16位)或者四个字节(32位)的内存单元,在新C标准里可以分配8个字节的内存单元,表示更大范围的整数3.2.1 整型常量与整型变量2整数在内存中存放形式如果分配两个字节,(+168)十进制=(0000000010101000)二进制补码,这16位中,最高位0是符号位(第15位),表示正数3.2.1 整型常量与整型变量2整数在内存中存放形式分配两个字节内存,(+168)十进制=(0000000010101000)二进制补码3.2.1 整型常量与整型变量2整数在内存中存放形式如果分配4个字节,(+168)十进制=(00000000000000000000000010101000)二进制补码,这32位中,最高位0是符号位(第31位)3.2.1 整型常量与整型变量2整数在内存中存放形式如果分配两个字节,(-168)十进制=(1111 1111 0101 1000)二进制补码,这16位中,最高位1是符号位(第15位),表示负数3.2.1 整型常量与整型变量2整数在内存中存放形式如果分配4个字节,(-168)十进制=(1111 1111 1111 1111 1111 1111 0101 1000)二进制补码,这32位中,最高位1是符号位(第31位),表示负数3.2.1 整型常量与整型变量3整型变量的分类整型变量的基本类型为int,C语言在整型变量定义时,允许在int前面增加两类修饰符:一类修饰符控制变量是否有符号,有符号用signed(缺省),无符号用unsigned;另一类修饰符控制变量分配的字节数,这类修饰符包括short和long两类;其实在C99标准中还有long long,但是,多数编译器不支持这个修饰符,从字面意思可知,short比基本型int分配的字节数少;long比基本型int分配的字节数多。在C语言中,整数变量分为6类3.2.1 整型常量与整型变量3整型变量的分类Visual C+6.0 中各类整型所分配的内存字节数及表示范围类型说明符数的范围字节数int-21474836482147483647 即-231(231-1)4unsigned int04294967295 即0(232-1)4short int-3276832767 即-215(215-1)2unsigned short int065535 即0(216-1)2long int-21474836482147483647 即-231(231-1)4unsigned long04294967295 即0(232-1)43.2.1 整型常量与整型变量3整型变量的分类有符号和无符号整型变量的定义与使用#includeintmain()inti,j,m,n;unsignedu;i=255;j=-180;u=201;m=i+u;n=j+u;printf(i+u=%d,j+u=%dn,m,n);return0;i+u=456,j+u=213.2.1 整型常量与整型变量4整型常量的分类通过在整数常量后面添加两类后缀来区分:一类后缀为U或u,表示为无符号整数;另外一类后缀为L或l,表示为长整型。注意表示范围。#includeintmain()inti=4294967128u;unsignedintu=4294967128u;printf(i=%dn,i);/*显示基本整型变量i的值*/printf(u=%un,u);/*显示无符号整型变量u的值*/return0;i=-168u=42949671283.2.1 整型常量与整型变量5整型数据的溢出不同类型整型数据的取值范围要记牢,从而可以在编程时避免出错#includeintmain()inta,b=2147483536,c;a=2147483592;c=a+b;printf(a=%dn,a);printf(b=%dn,b);printf(c=a+b=%dn,c);return0;a=2147483592b=2147483536c=a+b=-1683.2.1 整型常量与整型变量5整型数据的溢出乘法比加减更容易溢出出错#includeintmain()inta,b,c;a=76800;b=94300;c=a*b;printf(a=%dn,a);printf(b=%dn,b);printf(c=a*b=%dn,c);return0;a=76800b=94300c=a*b=-13476945923.2.2 实型常量与实型变量1实型常量实型也称为浮点型、实数型实型常量也称为实数或者浮点数。在语言编程中,实数采用十进制,它有二种形式:小数形式指数形式3.2.2 实型常量与实型变量(1)小数形式实数常量它由数码09和小数点组成,数的前面可以加正号(+)或负号(-),表示正实数或负实数,没有正负号的缺省形式为正实数例如:0.0、25.0、-.789(小数点前可以为空,表示缺省0)、0.13、5.0、300.(点后可以为空,缺省了0,它和300整数不同)、-267.830。小数形式的实数必须有小数点,小数点前后可以省略0表示为空,但不能同时为空3.2.2 实型常量与实型变量(2)指数形式实数常量由数码09、小数点、e或E阶码标志组成,一般形式为 a E na是十进制的尾数,可以是小数或整数,带正负号,缺省为正n是十进制带符号整数的阶码,必为整数,带正负号,缺省为正指数形式实数常量的真值含义为a10n尾数、e或E、阶码这三个部分都不能省略3.2.2 实型常量与实型变量(2)指数形式实数常量合法的指数形式的实数:2.5E+3(真值2.5103)5.8E-4(真值5.810-4)8e2(真值8.0102)-7.4E-3(真值-7.410-3)不合法的指数形式的实数:3.2E(E之后无阶码)E6(E之前无尾数)4.3E2.5(阶码不是整数)3.2.2 实型常量与实型变量2实数在内存的存放形式计算机中实数是按以2为底的指数形式存储,一般占4、8、10或更多个字节的连续内存空间实数所占内存空间又三部分组成:最高位存放实数符号S,接下来是尾数部分M,最后为阶码部分E,通过(-1)S2EM公式可以计算出来该实数的十进制值根据具体C语言编译器的约定和满足的IEEE标准,决定尾数和阶码占多少位尾数所占存储空间是有限的,只能存储有限精确度的实数,可能某些数位被舍去,所以不一定能用二进制数精确地表示计算机中尾数部分占的位(bit)数愈多,实数的有效数字越多、精度越高;阶码部分占的位数越多,则能表示的数值范围越大。3.2.2 实型常量与实型变量3实型变量的分类单精度(float)、双精度(double)和长双精度(long double)Visual C+6.0:单精度4个字节,-3.410-383.41038,提 供 6 7位 有 效 数 字;双 精 度 8个 字 节,-1.710-3081.710308,提供1516位有效数字。长双精度也是8个字节,与双精度实型相同;不同编译器,实型分配字节不同。实型常量后缀为F或f为单精度型常量;后缀为大写或小写L,指定常量为长双精度实型,分配的字节更多。如果实型没有后缀,则为双精度实型3.2.2 实型常量与实型变量4实型数据的有效位数实型所占的内存字节数有限,只能提供有效位有效位的近似值#includeintmain()floatf,fb;f=1.23456789e8f;fb=f+22.5;printf(f=%en,f);/*单精度数只能提供7位有效数字*/printf(f+22.5=%en,fb);printf(f=%fn,f);printf(f+22.5=%fn,fb);return0;f=1.234568e+008f+22.5=1.234568e+008 f=123456792.000000f+22.5=123456816.0000003.2.2 实型常量与实型变量4实型数据的有效位数#includeintmain()floata;doubleb;a=55555.123456f;b=999999999.123456712;printf(%fn%fn,a,b);printf(%.9fn%.9fn,a,b);return0;55555.125000999999999.12345755555.125000000999999999.1234567203.2.3 字符常量与字符变量字符型数据就是那些用来表示字母、符号、文字等文本信息的数据,还有控制字符用于通信C语言中,通常字符型数据就是占1个字节(8位)的整数,表示字符所对应字符代码(常常为ASCII值,7位)3.2.3 字符常量与字符变量1字符常量(1)单引号括起来一个字符合法字符常量:a、b、=、+、?、$等可显示的字符在语言中,字符常量有以下特点:字符常量只能单引号只能单引号括起来,不能用双引号或其它括号字符常量只能是单个字符单个字符,不能是多个字符单个数字与单个数字字符是不同的;如5和5,5是字符常量,其值是0X35,5是有符号整型常量3.2.3 字符常量与字符变量1字符常量(2)转义字符转义字符是一种特殊的字符常量。转义字符以反斜线开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符转义字符主要用来表示那些用一般字符不便于表示的控制字符3.2.3 字符常量与字符变量(2)转义字符转义字符转义字符的意义ASCII代码值a鸣铃7b退格符,删除当前字符,光标向左移动一位8t制表符的横向制表,光标移动到下一制表位置9n回车换行符,光标移动到下一行的行首10v竖向跳格,纵向制表11f走纸换页12r回车符,光标移动到当前行的行首13双引号符34单引号符39反斜线符92ddd13位八进制数所代表的字符,可以为任意字符0dddxhh12位十六进制数所代表的字符,可以为任意字符0 xhh3.2.3 字符常量与字符变量2字符变量字符变量的类型说明符是char,占1个字节(8位)有符号有符号字符变量和无符号无符号字符变量无符号字符变量的取值范围是0255有符号字符变量的取值范围是-128127如果字符变量或常量参与整数运算整数运算,直接使用其值运算charc1=A;charc2=65;charc3=x41;charc4=101;3.2.3 字符常量与字符变量2字符变量#includeintmain()chara,b;inti;a=G;b=0 xFF000047;/*多字节整数赋值给少字节整数,要截取低字节*/i=0 xFF000047;/*十进制值为-16777145*/printf(%c,%c,%cn,a,b,i);printf(%d,%d,%dn,a,b,i);return0;G,G,G71,71,-167771453.2.3 字符常量与字符变量2字符变量#includeintmain()chara1=G,a2,b1=h,b2;a2=a1+32;b2=b1-32;printf(%c,%c%d,%dn,a1,a2,a1,a2);printf(%c,%c%d,%dn,b1,b2,b1,b2);return0;G,g 71,103h,H 104,723.2.3 字符常量与字符变量2字符变量#includeintmain()chara=-98;/*有符号字符变量,取值范围-128127*/unsignedcharb=255;/*无符号字符变量,取值范围0255*/printf(%d,%dn,a,b);return0;-98,2553.2.3 字符常量与字符变量3字符串常量字符串常量是一对双引号双引号括起的字符序列例如:Helloworld,Computer,if等字符串常量和字符常量不同,它们之间主要有以下区别:(1)字符常量由单引号括起来,字符串常量由双引号括起来(2)字符常量只能单个字符,字符串常量可含零个、一个或多个字符。(3)一个字符常量赋值给一个字符变量;语言中没有相应的字符串变量,用字符数组来存放字符串(4)字符常量占用一个字节的内存空间。字符串常量占用的内存字节数等于字符串中字符数加加1,增加的一个字符0(ASCII码为0)表示字符串结束3.3 程序与程序语言语言具有丰富的运算符,用运算符将变量、常量或函数等操作数连接起来,符合C语言语法规则的式子称为表达式表达式在C语言中,除了控制语句外,几乎所有的操作都可以用表达式来处理几乎所有的操作都可以用表达式来处理,这也是语言的主要特点之一与算术四则运算规则(先乘除,后加减,有括号先算括号里面的)一样,C语言表达式的运算也有先后顺序,这不仅取决于运算符的优先级优先级,同时还要接受运算符结合性的制约,以便确定是自左向右进行运算还是自右向左进行运算3.3 程序与程序语言语言的运算符大致可分十类在C语言中,除了控制语句外,几乎所有的操作都可以用表达式来处理几乎所有的操作都可以用表达式来处理,这也是语言的主要特点之一与算术四则运算规则(先乘除,后加减,有括号先算括号里面的)一样,C语言表达式的运算也有先后顺序,这不仅取决于运算符的优先级优先级,同时还要接受运算符结合性的制约,以便确定是自左向右进行运算还是自右向左进行运算3.3 程序与程序语言按照运算的不同,语言的运算符大致可分十三类:算术运算符关系运算符逻辑运算符位运算符赋值运算符条件运算符:用于条件求值(?:)3.3 程序与程序语言逗号运算符指针运算符求字节数运算符强制类型转换运算符分量运算符下标运算符特殊运算符3.3 程序与程序语言按照操作数的不同,语言的运算符大致可分三类:单目运算符:只有一个操作数的运算符双目运算符:带有两个操作数的运算符三目运算符:带有三个操作数的运算符,C语言只有一个三目运算,即条件运算符3.3 程序与程序语言3.3.1 算术运算符3.3.2 赋值运算符和赋值表达式3.3.3 逗号运算符和逗号表达式3.3.4 数据类型转换3.3.1 算术运算符1基本的算术运算符操作数为整型数、实型数、字符类型(视为整型)等,常用的有7种:加法运算符+减法运算符-乘法运算符*除法运算符/C语言中,加、减、乘、除四种运算,如果参与运算的量均为整型,结果也为整型。如果操作数中有一个是实型,则结果为实型。3.3.1 算术运算符1基本的算术运算符#includeintmain()inta=12,b=5;printf(%d,%fn,a*b,1.0*a*b);printf(%d,%dn,a/b,-a/b);printf(%f,%fn,1.0*a/b,-1.0*a/b);printf(%f,%fn,a/b*1.0,a/b*-1.0);return0;60,60.0000002,-22.400000,-2.4000002.000000,-2.0000003.3.1 算术运算符1基本的算术运算符求余运算符%正号运算符+(缺省)负号运算符-#includeintmain()printf(%dn,39%7);printf(%dn,-39%7);return0;4-43.3.1 算术运算符2自增、自减运算符自增运算符(+)和自减运算符(-)只能用于变量:自增运算符+:使变量的值自增1;但+i或i+表达式的值不同,(+i)表达式使i的值自增1,表达式的值为i自增1后的值;(i+)表达式的值是此时i的值,之后i的值自增1。(2)自减运算符-:使变量的值自减1;-j或j-表达式的值不同,(-j)表达式先使j的值自减1,表达式的值与j相同;(j-)是先引用j的值作为表达式的值,再使j的值自减1。3.3.1 算术运算符2自增、自减运算符自增运算符(+)和自减运算符(-)只能用于变量:#includeintmain()inti=5;printf(%d,+i);/*显示+i表达式的值*/printf(%dn,i);/*显示i当前值*/printf(%d,-i);/*显示-i表达式的值*/printf(%dn,i);/*显示i当前值*/printf(%d,i+);/*显示i+表达式的值*/printf(%dn,i);/*显示i当前值*/printf(%d,i-);/*显示i-表达式的值*/printf(%dn,i);/*显示i当前值*/return0;6,65,55,66,53.3.1 算术运算符2自增、自减运算符#includeintmain()inti=6,j=6,p,q;p=(i+)+(i+);q=(+j)+(+j);printf(%d,%d,%d,%dn,p,q,i,j);return0;2,16,8,83.3.1 算术运算符3算术表达式和运算符的优先级和结合性由算术运算符和圆括号将操作数(也称运算对象)连接起来的、符合C语言语法规则的式子称为算术表达式。运算符的优先级确保运算执行的顺序是唯一的,保证计算的正确性。语言中,运算符的运算优先级有15级。1级最高,15级最低相同级别的运算符规定了运算符的结合性(即运算符的结合方向)。一个运算对象两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理。语言中,运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)例如a-12+3种加减同级别都是右结合性,所以12先参与减法3.3.2 赋值运算符和赋值表达式1赋值运算符“=“为双目运算符,把右边表达式的值赋给“=”左边的变量:变量=表达式 赋值运算符左边必是变量,把表达式值写入其内存,让变量拥有一个新值3.3.2 赋值运算符和赋值表达式2赋值表达式由赋值运算符(或复合赋值运算符)将一个变量和表达式连接起来,称为赋值表达式任何表达式都有一个值,赋值表达式的值就是赋值符号右边表达式的值,也是左边变量的新值赋值运算符的右结合性:例如a=b=c=8,等价为:a=(b=(c=8),相当于依次赋值赋值表达式后面加上分号就构成赋值语句3.3.2 赋值运算符和赋值表达式3复合赋值表达式将算术运算符、位运算符与赋值运算符组合在一起,构成复合赋值运算符复合赋值运算即包含了算术运算或位运算,又包含了赋值运算,体现了C语言的简洁、高效的特点复合赋值运算符有:+=、-=、*=、/=、%=、=、&=、=、|=等十种变量 双目运算符=表达式 等价于 变量 =变量 双目运算符 表达式 例如:x+=5 等价于 x=x+5复合赋值表达式复合赋值表达式有利于编译处理,能提高编有利于编译处理,能提高编译效率并产生质量较高的目标代码译效率并产生质量较高的目标代码3.3.2 赋值运算符和赋值表达式4变量初始化在定义变量的同时,给变量赋以初值,这就是变量的初始化,这样可以使程序简洁,例如:char a,b=H,c;等价于 char a,b,c;b=H;变量的初始化相等于,先定义变量,让编译器为变量分配内存单元,让后再使用赋值语句进行赋值,进行变量的初始化任何变量初始化才能引用,定义时的初始化避免忘记给变量赋初值3.3.3 逗号运算符和逗号表达式逗号运算符是二目运算符,其功能是把两个表达式连接起来组成一个新表达式,该表达式称为逗号表达式,逗号表达式的值是最后一个逗号后面的表达式的值运算符优先级最低,同时逗号运算符具有左结合性。如果逗号表达式中每个表达式都是赋值表达式,则从左向右计算,顺序进行赋值,所以逗号运算符也经常称为顺序求值运算符3.3.3 逗号运算符和逗号表达式#include int main()int a,b,c,x,y;a=2,b=4,c=6;y=(x=a+b,b+c);printf(x=%d,y=%dn,x,y);x=a+b;y=b+c;printf(x=%d,y=%dn,x,y);return 0;x=6,y=10 x=6,y=103.3.3 逗号运算符和逗号表达式 程序中使用逗号表达式,通常是分别顺序求逗号表达式内各表达式的值,并不一定要求整个逗号表达式的值并不是所有出现逗号的地方都组成逗号表达式,如在变量说明中,函数参数表中的逗号只是用作各变量之间的间隔符通常在C语言中,逗号表达式很少使用,在for循环语句中使用比较多3.3.4 数据类型转换有些C语言的数据类型是可以相互转换的,转换的方法有自动转换和强制类型转换两种自动转换发生在表达式的混合运算,因为对于一个运算,只能把操作数的临时转换为相应的数据类型才能运算则C语言编译器自动按“先转换后运算”的原则进行,即首先将数据转换为同一类型,然后相同类型的数据进行运算3.3.4 数据类型转换1.数据类型的自动转换横向向左的箭头表示必须转换纵向箭头表示不同类型的转换方向,箭头方向只表示数据类型级别的高低,由低向高转换3.3.3 逗号运算符和逗号表达式#includeintmain()shortinti=32;intn=10;chara=A;floatf=3.14f;doubled=1.68E3;unsignedinte=2048;printf(f=%fn,(i+a)*10+n*f-d/e);return0;f=1000.5796893.3.3 逗号运算符和逗号表达式#includeintmain()shortinti=32;intn=10;chara=A;floatf=3.14f;doubled=1.68E3;unsignedinte=2048;printf(f=%fn,(i+a)*10+n*f-d/e);return0;f=1000.5796893.3.3 逗号运算符和逗号表达式(1)整型数据赋给实型变量时,直接把整数值转换为实数形式存放整型数据赋给实型变量时,直接把整数值转换为实数形式存放(2)实型数据赋给整型变量时,仅取实数的整数部分赋值给整型变量实型数据赋给整型变量时,仅取实数的整数部分赋值给整型变量#includeintmain()floate=2.718282;ints,r;s=e;r=e*e;printf(s=%dn,s);printf(r=%dn,r);return0;s=2r=73.3.3 逗号运算符和逗号表达式(3)占占字字节节多多的的整整型型数数据据赋赋给给占占字字节节少少的的整整型型或或字字符符型型变变量量,直直接接从从多多字字节节数据中截取数据中截取低地址开始低地址开始相应的字节数(即采用相应的字节数(即采用“截断截断”操作)操作)#includeintmain()inti=0 xFF167B42;shorts;chara;s=i,a=i;printf(i=%d,i=0 x%Xn,i,i);printf(s=%d,s=0 x%Xn,s,s);printf(a=%d,a=0 x%X,a=%cn,a,a,a);return0;i=-15303870,i=0 xFF167B42s=31554,s=0 x7B42a=66,a=0 x42,a=B3.3.3 逗号运算符和逗号表达式(4)双双精精度度实实型型常常量量赋赋给给单单精精度度实实型型变变量量,使使有有效效数数据据位位会会变变少少;如如果果双双精精度度实实型型的的值值没没有有超超过过单单精精度度实实型型的的取取值值范范围围,仅仅仅仅是是损损失失精精度度;如如果果超超过过了了取值范围,赋值就会出现逻辑错误取值范围,赋值就会出现逻辑错误(5)单精度实型数据赋给双精度实型变量,数值不变单精度实型数据赋给双精度实型变量,数值不变(6)字符型数据赋给整型变量,将字符字符型数据赋给整型变量,将字符ASCII码值赋给变量,值保持不变码值赋给变量,值保持不变3.3.4 数据类型转换1.数据类型的强制转换强制类型转换是通过强制类型转换运算来实现的:(类型说明符)(表达式)强制类型转换的功能是把表达式的运算结果值强制转换成类型说明符所表示的类型“(类型说明符)“是强制类型转换运算符,是一目运算符,且具有右结合性,优先级别为2级,比算术运算符和赋值运算符的优先级都高3.3.4 数据类型转换强制转换和自动转换都是临时性转换,不改变变量声明时定义的数据类型#include int main()double e=2.718282;int i;i=(int)e;printf(int)i=%d,e=%fn,i,e);return 0;(int)i=2,e=2.7182823.4 基本数据输入输出C语言没有提供专门的输入输出语句,来标准库函数完成数据的输入输出,提高C的可移植性C语言中,标准输入设备是键盘,标准输出设备为显示器,通常称为屏幕从键盘输入一个字符的函数getchar、格式化输入系列数据的scanf函数输出一个字符到显示器的putchar函数、把系列数据格式化显示到屏幕的printf函数四个函数原型都在头文件stdio.h中,stdio是standard input&outupt的缩写,即标准输入输出头文件3.4 基本数据输入输出3.4.1 单个字符数据的输入getchar()和输出putchar()3.4.2 格式化输出函数printf()3.4.3 格式化输入函数scanf()3.4.1 字符数据的输入输出1字符输出函数putchar()函数putchar是向显示器上输出单个字符:putchar(char c)函数的参数为要输出的ASCII字符,可以为字符常量、字符变量或者转义符等函数能够把可显示字符显示到计算机屏幕上;控制字符完成控制功能,但不显示任何内容3.4.1 字符数据的输入输出1字符输出函数putchar函数putchar是向显示器上输出单个字符:putchar(char c)函数的参数为要输出的ASCII字符,可以为字符常量、字符变量或者转义符等函数能够把可显示字符显示到计算机屏幕上;控制字符完成控制功能,但不显示任何内容。3.4.1 字符数据的输入输出1字符输出函数putchar()#includeintmain()charc1=H,c2=e,c3=l,c4=o;inta=67;putchar(c1);putchar(c2);putchar(c3);putchar(c3);putchar(c4);putchar(n);putchar(a);putchar(110);putchar(E);putchar(x4E);putchar(n);return0;HelloCHEN3.4.1 字符数据的输入输出2字符输入函数getchar()getchar函数从键盘缓冲区输入一个字符,返回值为输入的字符的ASCII码值函数可以作为一个简单表达式参与字符类型数据的运算getchar函数没有参数如果用户没有按键,键盘缓冲区内没有字符,屏幕上闪烁光标,等待用户输入;有时使用此功能,来暂停屏幕的显示,让用户有机会看到屏幕的内容3.4.1 字符数据的输入输出2字符输入函数getchar()#includeintmain()charc1,c2,c3,c4;printf(输入三个字符按回车:);c1=getchar();c2=getchar();c3=getchar();c4=getchar();printf(用户输入的字符是:);putchar(c1);putchar(c2);putchar(c3);putchar(n);printf(其实还有一个字符,ASCII值为%dn,c4);return0;输入三个字符按回车:Hey用户输入的字符是:Hey其实还有一个字符,ASCII值为103.4.2 格式化输出函数printf()在C语言程序中,输出系列数据通常使用函数printf,不仅可以输出字符、整数、实数、字符串,还可以按照用户指定的某种格式输出数据,这就是把数据转换为指定的格式再输出printf的最末一个字母f就是表示“格式”(format)的含义3.4.2 格式化输出函数printf()1.printf函数的一般形式 printf(格式控制字符串,输出表列)函数的功能是按照格式控制字符串的格式要求对各个输出项的值进行数据格式转换,然后输出到显示器格式控制字符串的字符:普通字符和转换说明。(1)普通字符包括可显示字符和转义字符,在printf函数执行时,普通字符直接输出到显示器上或进行控制。(2)每个转义说明都是以%开头,以转换字符结束的多个字符序列,以说明输出数据类型、形式、长度、小数位数等。格式控制字符串可以有多个转换说明,来转换对应的输出表列中的数据(逗号分隔开),即转换说明和输出项必须是按照从左到右的顺序一一对应的3.4.2 格式化输出函数printf()1.printf函数的一般形式#includeintmain()intc1=65,c2=71;printf(转换说明不同,显示不同:n);printf(c1=%c,c2=%cn,c1,c2);printf(0 x%X,0 x%Xn,c1,c2);printf(%d,%dn,c1,c2);return0;转换说明不同,显示不同:c1=A,c2=G0 x41,0 x4765,713.4.2 格式化输出函数printf()2.转换说明%标志输出最小域宽.精度长度转换字符转换字符转换结果输出项类型d,i有符号整数-mmm的十进制输出有符号整型o无符号整数的八进制表示(无前缀0)无符号整型x,X无符号整数的十六进制表示(无前缀0 x或0X),x表示输出09和小写af,X表示输出09和大写AF无符号整型u无符号整数的十进制表示无符号整型f以十进制小数-mmm.ddd 形式输出单、双精度实数,d的个数由精度确定,默认值为6;精度设为0时,不输出小数点之后的数实型e,E以十进制-m.dddd e xx或-m.dddd E xx指数形式输出实数,d的个数由精度确定,默认值为6;精度为0时,不输出小数点之后的数实型g,G当指数小于-4或实际位数大于等于有效数字位数时,采用以%e或%E的格式,否则采用%f格式实型c转换为unsigned char无符号字符类型的一个字符字符或整型s打印字符串的字符,直遇到0或者由精度指定的字符数字符型指针p显示指针变量的值或其它地址值内存地址3.4.2 格式化输出函数printf()转换字符也区分大小写,大写的只有X、E、G三个,其他均为小写字符。转换字符所表示的数据类型一定要与输出项的实际数据类型相兼容,printf函数不会进行数据类型的自动转换#includeintmain()inti=168;floatf=2.786253;printf(i=%d,f=%dn,i,f);printf(f=%f,i=%fn,f,i);return0;i=168,f=0f=2.786253,i=0.0000003.4.2 格式化输出函数printf()(1)标志用于修饰转换说明(共5种),可以使用一个或多个标志含 义-指定转换输出项的值在域内左对齐(默认为右对齐)+指定输出项的值前面加上正负号(缺省时正号不显示)空格如果第一个字符不是正负号,则在输出值前加上一个空格0对于数值转换,当输出长度小于域宽时,前缀用0填