C语言程序设计—进阶篇第1章数据类型与输入输出(二)C语言程序设计——进阶篇2020年1月23日内容概述1.C语言的数据类型及分类。2.C语言中的常量和变量。3.C语言的数据输入/输出。C语言程序设计——进阶篇2020年1月23日教学目标1.掌握数据类型的概念,了解C语言能够处理的数据类型。2.掌握各种类型常量的特点及表示形式。3.掌握变量的概念,了解float、char型变量的特点,掌握这二种类型变量的定义、赋值和使用方法。4.掌握数据的输入输出(包括汉字的输入与输出)的基本方法。C语言程序设计——进阶篇2020年1月23日数据是计算机程序处理的所有信息的总称,数值、字符、文本等都是数据,如整数、实数、英文字母、数字符号、英语单词、汉字、一句话、一段文章、一个学生信息等。在C语言中,数据类型可分为:基本数据类型、构造数据类型、指针类型、空类型四大类,共9种。本章中,将介绍基本数据类型中的浮点型和字符型。其余类型在以后各章中陆续介绍。1.1C的数据类型C语言程序设计——进阶篇2020年1月23日1.基本数据类型基本数据类型最主要的特点是,其值不可以再分解为其它类型。基本类型整型字符型浮点型单精度双精度枚举短整型长整型C语言程序设计——进阶篇2020年1月23日2.整型变量整型变量分为四种:基本型、短整型、长整型、无符号型①基本型:用“int”定义,在不同的系统中它的长度可能不同,如在DOS下的int变量占2个字节,相当于短整型,而在Windows下的int变量占4个字节,相当于长整型。C语言程序设计——进阶篇2020年1月23日2.整型变量②短整型:用“shortint”或“short”定义,占2个字节。③长整型:用“long”或“longint”定义,占4个字节。④无符号型:用“unsigned”定义不存放符号,数据不带符号数。无符号整型:“unsignedint”无符号短整型:“unsignedshortint”无符号长整型:“unsignedlongint”注意:如无指定,则为有符号数。C语言程序设计——进阶篇2020年1月23日【例1.1】整型数用法示例main(){unsignedshortinta;shortintb;a=65535;b=32767;a=a+1;b=b+1;printf(a=%d\n,a);printf(b=%d\n,b);}运行结果为:a=0b=-32768为什么?a从原来的65535加1后变为0,这说明a所能表示的值的大小是有限的!65535的二进制数为1111111111111111,再加1=?32767的二进制数为0111111111111111,再加1=?C语言程序设计——进阶篇2020年1月23日整型变量取值范围类型说明符数的范围分配字节数int-32768~32767■■shortint-32768~32767■■signedint-32768~32767■■unsignedint0~65535■■longint-2147483648~2147483647■■■■unsignedlong0~4294967295■■■■int根据特定的系统对应shortint或longintunsignedint根据特定的系统对应unsignedshortint或unsignedlongint超过变量所能表示的范围,产生计算错误:溢出.C语言程序设计——进阶篇2020年1月23日整型常量即整数,按不同的进制区分,整数有三种表示方法:十进制数:以非0开始的数,如:220、-560、+369等。八进制数:以0开始的数,如:06、0106、0677等。十六进制数:以0X或0x开始的数,如:0X0D、0XFF、0x4e、0x123等。3.整型常量C语言程序设计——进阶篇2020年1月23日另外,可在整型常数后添加一个“L”或“l”字母,表示该数为长整型数,如:22L、0773L、0Xae4l等。诸如38A、0578、0x29FG等,都是不合法的常数形式。C语言程序设计——进阶篇2020年1月23日(1)十进制数形式由数码0~9和小数点组成。例如:0.0、25.0、5.789、0.13、5.0、300.、-267.8230等均为合法的实数。注意,必须有小数点。1.2.1实型常量的表示方法实型也称为浮点型。实型常量也称为实数或者浮点数。在C语言中,实数只采用十进制。它有二种形式:十进制小数形式和指数形式。1.2实型数据C语言程序设计——进阶篇2020年1月23日(2)指数形式由十进制数,加阶码标志“e”或“E”以及阶码(只能为整数,可以带符号)组成。其一般形式为:aEn(a为十进制数,n为十进制整数)其值为a*10n。如:2.1E5(等于2.1*105)3.7E-2(等于3.7*10-2)0.5E7(等于0.5*107)-2.8E-2(等于-2.8*10-2)C语言程序设计——进阶篇2020年1月23日以下则不是合法的实数:345(无小数点)E7(阶码标志E之前无数字)-5(无阶码标志)53.-E3(负号位置不对)2.7E(无阶码)标准C允许浮点数使用后缀。后缀为“f”或“F”即表示该数为浮点数。如356.f和356.是等价的。因此:(1)十进制小数形式:必须有小数点。(2)指数形式:字母e前必须有数字,字母e后必须为整数,规范化的指数形式输出。C语言程序设计——进阶篇2020年1月23日【例1.2】实型常量的使用#includestdio.hmain(){printf(%f\n,356.);printf(%f\n,356);printf(%f\n,356.f);}VC++输出:356.000000-1.#QNAN0356.000000C语言程序设计——进阶篇2020年1月23日1.2.2实型变量1实型数据在内存中的存放形式实型数据一般占4个字节(32位)内存空间,按指数形式存储。如实数3.14159在内存中的存放形式如下:+.3141591数符小数部分指数小数部分占的位(bit)数愈多,数的有效数字愈多,精度愈高。指数部分占的位数愈多,则能表示的数值范围愈大。C语言程序设计——进阶篇2020年1月23日2.实型变量的分类实型变量分为:单精度(float型)、双精度(double型)和长双精度(longdouble型)三类。如下表:类型说明符比特数(字节数)有效数字数的范围float32(4)6~710-37~1038double64(8)15~1610-307~10308longdouble128(16)18~1910-4931~104932C语言程序设计——进阶篇2020年1月23日实型变量定义的格式和书写规则与整型相同。例如:floatx,y;(定义x,y为单精度实型量)doublea,b,c;(定义a,b,c为双精度实型量)C语言程序设计——进阶篇2020年1月23日3实型数据的舍入误差由于实型变量是由有限的存储单元组成的,因此能提供的有效数字总是有限的。不同的编译器下处理的精度不同,如下例。【例1.3】实型数据的舍入误差。#includestdio.hmain(){floata,b;a=123456.789e5;b=a+20;printf(%f\n,a);printf(%f\n,b);}运行结果(VC++):12345678848.00000012345678848.000000可见一个大数与一小数间运算会产生什么结果?C语言程序设计——进阶篇2020年1月23日【例1.4】main(){floata;doubleb;a=33333.33333;b=33333.33333333333333;printf(%f\n%f\n,a,b);}从本例可以看出,由于a是单精度浮点型,有效位数只有七位。而整数已占五位,故小数二位后之后均为无效数字。b是双精度型,有效位为十一位(VC++)。实型数据在实际运用中要注意!!!(较大数与小数算术运算、比较等)运行结果(VC++):33333.33203133333.333333C语言程序设计——进阶篇2020年1月23日舍入误差示例1.5(VC++):#includestdio.h#includemath.hmain(intargc,char**argv){printf(%d\n,1.0/3*3);/*结果为0*/printf(%f\n,1.0/3.*3.);/*结果为1.000000*/printf(%d\n,sqrt(2.)*sqrt(2.));/*结果为1*/printf(%f\n,sqrt(2.)*sqrt(2.));/*结果为2.000000*/}C语言程序设计——进阶篇2020年1月23日1.2.3实型常量的类型实型常量不分单、双精度,都按双精度double型处理。C语言程序设计——进阶篇2020年1月23日1.3.1字符常量1.3字符型数据1字符常量定界符为单引号(')的单字符。例如:'a'、'A'、'3'、'='、'+'、'?'注意英文字母区分大小写。C字符常量特点:(1)字符常量只能用单引号括起来,不能用双引号或其它括号。(2)字符常量只能是单个字符,不能是字符串。(3)字符可以是字符集中任意字符。但数字被定义为字符型之后就不能参与数值运算。如‘5’和5。C语言程序设计——进阶篇2020年1月23日2转义字符转义字符是一种特殊的字符常量。转义字符以反斜线“\”开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。转义字符主要用来表示那些用一般字符不便于表示的控制代码。常用的转义字符及其含义如下表:C语言程序设计——进阶篇2020年1月23日转义字符转义字符的意义ASCII代码\n换行10\t横向跳到下一制表位置9\b退格8\r回车13\f走纸换页12\\反斜线符\92\'单引号符39\双引号符34\a鸣铃7\ddd1~3位八进制数所代表的字符\xhh1~2位十六进制数所代表的字符C语言程序设计——进阶篇2020年1月23日广义地讲,C语言字符集中的任何一个字符均可用转义字符来表示。表中的\ddd和\xhh正是为此而提出的。ddd和hh分别为八进制和十六进制的ASCII代码。如\101表示字母“A”(见附录I),\102表示字母“B”,\134表示反斜线,\X0A表示换行等。常见字符的值:20H~空格30H~‘0’-----39H~‘9'41H~'A'61H~'a'内码(ASCII码)在32~126范围内为可显示字符。C语言程序设计——进阶篇2020年1月23日【例1.6】转义字符的使用。main(){inta,b,c;a=5;b=6;c=7;printf(abc\tde\rf\n);printf(hijk\tL\bM\n);}运行结果:fabcdehijkMC语言程序设计——进阶篇2020年1月23日1.3.2字符变量字符变量用来存储字符常量,即单个字符。字符变量的类型说明符是char。在内存中占一个字节,字符变量类型定义的格式和书写规则都与整型变量相同。例如:chara,b;C语言程序设计——进阶篇2020年1月23日1.3.3字符数据在内存中的存储形式及使用方法字符以ASCII码形式存放在内存单元中,因此ASCII码被称作字符的内码。字符型与整型的转换:自动进行注意:字符型占一个字节,整型占两个字节(与编译器有关)。每个字符变量被分配一个字节的内存空间,因此只能存放一个字符。字符值是以ASCII码的形式存放在变量的内存单元之中的。C语言程序设计——进阶篇2020年1月23日如'x'的十进制ASCII码是120,'y'的十进制ASCII码是121。对字符变量a,b赋予'x'和'y'值:a='x';b='y';实际上是在a,b两个单元内存放120和121的二进制代码:0111100001111001a:b:可以把字符作为整型量进行处理,也可以对整型变量赋以字符值,把整型量按字符量输出。整型量为二字节量,字符量为单字节量,当整型量按字符型量处理时