语言的数据结构教学课件

上传人:无*** 文档编号:241769355 上传时间:2024-07-22 格式:PPT 页数:140 大小:1.96MB
返回 下载 相关 举报
语言的数据结构教学课件_第1页
第1页 / 共140页
语言的数据结构教学课件_第2页
第2页 / 共140页
语言的数据结构教学课件_第3页
第3页 / 共140页
点击查看更多>>
资源描述
2024/7/221机器语言机器语言 计算计算计算计算1+11+11011100000000001000000000000010100000001000000002024/7/222汇编语言汇编语言MOV AX,1101110000000000100000000ADD AX,10000010100000001000000002024/7/223BASIC语言语言PRINT 1+12024/7/224C语言语言#include main()printf(%dn,1+1);2024/7/225C语言的创世纪语言的创世纪 一切从一个叫一切从一个叫一切从一个叫一切从一个叫“Space Travel”Space Travel”的电子游戏开始的电子游戏开始的电子游戏开始的电子游戏开始 为了让他的游戏能在为了让他的游戏能在为了让他的游戏能在为了让他的游戏能在PDP-7PDP-7上运行,上运行,上运行,上运行,Ken ThompsonKen Thompson用用用用汇编语言给汇编语言给汇编语言给汇编语言给PDP-7PDP-7写了一个操作系统写了一个操作系统写了一个操作系统写了一个操作系统UNIXUNIX 汇编太不好用了,汇编太不好用了,汇编太不好用了,汇编太不好用了,ThompsonThompson需要高级语言需要高级语言需要高级语言需要高级语言 试验了一些高级语言,包括试验了一些高级语言,包括试验了一些高级语言,包括试验了一些高级语言,包括FortranFortran,都不理想,都不理想,都不理想,都不理想 他在他在他在他在BCPLBCPL基础上,自己设计了一个基础上,自己设计了一个基础上,自己设计了一个基础上,自己设计了一个B B语言语言语言语言 UNIXUNIX开始发展,开始发展,开始发展,开始发展,B B也不够用了也不够用了也不够用了也不够用了 Dennis RitchieDennis Ritchie加入,把加入,把加入,把加入,把B B改造成改造成改造成改造成C C 开始用开始用开始用开始用C C重写重写重写重写UNIXUNIX2024/7/226Ritchie和和Thompson在开发在开发UNIX2024/7/227接受美国国家技术勋章接受美国国家技术勋章2024/7/228C程序设计语言程序设计语言 是一种高级语言是一种高级语言是一种高级语言是一种高级语言 高级语言并不是高级语言并不是高级语言并不是高级语言并不是“高级高级高级高级”,只是相对低级语言,在一个高的,只是相对低级语言,在一个高的,只是相对低级语言,在一个高的,只是相对低级语言,在一个高的级别上进行编程级别上进行编程级别上进行编程级别上进行编程 历史悠久,战勋卓著历史悠久,战勋卓著历史悠久,战勋卓著历史悠久,战勋卓著 诞生于上世纪诞生于上世纪诞生于上世纪诞生于上世纪7070年代初,成熟于年代初,成熟于年代初,成熟于年代初,成熟于8080年代(年代(年代(年代(C89C89),修订与),修订与),修订与),修订与9090年代(年代(年代(年代(C99C99)很多重量级软件都是用很多重量级软件都是用很多重量级软件都是用很多重量级软件都是用C C写的写的写的写的 上天入地,无所不能上天入地,无所不能上天入地,无所不能上天入地,无所不能 几乎没有不能用几乎没有不能用几乎没有不能用几乎没有不能用C C写出来的软件,没有不支持写出来的软件,没有不支持写出来的软件,没有不支持写出来的软件,没有不支持C C的系统的系统的系统的系统 很多流行语言、新生语言都借鉴了它的思想、语法很多流行语言、新生语言都借鉴了它的思想、语法很多流行语言、新生语言都借鉴了它的思想、语法很多流行语言、新生语言都借鉴了它的思想、语法 从从从从C+C+,到,到,到,到JavaJava,再到,再到,再到,再到C#C#,还有,还有,还有,还有phpphp等等等等2024/7/229C语言的祖师爷语言的祖师爷Dennis M.Ritchiecs.bell-labs/who/dmr/cs.bell-labs/who/dmr/2024/7/2210Ritchie漫画像漫画像C is quirky,flawed,and an enormous success.2024/7/2211计算机基本工作过程计算机基本工作过程 整个过程的执行者是硬件,但硬件是受软件控制的整个过程的执行者是硬件,但硬件是受软件控制的整个过程的执行者是硬件,但硬件是受软件控制的整个过程的执行者是硬件,但硬件是受软件控制的 编程,就是编写软件,使硬件按照人的意图工作编程,就是编写软件,使硬件按照人的意图工作编程,就是编写软件,使硬件按照人的意图工作编程,就是编写软件,使硬件按照人的意图工作2024/7/2212编译运行编译运行 编译过程编译过程编译过程编译过程程序员(程序员(程序员(程序员(ProgrammerProgrammer)编写程序源代码()编写程序源代码()编写程序源代码()编写程序源代码(Source Source CodeCode)编译器(编译器(编译器(编译器(CompilerCompiler)把源代码转换为可被计算机理)把源代码转换为可被计算机理)把源代码转换为可被计算机理)把源代码转换为可被计算机理解的机器代码(解的机器代码(解的机器代码(解的机器代码(Machine CodeMachine Code),并把机器代码),并把机器代码),并把机器代码),并把机器代码以可执行文件(以可执行文件(以可执行文件(以可执行文件(Executable FileExecutable File)的形式保存在磁)的形式保存在磁)的形式保存在磁)的形式保存在磁盘上盘上盘上盘上 软件的运行软件的运行软件的运行软件的运行计算机把机器代码读入到内存(计算机把机器代码读入到内存(计算机把机器代码读入到内存(计算机把机器代码读入到内存(MemoryMemory),由),由),由),由CPUCPU运行这些代码,读取输入(运行这些代码,读取输入(运行这些代码,读取输入(运行这些代码,读取输入(InputInput),产生输),产生输),产生输),产生输出(出(出(出(OutputOutput),完成程序员预定的功能),完成程序员预定的功能),完成程序员预定的功能),完成程序员预定的功能2024/7/2213编译语言编译语言 一种编译语言对应一种编译器一种编译语言对应一种编译器一种编译语言对应一种编译器一种编译语言对应一种编译器 程序员按照该语言的语法编写程序源代码,把程序员按照该语言的语法编写程序源代码,把程序员按照该语言的语法编写程序源代码,把程序员按照该语言的语法编写程序源代码,把自己的意图融入到代码中自己的意图融入到代码中自己的意图融入到代码中自己的意图融入到代码中 编译器读入源代码,把程序员的意图转换成可编译器读入源代码,把程序员的意图转换成可编译器读入源代码,把程序员的意图转换成可编译器读入源代码,把程序员的意图转换成可执行程序,供他人使用执行程序,供他人使用执行程序,供他人使用执行程序,供他人使用C C语言语言语言语言可执行程序可执行程序可执行程序可执行程序编译器编译器编译器编译器2024/7/2214解释运行解释运行 解释运行过程解释运行过程解释运行过程解释运行过程程序员编写程序源代码程序员编写程序源代码程序员编写程序源代码程序员编写程序源代码解释器读入源代码,并执行源代码解释器读入源代码,并执行源代码解释器读入源代码,并执行源代码解释器读入源代码,并执行源代码 解释运行的语言特点解释运行的语言特点解释运行的语言特点解释运行的语言特点执行速度慢执行速度慢执行速度慢执行速度慢好学易用好学易用好学易用好学易用 先编译、后解释先编译、后解释先编译、后解释先编译、后解释把源代码编译成更容易解释的中间代码,然后再解把源代码编译成更容易解释的中间代码,然后再解把源代码编译成更容易解释的中间代码,然后再解把源代码编译成更容易解释的中间代码,然后再解释运行释运行释运行释运行C C程序设计语言程序设计语言程序设计语言程序设计语言第第第第1 1章章章章 观其大略观其大略观其大略观其大略2024/7/2216Hello,World#include#include main()main()printf(hello,worldn);printf(hello,worldn);超级无敌考考你:超级无敌考考你:超级无敌考考你:超级无敌考考你:如何把如何把如何把如何把“hello”“hello”和和和和“world”“world”分别打印在两行?分别打印在两行?分别打印在两行?分别打印在两行?hello.chello.c2024/7/2217打印华氏温度与摄氏温度对照表打印华氏温度与摄氏温度对照表 计算公式:计算公式:计算公式:计算公式:C C=(5/9)(=(5/9)(F F-32)-32)2024/7/2218打印华氏温度与摄氏温度对照表打印华氏温度与摄氏温度对照表#include#include /*/*对对对对 fahr=0,20,.,300 fahr=0,20,.,300 打印华氏温度与摄氏温度对照表打印华氏温度与摄氏温度对照表打印华氏温度与摄氏温度对照表打印华氏温度与摄氏温度对照表*/*/main()main()intint fahr,celsius;fahr,celsius;intint lower,upper,step;lower,upper,step;lower=0;lower=0;/*/*温度表的下限温度表的下限温度表的下限温度表的下限*/*/upper=300;upper=300;/*/*温度表的上限温度表的上限温度表的上限温度表的上限*/*/step =20;step =20;/*/*步长步长步长步长*/*/fahrfahr =lower;=lower;whilewhile(fahr=upper)(fahr=upper)celsius=5*(fahr-32)/9;celsius=5*(fahr-32)/9;printf(printf(%dt%dn%dt%dn,fahr,celsius);,fahr,celsius);fahr=fahr+step;fahr=fahr+step;fc1.cfc1.c2024/7/2219代码风格代码风格#include#include /*/*对对对对 fahr=0,20,.,300 fahr=0,20,.,300 打印华氏温度与摄氏温度对照表打印华氏温度与摄氏温度对照表打印华氏温度与摄氏温度对照表打印华氏温度与摄氏温度对照表*/*/main()main()intint fahr,celsius;fahr,celsius;intint lower,upper,step;lower,upper,step;lower=0;lower=0;/*/*温度表的下限温度表的下限温度表的下限温度表的下限*/*/upper=300;upper=300;/*/*温度表的上限温度表的上限温度表的上限温度表的上限*/*/step =20;step =20;/*/*步长步长步长步长*/*/fahrfahr =lower;=lower;whilewhile(fahr=upper)(fahr=upper)celsius=5*(fahr-32)/9;celsius=5*(fahr-32)/9;printf(printf(%dt%dn%dt%dn,fahr,celsius);,fahr,celsius);fahr=fahr+step;fahr=fahr+step;fc1.cfc1.c2024/7/2220更简单、精确的对照表打印程序更简单、精确的对照表打印程序#include#include#define#define LOWER 0 LOWER 0 /*/*表的下限表的下限表的下限表的下限*/#define#define UPPER 300 UPPER 300 /*/*表的上限表的上限表的上限表的上限*/#define#define STEP 20 STEP 20 /*/*步长步长步长步长*/*/*打印华氏打印华氏打印华氏打印华氏-摄氏温度对照表摄氏温度对照表摄氏温度对照表摄氏温度对照表*/main()main()intint fahr;fahr;forfor(fahr=LOWER;fahr=UPPER;fahr=fahr+STEP)(fahr=LOWER;fahr=UPPER;fahr=fahr+STEP)printf(%3d#%6.1fn,printf(%3d#%6.1fn,fahr,fahr,(5.0/9.0)*(fahr-32);(5.0/9.0)*(fahr-32);fc2.cfc2.c2024/7/2221字符输入输出字符输入输出 c=getchar()c=getchar()从键盘读入一个字符,赋值给变量从键盘读入一个字符,赋值给变量从键盘读入一个字符,赋值给变量从键盘读入一个字符,赋值给变量c c putchar(c)putchar(c)把把把把c c输出到屏幕输出到屏幕输出到屏幕输出到屏幕 拷贝的基本思想:拷贝的基本思想:拷贝的基本思想:拷贝的基本思想:读一个字符读一个字符读一个字符读一个字符while(while(该字符不是文件结束指示符该字符不是文件结束指示符该字符不是文件结束指示符该字符不是文件结束指示符 )输出刚读进的字符输出刚读进的字符输出刚读进的字符输出刚读进的字符读下一个字符读下一个字符读下一个字符读下一个字符2024/7/2222拷贝(拷贝(Copy)#include#include /*/*用于将输入复制到输出的程序;第用于将输入复制到输出的程序;第用于将输入复制到输出的程序;第用于将输入复制到输出的程序;第1 1个版本个版本个版本个版本*/main()main()intint c;c;c=getchar();c=getchar();whilewhile(c!=EOF)(c!=EOF)putchar(c);putchar(c);c=getchar();c=getchar();copy1.ccopy1.c2024/7/2223一个更好的版本一个更好的版本#include#include /*/*用于将输入复制到输出的程序;第用于将输入复制到输出的程序;第用于将输入复制到输出的程序;第用于将输入复制到输出的程序;第2 2个版本个版本个版本个版本*/main()main()intint c;c;while(c=getchar()!=EOF)while(c=getchar()!=EOF)putchar(c);putchar(c);copy2.ccopy2.c2024/7/2224计算行数计算行数#include#include /*/*统计输入的行数统计输入的行数统计输入的行数统计输入的行数*/main()main()intint c;c;longlong nl;nl;nl=0;nl=0;whilewhile(c=getchar()!=EOF)(c=getchar()!=EOF)ifif(c=n)(c=n)nl+;nl+;printf(%dn,nl);printf(%dn,nl);counter.ccounter.c2024/7/2225加法器加法器#include#include /*/*计算输入的两个整数的和计算输入的两个整数的和计算输入的两个整数的和计算输入的两个整数的和*/*/main()main()intint a,b;a,b;printf(Please input two integers:);printf(Please input two integers:);scanf(%d%d,&a,&b);scanf(%d%d,&a,&b);printf(Sum=%dn,a+b);printf(Sum=%dn,a+b);add.cadd.c2024/7/2226平均分平均分#include#include /*/*计算某科成绩的平均值计算某科成绩的平均值计算某科成绩的平均值计算某科成绩的平均值*/#define#define TOTAL_NUMBER 10 TOTAL_NUMBER 10/*/*总人数总人数总人数总人数*/main()main()floatfloat sum=0,scoreTOTAL_NUMBER;sum=0,scoreTOTAL_NUMBER;intint i;i;printf(Input%d scores:n,TOTAL_NUMBER);printf(Input%d scores:n,TOTAL_NUMBER);forfor(i=0;iTOTAL_NUMBER;i+)(i=0;i=0 */n=0 */intint power(power(intint base,base,intint n)n)intint i,p;i,p;p=1;p=1;forfor(i=1;i=n;+i)(i=1;i=n;+i)p=p*base;p=p*base;returnreturn p;p;power.cpower.c2024/7/2229power函数的调用(函数的调用(Call)#include#include intint power(power(intint base,base,intint n);n);/*/*测试测试测试测试powerpower函数函数函数函数*/main()main()intint m,n;m,n;m=power(2,1);m=power(2,1);n=power(-3,3);n=power(-3,3);printf(%d%dn,m,n);printf(%d%dn,m,n);returnreturn 0;0;power.cpower.c2024/7/2230这一章我们学到了这一章我们学到了#include#include#define#define main()main()printf(),scanf()printf(),scanf()getchar(),putchar()getchar(),putchar()=,=,!=,=,!=intint,longlong,floatfloat 数组数组数组数组 whilewhile,forfor,ifif 代码风格代码风格代码风格代码风格 注释、缩进、空行、命名注释、缩进、空行、命名注释、缩进、空行、命名注释、缩进、空行、命名 函数函数函数函数C C程序设计语言程序设计语言程序设计语言程序设计语言第第第第2 2章章章章 类型、运算符与表达式类型、运算符与表达式类型、运算符与表达式类型、运算符与表达式2024/7/2232标识符(标识符(Identifiers)用户自定义的符号叫标识符用户自定义的符号叫标识符用户自定义的符号叫标识符用户自定义的符号叫标识符 如变量名、函数名、宏和类型名如变量名、函数名、宏和类型名如变量名、函数名、宏和类型名如变量名、函数名、宏和类型名 标识符由字母、数字和下划线组成,大小写敏感标识符由字母、数字和下划线组成,大小写敏感标识符由字母、数字和下划线组成,大小写敏感标识符由字母、数字和下划线组成,大小写敏感 不可以不可以不可以不可以是数字开头是数字开头是数字开头是数字开头 标识符要直观,能表达它的功能标识符要直观,能表达它的功能标识符要直观,能表达它的功能标识符要直观,能表达它的功能 下划线和大小写通常用来增强可读性下划线和大小写通常用来增强可读性下划线和大小写通常用来增强可读性下划线和大小写通常用来增强可读性 variablenamevariablename variable_name,VARIABLE_NAMEvariable_name,VARIABLE_NAME VariableName,variableNameVariableName,variableName 关键字(关键字(关键字(关键字(keywordkeyword)不可作为标识符)不可作为标识符)不可作为标识符)不可作为标识符 intint,floatfloat,forfor,whilewhile,ifif等(教材等(教材等(教材等(教材164164页)页)页)页)某些功能的变量采用习惯命名某些功能的变量采用习惯命名某些功能的变量采用习惯命名某些功能的变量采用习惯命名 如:如:如:如:forfor语句所采用的循环变量习惯用语句所采用的循环变量习惯用语句所采用的循环变量习惯用语句所采用的循环变量习惯用i,j,ki,j,k2024/7/2233基本数据类型(基本数据类型(Data Type)intint整数,在目前绝大多数机器上占整数,在目前绝大多数机器上占整数,在目前绝大多数机器上占整数,在目前绝大多数机器上占4 4个字节个字节个字节个字节TC2TC2中是中是中是中是2 2个字节个字节个字节个字节所占字节数取决于机器字长所占字节数取决于机器字长所占字节数取决于机器字长所占字节数取决于机器字长 floatfloat单精度浮点数,一般是单精度浮点数,一般是单精度浮点数,一般是单精度浮点数,一般是4 4个字节长个字节长个字节长个字节长 doubledouble双精度浮点数,一般是双精度浮点数,一般是双精度浮点数,一般是双精度浮点数,一般是8 8个字节长个字节长个字节长个字节长 charchar字符,一般是字符,一般是字符,一般是字符,一般是1 1个字节长个字节长个字节长个字节长用来表示用来表示用来表示用来表示256256个个个个ASCIIASCII字符,或者字符,或者字符,或者字符,或者02550255的整数的整数的整数的整数2024/7/2234数据类型修饰符数据类型修饰符 shortshort shortshort intint,短整数,一般,短整数,一般,短整数,一般,短整数,一般2 2个字节长。通常简写为个字节长。通常简写为个字节长。通常简写为个字节长。通常简写为shortshort longlong longlong intint,长整数,一般是,长整数,一般是,长整数,一般是,长整数,一般是4 4个字节长。通常简写为个字节长。通常简写为个字节长。通常简写为个字节长。通常简写为longlong longlong doubledouble,高精度浮点数,一般是,高精度浮点数,一般是,高精度浮点数,一般是,高精度浮点数,一般是1010个字节长。个字节长。个字节长。个字节长。signedsigned 用来修饰用来修饰用来修饰用来修饰charchar、intint、shortshort和和和和longlong,说明他们是,说明他们是,说明他们是,说明他们是有符号有符号有符号有符号的整数(正整数、的整数(正整数、的整数(正整数、的整数(正整数、0 0和负整数)。一般缺省都是有符号的,所和负整数)。一般缺省都是有符号的,所和负整数)。一般缺省都是有符号的,所和负整数)。一般缺省都是有符号的,所以这个修饰符通常省略以这个修饰符通常省略以这个修饰符通常省略以这个修饰符通常省略 unsignedunsigned 用来修饰用来修饰用来修饰用来修饰charchar、intint、shortshort和和和和longlong,说明他们是,说明他们是,说明他们是,说明他们是无符号无符号无符号无符号的整数(正整数和的整数(正整数和的整数(正整数和的整数(正整数和0 0)2024/7/2235超出取值范围会怎样?超出取值范围会怎样?TC2TC2中中中中intint的范围是的范围是的范围是的范围是-3276732767-3276732767 如果我们给它一个小于如果我们给它一个小于如果我们给它一个小于如果我们给它一个小于-32767-32767或者大于或者大于或者大于或者大于3276732767的数会如何呢?的数会如何呢?的数会如何呢?的数会如何呢?现场编程测验现场编程测验现场编程测验现场编程测验小蛇能吞下小蛇能吞下小蛇能吞下小蛇能吞下大象吗?大象吗?大象吗?大象吗?2024/7/2236溢出(溢出(Overflow)造成的危害)造成的危害 一台安装了一台安装了一台安装了一台安装了Windows 95/98Windows 95/98的机器,如果连续的机器,如果连续的机器,如果连续的机器,如果连续运行运行运行运行49.749.7天没有重新启动,可能死机天没有重新启动,可能死机天没有重新启动,可能死机天没有重新启动,可能死机 原因:原因:原因:原因:WindowsWindows自启动时刻起,有一个计数器,记录系统自启动时刻起,有一个计数器,记录系统自启动时刻起,有一个计数器,记录系统自启动时刻起,有一个计数器,记录系统已经运行了多少毫秒。这个计数器是个已经运行了多少毫秒。这个计数器是个已经运行了多少毫秒。这个计数器是个已经运行了多少毫秒。这个计数器是个unsignedunsigned long long 类型的变量类型的变量类型的变量类型的变量unsignedunsigned longlong的最大值是:的最大值是:的最大值是:的最大值是:42949672954294967295一天有一天有一天有一天有 24*60*60*1000=8640000024*60*60*1000=86400000毫秒毫秒毫秒毫秒4294967295/86400000=49.710269618054294967295/86400000=49.71026961805当当当当49.749.7天的时候,此计数器会溢出,引起死机天的时候,此计数器会溢出,引起死机天的时候,此计数器会溢出,引起死机天的时候,此计数器会溢出,引起死机2024/7/2237浮点数的陷阱浮点数的陷阱#include#include main()main()floatfloat f;f;f=123.456;f=123.456;ifif(f=123.456)(f=123.456)printf(f is equal to 123.456 indeed.);printf(f is equal to 123.456 indeed.);elseelseprintf(In fact,f is equal to%fn,f);printf(In fact,f is equal to%fn,f);运行结果会是什么?运行结果会是什么?运行结果会是什么?运行结果会是什么?float.cfloat.c2024/7/2238浮点数的陷阱浮点数的陷阱 floatfloat的精度低,较易发生精度带来的相等性的精度低,较易发生精度带来的相等性的精度低,较易发生精度带来的相等性的精度低,较易发生精度带来的相等性判断问题判断问题判断问题判断问题 doubledouble精度高,这个问题发生的概率小一些,精度高,这个问题发生的概率小一些,精度高,这个问题发生的概率小一些,精度高,这个问题发生的概率小一些,但也存在但也存在但也存在但也存在 解决办法:解决办法:解决办法:解决办法:ifif(fabs(f 123.456)1E-5)(fabs(f 123.456)1E-5)根据精度要求设定根据精度要求设定根据精度要求设定根据精度要求设定2024/7/2239使用变量要注意使用变量要注意 不要对变量所占的字节数想当然不要对变量所占的字节数想当然不要对变量所占的字节数想当然不要对变量所占的字节数想当然用用用用sizeofsizeof获得变量或者数据类型的长度获得变量或者数据类型的长度获得变量或者数据类型的长度获得变量或者数据类型的长度用用用用ANSI CANSI C定义的宏确定数据的表示范围,解决溢定义的宏确定数据的表示范围,解决溢定义的宏确定数据的表示范围,解决溢定义的宏确定数据的表示范围,解决溢出问题出问题出问题出问题sizeof.csizeof.c2024/7/2240常数(常数(Constant)整型常数整型常数整型常数整型常数123123、456456123456123456123l123l、123L123L、123456l123456l、123456L123456L 浮点常数浮点常数浮点常数浮点常数123.45123.45、456.78456.781e-21e-2、4.5e34.5e3123.45f123.45f、456.78F456.78F、1e-2f1e-2f、4.5e3F4.5e3F123.45l123.45l、456.78L456.78L、1e-2l1e-2l、4.5e3L4.5e3L2024/7/2241八进制与十六进制常数八进制与十六进制常数 以数字以数字以数字以数字“0 0”开始的整型常数是八进制数开始的整型常数是八进制数开始的整型常数是八进制数开始的整型常数是八进制数010010和和和和1010大小不一样大小不一样大小不一样大小不一样因为八进制并不常用,所以此种表示法比较少见,因为八进制并不常用,所以此种表示法比较少见,因为八进制并不常用,所以此种表示法比较少见,因为八进制并不常用,所以此种表示法比较少见,因而常被用错因而常被用错因而常被用错因而常被用错 以以以以“0 x0 x”或者或者或者或者“0X0X”开始的整型常数是十六进开始的整型常数是十六进开始的整型常数是十六进开始的整型常数是十六进制制制制AFAF和和和和afaf用来表示十进制的用来表示十进制的用来表示十进制的用来表示十进制的10151015 0 x11,0 x05,0 xFA,0 xFF0 x11,0 x05,0 xFA,0 xFF十六进制的形式比较常用,尤其在进行位一级的控十六进制的形式比较常用,尤其在进行位一级的控十六进制的形式比较常用,尤其在进行位一级的控十六进制的形式比较常用,尤其在进行位一级的控制的时候制的时候制的时候制的时候2024/7/2242字符常数字符常数 字符常数的表示方法字符常数的表示方法字符常数的表示方法字符常数的表示方法aa,AA,55,%,$单引号内只能有一个字符,除非用单引号内只能有一个字符,除非用单引号内只能有一个字符,除非用单引号内只能有一个字符,除非用“”开头开头开头开头 就是一个普通整数,也可以参与各种数学运算就是一个普通整数,也可以参与各种数学运算就是一个普通整数,也可以参与各种数学运算就是一个普通整数,也可以参与各种数学运算每个字符具有一个每个字符具有一个每个字符具有一个每个字符具有一个02550255之间的数值,可从之间的数值,可从之间的数值,可从之间的数值,可从ASCIIASCII表表表表查出查出查出查出注意:注意:注意:注意:55和和和和5 5的区别,的区别,的区别,的区别,A A和和和和AA的区别的区别的区别的区别字符的数学运算在密码学内用得比较多字符的数学运算在密码学内用得比较多字符的数学运算在密码学内用得比较多字符的数学运算在密码学内用得比较多ascii.cascii.c2024/7/2243字符常数字符常数 转义字符转义字符转义字符转义字符一些特殊字符(无法从键盘输入或者在一些特殊字符(无法从键盘输入或者在一些特殊字符(无法从键盘输入或者在一些特殊字符(无法从键盘输入或者在C C语言里有语言里有语言里有语言里有它用)用转义字符表示它用)用转义字符表示它用)用转义字符表示它用)用转义字符表示转义的思想在网络协议和文件格式中经常使用转义的思想在网络协议和文件格式中经常使用转义的思想在网络协议和文件格式中经常使用转义的思想在网络协议和文件格式中经常使用2024/7/2244字符串(字符串(String)常数)常数 用双引号括住的由用双引号括住的由用双引号括住的由用双引号括住的由0 0个或多个字符组成的字符个或多个字符组成的字符个或多个字符组成的字符个或多个字符组成的字符序列序列序列序列I am a stringI am a string表示空字符串表示空字符串表示空字符串表示空字符串转义字符也可以在字符串中使用转义字符也可以在字符串中使用转义字符也可以在字符串中使用转义字符也可以在字符串中使用引号只作为字符串开始和结束的标志引号只作为字符串开始和结束的标志引号只作为字符串开始和结束的标志引号只作为字符串开始和结束的标志C C语言内部用语言内部用语言内部用语言内部用00表示字符串的结束表示字符串的结束表示字符串的结束表示字符串的结束除注释外,是唯一可以出现中文的地方除注释外,是唯一可以出现中文的地方除注释外,是唯一可以出现中文的地方除注释外,是唯一可以出现中文的地方 xx和和和和xx是不同的是不同的是不同的是不同的 里定义了一系列专门的字符串处理里定义了一系列专门的字符串处理里定义了一系列专门的字符串处理里定义了一系列专门的字符串处理函数函数函数函数2024/7/2245枚举(枚举(Enumeration)常数)常数 一个几乎被遗忘的角色一个几乎被遗忘的角色一个几乎被遗忘的角色一个几乎被遗忘的角色 从程序来窥其一斑从程序来窥其一斑从程序来窥其一斑从程序来窥其一斑 enumenum weeks weeks MON,TUE,WED,THU,FRI,SAT,SUN MON,TUE,WED,THU,FRI,SAT,SUN ;enumenum weeks today,tomorrow;weeks today,tomorrow;today =MON;today =MON;tomorrow =today+1;tomorrow =today+1;ifif(tomorrow=TUE)(tomorrow=TUE)printf(Tomorrow is Tuesday.n);printf(Tomorrow is Tuesday.n);elseelse printf(Tomorrow is NOT Tuesday.n);printf(Tomorrow is NOT Tuesday.n);enum.cenum.c2024/7/2246变量声明变量声明 变量必须变量必须变量必须变量必须“先定义,后使用先定义,后使用先定义,后使用先定义,后使用”所有变量必须在第一条可执行语句前定义所有变量必须在第一条可执行语句前定义所有变量必须在第一条可执行语句前定义所有变量必须在第一条可执行语句前定义 声明的顺序无关紧要声明的顺序无关紧要声明的顺序无关紧要声明的顺序无关紧要 一条声明语句可声明若干个同类型的变量,变量名之一条声明语句可声明若干个同类型的变量,变量名之一条声明语句可声明若干个同类型的变量,变量名之一条声明语句可声明若干个同类型的变量,变量名之间用逗号分隔间用逗号分隔间用逗号分隔间用逗号分隔 变量定义后,即占用内存,可向其存入各种数据,并变量定义后,即占用内存,可向其存入各种数据,并变量定义后,即占用内存,可向其存入各种数据,并变量定义后,即占用内存,可向其存入各种数据,并可通过变量名使用数据可通过变量名使用数据可通过变量名使用数据可通过变量名使用数据 声明变量,是初始化变量的最好时机声明变量,是初始化变量的最好时机声明变量,是初始化变量的最好时机声明变量,是初始化变量的最好时机 不被初始化的变量,其值为危险的随机数不被初始化的变量,其值为危险的随机数不被初始化的变量,其值为危险的随机数不被初始化的变量,其值为危险的随机数charchar esc=;esc=;intint i=0;i=0;intint limit=MAXLINE+1;limit=MAXLINE+1;floatfloat eps=1.0e-5;eps=1.0e-5;2024/7/2247常量常量 用用用用constconst修饰定义的变量为常量修饰定义的变量为常量修饰定义的变量为常量修饰定义的变量为常量constconst intint i=0;i=0;常量只能在定义时赋值,然后常量只能在定义时赋值,然后常量只能在定义时赋值,然后常量只能在定义时赋值,然后不能不能不能不能再改变其值再改变其值再改变其值再改变其值 常数、常量、宏和枚举,都可以用来表示一个常数、常量、宏和枚举,都可以用来表示一个常数、常量、宏和枚举,都可以用来表示一个常数、常量、宏和枚举,都可以用来表示一个永远不会改变的数永远不会改变的数永远不会改变的数永远不会改变的数前者不建议直接使用,而用后三者代替前者不建议直接使用,而用后三者代替前者不建议直接使用,而用后三者代替前者不建议直接使用,而用后三者代替后三者的工作机理是完全不同的,达到的效果也不后三者的工作机理是完全不同的,达到的效果也不后三者的工作机理是完全不同的,达到的效果也不后三者的工作机理是完全不同的,达到的效果也不尽相同尽相同尽相同尽相同2024/7/2248 计算机只会计算计算机只会计算计算机只会计算计算机只会计算 任何事物都要被表示成任何事物都要被表示成任何事物都要被表示成任何事物都要被表示成数字和公式数字和公式数字和公式数字和公式的形式后,的形式后,的形式后,的形式后,才能被计算机计算(被计算机处理)才能被计算机计算(被计算机处理)才能被计算机计算(被计算机处理)才能被计算机计算(被计算机处理)事物到数字和公式的转换过程叫事物到数字和公式的转换过程叫事物到数字和公式的转换过程叫事物到数字和公式的转换过程叫数学建模数学建模数学建模数学建模 因为:事物在计算机内的处理都是一种计算因为:事物在计算机内的处理都是一种计算因为:事物在计算机内的处理都是一种计算因为:事物在计算机内的处理都是一种计算 又因为:计算就要有操作数、运算法则和计算又因为:计算就要有操作数、运算法则和计算又因为:计算就要有操作数、运算法则和计算又因为:计算就要有操作数、运算法则和计算结果结果结果结果 所以:事物在计算机内的处理都有操作数、运所以:事物在计算机内的处理都有操作数、运所以:事物在计算机内的处理都有操作数、运所以:事物在计算机内的处理都有操作数、运算法则和计算结果算法则和计算结果算法则和计算结果算法则和计算结果 计算结果你可以留用,也可以忽略计算结果你可以留用,也可以忽略计算结果你可以留用,也可以忽略计算结果你可以留用,也可以忽略2024/7/2249算术运算符+,-,*,/加、减、乘、除运算加、减、乘、除运算加、减、乘、除运算加、减、乘、除运算四则混合运算中,先算乘除,后算加减,四则混合运算中,先算乘除,后算加减,四则混合运算中,先算乘除,后算加减,四则混合运算中,先算乘除,后算加减,先算左,后算右先算左,后算右先算左,后算右先算左,后算右%求余运算求余运算求余运算求余运算C C语言中的运算语言中的运算语言中的运算语言中的运算2024/7/2250关系运算符关系运算符 ,=,=b&b c)(a b&b c);a a大于大于大于大于b b,并且,并且,并且,并且b b大于大于大于大于c c|或运算或运算或运算或运算(a b|b c)(a b|b c);a a大于大于大于大于b b,或者,或者,或者,或者b b大于大于大于大于c c!求反求反求反求反(!a)(!a);如果;如果;如果;如果a a是是是是0 0,结果非,结果非,结果非,结果非0 0;如果;如果;如果;如果a a是非是非是非是非0 0,结果是,结果是,结果是,结果是0 0 并不改变并不改变并不改变并不改变a a的值的值的值的值2024/7/2254类型转换类型转换 在进行赋值操作时,会发生类型转换在进行赋值操作时,会发生类型转换在进行赋值操作时,会发生类型转换在进行赋值操作时,会发生类型转换 将取值范围将取值范围将取值范围将取值范围小小小小的类型的类型的类型的类型转为转为转为转为取值范围取值范围取值范围取值范围大大大大的类型是的类型是的类型是的类型是安全安全安全安全的的的的 反之是不安全的反之是不安全的反之是不安全的反之是不安全的如果如果如果如果大大大大类型的值在类型的值在类型的值在类型的值在小小小小类型能容纳的范围之内,则平类型能容纳的范围之内,则平类型能容纳的范围之内,则平类型能容纳的范围之内,则平安无事安无事安无事安无事但是,浮点数转为整数,会丢失小数部分(非四舍但是,浮点数转为整数,会丢失小数部分(非四舍但是,浮点数转为整数,会丢失小数部分(非四舍但是,浮点数转为整数,会丢失小数部分(非四舍五入)五入)五入)五入)反之,转换后的结果必然是错误的,具体结果与机反之,转换后的结果必然是错误的,具体结果与机反之,转换后的结果必然是错误的,具体结果与机反之,转换后的结果必然是错误的,具体结果与机器和实现方式有关。避免如此使用器和实现方式有关。避免如此使用器和实现方式有关。避免如此使用器和实现方式有关。避免如此使用2024/7/2255字符串与数值类型之间的转换字符串与数值类型之间的转换 intint i=123 i=123这样用是不行地这样用是不行地这样用是不行地这样用是不行地 atof()atof(),atoi()atoi(),atol()atol()把字符串转为把字符串转为把字符串转为把字符串转为doubledouble,intint和和和和longlong定义在定义在定义在定义在stdlib.hstdlib.h中中中中 sprintf()sprintf()可以用来把各种类型的数值转为字符串可以用来把各种类型的数值转为字符串可以用来把各种类型的数值转为字符串可以用来把各种类型的数值转为字符串定义在定义在定义在定义在stdio.hstdio.h中中中中2024/7/2256自动类型转换自动类型转换 两个同种数据类型的运算结果,还是该类型两个同种数据类型的运算结果,还是该类型两个同种数据类型的运算结果,还是该类型两个同种数据类型的运算结果,还是该类型 两个不同种数据类型的运算结果,是两种类型两个不同种数据类型的运算结果,是两种类型两个不同种数据类型的运算结果,是两种类型两个不同种数据类型的运算结果,是两种类型中取值范围更大的那种中取值范围更大的那种中取值范围更大的那种中取值范围更大的那种longlong doubledouble doubledouble floatfloat longlong intint shortshort charchar只要两者中有一个是只要两者中有一个是只要两者中有一个是只要两者中有一个是unsignedunsigned,就都转为,就都转为,就都转为,就都转为unsignedunsigned再计算再计算再计算再计算 把数据赋值给另外一种类型变量也会发生自动把数据赋值给另外一种类型变量也会发生自动把数据赋值给另外一种类型变量也会发生自动把数据赋值给另外一种类型变量也会发生自动类型转换类型转换类型转换类型转换从小到大,顺利转换从小到大,顺利转换从小到大,顺利转换从小到大,顺利转换从大到小,发出警告(好的编译器会给出)从大到小,发出警告(好的编译器会给出)从大到小,发出警告(好的编译器会给出)从大到小,发出警告(好的编译器会给出)2024/7/2257类型强转类型强转 可以通过可以通过可以通过可以通过“(类型类型类型类型)表达式表达式表达式表达式”的方式把表达式的的方式把表达式的的方式把表达式的的方式把表达式的值转为任意类型值转为任意类型值转为任意类型值转为任意类型强转时,你必须知道你在做什么强转时,你必须知道你在做什么强转时,你必须知道你在做什么强转时,你必须知道你在做什么强转与指针,并称强转与指针,并称强转与指针,并称强转与指针,并称C C语言两大神器,用好了可以呼语言两大神器,用好了可以呼语言两大神器,用好了可以呼语言两大神器,用好了可以呼风唤雨,用坏了就损兵折将风唤雨,用坏了就损兵折将风唤雨,用坏了就损兵折将风唤雨,用坏了就损兵折将屠屠屠屠龙龙龙龙刀刀刀刀倚倚倚倚天天天天剑剑剑剑2024/7/2258加一和减一运算符加一和减一运算符 i+i+,i-i-,+i+i,-i-i+让参与运算的变量加让参与运算的变量加让参与运算的变量加让参与运算的变量加1 1,-让参与运算的变量减让参与运算的变量减让参与运算的变量减让参与运算的变量减1 1运算符为后缀,先取运算符为后缀,先取运算符为后缀,先取运算符为后缀,先取i i的值,然后加的值,然后加的值,然后加的值,然后加/减减减减1 1运算符为前缀,先加运算符为前缀,先加运算符为前缀,先加运算符为前缀,先加/减减减减1 1,然后取,然后取,然后取,然后取i i的值的值的值的值 在一行语句中,使用加在一行语句中,使用加在一行语句中,使用加在一行语句中,使用加1 1或者减或者减或者减或者减1 1运算的变量只运算的变量只运算的变量只运算的变量只能出现能出现能出现能出现不仅可读性差,而且因为编译器实现的方法不同,不仅可读性差,而且因为编译器实现的方法不同,不仅可读性差,而且因为编译器实现的方法不同,不仅可读性差,而且因为编译器实现的方法不同,容易导致不同编译器运行效果不一样,贻害无穷容易导致不同编译器运行效果不一样,贻害无穷容易导致不同编译器运行效果不一样,贻害无穷容易导致不同编译器运行效果不一样,贻害无穷2024/7/2259位操作运算符位操作运算符&按位与运算按位与运算按位与运算按位与运算|按位或运算按位或运算按位或运算按位或运算 按位异或运算按位异或运算按位异或运算按位异或运算 按位右移运算按位右移运算按位右移运算按位右移运算 按位求反按位求反按位求反按位求反2024/7/2260赋值运算符赋值运算符 赋值运算的结果是被赋值变量赋值后的值赋值运算的结果是被赋值变量赋值后的值赋值运算的结果是被赋值变量赋值后的值赋值运算的结果是被赋值变量赋值后的值a=b=c=0;a=b=c=0;下面两个语句是等价的下面两个语句是等价的下面两个语句是等价的下面两个语句是等价的i=i+2;i=i+2;i+=2;i+=2;+、-、*、/、%、&、|运算符都运算符都运算符都运算符都可以按此种方式处理可以按此种方式处理可以按此种方式处理可以按此种方式处理 这种形式看起来更直观,而且执行效率一般也这种形式看起来更直观,而且执行效率一般也这种形式看起来更直观,而且执行效率一般也这种形式看起来更直观,而且执行效率一般也能更高一些能更高一些能更高一些能更高一些2024/7/2261条件表达式条件表达式 把把把把a a和和和和b b中的最大值放入中的最大值放入中的最大值放入中的最大值放入z z中中中中ifif(a b)(a b)z=a;z=a;elseelse z=b;z=b;z=(a b)?a:b;z=(a b)?a:b;此种表达式切忌用得过于繁杂此种表达式切忌用得过于繁杂此种表达式切忌用得过于繁杂此种表达式切忌用得过于繁杂2024/7/2262优先级优先级()-.()-.!+-+-*&(!+-+-*&(类型类型类型类型)sizeofsizeof*/%*/%+-+-=!=!=&|&|?:?:=+=-=*=/=%=&=|=+=-=*=/=%=&=|=,2024/7/2263优先级优先级 能背下优先级表的人凤毛麟角能背下优先级表的人凤毛麟角能背下优先级表的人凤毛麟角能背下优先级表的人凤毛麟角脑细胞太宝贵了,不能用来死记硬背脑细胞太宝贵了,不能用来死记硬背脑细胞太宝贵了,不能用来死记硬背脑细胞太宝贵了,不能用来死记硬背 用括号来控制运算顺序更直观、方便,并减少用括号来控制运算顺序更直观、方便,并减少用括号来控制运算顺序更直观、方便,并减少用括号来控制运算顺序更直观、方便,并减少出错的概率出错的概率出错的概率出错的概率先算乘除,后算加减,有括号就先算括号里的先算乘除,后算加减,有括号就先算括号里的先算乘除,后算加减,有括号就先算括号里的先算乘除,后算加减,有括号就先算括号里的括号太多,有时候不清晰括号太多,有时候不清晰括号太多,有时候不清晰括号太多,有时候不清晰 注意用注意用注意用注意用空格空格空格空格做好分隔做好分隔做好分隔做好分隔 实在不行就拆分表达式实在不行就拆分表达式实在不行就拆分表达式实在不行就拆分表达式C C程序设计语言程序设计语言程序设计语言程序设计语言第第第第3 3章章章章 控制流控制流控制流控制流2024/7/2265三种基本结构三种基本结构 顺序结构、选择结构、循环结构顺序结构、选择结构、循环结构顺序结构、选择结构、循环结构顺序结构、选择结构、循环结构 已经证明,任何程序均可只用这三种结构实现已经证明,任何程序均可只用这三种结构实现已经证明,任何程序均可只用这三种结构实现已经证明,任何程序均可只用这三种结构实现Bhm,Corrado,and Ja
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!