1、课程简介及教学安排课程简介及教学安排 一、课程内容与目标一、课程内容与目标 课程目标:课程目标: 理解计算机是如何解决问题的,理解计算机的理解计算机是如何解决问题的,理解计算机的 能与不能,擅长与非擅长。能与不能,擅长与非擅长。 掌握利用计算机进行问题求解和科学计算的一掌握利用计算机进行问题求解和科学计算的一 般思路,掌握用般思路,掌握用C语言编写程序的基本方法与编语言编写程序的基本方法与编 程技巧,并具备独立编写、调试程序的能力,程技巧,并具备独立编写、调试程序的能力, 为进一步研究和学习打下基础。为进一步研究和学习打下基础。 课程内容:课程内容: 计算机程序设计基本思想与方法计算机程序设计
2、基本思想与方法 C C语言程序设计语法规则与结构语言程序设计语法规则与结构 二、学习方式和环境二、学习方式和环境 教师授课教师授课+ +学生自主学习学生自主学习 多阅读程序,多动手编程序,多上机调试程序多阅读程序,多动手编程序,多上机调试程序 网上学习中心平台发布教学通知、课件、学习辅网上学习中心平台发布教学通知、课件、学习辅 助资源、每周作业要求、提交作业。助资源、每周作业要求、提交作业。 上机环境:上机环境:VC+6.0 VC+6.0 三、学习要求三、学习要求 按时上课,不无故缺席按时上课,不无故缺席 课前做好预习,课后做好复习课前做好预习,课后做好复习 坚持认真听课,适当做笔记,多阅读程
3、序坚持认真听课,适当做笔记,多阅读程序 按时上机实践,有效利用上机时间按时上机实践,有效利用上机时间 认真、独立、按时完成并提交作业认真、独立、按时完成并提交作业 四、教材及参考书四、教材及参考书 C C语言程序设计教程语言程序设计教程(第(第3 3版)朱鸣华等编著,版)朱鸣华等编著, 机械工业出版社机械工业出版社 C C语言程序设计习题解析及上机指导语言程序设计习题解析及上机指导(第(第2 2版)罗版)罗 晓芳、朱鸣华等编著,机械工业出版社晓芳、朱鸣华等编著,机械工业出版社 五、考试方式及时间五、考试方式及时间 考试方式:期末机试。考试方式:期末机试。 考试时间:本学期考试时间:本学期171
4、7周周末(暂定)周周末(暂定) 成绩计算方法:期末成绩:成绩计算方法:期末成绩:8080分分 平时成绩:平时成绩:2020分分 平时成绩构成:平时成绩构成: -上机作业上机作业+ +平时考核(出勤、测验等)平时考核(出勤、测验等)1010分分 -期中测验:期中测验:1010分(机试)分(机试) 六、其他相关事宜六、其他相关事宜 第三周开始,每周末举办第三周开始,每周末举办C C语言学习重点难点讲座语言学习重点难点讲座 期末举办校内期末举办校内C C语言程序设计竞赛语言程序设计竞赛 MOOCMOOC课程辅助学习课程辅助学习 答疑时间注意通知答疑时间注意通知 七、教师联系方式七、教师联系方式 朱鸣
5、华朱鸣华 电子信息与电气工程学部电子信息与电气工程学部 助教:计算机学院博士助教:计算机学院博士/ /硕士研究生硕士研究生2 2名名 电话:电话:84707872 84707872 第一章第一章 C语言程序设计 本章要点 计算机如何解决问题计算机如何解决问题 C C语言发展简史语言发展简史 为什么选择为什么选择C C C C程序的结构程序的结构 运行运行C C程序的方法程序的方法 人是如何求解问题的?人是如何求解问题的? 人解决问题的基本步骤:人解决问题的基本步骤: 理解问题理解问题 制定计划制定计划 执行计划执行计划 检查结果检查结果 1.1 计算机如何解决问题 如何用计算机求解问题?如何用
6、计算机求解问题? 1 问题描述问题描述 2 数学建模数学建模 3 算法设计算法设计 4 程序设计程序设计 5 测试运行测试运行 抽象 数学语言 计算机语言 计算机解题 自动化 让计算机 理解问题 自然语言、 流程图 #include main() int x, y, sum; scanf(%d,%d, sum = x * y; printf(sum=%dn,sumt); 检测结果 执行计划 共 19页 第 10 页 程序的概念: 程序(program)是指按照一定的顺序安排工作的操作序列。 计算机程序是用计算机语言对所要解决问题进行完整而 准确的描述,是计算机为完成某一任务所必须执行的一系列
7、指令的有序集合。 例如:组织一项会议的程序: 宣布开会 介绍出席会议的嘉宾和领导 领导讲话 大会发言 宣布大会结束 共 19页 第 11 页 程序的特征: 目的性:有明确的编写目的 分布性:由一系列计算机可执行的步骤组成 有序性:执行的步骤是有序的 有限性:是有限的指令序列 操作性:可对某些对象进行操作,使其改变状态 程序设计:把自然语言描述问题的方式转换为计 算机语言的形式表达给计算机。 共 19页 第 12 页 程序设计的步骤:程序设计的步骤: 分析问题,建立数学模型 确定数据结构 确定算法,描述算法 编制程序,调试程序 运行结果 程序设计语言的构成:程序设计语言的构成: (1 1)变量、
8、运算符、表达式)变量、运算符、表达式 变量:程序中定义的、存储参与运算的数据和中间结果的单元变量:程序中定义的、存储参与运算的数据和中间结果的单元 运算符:程序中规定的进行各种运算的描述符号。运算符:程序中规定的进行各种运算的描述符号。 如如 + +、- -、* *、/ /、=、= 表达式:程序中由常量、变量、函数和运算符组成的式子。表达式:程序中由常量、变量、函数和运算符组成的式子。 如如 c=2*3.14*rc=2*3.14*r (2 2)数据类型)数据类型 基本数据类型:如整型、实型、字符型等。基本数据类型:如整型、实型、字符型等。 复合数据类型:由基本类型组成,如数组、结构体、文件等。
9、复合数据类型:由基本类型组成,如数组、结构体、文件等。 (3) (3) 程序的控制结构程序的控制结构 顺序结构、选择结构、循环结构顺序结构、选择结构、循环结构 程序的执行: 源程序 目标程序 可执行程序 编译程序 连接程序 编译方式: 解释方式: 计算结果 解释程序 源程序 int u = 32; int v = 26; while ( v!= 0 ) int temp = u%v; u = v; v = temp; printf(%d,u); 求最大公约数 辗转相除法算法描述: 1)如果v等于0,计算结束, u就是最大公约数; 2)如果v不等于0,那么计 算u除以v的余数,让u等于 v,而v
10、等于那个余数; 3)回到第一步。 共 31 页 第 16 页 计算机语言分类:计算机语言分类: 面向过程语言 FORTRAN BASIC C PASCAL COBOL LISP C+ C# Java VB .net Delphi Python 系统软件设计 具有图形功能 科学计算 商用 人工智能 面向对象语言 共 19页 第 17 页 1.2 语言的发展简史语言的发展简史 C语言是国际上广泛流行的高级语言。 1963年,剑桥,CPL语言,更近硬件,但规模大,难以实现。 1967年,剑桥,Martin Richards,简化,BCPL语言。 1970年,美国贝尔实验室,Ken Thompson,
11、简化,B语言,写第一 个UNIX系统。 19721973年,贝尔实验室,D.M.Ritchie,B语言基础上,设计 出C语言,克服B语言的过于简单、功能有限的不足。 1973年3月,K.Thompson和D.M.Ritchie合作将UNIX的90%以 上用C改写,第三版的Unix上出现了C语言的编译器。 1973年11月,第四版的Unix(System Four)发布了,该版 本完全用C语言重新写的。 1978年以后,C语言已先后移植到大、中、小、微型机上已独 立于UNIX和PDP,得以广泛应用。 Dennis MRitchie:1967年加入贝尔实验 室。他和Ken LThompson两人共
12、同设计并 实现了C语言, 改变了程序设计语言发展的 轨迹,是程序设计语言发展过程中的一个 重要里程碑。与此同时,他们两人还设计 并实现了UNIX操作系统。正是由于这两项 巨大贡献,Dennis MRitchie于1983年获 得了计算机界的最高奖图灵奖。此外, 他还获得了ACM、IEEE、贝尔实验室等授予 的多种奖项。 2011年10月12日去世,享年70岁。 原书名: The C Programming Language 作者:(美)Brian W.Kernighan, Dennis M.Ritchie Brian WKernighan:是贝尔实 验室计算科学研究中心高级研究 人员,著名的计
13、算机科学家。他 参加了UNIX系统、C语言、AWK语 言和许多其他系统的开发,同时 出版了许多在计算机领域具有影 响的著作。 C C的发展与版本的发展与版本- -标准标准 1989 1989年年ANSIANSI发布了一个标准发布了一个标准ANSI CANSI C 1990 1990年年ISOISO接受了接受了ANSIANSI的标准的标准C89C89 C C的标准在的标准在19951995年和年和19991999年两次更新年两次更新C95C95和和C99C99 所有的当代编译器都支持所有的当代编译器都支持C99C99了。了。 C11最新最新C标准,由标准,由ANSI 发布。发布。 编程语言受欢迎
14、程度排行 1.3 为什么选择 共 19页 第 22 页 编程语言受欢迎程度排行 共 19页 第 23 页 是一种高级语言是一种高级语言 可进行内存物理地址访问,具有汇编语言的特点可进行内存物理地址访问,具有汇编语言的特点 是一种介于高级语言和低级语言之间的语言是一种介于高级语言和低级语言之间的语言 历史悠久,战勋卓著历史悠久,战勋卓著 诞生于诞生于2020世纪世纪7070年代初,成熟于年代初,成熟于8080年代年代 很多重量级软件都是用很多重量级软件都是用C C语言写的语言写的 语言表达能力强语言表达能力强, ,程序运行效率高,可移植性好程序运行效率高,可移植性好 几乎没有不能用几乎没有不能用
15、C C语言实现的软件,没有不支持语言实现的软件,没有不支持C C语言语言 的系统的系统 很多流行语言、新生语言都借鉴了它的思想、语法很多流行语言、新生语言都借鉴了它的思想、语法 从从C+C+,到,到JavaJava,再到,再到C#C# 语法检查不够严格,给程序员充分自由空间语法检查不够严格,给程序员充分自由空间 对变量的类型约束不严格,数据下标越界不做检查对变量的类型约束不严格,数据下标越界不做检查 C语言的特点 共 19页 第 24 页 C C语言适合做什么语言适合做什么 选语言的标准:适合的才是最好的选语言的标准:适合的才是最好的 编写操作系统和基础工具编写操作系统和基础工具 对运行效率要
16、求较高的系统对运行效率要求较高的系统 设备驱动程序,高性能、实时中间件,嵌入设备驱动程序,高性能、实时中间件,嵌入 式系统,并发程序设计等式系统,并发程序设计等 继承和维护已有的继承和维护已有的C C代码代码 交流、笔试、面试时最常见的语言交流、笔试、面试时最常见的语言 程序框架: 本课程中所有的程序都需要这一段。本课程中所有的程序都需要这一段。 直到学函数之前,我们的代码都只是在这个框架中间。直到学函数之前,我们的代码都只是在这个框架中间。 1.4 C程序的结构 共 19页 第 26 页 例1:第一个c程序。 #include int main() printf (“How are you!
17、 n”); return 0; 说明: 程序运行结果是在屏幕上输出: How are you! 共 19页 第 27 页 例例 2: 求两数之和,并在屏幕上显示结果。求两数之和,并在屏幕上显示结果。 #include #include int main( ) int main( ) int a,b,sum; int a,b,sum; /*/*定义变量为整型定义变量为整型* */ / a=123; a=123; /*/*变量赋值变量赋值* */ / b=456;b=456; sum=a+b; sum=a+b; /*/*求和求和 * */ / printf(sum is %dprintf(sum
18、is %dn,sum); n,sum); /*/*输出和输出和 * */ / return 0;return 0; 说明: /*/表示注释。注释只是给人看的,对编译和运 行不起作用。所以可以用汉字或英文字符表示,可以出现在 一行中的最右侧,也可以单独成为一行。 说明: 程序进行运算,并在屏幕上输出一行信息:sum is 579 共 19页 第 28 页 例3: 用另一种方式编写计算两个数之和程序。 int ADDxy(int a,int b) int c; c=a+b; return(c ); int main( ) int x,y,z; scanf(%d%d , z=ADDxy(x,y);
19、printf(sum=%d n, z); return 0; 主函数 子函数 程序运行情况如下: 8 5 sum=13 共 19页 第 29 页 C C程序的基本结构:程序的基本结构: (1) 一个C程序可以由多个源程序文件组成,每个源程 序文件由一个或多个函数构成。 C程序 源程序文件1 源程序文件i 源程序文件n 预编译命令 函数1 函数n 函数体 函数首部 共 19页 第 30 页 (2) C程序总是从main函数开始执行的,与main函数的位 置无关。 (3) C程序书写格式自由,一行内可以写几个语句, 一个 语句可以分写在多行上,C程序没有行号。 (4) 每个语句和数据声明的最后必须
20、有一个分号“;” (5) C语言本身没有输入输出语句。输入和输出的操作 是由库函数scanf和printf等函数来完成的 (6)在C语言中,区分大小写字母。(C语言习惯用小写 字母) (7)书写程序时,最好使用规范的缩进格式的形式。 (8)C程序注释/*/可以写在程序的任何位置上。 共 19页 第 31 页 1.5 运行程序的步骤和方法 1.运行程序的步骤 上机输入、编辑源程序 对源程序进行编译 与库函数连接 运行目标程序 共 19页 第 32 页 2. 程序的开发环境程序的开发环境 Visual C+ 6.0 Windows平台上最流行的C/C+集成开发环境之一 Code:Blocks(简称
21、CB,http:/www.codeblocks.org) 是近年出现并获得关注的C/C+开发环境 CB的功能远远优于TC,也优于VC 6.0 CB只是一个IDE(集成开发环境),没有内置的编译 器和调试器 但可以支持多种编译器(不包括TC),例如GCC编译 器和GDB调试器 Dev C+(4.9 for Win7, 5.0 for Win8) 共 19页 第 33 页 1.6 如何学习语言如何学习语言 1.1.学习学习C C语言的语法语言的语法 数据表达:数据表达: 变量定义、正确书写表达式变量定义、正确书写表达式 流程控制:流程控制: if(ab) x=a; else x=b;if(ab)
22、x=a; else x=b; sum=0;i=1;sum=0;i=1; while(i=5)while(i=5) sum=sum+i; i=i+1; sum=sum+i; i=i+1; for(i=1;sum=0;i=5;i+)for(i=1;sum=0;i10) x=a; print x; 如: if(ab) x=a; else x=b; print x; (3)循环结构 在给定条件下,反复执行循环体,直到条件 不满足为止。如,重复做某事,小学生抄写单词。 1)形式a (当型循环结构) 不成立 P A 成立 当P条件成立时,反复执行A,直到P为零为止。 如: while(i=10) s=s+
23、i; i+; 2)形式b (直到型循环结构) 先执行A操作,再判断P是否成立,若P成立,再执 行A,直到P不成立为止。 A P 成立 不成立 算法(algorithm)是对特定问题求解步骤的一种描述。 是一组如何做某事的指令,是一组有序的动作。 1. 算法的概念 2.2 算法 算法无处不在 小学生作业 DIY家具的组装说明 洗衣机使用说明 飞机安全出口上的说明 问路 算法是一个有穷规则的有序集合。这些规则确定了解决某 一问题的一个运算序列,对于该类问题的任何初始输入,它 能机械地一步一步地计算,并在有限歩后,产生输出。 2.算法的基本特征 算法是一个有穷规则的集合,这些规则确定了解决某类 问题
24、的一个运算序列。 算法的基本特征: 有穷性:算法必须在执行有限个操作后终止; 确定性:算法中每一步的含义必须是确切的,不能出现任 何二义性; 有效性:算法中的每一步操作都应该能有效执行,一个不 可执行的操作是无效的; 有零个或多个输入:执行算法时,从外界获得必要的信息 ; 有一个或多个输出:算法的解就是输出。 算法的评价衡量算法优劣的标准 正确性:1、程序中不含语法错误; 2、程序对于精心选择的、典型、苛刻且带有刁难性的几 组输入数据能够得出满足要求的结果; 可读性:1、算法应该易于人的理解; 2、晦涩难读的算法易于隐藏较多错误而难以调试。 健壮性: 1、当输入数据非法时,算法恰当的做出反应或
25、进行相 应处理,而不是产生莫名其妙的输出结果。 2、处理出错的方法,不是中断程序,而是返回一个表示 错误或错误性质的值,以便进行处理. 正确性(correctness) 可读性(readability) 健壮性(robustness) 效率 ( 对相同规模的问题,执行时间短、占用空间少) 3. 算法的性能评价 时间复杂度: 同一问题可用不同算法解决,各种算法中,语 句执行次数越多,则该算法耗费的时间越长。 一个算法中的语句执行次数称为语句频度或时 间频度,记为T(n)。 T(n)= 语句执行次数该语句执行时间 语句执行次数 该方法可独立于机器的软件、硬件系统来分析 算法在效率方面的优劣 例 x
26、 = 0; y = 0; for ( k = 0; k 2*n; k + ) x +; for ( i = 0; i n; i+ ) for ( j = 0; j n; j+ ) y +; 1 1 2n n2 时间耗费T(n) = 4+ 6n+ 2n2 2 lim/2 n T nn 当n充分大时,T(n)与n2在数量级上相同, 记T(n)=O(n2) 2n+1 n+1 n*(n+1) 执行次数 时间复杂度:算法耗用时间相对问题规模n的增长率,一般指基本操作重复执 行的次数的阶数 加法规则与乘法规则 1、O(f(n)+O(g(n) = maxO(f(n), O(g(n) 2、O(f(cn) =
27、O(f(n), c是正整数 3、O(f(n)*O(g(n) = O( f(n)*g(n) 大O表示法:T(n)=O(f(n) 基本操作重复执行的次数的阶数(算法耗用时间的增长率 ) 设n为问题的规模,f(n)为算法中频度最大的语句频度, T1(n) = O(1) T2(n) = O(n) T3(n) = O(n2) T(n) 例 x = 0; y = 0; for ( k = 0; k 2*n; k + ) x +; for ( i = 0; i n; i+ ) for ( j = 0; j n; j+ ) y +; 频度最大语句重复执行次数的阶数 = T1(n)+T2(n)+T3(n) =
28、O( max( 1, n, n2 ) ) = O(n2) 例:nn矩阵相乘 for(i=1;i=n;i+) for(j=1;j=n;j+) cij=0; for(k=1;k=80 输出gi i+1 i i50 结束 成立 不成立 不成立 成立 传统流程图用流 程线指出各框的 执行顺序,对流 程线的使用没有 严格限制。 2)NS流程图 NS流程图 由美国学者I.Nassi和B.Shneiderman提出表示 算法的图形工具。基本单元是矩形框,用不同的形 状线分割,表示三种结构。只有一个入口,一个出口 ,没有流程线。 N-S图的优点 比文字描述直观、形象、 易于理解;比传统 流程图紧凑易画。尤其是
29、它废除了流程线,整个算 法结构是由各个基本结构按顺序组成的,N-S流程 图中的上下顺序就是执行时的顺序。 三种基本程序结构的NS流程图 条件 T F 语句1 语句2 选择结构 语句1 语句2 顺序结构 循环结构 循环体 循环体 当条件成立时 直到条件成立 循环结构一 循环结构二 0t,0i i+1i t+it 直到 i100 输出 t 的值 传统流程图与N-S流程图的比较 i100 N Y 开始 0t,0i i+1i t+it 输出 t 的值 结束 例1:1+2+3+ 加到100为止 3)伪代码 伪代码是介于自然语言和计算机语言之间的、伪代码是介于自然语言和计算机语言之间的、 用文字和符号来描
30、述算法的工具。伪代码不能被计用文字和符号来描述算法的工具。伪代码不能被计 算机理解,但接近某种语言编写的程序,便于转换算机理解,但接近某种语言编写的程序,便于转换 为编程语言。为编程语言。 根据编程语言的不同,有不同的描述语言。根据编程语言的不同,有不同的描述语言。 例:求例:求 用用VB的伪代码。的伪代码。 n i isum 1 Proc Psum Input n 0=sum 1=i While isum i+1=i Print sum End 可视化可视化 基于流程图基于流程图 无需编程无需编程 算法设计和运行验证算法设计和运行验证 可生成可生成c+c+、 JavaJava等高等高 级语言
31、代码级语言代码 可导出流程图可导出流程图 初学者的好帮手初学者的好帮手 62 可视化编程开发环境Raptor RAPTOR(the Rapid Algorithmic Prototyping Tool for Ordered Reasoning-用于有序推理的快速算法 原型工具) (1 1)穷举法(枚举法)穷举法(枚举法) 特点特点: :算法简单,容易理解,运算量大。算法简单,容易理解,运算量大。 基本思想:基本思想: 根据题目的部分条件确定答案的大致范围,然后根据题目的部分条件确定答案的大致范围,然后 在此范围内对所有可能的情况逐一验证,直到所有情况均通在此范围内对所有可能的情况逐一验证,直
32、到所有情况均通 过验证。若某个情况符合题目条件,则为本题的一个答案;过验证。若某个情况符合题目条件,则为本题的一个答案; 若全部情况验证完后均不符合题目的条件,则问题无解。若全部情况验证完后均不符合题目的条件,则问题无解。 如:百元买百鸡问题。假定小鸡每只如:百元买百鸡问题。假定小鸡每只0.50.5元,公鸡每只元,公鸡每只2 2 元,母鸡每只元,母鸡每只3 3元。现在有元。现在有100100元钱要求买元钱要求买100100只鸡,问共有几只鸡,问共有几 种购鸡方案?种购鸡方案? 根据题目,设母鸡、公鸡、小鸡各为根据题目,设母鸡、公鸡、小鸡各为x,y,zx,y,z只,列出方程只,列出方程 为:为:
33、x+y+z=100 x+y+z=100,3x+2y+0.5z=1003x+2y+0.5z=100 利用穷举法,将各种可能的组合一一测试,输出符合条件利用穷举法,将各种可能的组合一一测试,输出符合条件 的组合。即在各个变量的取值范围内不断变化的组合。即在各个变量的取值范围内不断变化x,y,zx,y,z的值,穷的值,穷 举举x,y,zx,y,z全部可能的组合,若满足方程组则是一组解。全部可能的组合,若满足方程组则是一组解。 5. 程序设计典型算法 #include stdio.h main() int x,y,z; printf(母鸡母鸡 公鸡公鸡 小鸡小鸡); for(x=0;x=33;x+)
34、for(y=0;y=1;i-) x=(x+1)*2; printf(第第 %d 天的桃子数为:天的桃子数为:%d只只, i,x); printf(n); 猴子吃桃子C语言程序: (3 3)递归法)递归法 将问题逐层分解,将复杂问题归结为一些最简单的问题将问题逐层分解,将复杂问题归结为一些最简单的问题 进行处理,然后再沿着分解的逆过程逐步进行综合。进行处理,然后再沿着分解的逆过程逐步进行综合。 如如根据求根据求n!n!的定义的定义n!=n(nn!=n(n- -1)!1)!,进行求解。该定义可给,进行求解。该定义可给 出具体形式如下出具体形式如下: : 1 ( n=0,1 )1 ( n=0,1 )
35、 n! = n! = n(nn(n- -1)1)! ( n1 )( n1 ) 从求从求n!n!逐层递推为求逐层递推为求(n(n- -1)!1)!,求,求(n(n- -2)!.2)!.最后成为求最后成为求1!1!这这 个简单问题,再沿着原来分解地逆过程逐层相乘进行回归,个简单问题,再沿着原来分解地逆过程逐层相乘进行回归, 得出结果。得出结果。 共 31 页 第 71 页 (4)(4)求最大值、最小值问题求最大值、最小值问题 采用如同打擂台的方法。采用如同打擂台的方法。 在在n n个数中,先假设第一个数为最大值,成为擂个数中,先假设第一个数为最大值,成为擂 主,依次同第主,依次同第2 2,3 3,
36、nn个数据逐一比较,一旦个数据逐一比较,一旦 某个数大,马上替换擂主;所有值比较完,最大值某个数大,马上替换擂主;所有值比较完,最大值 也就获得。也就获得。 求最小值问题则先假设第一个数为最小值。求最小值问题则先假设第一个数为最小值。 如如 对输入的若干个学生成绩,求出最高分。对输入的若干个学生成绩,求出最高分。 共 31 页 第 72 页 (5)(5)交换两个变量的值交换两个变量的值 问题分析:问题分析:由于计算机内存的特点,因此,计算机由于计算机内存的特点,因此,计算机 中交换两个变量的值只能采取间接交换的方法。中交换两个变量的值只能采取间接交换的方法。 例如:有黑和蓝两个墨水瓶,但却错把
37、黑墨水装在例如:有黑和蓝两个墨水瓶,但却错把黑墨水装在 了蓝墨水瓶子里,而蓝墨水错装在了黑墨水瓶子里,了蓝墨水瓶子里,而蓝墨水错装在了黑墨水瓶子里, 要求将其互换。要求将其互换。 因为两个瓶子的墨水不能直接交换,所以,解决这因为两个瓶子的墨水不能直接交换,所以,解决这 一问题的关键是需要一问题的关键是需要引入第三个墨水瓶引入第三个墨水瓶。设第三个。设第三个 墨水瓶为白色,其交换步骤如下:墨水瓶为白色,其交换步骤如下: 共 31 页 第 73 页 将蓝瓶中的黑墨水装入白瓶中 将黑瓶中的蓝墨水装入蓝瓶中 将白瓶中的黑墨水装入黑瓶中 交换结束 共 31 页 第 74 页 结构化程序设计方法 结构化程
38、序设计方法是公认的面向过程编程应遵 循的基本方法和原则。结构化程序设计方法主要原则: 以三种基本程序结构的组合来描述程序; 整个程序采用模块化结构; 程序设计自顶而下(先考虑整体,后考虑细节); 逐步求精; 用结构化程序设计流程图表示算法。 第三章第三章 数据类型、运算符与表达式 C语言程序设计 共 62 页 第 76 页 本章要点 数据的描述规则 数据的操作规则 共 62 页 第 77 页 3.13.1 3.23.2 3.33.3 3.43.4 3.53.5 基本符号基本符号 数据类型数据类型 运算符和表达式运算符和表达式 数据类型转换数据类型转换 自增运算和自减运算自增运算和自减运算 主要
39、内容 共 62 页 第 78 页 程序设计语言的基本规则包括程序设计语言的基本规则包括 常数常数 变量变量 运算符运算符 表达式表达式 函数函数 xaxfsin 5 3 6 . 3)( 什么是语言规则?什么是语言规则? 为什么要有这些规则?为什么要有这些规则? 把自然语言描述问题的方式转把自然语言描述问题的方式转 换为换为C C语言的形式表达给计算机语言的形式表达给计算机 表达式表达式 常数 变量变量 函数函数 运算符运算符 共 62 页 第 79 页 常数常数3 3、5 5和和3.63.6的存放空间是否相同?的存放空间是否相同? 变量变量a a如何表示?如何存放?如何表示?如何存放? 计算机
40、如何知道计算机如何知道3.63.6和和a a之间的关系?之间的关系? 和和sin xsin x 如何输入?如何存放?如何输入?如何存放? 计算机如何识别计算机如何识别“=”=”?运算结果放在哪里?运算结果放在哪里? 计算机完成上述计算,首先要计算机完成上述计算,首先要 解决数据的解决数据的输入输入和和存放存放问题问题 问题 5 3 共 62 页 第 80 页 3.1 C3.1 C语言语言的基本的基本符号符号 1. C1. C语言语言的基本字符集的基本字符集 数数 字字:0 1 2 3 4 5 6 7 8 9 字字 母母:a b c z A B C Z 运运 算算 符符:+ - * / % =
41、= != = “ 特殊符号:特殊符号:_(下划线下划线) 回车回车(r) 换行换行(n) 制表符制表符(t) ASCIIASCII字符集字符集 基本字符集基本字符集 共 62 页 第 81 页 为程序的构成成份命名为程序的构成成份命名 2. C语言语言的标识符的标识符 包括:包括:变量名、函数名、文件名、类型名等。变量名、函数名、文件名、类型名等。 规则:规则:只能由字母、数字和下划线组成;只能由字母、数字和下划线组成; 第一个字符必须为字母或下划线。第一个字符必须为字母或下划线。 C C语言的标识符:语言的标识符:关键字关键字 用户自定义标识符用户自定义标识符 call_n test39 _
42、string1 abc call.n 39test -string1 c2.0 例例 共 62 页 第 82 页 auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while 保留字(保留字(3232个)个) 3. C语言语言的关键字的关键字 用户不能用关键字作标识
43、符!用户不能用关键字作标识符! 共 62 页 第 83 页 4. 常量常量 在程序运行中,其值保持不变的量称为常量。在程序运行中,其值保持不变的量称为常量。 常量的表示方法常量的表示方法: 数值常量数值常量 例如:例如:10,3 , 2.68等等 符号常量符号常量 用一个符号代表一个常量用一个符号代表一个常量 必须必须先定义先定义后使用后使用, 习惯用习惯用大写大写字母表示。字母表示。 例如例如: #define PI 3.1415926 int main( ) float l,s,r=2; l=2*PI*r; s=PI*r*r; printf(“l=%d, s=%d”, l,s); retu
44、rn 0; 常用这种方式简化程常用这种方式简化程 序调试,但是必须在序调试,但是必须在 程序的开头定义要使程序的开头定义要使 用的符号常量。称为用的符号常量。称为 宏定义。宏定义。 共 62 页 第 84 页 5.5.变量变量 在程序执行期间其值可以改变的量。在程序执行期间其值可以改变的量。 有关变量的规定有关变量的规定 变量通过变量名标识,变量名和内存中变量通过变量名标识,变量名和内存中 的存储单元相对应。编写程序时通过变量的存储单元相对应。编写程序时通过变量 名来存、取存储单元。名来存、取存储单元。 变量必须先定义,后使用。变量必须先定义,后使用。 变量变量 memory a 8 8 8 1000H1000H 1001H1001H 1002H1002H 255255 1212 变量定义的位置:函数的变量定义的位置:函数的开头开头或或