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