C程序设计初步知识.ppt_第1页
C程序设计初步知识.ppt_第2页
C程序设计初步知识.ppt_第3页
C程序设计初步知识.ppt_第4页
C程序设计初步知识.ppt_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

,第 2 章 C程序设计的初步,1.1 认识C语言程序 1.程序实例 #include /*预编译命令,将标准输入输出函数 作为头文件包括到用户源文件中 */ main( ) /*主函数,名为main*/ /*函数体.开始 */ float a,b,area; /*说明部分.定义变量类型*/ a=1.2,b=30.0; /*执行部分.赋值语句 */ area=a*b; /*执行部分.赋值语句 */ printf(“a=%f, b=%f , area=%f n”,a,b,area); /*执行部分.输出语句*/ /*函数体.结束*/ /* */ 表注释,成对出现.不能嵌套,2.1 简单的C程序设计,1.2 实例总结 1.C程序结构,预编译命令,主函数 main( ) 函数体开始 说明部分 ; 必须写在执行部分前 执行部分 ; 函数体结束,2.2 标识符、常量、变量 2.2.1 标识符 标识符定义:用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列。 标识符命名规则 (1)有效字符:只能由字母(AZ,az) 、数字(09) 和下划线组成,且以字母或下划线开头。 (2)有效长度:随系统而异,但至少前个字符有效。如果超长,则超长部分被舍弃。 例如,由于student_name和student_number的前个字符相同,有的系统认为这一个变量,是一回事而不加区别。 例:判断下列哪些可做C中的标识符? area 456P PI _asf a#D c.w P203p,注意:C语言对英文字母的大小敏感,即同一字母的大小写,被认为是两个不同的字符。 习惯上,变量名和函数名中的英文字母用小写,以增加可读性。 思考题:在C语言中,变量名total与变量名TOTAL、ToTaL、tOtAl等是同一个变量吗? 标识符命名的良好习惯见名知意: 所谓“见名知意”是指,通过变量名就知道变量值的含义。通常应选择能表示数据含义的英文单词(或缩写)作变量名,或汉语拼音字头作变量名。 例如,name/xm(姓名)、sex/xb(性别)、age/nl(年龄)、salary/gz(工资)。,一、关键字 有固定含义,不能另作它用来。TC2.0有43个 下表列出了 C 语言的所有关键字: auto enum restrict unsigned break extern return void case float short volatile char for signed while const goto sizeof _Bool continue if static _Complex default inline struct _Imaginary do int switch double long typedef else register union 例如:int double; 关键字,不能另作它用。否则:是一种语法错误,不能通过编译!,标识符的分类,auto :声明自动变量 一般不使用 double :声明双精度变量或函数 int: 声明整型变量或函数 struct:声明结构体变量或函数 break:跳出当前循环 else :条件语句否定分支(与 if 连用) switch :用于开关语句 long :声明长整型变量或函数 case:开关语句分支 enum :声明枚举类型 register:声明积存器变量 typedef:用以给数据类型取别名(当然还有其他作用) char :声明字符型变量或函数 extern:声明变量是在其他文件正声明(也可以看做是引用变量) return :子程序返回语句(可以带参数,也看不带参数) union:声明联合数据类型 const :声明只读变量 float:声明浮点型变量或函数 short :声明短整型变量或函数 unsigned:声明无符号类型变量或函数 continue:结束当前循环,开始下一轮循环 for:一种循环语句(可意会不可言传) signed:生命有符号类型变量或函数 void :声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用) default:开关语句中的“其他”分支 goto:无条件跳转语句 sizeof:计算数据类型长度 volatile:说明变量在程序执行中可被隐含地改变 do :循环语句的循环体 while :循环语句的循环条件 static :声明静态变量 if:条件语句,二、预定义标识符 预定义标识符是系统定的,具有特定含义。C语言提供的库函数名和编译预处理命令(宏替换define 宏终止undef 文件包含 include 动态存储分配函数malloc free calloc)等构成了预定义标识符。 如重新定义另作他用时,失去原预定义的原意。建议不要另作他用。 如printf,scanf。,三、用户标识符 用户根据自己需要定义。 一般用来给变量、函数、数组等命名。 定义时,注意见名知义,增强程序的可读性。 当用户标识符和关键字相同时,系统编译出错; 当用户标识符和预定义标识符相同时,系统编译没有提示,但预定义标识符失去原定含义,代之用用户确认的含义。,C语言的关键字不能用作变量名(用户标识符)。预定义标识符尽量不用作变量名(用户标识符)。,数据:能够输入到计算机并由计算机进行处理的对象 每一数据具有各自的数据类型。数据类型决定数据在内存中的存储长度和存储格式,C语言程序中,数据一般以常量或变量来体现,程序需对大量的常量或变量进行数据处理和计算。 常量分为:字面常量和符号常量 2.2.2 常量P9(字面常量) 1、 常量是指程序运行中其值不能被改变的量。 2、包括:整型常量、实型常量、字符常量、字符串常量; 3、基本整型常量只能用数字表示,不带小数点; 4、实型常量,必须带小数点;0. .0 0.0 5、字符常量用一个字符表示; 6、字符串常量,用“一串字符”表示;,例:说明下列数据是分别是什么类型的常量? 12. 34 -22.9 - .7 as “a” “a ” beng -90 .89 C语言可直接从形式上,确定是什么类型的常量。,2.2.3 符号常量 用一个符号代表一个常量; 这个符号名必须在程序中特别的“指定”,并符合标识符的命名规则; 其指定的方法,例2.2 #define 宏名 替换文本 含义是:将源程序中所有宏名的标识符用替换文本替换。,用户定义的标识符(不得与程序中其它名字相同),为和普通变量区别 一般采用大写,符号常量在使用之前需通过#define命令定义。如: #define PI 3.14159 定义了一个符号常量PI,从此定义点之后,PI将一直代表3.14159。还有例2-1中的PRICE也是一个符号常量,它对应的就是常量值20。在必要的时侯引入符号常量有以下好处:,例2-1:程序中的常量和变量。 #define PRICE 20 main() int num, total; /*将变量名改用main和define 会怎样?*/ num = 5; total = num * PRICE; /*可不可以将PRICE写成price?*/ printf(“ total = %d“, total ); 运行结果为,在显示器上显示: total=100,用标识符代表一个常量,称为符号常量。 符号常量与变量不同,它的值在其作用域内不能改变,也不能再被赋值。 (PI=9.9X) 使用符号常量的好处是: 含义清楚; 能做到“一改全改”。 作业思考:P10例:1、判断程序中标识符的类型(关键字)(预定义标识符、用户自定义标识符)、常量、变量?,2.2.4 变量 指在程序运行过程中其值可变的量; 变量名由用户标识符表示; 变量名的实质: 代表着某一个内存单元; 例:变量a -某个内存单元的名字叫a 规定: C语言中,所有的变量必须先定义、说明其类型后使用;系统在编译时,根据其类型为其分配存储单元的大小. 该定义可放在 函数体内的前部(一般) 或函数的外部 或者复合语句的开头 看PPT17中的变量,2.3 整型数据,2.3.1整型常量 .三种表示形式 整型常量即整常数,在语言中可用三种形式表示: (1)十进制。例如10、36。 (2)八进制(以数字开头)。例如012。 (3)十六进制(以数字+小、大写字母xX开头)。例如0x36 注意:C程序中,只有十进制可以是负数。 2.分类 根据占用内存字节数的不同,整型常量又分为类: (1)基本整型(类型关键字为int)。 (2)短整型(类型关键字为short int)。 (3)长整型(类型关键字为long int)。 (4)无符号整型。无符号型又分为无符号基本整型(unsigned int)、无符号短整型(unsigned short)和无符号长整型(unsigned long)三种,只能用来存储无符号整数。,2.3.2 整型变量 P11 1.分类 根据占用内存字节数的不同,整型变量又分为类: (1)基本整型(类型关键字为int)。 (2)短整型(类型关键字为short int)。 (3)长整型(类型关键字为long int)。 (4)无符号整型。无符号型又分为无符号基本整型(unsigned int)、无符号短整型(unsigned short)和无符号长整型(unsigned long)三种,只能用来存储无符号整数。 所有的变量必须先定义并说明其类型后使用; int k; double r, s; int i, j=0, k=2;,2.占用内存字节数与值域 C标准中,没有具体地规定各类型整型数据所占的内存空间的大小,只是要求long=int=short, 具体如何实现由各计算机系统自行决定 见表2.1 VC6.0 中定义的整型数所占用的字节数和数值范围,2.3.4 整数在内存中的存储形式 内存的最小存储单位-位bit(存放0或1) 字节: 1byte=8bit 字word:用一个字来存放一条机器指令或一个数据. P12 一、正整数 如:short 类型的正整数5 在内存中存放为:0000 0000 0000 0101 (long?) 正整数按“原码”形式存放,最大的short 类型的正整数是: 0111 1111 1111 1111 (32767),二、负整数 1、负整数在内存中以“补码”形式存放。 例:-5在内存中的存放形式为: 1000 0101 负数原码 = 1111 1010 =1111 1011=存入 2、已知内存中存放的负数,求其原码 1111 1010 = 1000 0101= -5 = -6 存放的负数 练习: (1) -12存放形式 (2) 负数1011 1100的原码,除符号位外,取反码,加1,除符号位外,取反码,转化为十进制,减1,三、无符号整数 最高位不再用来存放整数的符号. 其不能表示负数 1111 1111 1111 1111=代表65535 ?为什么不是-1,2.4 实型数据,2.4.1 实型常量 十进制小数形式,如:100.0、0.5、-10.8等,注意实型常量中必须要有一个小数点 指数形式,如:100e5表示100105,注意字母E(或e)之前必须有数字,且E(或e)后面的指数必须为整数,如E5、1.5e3.8、1e等都是不合法的指数形式 规范化的指数形式 字母E(或e)之前的小数部分,其小数点之前必须有且只能有一位非零的数值。 如:3.58759E2 下列哪些指数形式是合法,哪些不是规范的指数形式? .34e-9 78.0E 2 e3 .E-2 12e5 3.322E-0.2,2. 实型变量及其定义,C语言中的实型变量分为单精度型和双精度型两种,分别用保留关键字float和double进行定义。 例如:float x,y;/*说明变量x,y为单精度实型*/ double z; /*说明变量z为双精度实型*/,3. 实型数据分类,在大多数C编译系统中,将实型常量都作为双精度型来处理。例如: float a; double b; a=111111.111; /*最后两位小数不起作用*/ b=111111.111;,4. 实型数据在内存中的存储形式,实型数据在内存中是按照指数的形式来存储的。如图2.2所示。,由于实型数据在内存中的存储位数是固定的,也是有限的,所以实型数据的精度不是很高,所能表示的数据范围也是有限的。而且由于实型数据的存储形式比较复杂,计算机在进行算术运算时的处理速度也比较慢。 在计算机内可以精确地存放一个整数.不产生误差; 而存放实数往往产生误差,5.实型数据的误差,由于用来存储实型数据的存储单元的位数有限,所以有效位数以外的其它数字位被舍去了。这种误差叫做存储误差。此外,在将十进制数转换成二进制数时,有时也会产生误差,即转换误差。,main() float x1, x2; x1=288.4; /*有效位数不多,但会产生转换误差*/ x2=1234567891.0; /*有效位数太多,会产生存储误差*/ printf(“x1=%fn“, x1); printf(“x2=%fn“, x2); 程序的运行结果为: x1=288.399994 x2=1234567936.000000,例2.2 实型数据的误差,2.5 算术表达式,1.基本算术运算符有: 、*、/、% 注意事项 两个整型数据相除的结果只能为整型数值,如72的结果为3 “+”或“-” 用作单目运算符时只能有一个运算量,如x=-5,则+x的值还是-5,而-x的值为+5。 求余运算只能在两个整型数据之间进行,如9%5的值为4,而9.5%3为非法的运算,如-9%5的值为4或者-4 当运算量为负数时,所得结果的符号未作明确的规定。TURBO C系统规定余数的符号与被除数相同。 -双目运算符两边类型不一致时,系统自动进行类型转换;见课件P35-37 -实型运算,系统皆转变为双精度方式进行;,2. 算术表达式,用算术运算符和圆括号将函数和运算对象(如常量、变量等)按一定的规则连接起来就可以构成一个算术表达式,如:(ab)*c5.0、x*y2*sin(z)等都是算术表达式 表达式都有一个值,即运算结果。 应该注意表达式中运算符的优先级和结合性 P15 优先级用于决定运算中的运算顺序,即有多个运算符出现时,哪一个先计算,哪一个后计算。 P15 结合性则决定同一优先级的运算符之间的运算顺序,即是先左后右还是先右后左。P269附录,结合性是指,当一个操作数两侧的运算符具有相同的优先级时,该操作数是先与左边的运算符结合,还是先与右边的运算符结合。 规定: 优先级别高的先运算; 同一级别的,除单目运算、赋值运算、条件运算外,结合性都是从左到右的; 5+1/2 (5+1)/2 5*-2 5*(-2),3. 算术运算中的类型转换,在C语言中要求参加运算的两个运算量是同一数据类型,而运算结果也是该数据类型。 对数据类型不一致的两个运算量,系统会进行数据类型转换,将其中的一个低级别类型的数据向另一个高级别类型的数据转换(按空间大小和数值范围),然后才进行相应的算术运算,运算的结果为其中高级别类型的数据。,隐式转换 什么情况下发生 运算转换-不同类型数据混合运算时 赋值转换-把一个值赋给与其类型不同的变量时 输出转换-输出时转换成指定的输出格式 函数调用转换-实参与形参类型不一致时转换 运算转换规则:不同类型数据运算时先自动转换成同一类型,3.强制类型转换运算符,当自动类型转换不能达到目的时,可以使用强制类型转换运算符。强制类型转换运算符就是用一对括号括起来的类型名标识符,其一般格式为: (类型名标识符)(表达式) 例如:假设x为float类型,则表达式“x%3”是不合法的,因为%运算符要求其两侧的数据都必须是整型数据。可以使用表达式“(int)x%3”达到求余数的目的,即先将实型变量x强制转换为整型值,然后再进行取余运算。,显式转换(强制转换) 一般形式:(类型名)(表达式) 例x=3.2 y=2 求值: (int)(x+y) (int)x+y (double)(3/2) (int)3.6 说明:强制转换得到所需类型的中间变量,原变量类型不变,例 main( ) float x; int i; x=3.6; i=(int)x; printf(“x=%f,i=%d”,x,i); 结果:x=3.600000,i=3,精度损失问题,Ch2_007.c,Ch2_008.c,P15 例,#include main() double x=3.2,z,k,l,p; int y=2; z= (int)(x+y); k= (int)x+y; l= (double)(3/2); p= (int)3.6 ; printf(“%f,%f,%f,%f“,z,k,l,p); ,2.6 赋值运算符与赋值表达式,变量的值在程序的运行过程中能够发生变化主要是通过对变量进行赋值来完成的。如果在程序中没有赋值操作,则变量的值也就不会发生变化。 1.赋值运算符()的作用是把一个数据或表达式的值赋给一个变量。例如:x=3 赋值运算符的左边只能是变量,不允许是算术表达式或常量。例如:x+1=3 赋值运算符与数学中的等号不同,赋值运算符求解以后能够得到一个运算结果。 赋值运算符的优先级别只高于逗号运算符,具有从右向左的结合性。a=b=9+b,2. 赋值表达式,由赋值运算符将一个变量和一个表达式连接起来的式子称为赋值表达式。 赋值表达式的一般形式为: 变量 = 表达式 例如:x=3*5 执行过程:先将赋值运算符右边表达式的值求出来,然后将该值赋给左边的变量,被赋值变量的值就是整个赋值表达式的值。 x=x n=n+1 的含义P16 P16说明,3. 复合的赋值运算符,复合的赋值运算符是在赋值运算符的前面加上其它的运算符组合而成的新运算符。 10种复合赋值运算符分别是: * % & ! 例如:x+=3 等价于 x=x+3。 x%=3 等价于 x=x%3。 注意:这些运算符都是由多个字符组合而成的,其字符之间不允许有空格。,例2。3 P17,5. 赋值运算中的类型转换P17,系统自动将赋值运算符右边的数据类型转换成赋值运算符左边变量的类型。 1.将实型数据转换为整型值时直接舍弃实数的小数部分。若其值超出整型值的范围则出错。 short a=123456789.321; 超出范围 舍去 =出错 高类型向低类型转换丢失精度 2.将整型值转换为实型值时整数部分取整型值,小数部分的值为零。 float f=13; =结果f为13.000000,3.将双精度的实型数据转换为单精度的实型数据时截取其小数部分中前面的7位有效数字(十进制数),指数部分保持不变。超值错。 float x;double y=33.423549993; x=y; 内存中,x的值为33.423550 高类型向低类型转换丢失精度,赋值运算中的类型转换(续),4.将整型数据转换为取值范围更大的整型数据时, ( 低类型整型 高类型整型) (1)对于有符号数,用其符号位的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论