610 likes | 761 Views
C 语言程序设计. 主讲:徐大军. Email: xdj@buaa.edu.cn Tel: 13581894133 QQ 群 : 231175581 (每周二、三晚在线答疑). 教学大纲. 1 、课程教学目标 本课程为非计算机专业的基础课程,任务: 在学生掌握 C 语言的基本内容、程序设计的基本方法与编程技巧的过程中,向学生介绍进行科学计算的一般思路。 2 、教材 《C 程序设计 》 第四版 谭浩强 清华出版社 3 、教学内容及基本要求 目录 17~22. 课程安排
E N D
C语言程序设计 主讲:徐大军 Email: xdj@buaa.edu.cn Tel: 13581894133 QQ群: 231175581(每周二、三晚在线答疑)
教学大纲 • 1、课程教学目标 • 本课程为非计算机专业的基础课程,任务:在学生掌握C语言的基本内容、程序设计的基本方法与编程技巧的过程中,向学生介绍进行科学计算的一般思路。 • 2、教材 • 《C程序设计》第四版 谭浩强 清华出版社 • 3、教学内容及基本要求 • 目录17~22
课程安排 • 上课 32学时,第1~16周,J3-201周二 上午3、4节; • 上机 16学时,第2~9周, • 地点(待定) • 时间(周五上午3、4节)
成绩 • 平时作业成绩占20%,上机报告10%, • 上机测试10%,期末笔试成绩60%
第一章 C语言概述 • 内容提要: • C语言历史与发展 • C语言的特点 • 简单的C语言程序介绍 • 如何运行C语言程序
关于计算机程序的应用 • 计算机能够做什么?
计算机程序设计在AA领域的应用 • 从一则新闻说起。。。 快讯:中国首台千万亿次超级计算机系统“天河一号” 居国际组织全球超级计算机前500强榜首。 2010年11月15日 02:39:45 来源: 新华网
计算机程序设计在AA领域的应用 • 从一则新闻说起。。。 世界上第一台电子计算机命名为“埃尼阿克”ENIAC,是1946年美国宾夕法尼亚大学研制成功。 弹道计算
计算机程序设计在AA领域的应用 • 计算机程序设计的应用案例
计算机程序设计在AA领域的应用 • 计算机程序设计的应用案例 航天运载器、导弹、卫星、高超飞行器、浮空器、炮射飞行器等 飞行器设计 研究形式: 流场计算 结构计算 传热计算 动力学计算 优化设计
计算机程序设计在AA领域的应用 • 计算机程序设计的应用案例 航天运载器、导弹、卫星、高超飞行器、浮空器、炮射飞行器等 飞行器设计 研究形式: 流场计算 结构计算 传热计算 动力学计算 优化设计
计算机程序设计在AA领域的应用 • 计算机程序设计的应用案例 航天运载器、导弹、卫星、高超飞行器、浮空器、炮射飞行器等 飞行器设计 研究形式: 流场计算 结构计算 传热计算 动力学计算 优化设计
计算机程序设计在AA领域的应用 • 计算机程序设计的应用案例 航天运载器、导弹、卫星、高超飞行器、浮空器、炮射飞行器等 飞行器设计 研究形式: 流场计算 结构计算 传热计算 动力学计算 优化设计
计算机程序设计在AA领域的应用 • 计算机程序设计的应用案例 航天运载器、导弹、卫星、高超飞行器、浮空器、炮射飞行器等 飞行器设计 研究形式: 流场计算 结构计算 传热计算 动力学计算 优化设计
计算机程序设计在AA领域的应用 • 计算机程序设计的应用案例 火箭、导弹、卫星的导航制导与控制,图像处理 导航探测 研究形式: 算法研究 硬件开发 图像处理
计算机程序设计在AA领域的应用 • 计算机程序设计的应用案例 液体、固体、固液火箭发动机,电推进发动机,冲压发动机等 动力工程 研究形式: 流场计算 结构计算 传热计算
关于“计算机程序设计语言” • 计算机程序设计语言 • 真实会话语言 | • 面向问题的语言 | • 计算机程序设计语言(C语言) | • 机器语言 | • 计算机硬件
关于“计算机程序设计语言” • 计算机程序设计语言种类 C,C++, C# Basic Fortran Java ……
关于“计算机程序设计语言” • 为何选择C语言学习? 应用程序界面开发 C++, VB... 科学数值计算 网络编程 C,C++, Fortran., MatLab.. Java,C# 数据库编程 C VC++,VB 硬件编程 C C++ C# 扩展阅读: 【转载】为什么我们都应该学学C语言
C语言的发展历史与特点 • C语言的发展历史 汇编语言 UNIX操作系统 改进 Algol 60 语言 BCPL语言 Bell Lab. B语言 New B 语言 C语言 Ken Thompson Dennis Ritchie • C语言的标准化: K&R C (经典C) ANSI C (C89或C90) C99 The C Programming Langurage Brian Kernighan, Dennis Ritchit 1983-1989, 美国国家标准协会ANSI 1990,国际标准化组织ISO 1999,ISO
C语言的发展历史与特点 • C语言的特点 • C语言是一种底层语言 • C语言是一种小型语言 • C语言是一种包容性语言 • C语言的优点 • 高效、可移植性、功能强大 • 灵活、标准库 • 与UNIX/LINUX系统的集成
C语言的发展历史与特点 • C语言的缺点 • C语言更容易隐藏错误 • C程序可能会难以理解 • C程序可能会难以修改 国际模糊C代码大赛 International Obfuscated C Code Contest http://www.ioccc.org
简单的C程序 注释 函数 语句 编译预处理 /* example1.1 The first C Program*/ #include <stdio.h> int main() { printf(“This is a C Program!\n"); return 0; } This is a C Program!
简单的C程序 格式特点 • 习惯用小写字母,大小写敏感 • 不使用行号,无程序行概念 • 可使用空行和空格 • 用锯齿形书写格式 10 10 例:求∑ (i*∑j)之积 i=1 j=1 #include <stdio.h> void main( ) //主函数 { int i , j , sum; //变量 sum=0; for(i=1; i<10;i++) { for(j=1;j<10;j++) { sum=sum+i*j ; } } printf(“%d\n”,sum); } 优秀程序员的素质之一: • 使用TAB缩进 • {} 表示某一层次结构 ,要对齐 • 有足够的注释 • 有合适的空行 • 一个说明或一个语句占一行
简单的C程序 非法 结构特点 • 1,编译预处理命令 -> 例:#include "stdio.h“ • 2,函数与主函数 • 程序由一个或多个函数组成 • 必须有且只能有一个主函数main() • 程序执行从main开始,在main中结束, 其它函数通过嵌套调用得以执行。 • 3,程序语句 • C程序由语句组成 • 用“;”作为语句终止符 • 4,注释 • /* */为C注释,不能嵌套 • //为C++的注释 • 不产生编译代码 例: /*This is the main /* of example1.1*/ */
简单的C程序 c程序结构
简单的C程序 例1.2 加法运算程序 #include "stdio.h" //编译预处理 int main() { int a,b,sum; /*定义变量*/ a=123; /*变量赋值*/ b=456; sum=a+b; /*算术表达式 ,求和*/ printf("sum is %d\n",sum); /*输出sum的值*/ return 0; } • 在C中,变量必须先定义,后使用 • 语句具有规定的语法格式和特定的功能 • ;为语句的终止符。 • { }表示程序的结构层次范围, 并且必须配对使用。 • 注释格式 /*注释内容*/
简单的C程序 C程序由函数组成 • 例1.3 求最大值 #include "stdio.h" int max(int x, int y) { int z; if (x>y) z=x; else z=y; return (z); } void main ( ) { int a,b,c; scanf("%d,%d",&a,&b); c=max(a,b); printf("max= %d\n",c); } • 至少包含一个且仅有一个名为main( )的主函数。 • 程序从主函数main( ) 开始执行。 • main()函数的位置可以任意 • 函数的语法结构: 函数类型 函数名(形参说明 形参) { 内部变量说明; 执行语句部分; return计算结果; } • 注意:书写格式
C程序开发步骤.理论 编辑 编译 链接 执行 C程序的开发步骤 程序代码的录入,生成源程序*.c 语法分析查错,翻译生成目标程序*.obj 与其它目标程序或库链接装配,生成可执行程序*.exe
C程序开发步骤.实现 • Windows环境下的开发环境
C程序开发步骤.实现 • 为什么是黑窗口? 控制台程序
第2章 程序的灵魂——算法 • 内容提要: • 算法的概念 • 算法的表示方法 • 结构化程序设计方法
算法的概念 • 数据结构 + 算法 = 程序 对数据的描述 对数据操作的描述 Nikiklaus Wirth, 1966 1.对数据的描述,即数据结构。 在C语言中,系统提供的数据结构,是以数据类型的形式出现的。 2.对数据处理的描述,即计算机算法。算法是为解决一个问题而采取的方法和步骤,是程序的灵魂。
算法的概念 • 算法的概念 1、算法:计算机求解某一问题而采用的具体方法; 做事情都有——方法、步骤(顺序)——决定事情的成败
算法的概念 • 算法的概念 • 2、两大类计算机算法: • 数值运算算法(数值求解) • 非数值运算算法(事务管理) 程序员必备知识:算法、数据结构、程序设计方法、语言工具
算法的概念 a<60 N Y 不及格 a<70 Y N a<80 及格 N Y 中等 a<90 Y N 良好 优秀 • 算法举例 任务:将学生的成绩按分数段分级。 S1:1i ,输入一个学生成绩a S2: S3: i+1 i,输入一个学生成绩a S4:如果i 10000, 返回S2; 否则,算法结束。 转S3 转S3 转S3 转S3 转S3
算法的概念 a<60 N Y 不及格 a<70 Y N a<80 及格 N Y 中等 a<90 Y N 良好 优秀 • 算法举例 不及格及格中等良好优秀 分数:0~59 60~69 70~79 80~89 90~99 判断次数: 2 4 4 1 3 比例: 0.05 0.15 0.40 0.30 0.10 次数: 500 3000 12000 12000 4000 总计31500次
a<80 N Y a<90 Y a<70 N Y Y 中等 良好 优秀 a<60 Y N 不及格 及格 不及格及格中等良好优秀 分数:0~59 60~69 70~79 80~89 90~99 判断次数: 3 2 2 3 2 比例: 0.05 0.15 0.40 0.30 0.10 次数: 1500 4500 8000 6000 2000 原算法 总计31500次 改进后算法 总计22000次
【转载】李开复:算法的力量 算法与我 “记得我读博时写的Othello对弈软件获得了世界冠军。当时,得第二名的人认为我是靠侥幸才打赢他,不服气地问我的程序平均每秒能搜索多少步棋,当他发现我的软件在搜索效率上比他快60多倍时,才彻底服输。” 网络时代的算法 并行算法:Google的核心优势 算法并不局限于计算机和网络
算法的概念 • 算法的特性 • 有穷性:一个算法必须在执行有穷步之后结束。 • 确定性:算法的每一步必须是确切定义的。 • 对于相同输入必须得到相同结果。 • 有效性:算法的每一步都是能够实现的,即可操作的。 • 输 入:算法有零个或多个输入。 • 有输出:算法执行完毕,必须有一个或若干个输出结果。
算法的表示方法 • 常用的算法表示方法 • 1、用带序号的自然语言表示算法 例2.1 求1×2×3×4×5 Step1: 先求1×2,得到结果2。 Step2: 将Step1得到的乘积再乘以3,得到结果6。 Step3: 将6再乘以4,得到24。 Step4: 将24再乘以5,得到120。这就是最后的结果。 通俗易懂,但不直观,不严谨,难以描述分支和循环(如例2.5)。
算法的表示方法 • 常用的算法表示方法 • 2、用流程图表示算法 起止框 输入输出框 判断框 处理框 流程线 连接点
算法的表示方法 s1TcFwhile cs s2 s1s2suntil c • 常用的算法表示方法 • 3、用N-S流程图表示算法 N-S图(盒图) 特点:完全去掉了带箭头的流程线,算法的所有处理步骤都写在一个大矩形框(表示简单、符合结构化思想。)
算法的表示方法 • 常用的算法表示方法 • 4、用伪代码表示算法 用介于自然语言与计算机语言之间的文字及符号来描述算法 (方便、易懂、便于向计算机语言过渡) if x is positive then print x else print -x
算法的表示方法 • 举例:计算 ,写出其算法 自然语言描述 S1: 把0放入S存储单元 S2: 把1放入n存储单元 S3: 把S与n相加,结果放入S存储单元 S4: 把n加1,结果放入n存储单元 S5: 判断n是否小于等于100 是,转S3;否则转S6 S6: 输出S的值
算法的表示方法 • 举例:计算 ,写出其算法 流程图描述 N-S流程图描述 开始 0 => S 1 => n 0 => S 1 => n n≤100 S+n => S S+n => S n+1=>n n+1 => n T 输出S n≤100 N 输出S 结束
算法的表示方法 • 举例:计算 ,写出其算法 伪代码描述 C语言程序描述 main() { int S, n; S = 0; n =1; while(n<=100) { S= S+n; n = n+1; } printf(“S=%d\n”,S); } 0=>S 1=>n while n≤100 S+n=>S n+1=>n print S
算法的表示方法 • 如何应用各种算法的表示方法 1、简单问题,或已能够熟练编程 用自然语言打“腹稿”,直接写程序; 2、较为复杂的问题,或尚不熟练掌握编程 画流程图,再写程序 3、大型程序,多人合作编写 一定要画流程图,进行任务分工; 写伪代码,协调讨论,再写程序。
结构化程序设计方法 • 结构化程序的三种基本结构 顺序结构、选择结构、循环结构 结构化程序设计 基本思想:任何程序都可以用三种基本结构表示,限制使用无条件转移语句(goto) 结构化程序:由三种基本结构反复嵌套构成的程序 优点:结构清晰,易读,提高程序设计质量和效率.
结构化程序设计方法 A A B B (a) (b) • 结构化程序的三种基本结构 一、顺序结构 N-S结构流程图 先执行A操作,再执行B操作,两者是顺序执行关系。