




已阅读5页,还剩80页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
,第二章,基本数据类型与常用库函数,2,本章内容,3,2.1 字符集与标识符,2.1.1 C语言的字符集 2.1.2 标识符,4,2.1 字符集与标识符,2.1.1 C语言的字符集 字符是组成语言的最基本的元素。 字符集是指计算机语言规定允许使用的字符的集合。 C语言字符集主要由大小写字母、数字、符号等组成。 1) 大写和小写英文字母:AZ和az 2) 数字:09 3) 符号:+ - * / % = | ( ) _(下划线) ? 空格,5,用户指定的标识符,系统指定的标识符,标识符,标识符是给程序中的实体变量、符号常量、函数、数组、结构体以及文件所起的名字。,2.1.2 标识符,6,(一)系统指定的标识符: C语言中具有特定含义,专门用做语言特定成分的一类标识符。也称为保留字或关键字。ANSI 推荐的C语言的关键字共有32个,这些都是系统已经定义好的,用户不能再将它当作一般标识符使用。所有的关键字都必须用小写。,7,数据类型关键字(12):char int float double signed unsigned short long void struct union enum 存储类型关键字(5个):auto extern register static typedef 流程控制关键字(12):do while for if else switch case default goto continue break return 其他关键字(3个):sizeof const volatile,8,(二)用户指定的标识符:是以52个英文字母(az,AZ)或者下划线(_)开头, 后面可以跟随任意的字母、数字、下划线组成的字符序列。 如:NAME _sum max j_3 i12 _5是合法的 3sum $a5 是非法的,标识符的命名原则: “见名知意” 如: sum-求和 score-分数,9,注意: 1) C语言对标识符的长度无规定(因系统不 同),但是为了提高程序的通用性建议不超过7 个字符数。 2) 标识符是区分大小写的,通常将变量名、 函数名用小写字母,符号常量用大写字母。 3) 在语言中为了避免二义性,凡是已经有了 特殊的含义的标识符(即C语言的关键字32个) 或已赋予含义的,不可以再次赋予新的含义。 如:C程序关键字for ,不能再次用作其它含义。,10,练习 下列标识符(变量名)哪些是合法的? day1, student_name, _total, M.D, 123A, #wer, a*b, int , if, main,11,12,一个程序应包括两个方面的内容:,对数据的描述:数据结构(data structure)。在程序中要指定数据的类型和数据的组织形式。 对操作的描述:算法(algorithm),即操作步骤。,著名计算机科学家沃思提出一个公式: 数据结构 + 算法 = 程序,数据结构算法程序设计方法语言工具,完整的程序设计应该是:,2.2 基本数据类型,13,语言的数据类型,本章讨论 基本类型数据,数据类型决定: 1. 存储方式 2. 数据占内存字节数 3. 数据取值范围 4. 其上可进行的操作,14,15,2.3 常量与变量,2.3.1 常量和符号常量 2.3.2 变量 2.3.3 整型数据 2.3.4 实型数据 2.3.5 字符型数据,16,2.3 常量与变量,2.3.1 常量和符号常量 在程序运行过程中,其值不能被改变的量称为常量。 常量区分为不同的类型:,整型常量 100,125,-100,0 实型常量 3.14 ,0.125,-3.789 字符型常量 a, b,2 字符串常量 “hello”, “0.912e8”,17,在程序设计中,需要多次用到某些常数,或者有些数值特别关键,因此将其定义为符号常量,便于程序的阅读和修改。 符号常量是在程序中指定用一个标识符代表一个常量。 定义格式: #define 符号常量 常量,符号常量,#define 3.14159,18,#define PRICE 30 #include void main ( ) int num, total; num=10; total=num * PRICE; printf(total=%dn ,total); ,运行结果: total=300,说明: 程序中用#define命令行定义PRICE代表常量30,此后凡在本文件中出现的PRICE都代表30,可以和常量一样进行运算。,说明:如再用赋值语句给PRICE赋值是错的。 PRICE=40; / 错误,不能给符号常量赋值,例2.1 符号常量的使用,total=10*30;,修改,19,符号常量是在函数体之外专门定义的,也只有在定义之后才能使用。 定义中的标识符一般用大写字母。 符号常量的定义是宏定义预处理命令,不是C语句。 系统处理时,将系统中所有该标识符替换成对应的常量。 符号常量的值在其作用域内不能改变,也不能再被赋值。,#define 符号常量 常量,20,2.3 常量与变量,在程序运行过程中,其值可以改变的量,称为变量。 变量代表内存中具有特定属性的一个存储单元,为了能够直观、方便的访问这个存储单元,则需要给它起个名字,即变量名。存放在存储单元中的数据,称为变量值。,2.3.2 变量,21,变量名实际上是以一个名字对应代表一个地址,在对程序编译连接时由编译系统给每一个变量名分配对应的内存地址。从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据。,变量定义的一般形式: 类型标识符 变量名列表;,例如: int a,b,c; double x;,22,C语言规定,程序中的每个变量必须 “先定义,后使用”。,int student; stadent=19; /Undefined symbol stadent in function main,变量定义的三个位置: 1)函数或复合结构(一对 括起来的一段程序)内所有执行语句的前面。 2)所有函数外面(全局变量)。 3)函数形参表中。,23,变量定义作用: 1)为变量指定名称及数据类型,让系统为它分配相应的存储空间 2)确定相应变量的存储方式、数值范围和有效位数 3)确定相应变量所允许的操作,float a,b,c; c=a%b; /Illegal use of floating point in function main,24,关于变量定义的说明:,1)类型标识符可以是基本类型或用户自定义的构造类型标识符; 2)类型标识符和变量名之间用空格分开,变量名列表是用逗号隔开的若干个变量名,同类型的变量可以在同一语句中定义,变量定义最后应有分号。如:int a,b; 3)变量名的命名必须符合标识符的命名规则。 4)编译系统将大写字母和小写字母认为是两个不同的字符。如: int a; 与 int A; 5)一个变量名标识符只能被定义一次。否则容易引起二义性。 如:int a; float a;这二者是矛盾的。,25,变量赋值 (3种方式),(1)赋初值:在定义变量的同时使变量初始化。 int a=3; / 指定为整型变量,初值为 int a,b,c=5; /指定、为整型变量,但只对初始化,c的初值为 int a=3,b=3,c=3; /表示、的初值都是 (2)赋值表达式:int a, b; a = 5; b=3; (3)输入函数: scanf(“%d%d”, ,26,注意: 1)所赋初值和说明的类型必须一致。 如:int a=2.3; 2) 变量必须赋可以确定的值,先赋值再引用。 如:int a, b=a/2; 3)由于变量实质是内存一块区域,因此变量指在某一时刻只能存储一个值,一旦一个新的值填入,则旧的值就消失,且永远不能恢复。变量实际上是保存的最后一次赋予的值。 如:先说明:int a=0;再有动作:a 2 和 a 3,则过程和结果如何?,27,1.整型常量(整数)的表示方法 语言中,整型常量三种表示形式: (1)十进制整数:正、负号,09,首位不是0 如:123, -456。 (2)八进制整数:正、负号,07,首位是0 如:0123表示八进制数123,等于十进制数83, -011表示八进制数-11,即十进制数-9。 (3)十六进制整数:正、负号,09,a-f,A-F,前缀是0x或0X。 如:0x123,代表16进制数123,等于十进制数 291, -0x12等于十进制数10。,2.3.3整型数据,28,如:下面变量的定义实际上在内存中存储的值相同。 int i=0173; int j=0x7B; int k=123; 例:16 020 0x10 (16)10 10 012 0XA (10) 10,123 = 1111011 (B) 二进制 =173 (O) 八进制 =7B (X) 十六进制,29,2. 整型变量 (1)整型数据在内存中的存放形式 数据在内存中是以二进制补码形式存放的。 如: int i; /* 定义为整型变量 */ i=10; /* 给i赋以整数10 */,注意: 不同的编译系统为整型数据分配的字节数是不相同的。 如:Turbo C 2.0和Turbo C+ 3.0为一个整型变量在内存中分配2个字节的存储单元,而VC+ 6.0则分配4个字节。,30,(2)整型变量的分类,共六种,有符号基本整型 有符号短整型 有符号长整型 无符号基本整型 无符号短整型 无符号长整型,(signed)int (signed)short (int ) (signed) long (int) unsigned int unsigned short (int) unsigned long (int),注意:括号表示其中的内容是可选的。,31,(3)整数类型的有关数据:,32,(4)整型变量的定义与使用: 规定在程序中所有用到的变量都必须在使用前进行定义,并且变量一般都定义在程序的头上,不能定义在程序的中间或后面。 一般形式: 整型变量类型符 变量名表;,例如: int a, b ; /*指定变量、为整型*/ unsigned short c ,d; /*指定变量、为无符号短整型*/ long e, f; /*指定变量、为长整型*/,33,例2.2 不同类型整型数据的运算 #include void main() int a,b,c,d; /*指定、为整型变量* unsigned ; /*指定为无符号整型变量* 12; -24; 10; ; ; printf(,); ,说明: 可以看到不同种类的整型数据可以进行算术运算,在基本整型表示的数据范围内运算不受影响,一旦用到符号位情况就不同了。,运行结果: ,,34,2.3.4 实型数据,1.实型常量(实数,又称浮点数):,2种表示方法 十进制小数形式:由正号、负号、数字和小数点组成。 小数点的前或后至少一边要有数字。 如:0.123 , 123.4 ,1.,.0 指数形式:由正号、负号、数字、小数点和指数符号e(或E)组成。 字母e(或E)之前必须有数字(整数或实数),且e后面的指数必须为整数。 如: 123e4 0.2e-1,1e3、1.8e-3、-123e-6、-.1e-3 e3、2.1e3.5、.e3、e,35,2. 实型变量 (1)实型数据在内存中的存放形式 一个实型数据一般在内存中占4个(float)或8个(double)字节。与整型数据的存储方式不同,实型数据是按照指数形式存储的。系统把一个实型数据分成小数部分和指数部分,分别存放。指数部分采用规范化的指数形式。,小数的符号位,指数的符号位,小数部分,指数部分,36,规范化的指数形式: 在字母e(或E)之前的小数部分中,小数点 左边应有一位(且只能有一位)非零的数字。 例如: 123.456可以表示为: 123.456e0, 12.3456e1, 1.23456e2, 0.123456e3, 0.0123456e4, 0.00123456e5 其中的1.23456e2称为“规范化的指数形式”。,37,一个实数在用指数形式输出时,也是按规范化 的指数形式输出的。 例: printf(“%e”, 5689.65) ; 输出结果:5.689650e+003, 而不会是0.568965e+004或56.89650e+002。,38,例如: 1234.56在内存中的存储,1234.56= 1.23456103,图中是用十进制数来示意的,实际上在计算机中是用二进制数来表示小数部分以及用2的幂次来表示指数部分的。在这些字节中,究竟用多少位来表示小数部分,多少位来表示指数部分,标准C并无具体规定,由各C编译系统自定。 一般而言,小数部分位数多,数据表示的有效数字多,精度就高;而指数部分位数多,则表示的数据范围更大。,39,(2) 实型变量的分类,单精度(float型),实型变量,双精度 (double型),说明:实型变量的取值范围与值的精度和机器和编译系统有关.,40,2.3.5 字符型数据,1 .字符常量 (1)用单引号包含的一个字符是字符型常量 (2)只能包含一个字符,例,a,A, 1 abc、“a”,字符常量的值:该字符的ASCII码值,如 A65, a97, 048 , n10,41,2.3.5 字符型数据,转义字符: 以“”开头的特殊字符(代表一个字符),n 换行 t 横向跳格,位置移到下一个输出区 r 回车 输出反斜杠 输出 ” 输出” ddd ddd表示13位八进制数表示的字符(ASCII码) 如:101表示字符A xhh hh表示12位十六进制数表示的字符(ASCII码) 如:x41表示字符A,42,例2.3 转义字符的使用 #include void main() printf(“101 x42 Cn“); printf(“I say:“How are you?“n“); printf(“C Programn“); printf(“Turbo C“); printf(“Yb=n”); ,运行结果:(屏幕显示) A B C I say:”How are you?” C Program Turbo C =,43,字符型变量用来存放字符常量,注意只能放一个字符。 字符变量的定义形式如下: 字符型变量类型符 变量名表 如:char c1,c2; 在函数中可以用下面语句对字符变量赋值: c1A;c2 101 ; c3 65; 一个字符变量在内存中占一个字节(8位) 。,2.字符变量,44,字符数据在内存中的存储形式和特性:,存储形式: 将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的相应的ASCII代码(2进制)放到存储单元中。 例如:字符 ASCII码 内存 A 65 0100 0001 B 66 0100 0010,45,特性: 字符数据在内存中存储的是字符的ASCII码 一个无符号整数(0255),其形式与字符数据的存储形式类似,所以语言允许字符型数据与整型数据之间通用。 (1)一个字符型数据,既可以字符形式输入、输出,也可以整数形式输入、输出。 (2)在合法的取值范围内,字符变量与整型变量可以通用。即可以互相赋值。 (3)允许对字符数据进行算术运算,此时就是对它们的ASCII码值进行算术运算。,46,例2.4 向字符变量赋以整数。 #include void main() char c1,c2; c1=97; c2=98; printf(“%c %cn”,c1,c2); printf(“%d %dn”,c1,c2); ,说明:在程序中,将整数和分别赋给c1和c2,它的作用相当于以下两个赋值语句: c1;c2; 因为a和b的ASCII码为97和98,运行结果: 97 98,字符型数据和整型数据可以相互赋值,47,例2.5 大小写字母的转换 #include void main() char c1,c2; c1=a; c2=b; c1=c1-32; c2=c2-32; printf(“c c,c1,c2); ,说明:程序的作用是将两个小写字母a和b转换成大写字母A和B。从代码表中可以看到每一个小写字母比它相应的大写字母的码大。,运行结果: ,语言允许字符数据与整数直接进行算术运算,48,3. 字符串常量 字符串常量是一对双引号括起来的字符序列,其中的字符可以是字母、数字、其它字符、转义字符、汉字。 合法的字符串常量: “How do you do.”, “CHINA”, “a” , “$123.45” 可以输出一个字符串,如: printf (“How do you do.”);,49,区别字符常量与字符串常量: 是字符常量,”是字符串常量,二者不同。 如:假设c被指定为字符变量 :char c;,c= ; c=”a”;c”CHINA”;,结论:不能把一个字符串常量赋给一个字符变量。字符串常量的存储用字符数组或字符型指针变量。,50,规定:在每一个字符串常量的结尾加一个 “字符串结束标志”,以便系统据此判断字符串是否结束。 规定以字符作为字符串结束标志。,如: 如果有一个字符串常量” ,实际上在内存中是:,它占内存单元不是个字符,而是个字符, 最后一个字符为,但在输出时不输出。,51,字符常量与字符串常量的区别: 1)定界符不同。字符常量使用单引号,而字符串常量使用双引号。 2)长度不同。字符常量的长度固定为1,而字符串常量长度可以是0,也可以是某个整数。 3)存储要求不同。字符常量存储的是字符的ASCII码值,占一个字节的内存空间。而字符串常量除了要存储有效的字符外,还要存储一个结束标志0,占的内存字节数等于字符串的长度加1 。,52,内容回顾,字符集 (大小写字母、数字、符号) 标识符的定义和使用(见名知意) C语言数据类型(基本、构造、指针、空类型) 常量的分类(整型、实型、字符型、字符串常量) 符号常量的定义和使用(宏定义预处理命令) 变量的定义和赋值(3种方法),53,整型数据 实型数据 字符型数据,实型常量2种表示方法 (十进制、指数) 实型数据在内存中的存放形式(规范化的指数形式) 实型变量的分类(float、double) 实型数据的误差(存储、转换) 实型常量的类型(double),字符常量 转义字符(含义和使用) 字符变量(定义、赋值、1个字节) 字符数据在内存中的存储(ASCII码) 字符数据的特性(和整型数据通用:输入输出、 互相赋值、算术运算),整型常量3种形式 (十进制、八进制、十六进制) 整型数据在内存中的存放形式(二进制的补码) 整型变量的分类(基本整型、长整型、短整型、无符号型),54,55,2.4 输入/输出函数用法,2.4.1 单个字符的输入/输出函数用法 1.字符输出函数putchar( ) 2.字符输入函数getchar( ) 2.4.2 格式输入/输出函数用法 1.格式化输出函数 printf( ) 2.格式化输入函数 scanf( ) 3.整型数据的输入和输出 4.实型数据的输入和输出 5.字符型数据的输入和输出,56,2.4 输入/输出函数用法,C语言本身不提供输入输出语句,输入和输出操 作是由C函数库中的函数来实现的。 例如: 字符输入函数:getchar 字符输出函数:putchar 格式输入函数:scanf 格式输出函数: printf 字符串输入函数:gets 字符串输出函数:puts,57,使用系统库函数时,要用预编译命“#include” 将有关的“头文件”包括到用户源文件中。 例如:在调用标准输入输出库函数时,文件 开头应该有: #include “stdio.h” 或: #include ,58,1. 字符输出函数putchar( ) 功能:向标准输出设备(显示器)输出一个字符 调用格式:putchar( c ) c可以是字符常量(包括转义字符)、变量或表达式,还可以是整型数据。 返回值:正常时为写入的代码值, 出错时为EOF(即-1)。,2.4.1 单个字符的输入/输出函数用法,59,例2.6,#include void main( ) char c=A; putchar(c); putchar(A); /输出字符A putchar(n); /输出一个换行符 putchar(101); /输出ASCII码为101(八进制)对应的字母 putchar(65); /输出ASCII码为65(十进制)对应的字母 ,运行结果: AA AA,60,2.字符输入函数getchar( ) 功能:从标准设备(键盘)读取一个字符 调用格式: c=getchar( ); 参数:无 返回值:正常时为从输入设备得到的字符 出错时或遇结束(Ctrl+z)为 EOF(即-1) 当一次输入多个字符时,只有第一个字符作为函数的返回值。,2.4.1 单个字符的 输入/输出函数用法,61,#include void main( ) char c; c=getchar( ); putchar(c); putchar(n); ,运行结果 输入: d 输出: d,运行结果 输入:abcd 输出: a,例2.7,当程序运行到getchar()函数时,光标停留,等待接收字符,待接收一个字符后,按下回车键程序继续运行。,62,2.4.2 格式输入/输出函数用法,1.格式化输出函数 printf( ) 使用方式: printf(格式控制字符串,表达式列表) 功能: 按照格式控制字符串给定的输出格式,把各表达式的值在显示器上输出。 如: printf(“Hello World!n“); printf(“%d,%dn“,resm,resn); printf(“sum=%dn“,sum);,63,printf函数格式控制字符串: 函数输出时,从格式控制字符串的首字符开始 输出,直到串结束,基本规则为: 1)以格式说明符(以开头,格式说明字符 结尾)开头则以此格式输出列表中相对应表达 式的值。 2)普通字符原样输出。 如:int x=34; float y=3.14; printf(“ X = %d, Y = %f “, x, y);,输出: X=34,Y=3.14,64,printf函数中对应基本数据类型的格式说明符有:,65,printf函数中,%与格式说明字符之间可以加的附加说明符:,66,2.格式化输入函数scanf( ) 使用方式: scanf(格式控制字符串,地址列表) 功能:按照格式控制字符串给定的输入格式,把输入数据按照地址列表存入指定的存储单元。,“地址列表”是由若干个地址组成的列表,可 以是变量的地址、数组元素的地址。,如: scanf(“%d%d%d”,a在内存中的地址 &是地址运算符,67,scanf函数格式控制字符串: 函数从格式控制字符串的首字符开始输入, 到 格式字符串尾部结束输入。 基本规则为: 1)遇到非格式说明符则必须原样输入与之抵消。 2)遇格式说明符则以此格式输入数据存放到地址列表中对应的变量内存单元中。,如:scanf(“%d%d“, 要求输入: m=5, n=6,68,scanf函数中对应基本数据类型的格式说明符有:,69,scanf函数中,%与格式说明字符之间可以加的附加说明符有:,70,scanf函数中,% 后边的附加说明符 *,表示本输入项在读入后不赋给相应的变量。,例:scanf(“%2d%*3d%2d“, 输入:1234567 12a,345被跳过,67b。,*主要用于利用现有数据时,跳过某些数据项。,71,输入时可以指定输入数据所占列数,系统自动按它截取所需数据。 如: scanf(“%3d%3d“,&a,&b);输入:123456 系统自动将123赋给a,456赋给b。,输入数据时不能规定精度 。 例如: scanf(“%72f“,&a); 是不合法的,不能企图用这样的scanf函数并输入以下数据而使a的值为1234567。,72,1)在输入数据时,遇以下情况时认为该数据结束: 遇空格,或按“回车”或“跳格”(Tab)键; 按指定的宽度结束,如“”,只取列; 在格式控制字符串中包含其他的普通字符(如,)作为数据分隔符,输入时照原样输入。 2)输入缓冲区: 缓冲区的数据个数少于需要,等待继续输入。 缓冲区的数据个数多于需要,保留在缓冲区。,使用函数时应注意的问题 :,73,3. 整型数据的输入/输出,格式控制说明 % 十进制 八进制 十六进制 int %d %o %x short %hd %ho %hx long %ld %lo %lx unsigned %u %o %x unsigned short %hu %ho %hx unsigned long %lu %lo %lx,74,例2.8,# include void main( ) int a=27; printf(“%d%o%x%un“,a,a,a,a); /输出各数间无分隔符 printf(“%d,%o,%xn“,a,a,a); /分别以十、八、十六进制输出a printf(“a=%5d,a=%5o,a=%5xn“,a,a,a,a); /指定a的输出列宽为5 ,程序运行结果: 27331b27 27,33,1b a= 27,a= 33,a= 1b,75,#include void main( ) int a,b,c; scanf(“%o%d%x“, ,输入: 10 10 10,运行结果为: a=+8,b=10 ,c= 16 a=010,c=0x10,例2.9,注意:修饰符可以多个一起用, 例:printf(“%+08dn“,2346); 输出结果为:+0002346,76,4. 实型数据的输入和输出,输出函数 printf( ) float 和double使用相同的格式控制说明 %f:以小数形式输出浮点数,保留6位小数。 %e(或%E):以指数形式输出浮点数,保留6位小数。,77,# incl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业座谈会活动方案
- 企业战役活动方案
- 企业早会活动方案
- 企业正能量文化活动方案
- 企业消防活动月活动方案
- 企业电影活动策划方案
- 企业红色记忆活动方案
- 企业舞会活动方案
- 企业贫困助学活动方案
- 企业送医活动方案
- 2025年广东省广州市花都区交通局建管中心招聘14人历年高频重点提升(共500题)附带答案详解
- 垃圾焚烧炉安装及方案
- 幼儿教师讲故事技巧培训
- 【MOOC】保险学概论-中央财经大学 中国大学慕课MOOC答案
- 【MOOC】学术交流英语-东南大学 中国大学慕课MOOC答案
- 压力容器安全承诺书
- 汽车厂房布置与规划
- 河北农业大学现代科技学院《试验设计与数据处理实验》2022-2023学年第一学期期末试卷
- 材料力学-山东科技大学中国大学mooc课后章节答案期末考试题库2023年
- 《机器人驱动与运动控制》全套教学课件
- 实验室共建与共享协议
评论
0/150
提交评论