1C语言程序设计2课程目标:熟悉C语言的基本概念熟悉TurboC的上机操作环境会读、会编、会调试C程序顺利通过省二级考试课程要求:课堂做笔记多上机实习3计算机系统硬件软件运算器控制器存储器输入输出设备系统软件操作系统数据库系统网络系统程序设计语言与语言处理程序机器语言和汇编语言高级语言:C语言、Fortran、Pascal面向对象的程序设计:C++应用软件41.1程序与程序语言1.2算法概述1.3C语言概况1.4C程序的开发过程与开发环境C语言概述第1章5本章从C语言的发展出发,主要介绍C语言的发展历史、基本特点和简单的C语言程序结构与组成,重点介绍了算法的含义与算法的描述工具,以传统流程图为重点分析了算法的描述方法。通过本章的学习,要求达到以下目标:了解C语言的形成、发展和基本特点;了解程序、程序设计、高级语言的概念;掌握C语言程序的基本结构和组成;掌握计算机算法的基本概念和算法描述的基本工具;运用传统流程图描述一个具体的算法。【本章导读】61.1程序与程序设计语言1程序:指令的集合数据结构+算法=程序程序设计语言机器语言特点:面向机器的二进制表示的语言。汇编语言特点:面向机器的符号化的机器语言。高级语言特点:面向问题的类自然语言。2+3010100100011ADD2,32+37程序设计语言的发展机器语言汇编语言高级语言面向过程面向对象一种CPU指令系统,由0、1序列构成的指令码组成如:10000000加10010000减用助记符号描述的指令系统如ADDA,B面向机器的语言程序设计侧重于系统功能解题过程是数据被加工的过程客观世界可以分类,对象是类的实例对象是数据和方法的封装对象间通过发送和接受消息发生联系程序设计关键是定义类,并由类派生对象C语言发展历史8程序设计确定数据结构确定算法编写程序程序调试整理源程序并总结资料程序设计结构顺序结构选择结构循环结构9算法是指解决问题的方法和步骤。正确的计算机程序必须具备两个基本条件:一是掌握一门计算机高级语言的规则二是要掌握解题的方法和步骤算法概念1.2算法概述10算法简例可以用最原始的方法进行。步骤1:先求1×2,得到结果2。步骤2:将步骤1得到的乘积2再乘以3,得到结果6。步骤3:将6再乘以4,得24。步骤4:将24再乘以5,得120。……这样的算法虽然是正确的,但太繁琐。如果要求1×2×…×1000,则要写999个步骤,显然是不可取的。而且每次都直接使用上一步骤的数值结果(如2,6,24等),也不方便。应当找到一种通用的表示方法。【例】求1×2×3×……×2011设置两个变量,一个变量代表被乘数,一个变量代表乘数。不另设变量存放乘积结果,而直接将每一步骤的乘积放在被乘数变量中。今设t为被乘数,i为乘数。用循环算法来结果。可以将算法改写如下:S1:使1=tS2:使2=iS3:使t×i,乘积仍放在变量t中,可表示为t×i=tS4:使i的值加1,即i+1=iS5:如果i=20,返回重新执行步骤S3以及其后的步骤S4和S5;否则,算法结束。最后得到t的值就是20!的值。例续12算法衡量算法优劣的标准:(1)思路:清晰、正确。(2)过程:简单、明了、扼要。(3)算法:合适。13算法的五个基本特征:(1)有穷性一个算法必须在有限次执行后完成。(2)确定性算法中的每一个步骤都应当是确定的,而不应当是含糊的、模棱两可的(3)输入是指在执行算法时需要从外界取得必要的信息,提供运算对象的初始情况,一个算法有0个或多个输入。(4)输出一个算法要有一个或多个输出。若无输出,则无法知道结果。(5)有效性算法中的每一个步骤都应该被有效地执行,并应能得到一个明确的结果。实质上,算法反映的是解决问题的思路。许多问题,只要仔细分析对象数据,就容易找到处理方法。算法的特征14算法的表示方法很多,主要有:自然语言传统流程图N-S图伪代码计算机程序语言算法的表示15传统流程图起止框处理框判断框连接点流程线1图常用流程图符号数据16输出x输出-xYNx≥0图条件判断图图具有连接点的流程图17画出求1×2×3×……×20的流程图【例】图1.4求20!图1.5求20!并输出i=20YNi=20YN18ABP成立不成立AB当P成立AA直到P成立1973年美国学者提出了一种新的流程图形式。在这种流程图里,完全去掉了带箭头的流程线。全部算法写在一个矩形框内,在框内还可以包含其它从属于它的方框,即由一些基本的框组成一个大框。这种流程图适于结构化程序设计算法的描述。0⇒s,1⇒i当i≤100成立s+i⇒si+1⇒i输出s的值2N-S图19用传统的流程图表示算法,直观易懂,但画起来比较费事。因此,流程图适宜表示一个算法,但在设计算法过程中使用不是很理想。为了设计算法时方便,常用一种称为伪代码(pseudocode)的工具。伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。它如同一篇文章,自上而下地写下来。每一行(或几行)表示一个基本操作。它不用图形符号,因此书写方便、格式紧凑,也比较好懂,便于向计算机语言算法(即程序)过渡.3用伪代码表示算法20例如“打印x的绝对值”的算法可以用伪代码表示如下:IFxispositiveTHENprintxELSEprint–x它像一个英语句子一样好懂,在国外用得比较普遍。也可以用汉字伪代码,如:若x为正打印x否则打印–x也可以中英文混用,如:IFx为正printxELSEprint–x21开始置t的初值为1置i的初值为2当i=20,执行下面操作:使t=t×i使i=i+1(循环体到此结束)打印t的值结束例也可以写成以下形式:BEGIN(算法开始)1=t2=iwhilei=20{t×i=ti+1=i}printtEND(算法结束)在本算法中采用当型循环(第3行到笫5行是一个当型循环)。while意思为“当”,它表示当i=5时执行循环体(大括弧中的两行)的操作。求20!用伪代码表示的算法如下:224用计算机语言表示算法要完成一件工作,包括设计算法和实现算法两个部分。设计算法的目的是为了实现算法。我们的任务是用计算机解题,也就是要用计算机实现算法。计算机是无法识别流程图和伪代码的。只有用计算机语言编写的程序才能被计算机执行(当然还要经过编译成目标程序才能被计算机识别和执行)。因此,在用流程图或伪代码描述出一个算法后,还要将它转换成计算机语言程序。用计算机语言表示算法必须严格遵循所用语言的语法规则,这是和伪代码不同的。我们将前面介绍过的算法用C语言表示。23【例】求10!voidmain(){inti,longt;t=1;i=2;while(i=10){t=t*i;i=i+1;}printf(%d,t);}24•产生背景–汇编语言程序依赖于计算机硬件,可读性和可移植性都差–一般的高级语言又难以实现对计算机硬件的直接操作•产生过程(BCPL→B→C)–时间:1972~1973–地点:美国贝尔实验室–目的:UNIX操作系统–设计人:Ken.Thompson、Dennis.M.Ritchie和Brian.W.Kernighan•C标准–标准C:K&R合著《TheCProgrammingLanguage》–83ANSIC:1983年ANSI公布C语言标准草案–87ANSI标准C:1987年–1990年国际标准的ANSIC1.3C语言概况25(1)C语言是具有低级语言功能的高级语言C语言既具有高级语言的功能,又具有低级语言的许多功能。它把高级语言的基本结构和语句与低级语言的实用性结合起来,是处于汇编语言和高级语言之间的一种程序设计语言,也可称其为“中级语言”。(2)C语言简洁、紧凑,使用方便、灵活C语言一共只有32个关键词,9种控制语句,TurboC2.0增加了11个关键词(用于各种增强和扩展功能)。程序书写形式自由,主要用小写字母表示,相对于其他高级语言源程序短。(3)运算符丰富,表达式能力强C语言共有34种运算符,范围广泛,除一般高级语言所使用的算术、关系和逻辑运算符外,还可以实现以二进制位为单位的运算,并且具有如a++,--b等单项运算符和+=、-=、*=、/+等复合运算符等。C语言的特点26(4)数据结构丰富,便于数据的描述与存储C语言具有丰富的数据结构,其数据类型有整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等,因此能实现复杂的数据结构的运算。(5)C语言是结构化、模块化的编程语言程序的逻辑结构可以使用顺序、分支和循环3种基本结构组成。C语言程序采用函数结构,十分便于把整体程序分割成若干相对独立的功能模块,并且为程序模块间的相互调用以及数据传递提供了便利。(6)C语言程序中,可使用宏定义编译预处理语句、条件编译预处理语句,为编程提供了方便。C语言的特点(续)27(7)可移植性好与汇编语言相比,C程序基本上不作修改就可以运行于各种型号的计算机和各种操作系统。(8)C语言也存在一些不足之处,例如运算符及其优先级过多、语法定义不严格等,对于初学者有一定的困难。由于C语言具有上述特点,因此C语言得到了迅速推广,成为人们编写大型软件的首选语言之一。许多原来用汇编语言处理的问题可以用C语言来处理了。C语言的特点(续)28例第一个程序Hello,World!0/*example1.1ThefirstCProgram*/#includestdio.hmain(){printf(“Hello,World!”);}/*ch1_1.c*/注释预处理命令函数语句输出:Hello,World!C程序格式和结构特点29/*examplecalculatethesumofaandb*/#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);}/*ch1_2.c*/运行结果:sum=34函数语句预处理命令注释30•习惯用小写字母,大小写敏感•不使用行号,无程序行概念•可使用空行和空格•常用锯齿形书写格式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缩进{}对齐有足够的注释有合适的空行格式特点31•函数与主函数–程序由一个或多个函数组成–必须有且只能有一个主函数main()–程序执行从main开始,在main中结束,其它函数通过嵌套调用得以执行。•程序语句–C程序由语句组成–用“;”作为语句终止符•注释–/**/为注释,不能嵌套–不产生编译代码例:/*Thisisthemain/*ofexample1.1*/*/非法预处理命令结构特点321.用TurboC运行C程序的步骤为了能使用TurboC,必须先将TurboC编译程序装入磁盘的某一目录下,例如放在C盘根目录下一级TC子目录下。(1)调用TurboC程序。如果用户的当前目录是TurboC编译程序所在的子目录(例如TC子目录),只需从键盘键入“tc”命令即可:(2)C:\TCtc1.4C程序的上机步骤33编辑链接编译执行程序代码的录入,生成源程序*.c语法分析查错,翻译生成目标程序*.obj与其它目标程序或库链接装配,生成可执行程序*.exe源程序目标程序可执行程序内容程序设计语言机器语言机器语言可执行不可以不可以可以文件名后缀.c.obj.exeC程序开发步骤有有有无无无开始编辑编译有错?连接有错?执行有错?结束源程序file.c目标程序f