第一章C语言概述程序设计基础B教材、参考书与课时安排•教材C语言程序设计(第五版)谭浩强主编清华大学出版社参考书C语言程序设计费志民主编人民邮电出版社•课时安排授课:60学时理论:30学时实验:30学时上机安排上机地点:302机房上机时间:周二1-4节要求:所有作业必须独立完成分组有大作业每次上机作业需要调试通过,并计成绩发现上机时间上网娱乐,记一次处理课程及考核要求课前请做好预习保持课堂安静,认真听讲按时完成并提交作业加强上机练习,有效利用上机时间期末均要统一年级(笔试)考核期中以笔试为主期末上机+笔试平时成绩:上机练习+课后作业+分组大作业为什么学习C语言这几年,随着智能设备不断增多及物联网的飞速发展,企业对C/C++人才的需求量呈现出了爆炸式增长。由于C/C++相对于JAVA、.NET、PHP语言入门较难,因此选择学习C/C++的人比较少,导致C++人才非常匮乏。目前工作在一线的C/C++程序员年龄普遍在30岁以上,已经呈现出了断层现象。C/C++语言发展至今已经有近40年历史,是目前唯一应用最广泛的编程语言,它广泛应用于网络、通讯、图像、游戏、硬件驱动、嵌入式等行业。C/C++入门虽难,但知识更新速度远没有Java、.Net快,是一门“一朝学习,受用终生”的技术。2013年10月编程语言排行榜,C++位据第四位,C语言继续稳占第一位!为什么学习C语言“为什么C语言没有被淘汰?”拉布金提出了这个问题。的确,C语言距问世之初已经有了35年的历史。在这期间里,计算机迈出了不可测量的发展步伐,软件和操作系统也早就今非昔比,编程语言中不乏叱咤风云的新生代,而C语言也有了升级版。C语言自2015年11月以来就有下降趋势。在随后的很长一段时间里,其评分都在15%-20%之间波动,2016年的评分甚至跌至10%以下,并且没有看到回升的势头。然而2017年C语言一反常态,不仅获得了1.69%的增长,还成为了年度编程语言。C语言的复兴的原因可能是他在不断增长的制造业和机械行业(包括汽车市场)中很受欢迎。C语言是专业基础课程(平台)学习计算机硬件、软件学习硬件设计FPGA学习硬件设计VHDL学习单片机控制学习仪器仪表等和专业相关课程性质课程介绍及要求•课程性质及特点:•专业基础课,为将来专业课的学习打基础•理论性和实践性都比较强•项目驱动教学,要将课上内容与课本内容结合学习•课时少任务重课程目标:•会读、会编、会调试C程序•能够规范化编码•能够独立完成小型课程设计项目项目:万年历(上机)、笑脸移动(上机)本学期课程学习目标通过本课程的学习,应掌握•C语言基本语句、语法顺序、选择、循环结构程序设计(流程控制)数组、函数、指针、文件结构体类型变量、结构体数组•程序设计的基本思想、基本概念和基本方法•能运用所学的知识和技能对一般问题进行分析和程序设计,编制出高效的C语言应用程序。能够独立完成小型课程设计项目能够分组合作完成综合项目第一章C语言概述1.1C语言出现的历史背景1.2C语言的特点(重点)1.3简单的C程序介绍(重点)C语言程序结构C语言的基本符号C程序的书写规则1.4运行C程序的步骤和方法程序的概念程序:为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集合编制程序的工具就是编程语言,就像人类各个国家都有自己国家的语言一样,计算机语言也有很多种。我们使用的编程语言接近人类语言,而计算机是仅仅理解0和1代码组成的低级语言。中间需要一个翻译官,这就是开发高级语言的工程师已经为我们准备好了的编译程序或者解释程序。机器语言汇编语言高级语言面向过程面向对象CPU指令系统,由0、1序列构成的指令码组成如:10000000加10010000减用助记符号描述的指令系统如ADDA,B面向机器的语言程序设计是数据被加工的过程客观世界可以分类,对象是类的实例对象是数据和方法的封装对象间通过发送和接受消息发生联系程序设计关键是定义类,并由类派生对象程序设计语言的发展第一代语言第二代语言第三代高级语言C++JAVAC#SmallTalkCPascal结构化unix83年图灵奖詹姆斯.高斯林C语言出现的历史背景1、C语言出现的历史背景系统软件主要是由汇编语言编写,但汇编语言依赖于计算机硬件,程序的可读性和可移植性均差。高级语言不依赖于硬件,但不能实现汇编语言的功能。因此迫切找到一种语言,即满足汇编语言的功能,又具有高级语言的特点。即C语言。C语言集高级语言和低级语言于一身,既适合编写系统软件,又适合编写应用软件。*产生背景*应用需求:界于汇编和高级语言之间的中级语言*产生过程*时间:1972~1973地点:美国贝尔实验室设计人:Ken.Thompson和Dennis.M.Ritchie(B语言)目的:改写UNIX操作系统*C标准*标准C:K&R合著《TheCProgrammingLanguage》(BrianW.Kernighan和DennisM.Rithchie)1978年1、ANSIC:1983年2、87ANSIC:1987年1990年国际标准的ANSIC3、C991994年C语言发展过程1960:ALGOL语言离开硬件远,不适合编写系统软件20世纪60年代,是一个算法语言,1963:CPL语言(剑桥大学)接近硬件1967:BCPL语言(剑桥大学)简化1970:B语言(Bell实验室)1973:C语言(Bell实验室)改进进一步简化1978:传统C语言1990:ANSIC语言规模庞大,组合编程语言,是在Algol基础上发展的,更接近硬件K&R著作ISO修订接近硬件的一种语言。并写了第一个UNIX操作系统。C语言的发展进程3、C语言的发展过程1977年,出现了不依赖机器的C编译系统,UNIX操作系统迅速地在各种机器上实现,C语言得到了推广。20世纪80年代中期,出现了面向对象程序设计的概念。贝尔实验室又将此概念引入到C语言中,出现C++语言。20世纪90年代,跨平台的用于Internet开发的JAVA语言日益火爆,JAVA即采用了C语法。MicrosoftVisualC++、MicrosoftVisualStudio、DEVC++、Code::Blocks、BorlandC++、WaTComC++、BorlandC++Builder、GNUDJGPPC++、Lccwin32CCompiler3.1、HighC、TurbC、gcc、C-Free和Win-TC、MyTc等等,C语言C语言被分类为高级语言,但实际上它是一种介于高级语言和低级语言之间的语言--中间语言。很多流行语言、新生语言都借鉴了它的思想、语法•从C++,到Java,再到C#正确地学好C语言,是学习这些流行语言的基础。语言简洁、紧凑、灵活运算符和数据类型丰富程序设计结构化、模块化生成目标代码质量高可移植性好(较之汇编语言)可以直接操纵硬件代码量小。速度快。功能强大C语言特点由系统定义,不能重作其它定义的字符串类型说明符autocharconstdoubleenumexternfloatintlongregistershortsignedsizeofstaticstructunsignedunionvoidvolatile2语句、定义符breakcasecontinuedefaultdoelseforgotoifreturnswitchwhiletypedef3预处理命令字(*)defineinclude32个关键字if()~else~for()~while()~do~while()continuebreakswitchgotoreturn9种控制语句算术运算符:+-*/%++--关系运算符:====!=逻辑运算符:!&&||位运算符:~|^&赋值运算符:=及其扩展条件运算符:?:逗号运算符:,指针运算符:*&求字节数:sizeof强制类型转换:(类型)分量运算符:.-下标运算符:[]其它:()-(负号)34种运算符基本类型构造类型指针类型空类型void定义类型typedef数值类型字符类型char枚举类型enum整型浮点型单精度型float双精度型double短整型short长整型long整型int数组结构体struct共用体unionC数据类型:§1-2C语言的特点解释1:C++是由于开发大型应用软件的需要而产生的,并不是所有的人都要去编写大型软件;解释2:面向对象的基础是面向过程。C++是面向对象的语言,C是面向过程的,学起来比C语言困难得多,所以不太适合程序设计的初学者。问题:既然有了面向对象的C++语言,为什么还要学习C语言?例1第一个程序Hello,World!/*example1.1ThefirstCProgram*/#includestdio.hmain(){printf(“Hello,World!\n”);}注释编译预处理,包含的库文件函数语句输出:Hello,World!第一个C程序说明:•以.h为后缀的文件被称为头文件,可以是C程序中现成的标准库文件,也可以是自定义的库文件。•C是由函数组成的,main()是主函数,每个C程序必须有一个主函数。•函数体由{}中的内容组成。•printf是C的输出函数,“”内字符串原样输出。•“\n”是换行符•语句结束用分号/*example1.1calculatethesumofaandb*/#includestdio.h/*Thisisthemainprogram*/main(){inta,b,sum;a=10;b=24;sum=add(a,b);printf(”sum=%d\n,sum);}/*Thisfunctioncalculatesthesumofxandy*/intadd(intx,inty){intz;z=x+y;return(z);}运行结果:sum=34函数语句预处理命令注释例2习惯用小写字母,大小写敏感不使用行号,无程序行概念可使用空行和空格常用锯齿形书写格式main(){……………….…………………………..…………..……………….………………………….……………….………………..}main(){inti,j,sum;sum=0;for(i=1;i10;i++){for(j=1;j10;j++){sum+=i*j;}}printf(“%d\n”,sum);}优秀程序员的素质之一:使用TAB缩进{}对齐有足够的注释有合适的空行C程序格式特点函数与主函数•函数是C语言的基本单位•程序由一个或多个函数组成•必须有且只能有一个主函数main()•程序执行从main开始,在main中结束,其它函数通过嵌套调用得以执行。(习惯上把main()函数放在最前面)程序语句•C程序由语句组成•用“;”作为语句终止符注释•/**/为注释,不能嵌套•不产生编译代码例:/*Thisisthemain/*ofexample1.1*/*/非法C程序结构特点说明语句部分说明语句部分由变量定义、自定义类型定义、自定义函数说明、外部变量说明等组成。可执行语句一般由若干条可执行语句构成。/*主函数main()*/main(){intnum1,num2;printf(“Inputthefirstintegernumber:”);scanf(“%d”,&num1);printf(“Inputthesecondintegernumber:”);scanf(“%d”,&num2);printf(“max=%d\n”,max(num1,num2));}函数体结构示意图main(){intx,y;x=3;y=6;intmax;max=xy?x:y;printf(“max=%d\n”,max);}说明语句部分需要放在可执行语句的前面【例3】main(){inta,b,c;scanf(“%d%d”,&a,&b);c=max(a,b);printf(“max=%d”,c);}i