版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C语言程序设计 进阶篇,第1章 数据类型与输入输出(二),2020年7月30日,内容概述,1C语言的数据类型及分类。 2C语言中的常量和变量。 3C语言的数据输入/输出。,2020年7月30日,教学目标,1掌握数据类型的概念,了解C语言能够处理的数据类型。 2掌握各种类型常量的特点及表示形式。 3掌握变量的概念,了解float、char型变量的特点,掌握这二种类型变量的定义、赋值和使用方法。 4掌握数据的输入输出(包括 汉字的输入与输出)的基本方法。,2020年7月30日,数据是计算机程序处理的所有信息的总称,数值、字符、文本等都是数据,如整数、实数、英文字母、数字符号、英语单词、汉字、一句话
2、、一段文章、一个学生信息等。 在语言中,数据类型可分为:基本数据类型、构造数据类型、指针类型、空类型四大类,共9种。 本章中,将介绍基本数据类型中的浮点型和字符型。其余类型在以后各章中陆续介绍。,1.1 C的数据类型,2020年7月30日,1.基本数据类型,基本数据类型最主要的特点是,其值不可以再分解为其它类型。,基本类型,整型,字符型,浮点型,单精度,双精度,枚举,短整型,长整型,2020年7月30日,2. 整型变量,整型变量分为四种:基本型、短整型、长整型、无符号型 基本型: 用“int”定义, 在不同的系统中它的长度可能不同,如在DOS下的int变量占2个字节,相当于短整型,而在Wind
3、ows下的int变量占4个字节,相当于长整型。,2020年7月30日,2. 整型变量,短整型:用“short int”或 “short”定义,占2个字节。 长整型:用“long ”或 “long int”定义,占4个字节。 无符号型:用“unsigned”定义不存放符号,数据不带符号数。 无符号整型: “unsigned int”无符号短整型:“unsigned short int”无符号长整型:“unsigned long int” 注意:如无指定,则为有符号数。,2020年7月30日,【例1.1】整型数用法示例,main() unsigned short int a; short int
4、b; a=65535; b=32767; a=a+1; b=b+1; printf(a=%dn,a); printf(b=%dn,b); ,运行结果为: a=0 b=-32768 为什么?,a从原来的65535加1后变为0,这说明a所能表示的值的大小是有限的!,65535的二进制数为1111 1111 1111 1111,再加1=? 32767的二进制数为0111 1111 1111 1111,再加1=?,2020年7月30日,整型变量取值范围,类型说明符数的范围 分配字节数int -3276832767 short int -3276832767 signed int -3276832767
5、 unsigned int 065535 long int -21474836482147483647unsigned long 04294967295 int根据特定的系统对应short int或long int unsigned int根据特定的系统对应unsigned short int或unsigned long int 超过变量所能表示的范围,产生计算错误:溢出.,2020年7月30日,整型常量即整数,按不同的进制区分, 整数有三种表示方法: 十进制数:以非0开始的数,如:220、-560、+369等。 八进制数:以0开始的数,如:06、0106、0677等。 十六进制数:以0X或0
6、 x开始的数,如:0X0D、0XFF、0 x4e、0 x123等。,3. 整型常量,2020年7月30日,另外,可在整型常数后添加一个“L”或“l”字母,表示该数为长整型数,如:22L、0773L、0Xae4l等。 诸如38A、0578、0 x29FG等,都是不合法的常数形式。,2020年7月30日,(1)十进制数形式 由数码0 9和小数点组成。例如: 0.0、25.0、5.789、0.13、5.0、300.、-267.8230 等均为合法的实数。注意,必须有小数点。,1.2.1 实型常量的表示方法 实型也称为浮点型。实型常量也称为实数或者浮点数。在语言中,实数只采用十进制。它有二种形式:十进
7、制小数形式和指数形式。,1.2 实型数据,2020年7月30日,(2) 指数形式 由十进制数,加阶码标志“e”或“E”以及阶码(只能为整数,可以带符号)组成。其一般形式为: a E n(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),2020年7月30日,以下则不是合法的实数: 345 (无小数点) E7 (阶码标志E之前无数字) -5 (无阶码标志) 53.-E3 (负号位置不对) 2.7E (无阶码) 标准允许浮点数使用后缀
8、。后缀为“f”或“F”即表示该数为浮点数。如356.f和356.是等价的。,因此: (1)十进制小数形式:必须有小数点。 (2)指数形式:字母e前必须有数字,字母e后必须为整数 ,规范化的指数形式输出。,2020年7月30日,【例1.2】实型常量的使用 #include main() printf(%fn ,356.); printf(%fn ,356); printf(%fn ,356.f); ,VC+输出: 356.000000 -1.#QNAN0 356.000000,2020年7月30日,1.2.2 实型变量 1 实型数据在内存中的存放形式 实型数据一般占4个字节(32位)内存空间,按
9、指数形式存储。如实数3.14159在内存中的存放形式如下:,数符 小数部分 指数 小数部分占的位(bit)数愈多,数的有效数字愈多,精度愈高。 指数部分占的位数愈多,则能表示的数值范围愈大。,2020年7月30日,2. 实型变量的分类 实型变量分为:单精度(float型)、双精度(double型)和长双精度(long double型)三类。如下表:,2020年7月30日,实型变量定义的格式和书写规则与整型相同。 例如: float x,y; (定义x,y为单精度实型量) double a,b,c; (定义a,b,c为双精度实型量),2020年7月30日,3 实型数据的舍入误差 由于实型变量是由
10、有限的存储单元组成的,因此能提供的有效数字总是有限的。不同的编译器下处理的精度不同,如下例。,【例1.3】实型数据的舍入误差。 #include main() float a,b; a=123456.789e5; b=a+20; printf(%fn,a); printf(%fn,b); ,运行结果(VC+): 12345678848.000000 12345678848.000000 可见一个大数与一小数间运算会产生什么结果?,2020年7月30日,【例1.4】 main() float a; double b; a=33333.33333; b=33333.33333333333333;
11、printf(%fn%fn,a,b); ,从本例可以看出,由于a 是单精度浮点型,有效位数只有七位。而整数已占五位,故小数二位后之后均为无效数字。 b 是双精度型,有效位为十一位(VC+)。 实型数据在实际运用中要注意!(较大数与小数算术运算、比较等),运行结果(VC+):33333.332031 33333.333333,2020年7月30日,舍入误差示例1.5(VC+): #include #include main(int argc,char *argv) printf(%dn,1.0/3*3);/*结果为0*/ printf(%fn,1.0/3.*3.);/*结果为1.000000*/
12、 printf(%dn,sqrt(2.)*sqrt(2.);/*结果为1*/ printf(%fn,sqrt(2.)*sqrt(2.); /*结果为2.000000*/ ,2020年7月30日,1.2.3 实型常量的类型 实型常量不分单、双精度,都按双精度double型处理。,2020年7月30日,1.3.1 字符常量,1.3 字符型数据,1 字符常量 定界符为单引号()的单字符。例如: a、A、3、=、+、? 注意英文字母区分大小写。字符常量特点: (1)字符常量只能用单引号括起来,不能用双引号或其它括号。 (2)字符常量只能是单个字符,不能是字符串。 (3)字符可以是字符集中任意字符。但数
13、字被定义为字符型之后就不能参与数值运算。如5和5 。,2020年7月30日,2 转义字符 转义字符是一种特殊的字符常量。转义字符以反斜线“”开头,后跟一个或几个字符。 转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。转义字符主要用来表示那些用一般字符不便于表示的控制代码。常用的转义字符及其含义如下表:,2020年7月30日,2020年7月30日,广义地讲,语言字符集中的任何一个字符均可用转义字符来表示。表中的ddd和xhh正是为此而提出的。ddd和hh分别为八进制和十六进制的ASCII代码。如101表示字母“A”(见附录I),102表示字母“B”,134表示反斜线,X0A表示换
14、行等。,常见字符的值: 20H 空格 30H 0 - 39H 9 41H A 61H a 内码(ASCII码)在32126范围内为可显示字符。,2020年7月30日,【例1.6】转义字符的使用。 main() int a,b,c; a=5; b=6; c=7; printf( ab ctderfn); printf(hijktLbMn); ,运行结果: f ab c de hijk M,2020年7月30日,1.3.2 字符变量 字符变量用来存储字符常量,即单个字符。 字符变量的类型说明符是char。在内存中占一个字节,字符变量类型定义的格式和书写规则都与整型变量相同。例如: char a ,
15、 b;,2020年7月30日,1.3.3 字符数据在内存中的存储形式及使用方法 字符以ASCII码形式存放在内存单元中,因此ASCII码被称作字符的内码。 字符型与整型的转换:自动进行 注意:字符型占一个字节,整型占两个字节(与编译器有关)。 每个字符变量被分配一个字节的内存空间,因此只能存放一个字符。字符值是以ASCII码的形式存放在变量的内存单元之中的。,2020年7月30日,如x的十进制ASCII码是120,y的十进制ASCII码是121。对字符变量a,b赋予x和y值: a=x; b=y; 实际上是在a,b两个单元内存放120和121的二进制代码:,a:,b:,可以把字符作为整型量进行处
16、理,也可以对整型变量赋以字符值,把整型量按字符量输出。 整型量为二字节量,字符量为单字节量,当整型量按字符型量处理时,只有低八位字节参与处理。,2020年7月30日,【例1.7】向字符变量赋以整数。 main() char a,b; a=120; b=121; printf(%c,%cn,a,b); printf(%d,%dn,a,b); ,运行结果: x,y 120,121,2020年7月30日,【例1.8】字符运算。 main() char a,b; a=a; b=b; a=a-32; b=b-32; printf(%c,%cn%d,%dn,a,b,a,b); ,运行结果: A,B 65,
17、66,2020年7月30日,1.3.5 字符串常量 字符串常量是由一对双引号括起的字符序列。例如: CHINA , “C program” , $12.5 等都是合法的字符串常量。 字符串常量和字符常量之间区别: (1)字符常量由单引号括起来,字符串常量由双引号括起来。 (2)字符常量只能是单个字符,字符串常量则可以含一个或多个字符。 (3)可以把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予一个字符变量。在语言中没有相应的字符串变量,但是可以用一个字符数组来存放一个字符串常量。,2020年7月30日,(4)字符常量占一个字节的内存空间。字符串常量占的内存字节数等于字符串中字符数加1
18、。增加的一个字节中存放字符“0” (ASCII码为0)。这是字符串结束的标志,该字符不能显示也不用显式写出来。,例如:字符串 C program 在内存中所占的字节为:,a和a的区别是?,“ A ”存储方式为,A 0,但 A存储方式为:,A,2020年7月30日,举例 TES a,字符串变量的使用在第6章数组(2) 中介绍.,2020年7月30日,变量使用的三部曲:定义,赋初值,改变之。 在程序中常常需要对变量赋初值,以便使用变量。C语言程序中可有多种方法为变量提供初值。方法: (1)先定义后赋值 类型说明符 变量1,变量2, ; (2)在变量定义中赋初值,一般形式为: 类型说明符 变量1=
19、值1,变量2= 值2,;,1.4 变量赋初值,2020年7月30日,2020年7月30日,1.5.1 数据输入输出的概念及在C语言中的实现,1.5 数据的输入输出,在语言中,所有的数据输入输出都是由库函数完成的。 因此都是函数语句。在使用语言库函数时,要用预编译命令 #include 将有关“头文件”包含到源文件中。,2020年7月30日,使用标准输入输出库函数时要用到 “stdio.h”文件,因此源文件开头应有以下预编译命令: #include 或 #include stdio.h 二者的区别:,2020年7月30日,1.5.2 字符数据的输入输出 1 putchar 函数(字符输出函数)
20、功能:在显示器上输出单个字符。其一般形式为: putchar(字符变量); 例如: putchar(A); (输出大写字母A) putchar(x); (输出字符变量x的值) putchar(101); (也是输出字符A) putchar(n); (换行),2020年7月30日,【例1.9】输出单个字符。 #include main() char a,b,c; a=B; b=o; c=k;/*以下书写方式不提倡*/ putchar(a);putchar(b);putchar(b);putchar(c); putchar(t); putchar(a);putchar(b); putchar(n)
21、; putchar(b);putchar(c); ,运行结果: Book Bo ok,2020年7月30日,2. getchar函数(键盘输入函数),功能:从键盘上输入一个字符。其一般形式为: getchar(); 通常把输入的字符赋予一个字符变量,构成赋值语句,如: char c; c=getchar();,2020年7月30日,使用getchar函数还应注意几个问题: (1)getchar函数只能接受单个字符,输入数字也按字符处理。输入多于一个字符时,只接收第一个字符。 (2)使用本函数前必须包含文件“stdio.h”。,2020年7月30日,【例1.10】getchar()示例-屏幕菜单
22、设计及应用。,要求:在屏幕显示上供用户选择的功能菜单,用户通过键盘选择后,计算机显示用户选择的结果,不断重复,直到用户选择退出,结束程序运行. 分析:1)可以通过循环实现同一功能的重复执行; 2)在每一次循环中: A.清除屏幕; B.显示菜单信息; C.获取用户的键盘输入; D.分析用户输入并作出相应处理;,2020年7月30日,/*参考程序*/,#include #include int main(int argc, char *argv) char select; while(1)/*(1)-为什么可以这样用?*/ system(“cls”); /*执行DOS系统命令: cls清屏*/ p
23、rintf(tt屏幕菜单示例n); printf(1-加法测试;t2-减法测试n); printf(3-除法测试;t4-记忆力测试n); printf(0-退出.n); printf(请选择(0-4):); select=getchar(); /*等待用户输入,也可以用scanf()*/,2020年7月30日,if(select4) /*判断输入合法?*/ printf(选择错误!请重新选择!n); if(select=0) /*用0会如何?*/ printf(您选择的是退出测试!n); _beep(300,400); break; if(select= 4) /*=换成“=”如何?*/ pr
24、intf(您选择的是记忆力测试!n); system(PAUSE); getchar(); /*用户的输入是+Enter,清除*/ return (0); ,2020年7月30日,1.5.3 格式输入与输出 1 printf函数(格式输出函数) 函数功能:按用户指定的格式,把指定的数据显示到显示器屏幕上。 (1)printf函数调用的一般形式 printf(“格式控制字符串”,输出表列); 其中格式控制字符串用于指定输出格式。格式控制串可由格式字符串和非格式字符串两种组成。,2020年7月30日,格式字符串是以%开头的字符串,在%后面跟有各种格式字符,以说明输出数据的类型、形式、长度、小数位数
25、等。如: “%d”表示按十进制整型输出; “%ld”表示按十进制长整型输出; “%c”表示按字符型输出等。 非格式字符串在输出时原样照印,在显示中起提示作用。 输出表列中给出了各个输出项,要求格式字符串和各输出项在数量和类型上应该一一对应。,2020年7月30日,【例1.11】格式输出 main() int a,b; a=88; b=89; printf(%d %dn,a,b); printf(%d,%dn,a,b); printf(%c,%cn,a,b); printf(a=%d,b=%d,a,b); ,运行结果: 88 89 88,89 X,Y a=88,b=89,2020年7月30日,(
26、2)格式字符串 在C中格式字符串的一般形式为: 标志输出最小宽度.精度长度类型 其中方括号中的项为可选项。 各项的意义介绍如下: 1)类型:类型字符用以表示输出数据的类型,其格式符和意义如下表所示:,2020年7月30日,2020年7月30日,2)标志:标志字符为-、+、#、空格四种,其意义下表所示:,2020年7月30日,3)输出最小宽度:用十进制整数来表示输出的最少位数。若实际位数多于定义的宽度,则按实际位数输出,若实际位数少于定义的宽度则补以空格或0。 4) 精度:精度格式符以“.”开头,后跟十进制整数。本项的意义是:如果输出数字,则表示小数的位数;如果输出的是字符,则表示输出字符的个数
27、;若实际位数大于所定义的精度数,则截去超过的部分。 5) 长度:长度格式符为h,l两种,h表示按短整型量输出,l表示按长整型量输出。,2020年7月30日,【例1.12】格式输出(2) #include main() int a; float b; double c; char d; a=15; b=123.1234567; c=12345678.1234567; d=p; printf(a=%d,%5d,%o,%xn,a,a,a,a); printf(b=%f,%lf,%5.4lf,%en,b,b,b,b); printf(c=%lf,%f,%8.4lfn,c,c,c); printf(d=
28、%c,%8cn,d,d); ,2020年7月30日,运行结果: a=15, 15,17,f b=123.123459,123.123459,123.1235,1.231235e+002 c=12345678.123457,12345678.123457,12345678.1235 d=p, p,2020年7月30日,说明: (1)C语言的格式化输入/输出比较繁琐,在以GUI为主流的应用程序的输入输出中较少使用(scanf()函数则用不到),但它的另一种形式sprintf()函数中的格式化数据处理则经常会用到。 (2)如何获得有关sprintf()函数的用法知识?请使用微软开发者网络Micros
29、oft Developer Network(MSDN)。它是一个有关计算机软件设计知识的海洋,是微软平台的软件开发和应用人员的最好的获取知识的工具。 (3)读者从现在开始,应该逐步学会如何获取书本上没有的知识,从MSDN、Internet。请查阅字符串输出函数puts()的用法。,2020年7月30日,2 scanf函数(格式输入函数) 功能:按用户指定的格式从键盘上把数据输入到指定的变量之中。 (1)scanf函数的一般形式 scanf(“格式控制字符串”,地址表列); 其中,格式控制字符串的作用与printf函数相同,但不能显示非格式字符串。地址表列中给出各变量的地址。 地址是由地址运算符
30、“ printf(请输入整型量 a,b,c的值:n); scanf(%d%d%d, ,2020年7月30日,(2) 格式字符串 格式字符串的一般形式为: %*输入数据宽度长度类型 其中有方括号的项为任选项。各项的意义如下: 1)类型:表示输入数据的类型.,2020年7月30日,2) “*”符:用以表示该输入项,读入后不赋予相应的变量,即跳过该输入值。 如: scanf(%d %*d %d, 输入:12345678 ,将把1234赋予a,而把5678赋予b。 4) 长度:长度格式符为l和h,l表示输入长整型数据(如%ld) 和双精度浮点数(如%lf)。h表示短整型数据。,2020年7月30日,【例1.14】输入格式字符串 #include main() char a,b; printf(input character a,bn); scanf(%c%c, ,由于scanf函数“%c%c”中没有空格,输入M N,结果输出只有M。而输入改为MN时则可输出MN两字符。 试一试:“%c%c”中加上空格会怎样?(分别输入MN或M,N),2020年7月30日,【例1.1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026广东广州市番禺区番广附万博学校招聘合同制教师30人备考题库含答案详解(满分必刷)
- 2026年温州榕园学校(温州大学附属学校) 面向全国引进教育人才3人备考题库含答案详解(满分必刷)
- 2026江苏省淮安技师学院招聘教师10人备考题库含答案详解(精练)
- 2026北京语言大学新编长聘人员招聘12人备考题库(第二批)带答案详解(完整版)
- 2026贵州贵阳市国信公证处招聘见习人员1人备考题库及答案详解(真题汇编)
- 2026黑龙江哈尔滨启航劳务派遣有限公司派遣到哈尔滨工业大学商学院招聘备考题库及答案详解(各地真题)
- 2026中国疾病预防控制中心(中国预防医学科学院)政策规划研究室招聘备考题库(含答案详解)
- 2026年吉州区综合交通运输事业发展中心面向社会公开招聘工作人员的备考题库及答案详解(基础+提升)
- 2026安徽新媒体集团社会招聘3人备考题库及答案详解(夺冠)
- 2026《真空电子技术》青年编委招聘备考题库及答案详解(网校专用)
- 地质灾害预测与大数据技术
- 《纸的前世今生》课件
- 雨课堂学堂在线学堂云《科学研究方法与论文写作(复大)》单元测试考核答案
- 水利工程项目法人保证安全生产措施方案
- 2025年信用报告征信报告详版个人版模板样板(可编辑)
- 工业气体生产工安全培训效果测试考核试卷含答案
- GB/T 46318-2025塑料酚醛树脂分类和试验方法
- 汽车制造成品入库及质控流程
- 产后康复服务流程标准手册
- 消费者接受度2025年智能家居照明系统市场分析报告
- DB11-T 693-2024 施工现场临建房屋应用技术标准
评论
0/150
提交评论