授课教师:刘佳联系方式:地址:高层三楼教师机房QQ:1006558538教材与课时安排教材C语言程序设计乌云高娃、温希东、王明福编著高等教育出版社课时安排授课:132学时推荐参考资料§《C语言程序设计》林小茶编著中国铁道出版社§《C程序设计》(第二版)谭浩强著清华大学出版社§《C语言程序设计》黄锐军编写人民邮电出版社§《C语言基础教程》张晓蕾主编人民邮电出版社项目一:商人货币交换问题请编制程序实现,来解决以下问题:古时候有两个商人,一个赵国人,一个秦国人,要进行货币交换,那时候秦国还没有统一六国,货币还不一样,二个秦国货币铜钱等价于三个赵国的货币铜钱,现在这个赵国人手上有18个赵国铜币,秦国人手上有20个秦国铜币,请问如何用程序来模拟两个商人交换货币的过程。涉及到的知识点如下:§单元一:初识C语言程序§单元二:基本字符、标示符和关键字、数据类型及常量、变量§单元三:数据的格式化输出语句§单元四:数据的格式化输入语句§单元五:运算符与表达式§单元六:数据交换的设计与实现单元一:初识C语言程序C语言发展历史C语言特点简单的C程序介绍C程序上机步骤程序算法基础软件编程规范编译预处理§开发能力最强,应用最广泛操作系统开发、应用程序开发、单片机程序开发、网络程序设计……§专业水平的试金石各种专业考试首选程序设计语言:研究生入学考试、程序员考试、等级考试……§后续主干课程的重要基础数据结构、数据库程序设计、Java程序设计、可视化程序设计、网络编程、单片机开发……§1.1C语言发展历史为什么从C语言开始如何学习C语言编程?§编程似写作先学“字词句”和“语法”,目标是“写作”。学习数据类型、控制结构、语法规则等——学语句掌握程序分析、算法与编程——————写文章§仅仅读书是不够的程序是编出来的,程序是调出来——在编程实践中消化知识。§没有天生的程序员初学者:有点难。没有学不会的,只有学不精的——除非自己放弃。青出于蓝胜于蓝:超过你的老师完全可能。§循次渐近很重要阅读/分析程序→摹仿编程→掌握常见程序模块→简单程序→复杂编程§仅是起点,而非终点从此编程与你相伴而行——真正的程序员从此起步。程序与程序设计语言§程序日常生活中的“程序”是指完成某一件事情的工序,或者一系列的步骤。计算机来说,程序就是由计算机指令构成的序列。计算机按照程序中的指令逐条执行,就可以完成相应的操作。实际上程序需要人来编写,使用的工具就是程序设计语言。程序设计语言的发展机器语言汇编语言高级语言面向过程面向对象CPU指令系统,由0、1序列构成的指令码组成如:10000000加10010000减用助记符号描述的指令系统如ADDA,B面向机器的语言C语言等等JAVA、C++、VB、VC、DELPHI冯.诺依曼结构:计算机运算器控制器存储器主机:I/O设备:键盘、显示器等中央处理器CPUC语言程序设计第一章C语言概述C语言发展过程产生背景产生过程时间:1972~1973地点:美国贝尔实验室目的:UNIX操作系统设计人:Ken.Thompson和Dennis.M.RitchieC标准78年标准C:K&R合著《TheCProgrammingLanguage》ANSIC:1983年87ANSI/ISOC:1987年1990年国际标准的ANSIC1994年ISO修订了C,称ISOCC语言程序设计第一章C语言概述§1.2C语言特点语言简洁、紧凑、灵活运算符和数据类型丰富程序设计结构化、模块化生成目标代码质量高可移植性好同时具备高级语言和低级语言的特征有大量的库函数中级语言C语言程序设计第一章C语言概述32个关键字:(由系统定义,不能重作其它定义)autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunsignedunionvoidvolatilewhileC语言程序设计第一章C语言概述9种控制语句:if()~else~for()~while()~do~while()continuebreakswitchgotoreturnC语言程序设计第一章C语言概述例C语言与Pascal语言比较C语言Pascal语言含义{}BEGIN….END复合语句if(e)s;IF(e)THENs条件语句inti;VARi:INTEGER定义i为整型变量inta[10];VARa:ARRAY[1..10]OFINTEGERintf();FUNCTIONf():INTEGERint*p;VARp:INTEGERi+=2;i=i+2赋值i+2ii++,++i;i=i+1i自增值结论:C比Pascal简练,源程序短。C语言程序设计第一章C语言概述34种运算符:算术运算符:+-*/%++--关系运算符:====!=逻辑运算符:!&&||位运算符:~|^&赋值运算符:=及其扩展条件运算符:?:逗号运算符:,指针运算符:*&求字节数:sizeof强制类型转换:(类型)分量运算符:.-下标运算符:[]其它:()-C语言程序设计第一章C语言概述C数据类型基本类型构造类型指针类型空类型void定义类型typedef数值类型字符类型char枚举类型enum整型浮点型单精度型float双精度型double短整型short长整型long整型int数组结构体struct共用体unionC语言程序设计第一章C语言概述§1.3简单C程序介绍例1.1第一个程序Hello,World!/*example1.1ThefirstCProgram*/#includestdio.hmain(){printf(“Hello,World!”);}C语言程序设计第一章C语言概述注释编译预处理函数语句输出:Hello,World!例1.2:/*Exampleforaddprogram*/#includestdio.hmain(){inta,b,sum;/*这是定义变量*/a=123;b=456;/*给变量赋值*/sum=a+b;/*求两个数之和*/printf(a+b=%d\n,sum);}运行结果:a+b=579注释编译预处理语句主函数例1.3/*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函数语句预处理命令注释C语言程序设计第一章C语言概述格式特点习惯用小写字母,大小写敏感不使用行号,无程序行概念可使用空行和空格常用锯齿形书写格式C语言程序设计第一章C语言概述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缩进{}对齐有足够的注释有合适的空行结构特点函数与主函数程序由一个或多个函数组成必须有且只能有一个主函数main()程序执行从main开始,在main中结束,其它函数通过嵌套调用得以执行。程序语句C程序由语句组成用“;”作为语句终止符注释/**/为注释,不能嵌套不产生编译代码例:/*Thisisthemain/*ofexample1.1*/*/非法编译预处理命令C语言程序设计第一章C语言概述例:#includestdio.h编辑链接编译执行§1.4C程序的上机步骤C程序开发步骤开始编辑编译连接执行有错?结果正确?结束有源程序file.c目标程序file.obj库函数和其它目标程序可执行目标程序无正确不正确file.exeC语言程序设计第一章C语言概述程序代码的录入,生成源程序*.c语法分析查错,翻译生成目标程序*.obj与其它目标程序或库链接装配,生成可执行程序*.exe源程序目标程序可执行程序内容程序设计语言机器语言机器语言可执行不可以不可以可以文件名后缀.c.obj.exeC程序开发步骤源程序(.c)———目标程序(.obj)———可执行程序(.exe)(你编写的)编译(中间产品)连接(你出售的)compilelinkFile1.cFile1.objFile1.exeFile1.cstdio.h整合/*example1.1ThefirstCProgram*/#includestdio.hmain(){printf(“Hello,World!”);}File1.c库函数编译预处理编译连接C语言程序设计第一章C语言概述WIN-TC开发环境WIN-TC集成开发环境C语言程序设计第一章C语言概述WIN-TC安装目录*.*INCLUDELIBSYS*.**.*§1.5程序算法基础程序设计的基本流程用计算机解决某一个问题。例如,求三个数的和。设计算法根据算法写出程序(通俗的叫“代码”)算法:为解决一个问题而采取的方法和步骤,就称为算法(注意:有一些列的步骤或者动作)对计算机来讲“程序”就是为让计算机完成特定任务而设计的指令序列。程序设计语言:C、JAVA、Delphi、VisualBasic等算法程序(“代码”)问题最原始方法:§步骤1:先求1×2,得到结果2。§步骤2:将步骤1得到的乘积2乘以3,得到结果6。§步骤3:将6再乘以4,得24。§步骤4:将24再乘以5,得120。这样的算法虽然正确,但太繁。【例1.5.1】求1×2×3×4×5算法设计改进的算法:§S1:使t=1§S2:使i=2§S3:使t×i,乘积仍然放在在变量t中,可表示为t×i→t§S4:使i的值+1,即i+1→i§S5:如果i≤5,返回重新执行步骤S3以及其后的S4和S5;否则,算法结束。如果计算100!只需将S5中若i≤5改成i≤100即可。如果改求1×3×5×7×9×11,算法也只需做很少的改动:§S1:1→t§S2:3→i§S3:t×i→t§S4:i+2→t§S5:若i≤11,返回S3,否则,结束。该算法不仅正确,而且是计算机较好的算法,因为计算机是高速运算的自动机器,实现循环轻而易举。思考:若将S5写成:若i<11,返回S3;否则,结束。【例1.5.2】有50个学生,要求将他们之中成绩在80分以上者打印出来。如果,n表示学生学号,ni表示第个学生学号;g表示学生成绩,gi表示第个学生成绩;则算法可表示如下:§S1:1→i§S2:如果gi≥80,则打印ni和gi,否则不打印§S3:i+1→i§S4:若i≤50,返回S2,否则,结束。润年的条件:§能被400整除§不能被400整除,但是能被4整除,不能被100整除的年份;【例1.5.3】判定2000—2500年中的每一年是否闰年,将结果输出。设y为被检测的年份,则算法可表示如下:§S1:2000→y§S2:若y能被400整除,则输出y“是闰年”§S3:若y不能被400整除,进入下一步S4§S4:如果不能被4整除则输出y“不是闰年”,否则,进入第五步S5§S5:如果能被100整除,则输出y“不是闰年”,否则说明不能被100整除,则输出y“是闰年”§S6:y+1→y§S7:当y≤2500时,返回S2继续执行,否则,结束。分析:从键盘输入的三个数值必须用三个变量来保存,假定这三个变量分别为a、b、c,另外,还需要一个变量