1、主讲:李旭芳上海工程技术大学上海工程技术大学熟记熟记C语言的基本概念语言的基本概念熟悉熟悉TurboC或或VC的上机操作环境的上机操作环境会读、会编、会调试会读、会编、会调试C程序程序学习要点熟记熟记C语言的语法语言的语法学会算法分析与算法设计学会算法分析与算法设计课程目的教材、参考书与课时安排教材教材C程序设计程序设计(第四版)(第四版)谭浩强编著谭浩强编著清华大学出版社清华大学出版社参考书参考书C语言程序设计教程语言程序设计教程谭浩强谭浩强高等教育出版社高等教育出版社C高级实用程序设计高级实用程序设计王士元王士元清华大学出版社清华大学出版社C程序设计试题汇编程序设计试题汇编谭浩强谭浩强清华
2、大学出版社清华大学出版社课时安排课时安排64学时学时课程要求课前请做好预习课前请做好预习保持课堂安静,头脑清醒,思维活跃保持课堂安静,头脑清醒,思维活跃认真、独立、按时完成并提交作业认真、独立、按时完成并提交作业重视上机实践,有效利用宝贵的上机时间重视上机实践,有效利用宝贵的上机时间第1章程序设计和C语言第2章算法程序的灵魂第3章最简单的C程序设计顺序程序设计第4章选择结构程序设计第5章循环控制第6章数组第7章函数第8章指针第9章自定义数据类型第10章文件目录C语言发展历史C语言的特点简单的C程序介绍C程序的上机步骤第1章C语言概述 C语言程序设计 第一章第一章 C C语言概述语言概述1.1C
3、语言发展历史语言发展历史程序设计语言的发展程序设计语言的发展CPU指令系统,由0、1序列构成的指令码组成如:10000000加10010000减用助记符号描述的指令系统,可进行地址、位操作如ADDA,B编写系统软件,直接对硬件操作,可读性,移植性差面向机器的语言 C语言程序设计 第一章第一章 C C语言概述语言概述可读性,移植性好,编写应用程序一般较难实现汇编语言的某些功能如:地址和位的操作C语言兼有高级和低级语言的功能适合写系统软件和应用软件又称中级语言C语言发展过程语言发展过程v产生背景产生背景lALGOL60CPL语言语言BCPLB语言,写语言,写UNIX系统系统v产生过程产生过程l时间
4、时间:19721973l地点地点:美国贝尔实验室美国贝尔实验室l目的目的:UNIX操作系统操作系统l设计人设计人:Ken.Thompson和和Dennis.M.RitchievC标准标准l标准标准C:1978年年K&R合著合著TheCProgrammingLanguagelANSIC:1983年年l87ANSIC:1987年年l1990年国际标准的年国际标准的ANSIC,1994年再次修订。年再次修订。vC版本版本lMicrosoftC或称或称MS-ClTurboC或称或称TC C语言程序设计 第一章第一章 C C语言概述语言概述1.2C语言的特点语言的特点语言简洁、紧凑、灵活语言简洁、紧凑、
5、灵活运算符丰富运算符丰富数据结构、数据类型丰富数据结构、数据类型丰富v链表、树、栈链表、树、栈程序设计结构化、模块化程序设计结构化、模块化v结构化控制语句:结构化控制语句:ifelse、while、switch、forv函数作为模块单位函数作为模块单位语法不严格、程序设计自由度大语法不严格、程序设计自由度大可以访问内存地址、进行位运算可以访问内存地址、进行位运算生成目标代码质量高生成目标代码质量高可移植性好可移植性好 C语言程序设计 第一章第一章 C C语言概述语言概述32个关键字:(由系统定义,不能重作其它定义由系统定义,不能重作其它定义)autobreakcasecharconstcont
6、inuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunsignedunionvoidvolatilewhileTurboC扩充了11个关键字:asm_cs_ds_es_sscdeclfarhugeinterruptnearpascal注意:在注意:在C语言中,关键字都是小写的。语言中,关键字都是小写的。C语言程序设计 第一章第一章 C C语言概述语言概述C语言简洁、紧凑,使用方便、灵活。ANSIC一共只有32个关键字,见365
7、页附录B9种控制语句:if()elsefor()while()dowhile()continuebreakswitchgotoreturn C语言程序设计 第一章第一章 C C语言概述语言概述C语言有9种控制语句,程序书写形式自由,主要用小写字母表示,压缩了一切不必要的成分。C语言程序设计 第一章第一章 C C语言概述语言概述表1.1C语言与Pascal语言比较通过表1.1我们可以得出结论:C比Pascal简练,因此源程序更短,编程效率高。C语言PASCAL语言含义 if(e)S;int i;int a10;int f();int*p;i+=2;i+,+I;BEGIN ENDIF(e)THEN
8、 S;VAR i:INTEGER;VAR a:ARRAY1.10 OF INTEGER;FUNCTION f():INTEGER;VAR P:INTEGER;i=i+2;i=i+1;函数体、分程序、复合语句条件语句 定义i为整形变量定义a为一维数组定义f为返回整形值函数;p为指向整形变量的指针变量;赋值语句,使i+2赋给Ii自增值1,i加1赋给I34种运算符:算术运算符:+-*/%+-关系运算符:=!=逻辑运算符:!&|位运算符 :|&赋值运算符:=及其扩展条件运算符:?:逗号运算符:,指针运算符:*&求字节数 :sizeof强制类型转换:(类型)分量运算符:.-下标运算符:其它 :()-注意
9、:各种运算符混合使用,其优先级与结注意:各种运算符混合使用,其优先级与结合方法是难点,可先预习。合方法是难点,可先预习。C语言程序设计 第一章第一章 C C语言概述语言概述C语言运算符丰富(附录C)C数据类型基本类型构造类型指针类型空类型void定义类型typedef数值类型字符类型char枚举类型enum整型浮点型单精度型float双精度型double短整型short长整型long整型int数组结构体struct共用体union C语言程序设计 第一章第一章 C C语言概述语言概述C语言数据结构丰富1.3简单的简单的C程序介绍程序介绍/*example1.1ThefirstCProgram*
10、/#includevoidmain()printf(“Thisisacprogram.n”);C语言程序设计 第一章第一章 C C语言概述语言概述注释编译预处理主函数语句输出:Thisisacprogram.例例1.1 1.1 第一个程序第一个程序This is a c program.printfprintf语句中的“nn”是换行换行符符 例例1.21.2求求俩俩个个数数的的和和/*example1.1calculatethesumofaandb*/#include/*Thisisthemainprogram*/voidmain()inta,b,sum;/*定义变量*/a=10;b=24;s
11、um=add(a,b);printf(”sum=%dn,sum);/*Thisfunctioncalculatesthesumofxandy*/intadd(intx,inty)intz;z=x+y;return(z);运行结果:sum=34函数语句预处理命令注释 C语言程序设计 第一章第一章 C C语言概述语言概述例例1.3 1.3 从键盘输入两个整数,输出其中较大的数从键盘输入两个整数,输出其中较大的数#includevoidmain()intmax(intx,inty)inta,b,c;scanf(“%d,%d”,&a,&b);c=max(a,b);printf(max=%d,c);in
12、tmax(intx,inty)intz;if(xy)z=x;elsez=y;return(z);scanfscanf语句中“&a”的含义是“取地址取地址”输入:10,20输出:max=20声明部分,定义变量声明部分,定义变量调用调用max函数,返回值赋给函数,返回值赋给c定义定义max子函数,函数值、子函数,函数值、形参形参x、y为整型为整型通过通过max函数将函数将z值带回调用处值带回调用处C语言格式特点语言格式特点v习惯用习惯用小写小写字母,大小写敏感字母,大小写敏感v不使用行号,不使用行号,无程序行无程序行概念概念v可使用空行和空格可使用空行和空格v常用常用锯齿形锯齿形书写格式书写格式
13、C语言程序设计 第一章第一章 C C语言概述语言概述main().main()inti,j,sum;sum=0;for(i=1;i10;i+)for(j=1;j10;j+)sum+=i*j;printf(“%dn”,sum);优秀程序员的素质之一:使用TAB缩进对齐有足够的注释有合适的空行C语言结构特点语言结构特点v函数与主函数函数与主函数l程序由一个或多个函数组成程序由一个或多个函数组成l必须有且只能有一个主函数必须有且只能有一个主函数main(),可以放在程序中任一可以放在程序中任一位置位置l程序执行从程序执行从main开始,在开始,在main中结束,其它函数通过嵌中结束,其它函数通过嵌套
14、调用得以执行。套调用得以执行。v程序语句程序语句lC程序由语句组成程序由语句组成l用用“;”作为语句终止符作为语句终止符v注释注释l/*/为注释为注释,不能嵌套不能嵌套l不产生编译代码不产生编译代码例:/*Thisisthemain/*ofexample1.1*/*/非法v编译预处理命令编译预处理命令 C语言程序设计 第一章第一章 C C语言概述语言概述编辑链接编译执行1.4C程序的上机步骤C程序开发步骤file.exe C语言程序设计 第一章第一章 C C语言概述语言概述程序代码的录入,生成源程序*.c语法分析查错,翻译生成目标程序*.obj与其它目标程序或库链接装配,生成可执行程序*.ex
15、eTurboC集成开发环境集成开发环境v配置要求配置要求lUNIX,PC-DOS,MS-DOS,UCDOS操作系统操作系统l硬盘容量约硬盘容量约2M,448KRAM运行空间运行空间v安装安装TurboCl创建子目录创建子目录lInstalll若不是可安装盘若不是可安装盘,将文件拷贝到对应的目录下将文件拷贝到对应的目录下TC*.*INCLUDELIB*.*SYS*.*C语言程序设计 第一章第一章 C C语言概述语言概述v进入进入TurboClD:TCTC.exe l主控菜单主控菜单u文件操作文件操作FILE:NewLoadSaveWritetou编辑操作编辑操作EDIT:插入插入/修改修改块块查
16、找查找/替换替换u编译链接编译链接COMPILELINKMAKEu执行执行RUNv退出退出TurboClAlt+xlAlt+F,Qv帮助帮助HelplF1lCtrl+F1 C语言程序设计 第一章第一章 C C语言概述语言概述基本操作:F10-调用主菜单F2-存盘F3-打开F1-帮助信息Alt+F9-CompileCtrl+F9-RunAlt+F5-UserScreenAlt+X-退出Tcv常用热键常用热键文本编辑:-移动光标PgUp,PgDn-上下翻页Ctrl+PgUp,Ctrl+PgDn-文件首尾Home行首 End行尾Ddelete Insert Bkspace块操作:Ctrl+KB-块开
17、始标记Ctrl+KK-块结束标记Ctrl+KC-块拷贝Ctrl+KV-块移动Ctrl+KY-块删除Ctrl+KH-块隐藏程序调试:F8-StepoverF7-TraceintoF4-GotoCursorCtrl+F7-AddWatchCtrl+F8-ToggleBreakpointCtrl+F2-ProgramReset窗口操作:F5-窗口缩放F6-窗口切换 C语言程序设计 第一章第一章 C C语言概述语言概述课后作业课后作业预习预习“题解与上机指导题解与上机指导”一书中一书中vP181199页的页的14.314.10节节vP236页实验页实验1教材教材P12:1.5、1.6、1.7、1.8题
18、。题。注意:有关设计程序的作业,必须经过上机注意:有关设计程序的作业,必须经过上机调试!调试!C语言程序设计 第一章第一章 C C语言概述语言概述算法的概念简单算法举例算法的特性怎样表示一个算法第2章程序的灵魂算法 C语言程序设计 第二章第二章 程序的灵魂程序的灵魂算法算法结构化程序设计方法 C语言程序设计 第二章第二章 程序的灵魂程序的灵魂算法算法程序包括的内容:程序包括的内容:v数据结构:数据的类型和组织形式数据结构:数据的类型和组织形式v算法:操作步骤的描述算法:操作步骤的描述NikiklausWirth提出提出:程序程序=数据结构数据结构+算法算法教材认为:教材认为:程序程序=算法算法
19、+数据结构数据结构+程序设计方法程序设计方法+语言工具和环境语言工具和环境 灵魂灵魂加工对象加工对象工具工具 C语言程序设计 第二章第二章 程序的灵魂程序的灵魂算法算法2.1 算法的概念算法的概念为解决一个问题而采取的方法和步骤,就成为解决一个问题而采取的方法和步骤,就成为算法。例如:歌曲的乐谱,建造房子等。为算法。例如:歌曲的乐谱,建造房子等。算法核心是解决算法核心是解决“做什么做什么”和和“怎么做怎么做”的问题。的问题。vP15页的例页的例2.1,求,求15之积。之积。v可以有多种方法,一般采用简单和运算步骤少可以有多种方法,一般采用简单和运算步骤少的。的。准确、高效准确、高效计算机算法类
20、别计算机算法类别v数值运算算法数值运算算法v非数值运算算法非数值运算算法 C语言程序设计 第二章第二章 程序的灵魂程序的灵魂算法算法2.2 简单算法举例简单算法举例例例2.1v方法方法1:累乘:累乘v方法方法2:用循环结构解决,灵活、通用。:用循环结构解决,灵活、通用。例例2.2v通过循环选择打印通过循环选择打印例例2.3v判断闰年判断闰年例例2.4v累加求级数的和,循环改变正负号和分母加累加求级数的和,循环改变正负号和分母加1。例例2.5v判断素数判断素数课后认真思考,加深什么是算法的概念 C语言程序设计 第二章第二章 程序的灵魂程序的灵魂算法算法2.3 算法的特性算法的特性有穷性有穷性在合
21、理范围内可完成在合理范围内可完成确定性确定性无歧义性无歧义性有零个或多个输入有零个或多个输入从外界得到信息从外界得到信息有一个或多个输出有一个或多个输出问题的答案问题的答案有效性有效性每步有确定的结果每步有确定的结果 C语言程序设计 第二章第二章 程序的灵魂程序的灵魂算法算法2.4 怎样表示一个算法怎样表示一个算法自然语言表示自然语言表示v2.2节例。易懂,文字冗长,易歧义性节例。易懂,文字冗长,易歧义性流程图表示流程图表示v用流程图符号构成,直观,易懂用流程图符号构成,直观,易懂 N-S流程图表示流程图表示伪代码表示伪代码表示计算机语言表示计算机语言表示q 顺序结构q 选择结构q 循环结构
22、C语言程序设计 第二章第二章 程序的灵魂程序的灵魂算法算法传统流程图流向混乱、可读性差,所以应该采用结构化流程图。结构化程序设计结构化程序设计v基本思想:任何程序都可以用三种基本结构表示,基本思想:任何程序都可以用三种基本结构表示,限制使用无条件转移语句(限制使用无条件转移语句(goto)v结构化程序:由三种基本结构反复嵌套构成的程序结构化程序:由三种基本结构反复嵌套构成的程序v优点:结构清晰,易读,提高程序设计质量和效率优点:结构清晰,易读,提高程序设计质量和效率三种基本结构三种基本结构v 顺序结构顺序结构ABAB流程图N-S图 C语言程序设计 第二章第二章 程序的灵魂程序的灵魂算法算法PA
23、B真假PBA真假v选择结构选择结构A1A2AiAnk=k2k=k1k=knk=ki.l二分支选择结构二分支选择结构l多分支选择结构多分支选择结构 C语言程序设计 第二章第二章 程序的灵魂程序的灵魂算法算法v循环结构循环结构l当型循环结构当型循环结构l直到型循环结构直到型循环结构PA假真当P为真AAP真假A直到P为真注:注:A,B,A1.An可以是一个简可以是一个简单语句,也可以是一个基本结构单语句,也可以是一个基本结构 C语言程序设计 第二章第二章 程序的灵魂程序的灵魂算法算法三种基本结构的共同特点:三种基本结构的共同特点:v只有一个入口;只有一个入口;v只有一个出口;只有一个出口;v结构内的
24、每一部分都有机会被执行到;结构内的每一部分都有机会被执行到;v结构内不存在结构内不存在“死循环死循环”。C语言程序设计 第二章第二章 程序的灵魂程序的灵魂算法算法2.5结构化程序设计方法结构化程序设计方法结构化程序:用三种基本结构组成的程序结构化程序:用三种基本结构组成的程序基本设计思路:基本设计思路:v复杂问题分解成复杂问题分解成几个最基本问题,再分别处理。几个最基本问题,再分别处理。采用的方法:采用的方法:v自顶向下;自顶向下;v逐步细化;逐步细化;v模块化设计:复杂问题按功能分成多个子模块模块化设计:复杂问题按功能分成多个子模块v结构化编码:正确采用三种基本结构实现结构化编码:正确采用三
25、种基本结构实现 C语言程序设计 第二章第二章 程序的灵魂程序的灵魂算法算法课后作业课后作业P36页习题:页习题:v2.4、2.8(结合实验指导读懂答案)(结合实验指导读懂答案)v用用N-S图表示图表示2.4题中题中v用传统流程图求解以下问题:将一个用传统流程图求解以下问题:将一个16进制数进制数转化为转化为10进制数进制数 复习二进制的基本概念复习二进制的基本概念v“计算机文化基础计算机文化基础”一书中一书中P2733页页第3章数据类型、运算符与表达式 C语言程序设计 第三章第三章 程序的灵魂程序的灵魂算法算法C的数据类型常量与变量整型数据实型数据字符型数据变量赋初值各种数值型数据间的混合运算
26、算术运算符和算术表达式赋值运算符和赋值表达式逗号运算符和逗号表达式 C语言程序设计 第三章第三章 程序的灵魂程序的灵魂算法算法3.1C的数据类型的数据类型C C数数据据类类型型基本类型基本类型构造类型构造类型指针类型指针类型空类型空类型void字符型字符型char整整型型实实型(浮点型)型(浮点型)单精度型单精度型float双精度型双精度型double数组类型数组类型结构体类型结构体类型共用体类型共用体类型短整型短整型short长整型长整型long整型整型int枚举类型枚举类型enum数据类型决定:1.数据占内存字节数2.数据取值范围3.可以进行的操作 C语言程序设计 第三章第三章 程序的灵魂
27、程序的灵魂算法算法常量和符号常量常量和符号常量v定义:程序运行过程中,其值不能被改变的量(常数)定义:程序运行过程中,其值不能被改变的量(常数)v分类:直接常量、分类:直接常量、符号常量符号常量3.2常量与变量常量与变量类型示例整型常量12、0、-3实型常量4.6、-1.23字符常量a、b符号常量PRICE、PAI C语言程序设计 第三章第三章 程序的灵魂程序的灵魂算法算法l符号常量符号常量:用用标识符标识符代表常量代表常量u一般用大写字母:一般用大写字母:PRICE、PIu定义格式:定义格式:#define 符号常量符号常量 常量常量u其值在作用域内不能改变和再赋值。其值在作用域内不能改变和
28、再赋值。例例3.1符号常量举例符号常量举例#definePRICE30#includevoidmain()intnum,total;num=10;total=num*PRICE;printf(total=%dn,total);total=300运行结果:符号常量的优点是:见名知意、一改全见名知意、一改全改改 C语言程序设计 第三章第三章 程序的灵魂程序的灵魂算法算法变量变量v 定义:其值可以改变的量。定义:其值可以改变的量。v 定义格式:定义格式:数据类型数据类型 变量名;变量名;v 变量应该有名字,并在内存中占据一定的存储单元。变量应该有名字,并在内存中占据一定的存储单元。v 变量名和变量值
29、有不同的含义变量名和变量值有不同的含义l变量名实为一个符号地址变量名实为一个符号地址 a3例例变量的使用变量的使用main()inta;a=3;printf(“a=%d,a);变量名变量值存储单元 C语言程序设计 第三章第三章 程序的灵魂程序的灵魂算法算法标识符标识符v定义:标识变量名、符号常量名、函数名、数组名、定义:标识变量名、符号常量名、函数名、数组名、文件名的字符串序列文件名的字符串序列名字名字。v命名规则:命名规则:l只能由只能由字母、数字、下划线字母、数字、下划线组成,且组成,且第一个字符第一个字符必须是字母或下划线必须是字母或下划线l大小写字母含义不同,一般用大小写字母含义不同,
30、一般用小写小写l不能使用不能使用关键字关键字lTC允许最长允许最长32个字符,建议长度不超过个字符,建议长度不超过8个字符个字符v使用:使用:先定义、后使用先定义、后使用标识符应该“见名知意见名知意”,如,如 total,max total,max标识符应该“不宜混淆不宜混淆”,如,如 l l与与1,O1,O与与0 0这些标识符合法吗?1A、M.D.John、¥123、#33、Tatol、int、max C语言程序设计 第三章第三章 程序的灵魂程序的灵魂算法算法3.3 整型数据整型常量(整常数)的三种表示方法整型常量(整常数)的三种表示方法v十进制整数:由数字十进制整数:由数字09和正负号表示
31、和正负号表示.如 123,-456,0v八进制整数:由数字八进制整数:由数字0开头开头,后跟数字后跟数字07表示表示.如 0123,011v十六进制整数:由十六进制整数:由0 x开头开头,后跟后跟09,af,AF表示表示.如 0 x123,0 xff C语言程序设计 第三章第三章 程序的灵魂程序的灵魂算法算法 补充知识:补充知识:字节和位字节和位v内存以字节为单元组成内存以字节为单元组成v每个字节有一个地址每个字节有一个地址v一个字节一般由一个字节一般由8个二进制位个二进制位组成组成v每个二进位的值是每个二进位的值是0或或101234567012345678910.7643251 C语言程序设
32、计 第三章第三章 程序的灵魂程序的灵魂算法算法数值的表示方法数值的表示方法原码、反码和补码原码、反码和补码v原码:最高位为符号位,其余各位为数值本身的绝对值原码:最高位为符号位,其余各位为数值本身的绝对值v反码:反码:l正数:反码与原码相同正数:反码与原码相同l负数:符号位为负数:符号位为1,其余位对原码取反,其余位对原码取反v补码:补码:l正数:原码、反码、补码相同正数:原码、反码、补码相同l负数:最高位为负数:最高位为1,其余位为原码取反,再对整个数加,其余位为原码取反,再对整个数加13126912457810119-5=49+7=16=(14)12 C语言程序设计 第三章第三章 程序的灵
33、魂程序的灵魂算法算法原码反码补码+7000001110000011100000111-7100001111111100011111001+0000000000000000000000000-0100000001111111100000000数的范围0111111111111111(-127+127)0111111110000000(-127+127)0111111110000000(-128+127)(用一字节表示数)v负数补码转换成十进制数:最高位不动,其余位取反加负数补码转换成十进制数:最高位不动,其余位取反加1例补码:11111001取反:10000110加1:10000111=-7 C
34、语言程序设计 第三章第三章 程序的灵魂程序的灵魂算法算法整型变量整型变量v整型数据在内存中的存放形式整型数据在内存中的存放形式l数据在内存中以二进制补码形式存放数据在内存中以二进制补码形式存放l每一个整型变量在内存中占每一个整型变量在内存中占2个字节个字节10的原码的原码反码反码补码补码-10的原码的原码取绝对值取绝对值反码反码补码补码00 00 00 00 00 00 10 1000 00 00 00 00 00 10 1000 00 00 00 00 00 10 1010 00 00 00 00 00 10 1000 00 00 00 00 00 10 1011 11 11 11 11 1
35、1 01 0111 11 11 11 11 11 01 10整数的最左二进制位是符号位,0正、1负 C语言程序设计 第三章第三章 程序的灵魂程序的灵魂算法算法v整型变量的分类整型变量的分类l三类整型变量三类整型变量有符号无符号基本型(简称整型)intunsignedint短整型short或shortintunsignedshort长整型long或longintunsignedlongl整数类型和取值范围整数类型和取值范围TURBOC所占位数最小取值范围int16-32768+32767short16-32768+32767long32-2147483648+2147483647unsigned
36、int16065535unsignedshort16065535unsignedlong3204294967295 C语言程序设计 第三章第三章 程序的灵魂程序的灵魂算法算法v整型变量的定义整型变量的定义l先定义后使用先定义后使用强制类型定义强制类型定义inta,b;(指定变量指定变量a、b为整型为整型)unsignedshortc,d;(指定变量(指定变量c、d为无符号短整型为无符号短整型)longe,f;(指定变量指定变量e、f为长整型)为长整型)00 00 00 00 00 00 11 0100 00 00 00 00 00 00 0000 00 00 00 00 00 11 0100
37、00 00 00 00 00 11 0100 00 00 00 00 00 00 0000 00 00 00 00 00 11 0100 00 00 00 00 00 11 0100 00 00 00 00 00 11 01int型short型long型unsignedint型unsignedint型unsignedlong型符号位例例3.2整型变量的定义与使用整型变量的定义与使用#includevoidmain()inta,b,c,d;unsignedu;a=12;b=-24;u=10;c=a+u;d=b+u;printf(“a+u=%d,b+u=%dn,c,d);指定abcd为整型变量指定
38、u为无符号整型变量定义放在函数开头的声明部分作用域不同类型混合运算,类型自动转换结果:a+u=22,b+u=-14定义与赋值同时进行:inta=12;C语言程序设计 第三章第三章 程序的灵魂程序的灵魂算法算法v整型数据的溢出整型数据的溢出l此情况称为此情况称为“溢出溢出”,运行时不报错,运行时不报错,编程时要注意编程时要注意01 11 11 11 11 11 11 11整型变量最大值3276710 00 00 00 00 00 00 00加1后是32768的补码形式例例3.3整型数据的溢出整型数据的溢出#includevoidmain()inta,b;a=32767;b=a+1;printf(
39、%d,%dn,a,b);32767,-32768运行结果:改为:long b;结果是什么?C语言程序设计 第三章第三章 程序的灵魂程序的灵魂算法算法整型常量的类型整型常量的类型v整型常量的值在整型常量的值在-32768+32767-32768+32767范围内,编译器认范围内,编译器认为是为是intint类型类型 v整型常量的值超过上述范围,而在整型常量的值超过上述范围,而在2147483648 2147483648 +2147483647+2147483647范围内,编译器认为是范围内,编译器认为是longlong类型类型v当系统定义当系统定义short intshort int与与inti
40、nt占内存长度相同,则两占内存长度相同,则两种类型常量均可以赋给种类型常量均可以赋给 int int和和short intshort int型变量型变量v在整型常量后面加大写在整型常量后面加大写L L或小写或小写l l,则告诉编译器,则告诉编译器,把该整型常量作为把该整型常量作为longlong类型处理。例:类型处理。例:123L123L、0L 0L v在整型常量后面加在整型常量后面加u u,则按无符号整型方式存放,则按无符号整型方式存放,负数转换成补码再按无符号整型方式存放。负数转换成补码再按无符号整型方式存放。C语言程序设计 第三章第三章 程序的灵魂程序的灵魂算法算法3.4 浮点型数据浮点
41、型数据浮点型常量的表示方法浮点型常量的表示方法v浮点数(浮点数(float)又称为实数()又称为实数(real)v两种表示方法:两种表示方法:l十进制小数形式:十进制小数形式:必须有小数点必须有小数点 如如0.123、.123、123.0、0.0、123.l 指数形式:指数形式:e或或E之前后必须有数字;指数必须为整数之前后必须有数字;指数必须为整数 如如123.456e0、12.3456e1、1.23456e2、0.123456e3、0.0123456e4等等v规范化指数形式规范化指数形式l只有一位非零整数的指数形式只有一位非零整数的指数形式l是指数的输出形式是指数的输出形式6.28e-2表
42、示6.2810-2-3.0824e4表示3.0824104 C语言程序设计 第三章第三章 程序的灵魂程序的灵魂算法算法浮点型变量浮点型变量v浮点型数据在内存中的存放形式浮点型数据在内存中的存放形式l浮点型数据在内存中占浮点型数据在内存中占4个字节(个字节(32位)位)l在内存中分成在内存中分成3部分,指数为部分,指数为2的幂次的幂次+.314159 1数符小数部分指数v浮点型变量的分类浮点型变量的分类单精度单精度 floatfloat 32位67双精度双精度 doubledouble 型型6464位位1516长双精度长双精度long doublelong double型型128128位位181
43、9类类 型型位数位数有效数字有效数字floatx,y;(指定(指定x、y为单精度浮点型变量)为单精度浮点型变量)doublez;(指定(指定z为双精度浮点型变量)为双精度浮点型变量)longdoublet;(指定(指定t t为长双精度浮点型变量)为长双精度浮点型变量)C语言程序设计 第三章第三章 程序的灵魂程序的灵魂算法算法v浮点型数据的舍入误差浮点型数据的舍入误差l数据超过有效位数,则产生误差数据超过有效位数,则产生误差l要避免一个很大的数与一个很小的数加减要避免一个很大的数与一个很小的数加减例例3.4浮点型数据的舍入误差浮点型数据的舍入误差#includevoidmain()floata,
44、b;a=123456.789e5;b=a+20;printf(%fn,b);舍入误差使舍入误差使1.0/3*3的的结果并不等于结果并不等于1!12345678848.000000运行结果:浮点型常量的类型浮点型常量的类型l浮点型常量一般按双精度浮点型常量一般按双精度64位处理,数后加位处理,数后加F或或f按单精度按单精度l浮点型常量不分浮点型常量不分float和和double C语言程序设计 第三章第三章 程序的灵魂程序的灵魂算法算法3.5字符型数据字符型数据字符常量字符常量v定义定义:用用单引号单引号括起来的括起来的单个单个字符字符或或转义字符转义字符v字符常量的字符常量的值值:该字符的:该
45、字符的ASCII码值码值v定义格式:定义格式:char变量名变量名=值值v转义字符转义字符:反斜线后面跟一个字符或一个代码值表示反斜线后面跟一个字符或一个代码值表示如aAnt如 a97,A65 n10,t9charch=65与charch=A与char=101是等效的 C语言程序设计 第三章第三章 程序的灵魂程序的灵魂算法算法表表3.3转义字符及其含义转义字符及其含义转义字符含义nvradddtbf“xhh转义字符含义换行垂直制表回车(不换行)响铃单引号3位8进制数代表的字符水平制表(右移8格)退格换页反斜线双引号2位16进制数代表的字符例例3.5转义字符的使用转义字符的使用#includev
46、oidmain()printf(“abctderftgn”);printf(“htibbjk”);f gdeh j k显示结果:显示结果:打印结果:fabgdehjik C语言程序设计 第三章第三章 程序的灵魂程序的灵魂算法算法字符变量字符变量l存放字符常量,占用一个字节,存放存放字符常量,占用一个字节,存放一个一个字符字符l定义形式:定义形式:赋值:赋值:charc1,c2;c1=a;c2=b;字符数据在内存中的存储形式及其使用方法字符数据在内存中的存储形式及其使用方法l以二进制存放字符的以二进制存放字符的ASCII码值(码值(0255整数)整数)l与整数的存储形式类似与整数的存储形式类似v
47、以字符或整数形式输出以字符或整数形式输出例例3.6向字符变量赋整数向字符变量赋整数#includevoidmain()charc1,c2;c1=97;c2=98;printf(“%c%cn,c1,c2);printf(“%d%dn,c1,c2);ab9798运行结果:运行结果:输出形式取决于printf函数中的格式符格式符为“%c”时输出的变量值为字符字符格式符为“%d时输出的变量值为整数整数 C语言程序设计 第三章第三章 程序的灵魂程序的灵魂算法算法对字符数据进行算术运算对字符数据进行算术运算l实质是对其实质是对其ASCII值进行算术运算值进行算术运算例例3.7大小写字母的转换大小写字母的转
48、换#includevoidmain()charc1,c2;c1=a;c2=b;c1=c1-32;c2=c2-32;printf(“%c%c,c1,c2);AB运行结果:运行结果:字符型与整型间互相赋值字符型与整型间互相赋值例:例:互相赋值互相赋值#includevoidmain()intc1;charc2;c1=a;c2=98;c1=c1-32;c2=c2-32;printf(“%c%c,c1,c2);小写字母比大写字母的小写字母比大写字母的ASCIIASCII码大码大(32)(32)1010 C语言程序设计 第三章第三章 程序的灵魂程序的灵魂算法算法字符串常量字符串常量v定义:用双引号定义:
49、用双引号(“”)括起来的字符序列括起来的字符序列“Howdoyoudo”,“CHINA”,“a”,“$123.45”v存储:存储:每个字符串尾每个字符串尾自动自动加一个加一个0作为字作为字符串结束标志符串结束标志hello0例例 字符串字符串“hello”“hello”在内存中在内存中例例 空串空串 “”0v字符常量与字符串常量不同字符常量与字符串常量不同aa0例例a“a”例:charch;ch=“A”;例:charch;ch=A;没有字符串变量,没有字符串变量,没有字符串变量,没有字符串变量,只能用字符数组存放只能用字符数组存放只能用字符数组存放只能用字符数组存放 C语言程序设计 第三章第三
50、章 程序的灵魂程序的灵魂算法算法3.6 变量赋初值变量赋初值v变量的使用:变量的使用:先定义,后使用先定义,后使用v变量定义位置:变量定义位置:一般一般放在函数开头放在函数开头v变量初始化变量初始化:可以在定义时赋初值可以在定义时赋初值例:inta=1,b=-3,c;floatdata=3.67;charch=A;intx=1,y=1,z=1;intx=y=1;()编译程序根据变量定义为其分配指定字节的内存单元.地址inta=1,b=-3,c;abc2字节2字节2字节地址地址.内存1-3随机数错!错!inta=b=c=3 C语言程序设计 第三章第三章 程序的灵魂程序的灵魂算法算法3.7 各类数