程序设计基础 贺辉 图书馆三楼办公室(进馆左侧上楼) hhdpczh@yahoo.com.cn
大学的学习你准备好了么? 大学的学习 希望大家能早日适应大学的学习生活! 不同的教学方式 不同的学习方式 不同的学习目标 不同的考核方式 00:39:58
怎样学好这门课? 端正学习态度——态度决定一切 课前预习——有目的 课后复习——温故知新 认真完成作业——检验学习成果 多做练习——熟能生巧 参考课外书籍——它山之石 互相交流——兼听则明 00:39:58
好书推荐 “Computer Systems A Programmer's Perspective”(Randal E.Bryant&David O'Hallaron著;深入理解计算机系统(龚奕利译)) “The C Programming Language”(Kernighan &Ritchie ) “Expert C Programming”(Linden) “Write Clean Code”(Steve Maguire) 高质量C++/C 编程指南(林锐) C 语言深度解剖-----解开程序员面试笔试的秘密 00:39:58
你希望将来运用计算机到何种境界?
本课堂要求 按时到课 关闭手机或调到静音 积极思考 多多实践 时时总结 主动学习 00:39:58
我对大家的期望 这门课结束后希望你--- 迈入“程序设计”之门 学习用计算机的方式思考问题 使用计算机帮你减轻一些负担 创作出作品给他人欣赏 强逻辑...... 使用计算机帮你减轻一些负担 创作出作品给他人欣赏 为后续课程打好基础 00:39:58
实验课要求 不得在上课期间上QQ、偷菜等,浏览与课程无关的网页 没有特殊事情请不要中途离开 00:39:58
课堂出勤要求 每位同学可以有一次无假条请假机会 如果你认为你都会了,向我证明,然后可以免听 请班长协助考察 “听明白,看明白不代表你懂了,你懂了不代表你会用了,你会用了不代表你能用明白,你能用明白不代表你真正懂了!什么时候表明你真正懂了呢?你站在我这来,把问题给下面的同学讲明白,学生都听明白了,说明你真正懂了。” ---《C语言深度剖析》 请班长协助考察 00:39:58
关于教材 简单但是经典 练习以及配套材料丰富 00:39:58
助教…… 林永吉(08级) Tel:13824129430 Email:godxiaoji@vip.qq.com 00:39:58
网络学习平台…… http://www.5ic.net.cn http://172.20.10.138 用户名:13177+学号 密码:5ic http://172.20.10.138 00:39:58
ACM程序设计比赛 欢迎感兴趣的同学参加我们学院的各项比赛 珠海、广东、亚洲赛区,更多广阔的舞台 00:39:58
程序设计:艺术?科学? 一方面需要在大学里学习有关计算机科学的课程 另一方面又要看著名的如Donald Knuth“The Art of Computer Programming”系列的书 物理学家Richard Feynman“更确切的说,计算机科学更像工程--都是用一些东西来实现另一些东西” 有时人们在争议程序设计到底是一门艺术还是一门科学 00:39:58
人与计算机的对话 两个说不同母语的人的对话方式: 人与计算机的对话方式: 一方学另一方的语言 双方都学习一种第三方语言 计算机学习人的语言(自然语言理解) 人学习计算机的语言 学习第三方语言 00:39:58
机器语言 计算机掌握的语言 由二进制序列(0、1)组成 一条指令由操作码+数据信息构成 00:39:58
冯诺依曼结构 计算机使用二进制形式 存储程序,顺序执行 程序和数据以二进制代码形式不加区别地存放在存储器中,存放位置由地址确定 00:39:58
机器语言 用机器码编程就像用牙签吃东西,刺的块很小且有些费力,吃一顿饭要花很长时间 同样,每个机器码字节只是完成可以想象得到的最小且最简单的计算工作:从内存装入一个数至处理器,将其与另一个数相加把结果再存回内存 所以很难想象机器码如何完成一整项的工作 00:39:58
汇编语言 用英文缩写符号代替操作码 用英文名字代替存储地址 比机器语言方便,但仍然不够方便 冗长乏味 不可移植 00:39:58
低级语言 难以学习、难以使用 与计算机结构相关 00:39:58
高级语言 容易学习、容易使用(示例) 通常是可移植的,不像汇编语言那样依赖于特定的处理器 与计算机结构无关 问题:高级语言是审慎而周密的概念语言,用高级语言写的代码如何让计算机识别呢? 00:39:58
高级语言向低级语言的转化 逐句转换 解释器=》解释语言 批量转换 编译器=》编译语言 其余方式? 00:39:58
高级语言发展简史
最古老的高级语言 FORTRAN,今天仍在使用(尽管有了广泛的修改) 由FORmula前3个字母和TRANslation前4个字母混合而成 20世纪50年代中期由IBM公司为704系列计算机开发的 广泛支持浮点运算甚至复数运算 00:39:58
早期的许多程序设计者都是科学家和工程师,他们利用FORTRAN和ALGOL所要求的数学算法来阐述自己的问题 然而,纵观程序设计语言的历史可以发现,人们希望有能被更大范围的人们所使用的语言 00:39:58
第一个为商务系统设计的成功语言是COBOL,今天仍被广泛使用(1959年早期由美国工业和国防部组成的委员会推出) 20世纪60年代中期,伴随着System/360项目的开发,IBM公司开发了名为PL/1(programming language number one) 00:39:58
Pascal,瑞士计算机科学教授Niklaus Wirth在20世纪60年代后期设计而成 ...... BASIC(beginner‘s all-purpose symbolic instruction code),Dartmouth数学系的John Kemeny等1964年为Dartmouth的分时系统开发的 Pascal,瑞士计算机科学教授Niklaus Wirth在20世纪60年代后期设计而成 ...... 然后就有了C语言,一种受到万般宠爱的程序设计语言 00:39:58
C语言的那些事儿 Ken Thompson大牛某日想玩一个叫Space Travel的游戏 为了能更爽的玩游戏,他忽悠了Dennis Ritchie加入,决定重新开发一个操作系统 用汇编语言写操作系统不太爽,于是他们决定设计一种新的语言 他们从BCPL语言中整合出了B语言 然后将B语言改良成了C语言 00:39:58
C语言的那些事儿 (1970年) BCPL – Martin Richards (1967年) B – Ken Thompson C – Dennis Ritchie (1972-1973年) 00:39:58
Ritchie和Thompson在开发UNIX 贝尔电话实验室 00:39:58
C语言的祖师爷——Dennis M. Ritchie C is quirky, flawed, and an enormous success. http://www.cs.bell-labs.com/who/dmr/ 00:39:58
中级语言 结构化编程语言 C 语言允许分割代码和数据 可以使用函数或代码块来实现这种特性 代码块是逻辑上连接在一起的一组程序语句,可以当作一个单元来使用 强类型语言 高级语言 C语言 汇编语言 00:39:58
C语言的特点 (1)语言简洁、紧凑,使用方便、灵活。 32个关键字、9种控制语句,程序形式自由。 (2)运算符丰富。34种运算符 。 (3)数据类型丰富,具有现代语言的各种数据结构。 (4)具有结构化的控制语句 ,是完全模块化和结构化的语言。 (5)语法限制不太严格,程序设计自由度大。 00:39:58
C语言的特点 (6)允许直接访问物理地址,能进行位操作,能实现汇编语言的大部分功能,可直接对硬件进行操作。兼有高级和低级语言的特点 。 (7)目标代码质量高,程序执行效率高。只比汇编程序生成的目标代码效率低10%-20%。 (8)程序可移植性好(与汇编语言比)。基本上不做修改就能用于各种型号的计算机和各种操作系统。 00:39:58
随着微型计算机的日益普及, 出现了许多C 语言版本。 说明: 随着微型计算机的日益普及, 出现了许多C 语言版本。 由于没有统一的标准,使得这些C 语言之间出现了一些不一致的地方。为了改变这种情况, 美国国家标准研究所(ANSI)为C 语言制定了一套ANSI标准, 成为现行的C语言标准。 00:39:58
说明: 不同版本的C编译系统所实现的语言功能和语法规则又略有差别,因此同学们应了解所用的C语言编译系统的特点(可以参阅有关手册)。 教材的叙述基本上以ANSI C 为基础。 00:39:58
问题:既然有了面向对象的C++语言,为什么还要学习C语言?(C过时了?) 解释3:面向对象的基础是面向过程。C++是面向对象的语言,C是面向过程的, C++学起来比C语言困难得多,所以不太适合程序设计的初学者。 有些大学 居然取消了C 语言课程,认为其过时了。我个人的观点是“十鸟在林,不如一鸟在手”,真 正把C 语言整明白了再学别的语言也很简单,如果C 语言都没整明白,别的语言学得再好 也是花架子,因为你并不了解底层是怎么回事。 00:39:58
编写C程序的步骤 打开编程环境 添加源文件 编写源程序 编译源程序 连接目标文件 执行可执行文件(.exe) 00:39:58
编译和运行程序 程序文本用户 #include文件 可以阅读 源文件 库文件 #编译器 将扩展的源代码 转换成机器语言 目标文件 将目标代码与函数链接 成可执行代码 其他用户生成 的目标文件 链接器 可执行文件 00:39:58
我们要使用的软件 Dev-cpp 4.9.9.0 我们还可能叫它编译器、集成开发环境、Compiler、IDE 00:39:58
我们的第一个C语言程序 在屏幕上打印Hello Boys and Girls 00:39:58
从函数开始 在数学领域,函数是一种关系,这种关系使一个集合里的每一个元素对应到另一个(可能相同的)集合里的唯一元素。 f(x)=x+2 x是自变量,随着x的变化,f(x)也随之变化 00:39:58
C语言的函数 C语言由很多个函数组成,每个函数完成一项任务 00:39:58
函数分为两种 一种是自己写的函数,这样的函数需要由我们自己完成任务(模块化程序设计) 一种是别人写的函数,它已经可以完成一项独立的任务,我们只需要调用它即可(前提?) 00:39:58
调用别人写的函数完成任务 如果我们需要请同宿舍的同学帮我们带一份外卖,需要进行哪些数据的传递? 00:39:58
函数的三个重要信息 叫什么名字 需要什么信息 返回什么信息 00:39:58
函数 所有的程序都必须有一个入口函数,叫做main,这个函数是由我们自己完成的 自己写的每个函数除了圆括号,还需要一对花括号 圆括号里面是我们需要的信息 花括号里面是我们为了完成我们的任务所做的工作 00:39:58
注意 C语言区分大小写 使用半角英文字符标点 小心拼写错误 00:39:58
注意 我们的这个函数名字叫做main 它暂时不需要任何信息,因此圆括号为空 那么它完成任务后返回什么结果呢? 00:39:58
函数 在main函数中,我们约定返回0代表程序正常结束,因此在花括号中加上return 0 记住每一条语句都以一个分号(;)结束 最后我们在main前面加上int 思考:int代表什么意思呢? 00:39:58
思考 现在我们已经有了一个程序的基本框架 接下来如何输出Hello Boys and Girls ? 00:39:58
注意 在屏幕上输出文字这项任务已经有人完成,将其写成了一个函数 我们只需要调用这个函数完成任务即可 00:39:58
00:39:58
输出语句 对应函数为printf,在括号中用双引号包含你想要打出来的内容,最后不要忘记分号结束 什么时候需要分号?参见编程注解 因为这个函数是别人写的,因此不需要花括号,也不需要花括号里面的内容 00:39:58
预处理器命令 因为我们在程序中使用了别人写的函数,因此需要在程序开头和编译器打个招呼 这个函数是存放在stdio.h文件中的,因此我们使用#include <stdio.h> Standard Input Output Header头文件 打招呼放在程序最开始,后面没有分号 00:39:58
运行程序 存盘,文件扩展名为c 编译——如果程序有问题,在这个阶段会报错 注意这个步骤实际上包括了编译与链接 运行 00:39:58
一个小问题 这个编译器运行程序后,结果一闪而过,因此我们所有的程序都需要在最后增加一句话,让他暂停下来,帮助我们看清楚 system( “pause” ); 再运行,就能看清效果 注意:函数只要遇见return,就会马上结束,请特别留意所加这句话的位置。 00:39:58
注意 代码中的空行 换行 空格 不会对输出产生任何影响 双引号中间的空格会原样输出 00:39:58
思考 如果希望让输出结果后换到新一行,要怎么做呢? 00:39:58
良好的编程习惯 永远在最后输出一个换行字符 \n newline 00:39:58
注释 程序为了方便自己也方便别人看懂,需要增加一些说明——注释 注释用/* */包含,中间不管写什么,编译器都不会处理 00:39:58
良好的编程习惯 给程序写注释,在每个函数前面说明函数的作用 注释尽量用英文 00:39:58
写好代码的12个步骤 Do you use source control? Can you make a build in one step? Do you make daily builds? Do you have a bug database? Do you fix bugs before writing new code? Do you have an up-to-date schedule? Do you have a spec? Do programmers have quiet working conditions? Do you use the best tools money can buy? Do you have testers? Do new candidates write code during their interview? Do you do hallway usability testing? 00:39:58
写好代码的12个步骤 是否使用源码控制软件? 是否可以一步构建一个build? 是否进行daily build? 是否有bug数据库? 是否及时更新了你的时间表? 是否有详细的设计规格说明书? 程序员是否有个安静的工作环境? 是否在使用金钱可以买到的最好的工具? 有没有测试人员? 面试的时候是否要求求职者写代码? 是否利用陌生人进行可用性测试(直译为走廊过客可行性测试)? 00:39:58
小结: (1) C程序总是从main函数开始执行的,与main函数的位置无关。 (2) C程序书写格式自由,一行内可以写几个语句, 一个语句可以分写在多行上,C程序没有行号。 (3) 每个语句和数据声明的最后必须有一个分号。 (4) C语言本身没有输出语句。输出的操作是由库函数printf等函数来完成的。C对输出实行“函数化”。 00:39:58
C语言的基本结构 说明: main-主函数名, void-函数类型 每个C程序必须有一个主函数main { }是函数开始和结束的标志,不可省 #include <stdio.h> //命令行部分 void main() { int a; int b; int sum; printf("请输入a的值:"); scanf("%d",&a); //给a赋值 printf("请输入b的值:"); scanf("%d",&b); //给b赋值 sum=a+b; printf("sum=%d\n",sum); /*输出sum的值*/ } 主函数 定义部分 说明: main-主函数名, void-函数类型 每个C程序必须有一个主函数main { }是函数开始和结束的标志,不可省 每个C语句以分号结束 使用标准库函数时应在程序开头一行写: #include <stdio.h> 函数体 执行部分 00:39:58
今日内容 了解课程要求与授课老师 认识C语言的祖师爷 了解C语言的编译运行 00:39:58