《C程序设计项目教程》最全课件整套ppt教学课件完整版教学教程全套电子讲义讲义(最新).ppt

上传人:春哥&#****71; 文档编号:4269204 上传时间:2021-07-16 格式:PPT 页数:315 大小:5.79MB
返回 下载 相关 举报
《C程序设计项目教程》最全课件整套ppt教学课件完整版教学教程全套电子讲义讲义(最新).ppt_第1页
第1页 / 共315页
《C程序设计项目教程》最全课件整套ppt教学课件完整版教学教程全套电子讲义讲义(最新).ppt_第2页
第2页 / 共315页
点击查看更多>>
资源描述

《《C程序设计项目教程》最全课件整套ppt教学课件完整版教学教程全套电子讲义讲义(最新).ppt》由会员分享,可在线阅读,更多相关《《C程序设计项目教程》最全课件整套ppt教学课件完整版教学教程全套电子讲义讲义(最新).ppt(315页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、C语言程序设计项目教程,项目一共分为两个任务,项目一 欢迎进入C语言世界,任务一 熟悉C开发环境,任务二 创建简单的C应用程序,任务一 熟悉C开发环境,一、计算机语言,二、C语言的历史,三、C语言程序执行过程,四、C语言开发环境简介,在本任务中,我们将学习C语言的历史及其常用的开发环境。,任务说明,预备知识,一、计算机语言,按计算机语言的发展进程,可将计算机语言分为三类:,1机器语言,以二进制代码(0和1)表示机器指令的一种语言,其程序能被计算机直接执行。,2汇编语言,用助记符代替机器指令,用变量代替各类地址,称为汇编语言(也称符号语言)。,3高级语言,高级语言屏蔽了机器的细节,更接近于自然语

2、言和数学语言,给编程带来了极大的方便。,二、C语言的历史,1967年,为开发UNIX操作系统,Ken Thompson在BCPL程序设计语言的基础上,将其改造成B语言。,1971年,M.Ritchie改进B语言,并命名为C语言。随着UNIX操作系统的成功,C语言也获得巨大成功。,1989年,ANSI发布了一个完整的C语言标准,被称为C89或ANSI C。,ISO直接采用了C89作为C语言标准,有的资料上称其为C90。,1990年,ISO发布了最新的C语言规范,被称为C99。,1999年,ISO正式发布了C语言的新标准C11。,2011年12月8日,三、C语言程序执行过程,高级语言编写的程序只有

3、借助编译程序将其翻译为用0和1表示的机器语言指令代码,才能真正在计算机中执行。高级语言翻译有两种方式:一是编译方法,二是解释方法。,1编写源代码,2编译(Compile),将我们编写的源代码翻译为计算机能够理解的二进制目标代码。,3连接(Link),将目标文件与函数合并成完整的可执行文件,即生成.exe文件。,4运行,执行连接成功后得到的可执行程序。,C语言程序都采用编译方式运行。,四、C语言开发环境简介,Dev-C+是一个运行在Windows环境下、免费的C/C+开发工具,体积非常小,只有9M多一点,其界面如下图所示。,1Dev-C+,2Code:Blocks,它是一个开源、免费、跨平台的C

4、/C+开发工具。由纯粹的C+语言开发完成,使用了著名的图形界面库wxWidgets,其运行界面如右图所示。,3C-Free,C-Free是一款支持多种编译器的国产C/C+集成开发环境(IDE),其运行界面如右图所示。,4Microsoft Visual C+系列,Microsoft Visual C+系列是最经典的、功能强大的C/C+开发工具,尤以Visual C+ 6.0(简称VC或者VC6.0)版本使用最多。,类视图用于面向对象的C+语言编程,文件视图列出了整个工程的文件架构,用户可以从不同文件夹中找到不同后缀的文件,如源文件、头文件、资源文件等。,工作区,任务实施输出问候信息,实施步骤,

5、1创建源程序,步骤1 启动Visual C+ 6.0,打开“文件”菜单,选择“新建”菜单项,在打开的 “新建”对话框中选择“文件”选项卡,在左侧文件类型列表中选择“C+ Source File”选项,创建一个C+源程序,如图1-8所示。,图1-8 选择新建C+源文件,步骤2 在右侧“文件名”编辑框中输入文件名“任务1-1”,然后单击 按钮选择文件存储位置。单击“确定”按钮,接下来在编辑区中输入以下代码:,/任务1-1 #include /*文件包含*/ void main( ) /*主函数 */ /*函数体开始*/ printf (Welcome to C World!n); /*输出语句*/

6、 /*函数体结束*/,步骤3 单击工具栏中的“保存”按钮 或者直接按【Ctrl+S】组合键,保存文件,源程序创建完成。,2编译连接,步骤1 选择“组建”“编译任务1-1.cpp”菜单,系统将显示如图1-9所示对话框,询问是否在创建源文件的目录下建立一个活动工程和一个工作空间。,图1-9 询问对话框,步骤2 单击“是”按钮,创建一个与源程序同名的工作区(对应文件为“任务1-1.dsw”)和一个工程(对应文件为“任务1-1.dsp”),系统开始编译。编译结束后,将在输出窗口显示编译信息,如图1-10所示。,图1-10 输出编译信息,步骤3 编译信息显示“任务1-1.obj - 0 error(s)

7、, 0 warning(s)”,表示编译程序时没有错误和警告。为此,可继续选择“组建”“组建任务1-1.exe”菜单,对生成的目标程序进行连接,以生成可执行程序,如图1-11所示。,图1-11 输出连接信息,3调试运行,编译连接通过后,选择“组建”“执行任务1-1.exe”菜单,或者直接按【Ctrl+F5】组合键,运行生成的程序,将出现图1-12所示画面。结果正确无误,按任意键返回。,图1-12 运行结果,任务二 创建简单的C应用程序,一、C程序基本结构,任务说明,在正式学习C语言语法之前,我们先来感受一下C程序的概貌。,预备知识,二、VC的调试程序功能,一、C程序基本结构,下面来看一段C程序

8、的代码,该代码用于求取计算两个整数中的最大值。,【例1-4】 求取两个整数的最大值。,#include /* GetMax函数用于求两个整数中的最大值,参数类型和返回值类型均为整型 */ int GetMax(int a, int b) if(ab) /* 如果a值大于b值,则返回a */ return a; return b;/* 否则返回b */ ,void main() int x, y, max; printf(Please input two integers: ); scanf(%d%d, /* 输出最大值 */ ,1C语言程序由函数构成,2程序中包含对库函数的引用,3程序有良好的

9、编码格式,4编写程序注释,5友好的人机交互提示,二、VC的调试程序功能,第一步 设置断点,程序成功编译后,将鼠标光标停留在需要设置断点的代码行,单击工具栏按钮 即可添加断点,此时该行前端将出现一个断点标志 ,如右图所示。,第二步 开始调试程序,如图1-16所示,打开“组建”下拉菜单,执行“开始调试”“GO”命令(或直接按【F5】键),程序会进入调试模式,并且会在断点处暂停,如图1-17所示。,第三步 单步运行,打开“调试”下拉菜单,执行“Step Over”命令或直接按【F10】键,即可单步运行程序。不断按【F10】键,程序会一步一步地向前执行,如图1-18所示。,单步调试程序时,可以Vari

10、ables窗口和Watch窗口中察看变量值的变化,这两个窗口的作用如下:, 在Variables窗口中会自动显示当前运行程序中所有变量的值。随着单步调试的进行,我们会看到变量i的值逐渐递增。, 如果本地变量比较多,Variables窗口就会比较混乱,此时可以直接在代码中选中需要监控的变量,将其拖放到Watch列表,该变量的值会被显示出来。,在调试模式下,“调试”工具栏会自动弹出,各按钮作用如下:,重启调试(【Ctrl+ Shift+F5】);,结束调试(【Shift+F5】);,在当前点上挂起程序的执行;,可以在调试状态下修改程序源代码(【Alt+F10】);,显示程序代码中的下一条语句(【A

11、lt+Num】);,正在跟踪的语句是一个子程序调用(函数或方法)时,该选项单步进入所调用的子程序(【F11】);,正在跟踪的语句是一个子程序调用(函数或方法)时,该选项跳过所调用的子程序,停留在子程序调用下面的语句(【F10】);,确认当前子程序中没有程序错误时,该选项可以快速执行该子程序,并停留在子程序后面的语句(【Shift+F11】);,快速执行到光标所在的代码处(【Ctrl+F10】);,显示QuickWatch窗口,在该窗口可以计算表达式的值(【Shift+F9】);,打开Watch窗口,该窗口包含当前程序中变量名的当前值,以及所有选择表达式;,打开Variables窗口,该窗口包含

12、关于当前和前面的语句中所使用的变量和返回值。,任务实施输出“九九”乘法口诀表,实施步骤,步骤1 启动VC,按任务一中介绍的方法创建一个C源程序,命名为“九九口诀”,在打开的代码编辑框中输入如下代码:,#include stdio.h void main() int i,j,result; /用到3个变量,i和j用于存储乘数,result用于存储乘积 printf(n); for(i=1;i10;i+)/i的值从1到9 for(j=1;j10;j+)/j的值从1到9 result=i*j; printf(%d*%d=%-3d,i,j,result); /输出乘积 /“-3d”表示输出数据占3位且

13、左对齐 printf(n); /每输出一行后换行 ,步骤2 编译连接通过后,执行“组建”“执行九九口诀.exe”菜单命令,或者直接按【Ctrl+F5】组合键,运行生成的程序,结果如图1-21所示。,图1-21 “九九”乘法口诀,C语言程序设计项目教程,项目二共分为两个任务,项目二 C语法基础,任务一 熟悉C语言的基础语言元素,任务二 掌握简单的C语句,项目拓展 数据类型转换,任务一 熟悉C语言的基础语言元素,任务说明,预备知识,在本任务中,我们首先了解数据在计算机中的存储方式和数据类型,然后学习常量、变量、运算符和表达式等C语言的基础语言元素。,一、数据存储方式与数据类型,二、标识符,三、常量

14、和变量,四、运算符和表达式,一、数据存储方式与数据类型,(一)数据存储方式,在计算机中,所有信息(包括数值、字符、汉字、计算机指令等)的存储、处理与传送都采用二进制的形式。二进制数中只有“0”和“1”两个数字符号,其运算规则如下表所示。,在计算机中,数的表示方法一般有两种,它们分别是定点数和浮点数。,1定点数,定点数是指小数点位置固定不变的数,又分为定点整数和定点小数。,定点整数,定点整数规定小数点的位置固定在数据的最低位之后,但不占一个二进制位,如下图所示。,定点小数,定点小数规定小数点的位置固定在符号位之后,但不占一个二进制位,如下图所示。,2浮点数,浮点数是指小数点位置不固定的数。对于既

15、有整数部分又有小数部分的数,一般用浮点数表示。,任意一个二进制数N可以表示为N=S2P形式。其中S是一个纯小数,表示数N的全部有效数字,称为尾数;P是一个整数,表示小数点的位置,称为阶码。例如,(0.0011001)2=0.110012-10,其中尾数S=(0.11001)2,阶码P=(10)2。,浮点数由两部分组成:尾数部分和阶码部分,如下图所示。,(二)数据类型,为了便于在程序中表示不同类型的数据,C语言也提供了多种数据类型,如下图所示。,不同类型的数据所占存储空间及表示范围不同,如右表所示。,二、标识符,在计算机语言中,常量、变量、数组、函数等需要定义名字,这些名称统称为标识符。,标识符

16、分为系统定义标识符和用户定义标识符。,(一)系统定义标识符,系统定义标识符是指具有固定名字和特定含义的标识符,分为关键字和预定义标识符。,1关键字, 表示数据类型的关键字,int、char、float、double、short、long、void、signed、unsigned、enum、struct、union、const、typedef、volatile, 表示存储类别的关键字,auto、static、register、extern, 表示语句命令的关键字,break、case、continue、default、do、else、for、goto、if、return、switch、while

17、, 表示运算符的关键字,sizeof,2预定义标识符, 表示系统标准库函数的预定义标识符,scanf、printf、putchar、getchar、strcpy、strcmp、sqrt等, 表示编译预处理命令(简称预处理)的预定义标识符,include、define等,在指令处展开被包含的文件,用于定义符号常量,(二)用户定义标识符,C语言中用户定义标识符必须以字母或下划线“_”开头,且不能含有除字母、数字和下划线“_”外的其他字符。,三、常量和变量,常量是指在程序执行过程中值保持不变的量,变量是指在程序运行过程中值可以改变的量,每个变量都必须在声明时明确定义其数据类型,并且需要用标识符标识。

18、,(一)常量,常量分为字面常量和符号常量(标识符常量),字面本身就是它的值,符号常量是一个标识符,对应着一个和它类型一致的存储空间,该存储空间中保存的数据就是该符号常量的值。,1常量类型,C语言中的常量包括整型常量、实型常量、字符常量、字符串常量和布尔型常量。,(1)整型常量,整型常量表示通常意义上的整数,如2、0、7等。整型常量可以用十进制、八进制和十六进制表示。,(2)实型常量,实型常量是指通常意义上的实数,也称浮点数。实型常量有两种表示形式:十进制小数形式和指数形式。,(3)字符常量,字符型常量分为普通字符常量和转义字符常量。,用单引号括起来的一个字符,例如A、g等。,转义字符常量是由“

19、”开头的一个或多个字符的序列,用于表示一些无法显示的字符,如回车符、换行符、制表符等。常用的转义字符常量及其含义如下表所示。,(4)字符串常量,字符串常量是由一对双引号括起来的零个或多个字符序列,如C is programming language.、computer等。字符串可以写在多行上,不过在这种情况下必须用反斜杠“”表示下一行字符是这一行字符的延续。,字符串常量与字符常量有所不同: 字符型常量在内存中只占一个字节; 字符串是按照串中字符的排列顺序存放的,每一个字符占一个字节,并在末尾添加“0”作为字符串结尾标志或结束标志。,(5)布尔型常量,布尔型(bool)常量只有两个值,即fals

20、e或0(表示逻辑假)和true或1(表示逻辑真)。,2符号常量,对于经常引用的数值常量,可以将它们“定义”为符号常量,其名称的命名规则同样遵循标识符的命名规则。,C语言中,使用编译预处理指令#define“定义”符号常量,如:,#define PI 3.1415926 /定义一个符号常量PI,表示3.1415926,符号常量通常用大写字母表示,符号常量名称和值之间用空格分隔。,(二)变量,1变量的命名原则,变量名又叫做变量标识符,由字母、数字和下划线组成,且第一个字符必须是字母或下划线。变量名不允许使用C语言关键字、系统函数名和系统类名。,合法变量名,如:,std,code1,n_date,_

21、kufun,i_jing,WAN,S_name,c_Code,以下变量名是非法的:,Mr.Smith,$dollar,y,7rain,li hua,C#,car-clour,stdn,U.S.A,程序员们通常会对变量命名做一些约束,如:,(1)标识符采用英文单词或其组合。保证直观且用词准确,可望文知意。,(2)遵循最小化长度与最大化信息量原则。在保证一个标识符意思明确的同时,应当尽量缩短其长度。,(3)避免标识符过于相似。不要出现仅靠大小写区分的相似标识符,例如“i”与“I”,“function”与“Function”等。,(4)用正确的反义词组命名具有互斥意义的标识符。例如“nMinValu

22、e”和“nMaxValue”,“GetName()”和“SetName()”等。,(5)除非逻辑上的确需要编号,否则尽量避免名字中出现数字编号。例如Value1,Value2等,以防产生无意义的名字。,2变量的定义,定义变量用于为变量分配存储空间,以存放变量的值。其中,变量存储空间的大小由变量的类型决定。在一个程序中,变量有且只有一个定义,并且变量在使用之前需要先定义或声明。,定义变量的一般形式如下:,数据类型 变量名1,变量名2,变量名n;,若程序中需要多次使用某个常量,可将该常量定义为常变量,其声明形式为:,const 数据类型 常量名=数值/表达式;,四、运算符和表达式,据操作数个数不同

23、,可将运算符分为:单目运算符(一元运算符)、双目运算符(二元运算符)和三目运算符(三元运算符)。,C语言中的运算符非常丰富,总体可以分为以下几类:,(1)算术运算符,(2)关系运算符,(3)逻辑运算符,(4)位运算符,(5)赋值运算符,(6)条件运算符,(7)逗号运算符,(8)指针运算符,(9)求字节数运算符,(10)特殊运算符,(一)算术运算符,(二)赋值运算符,一般形式为:,变量名=数值/表达式,例如,a=5 a=sin(2.0) a=b+c,i=i2;等价于“i=2;” ,“=”称为复合的赋值运算符。,C提供的复合赋值运算符包括: =、=、*=、/=、%=、=、 float s; dou

24、ble area; printf(Please input 3 edges length: ); scanf(%f%f%f, ,步骤3 单击工具栏中的“保存”按钮 或者直接按【Ctrl+S】组合键保存文件,源程序创建完成。编译、连接后执行程序,执行结果如图2-8所示。,图2-8 程序执行结果,任务二 掌握简单的C语句,任务说明,学完C语言的基础元素后,下面我们来学习一些简单的C语句。,预备知识,一、C语句概述,二、数据输入输出的概念,三、用printf函数输出数据,四、用scanf函数输入数据,五、字符数据的输入输出,一、C语句概述,C语句可以划分以下五类:,(一)表达式语句,通过运算符将操作

25、对象连接起来构成表达式,在表达式之后加一个分号,便构成表达式语句。,(二)控制语句,(1)if() else ,(2)for() ,(3)while() ,(4)do while(),(5)continue,(6)break,(7)switch,(8)goto,(9)return,(三)函数调用语句,由一次函数调用加上分号便构成函数调用语句,它实际上是表达式语句的一种。,例如,调用printf库函数进行屏幕输出。,printf(Hello World!n);,(四)复合语句,用“”和“”括起来的若干条语句称为复合语句,也称为块语句。复合语句有一些特殊的地方,比如可以在复合语句中定义局部变量等。

26、,(五)空语句,只有一个分号也可以作为一条语句,称为空语句。,二、数据输入输出的概念,C语言中并没有输入输出的语句,输入和输出是通过调用编译系统提供的库函数实现,如printf、scanf、putchar、getchar、puts和gets。使用这些标准的库函数,程序开头需要包含stdio.h头文件。,三、用printf函数输出数据,其一般调用格式为:,printf(格式控制字符串,输出项列表);,输出项可以是常量、变量、表达式,其类型、个数必须与控制字符串中格式字符的类型个数一致,当有多个输出项时,各项之间用逗号分隔。控制字符串必须用双引号括起,由格式说明和普通字符两部分组成。,(一)格式说

27、明,一般格式为:%,格式字符规定了对应输出项的输出格式,常用格式字符如下表所示。,修饰符是可选的,用于确定数据输出的宽度、精度、小数位数、对齐方式等,用于产生更规范更整齐的输出,当没有修饰符时,以上各项按系统缺省设定显示。下面我们介绍一些常用的修饰符。,(1)字符宽度修饰符,printf函数中的字符宽度修饰符如下表所示。,(2)对齐方式修饰符,默认情况下,数据为右对齐格式。负号“”为左对齐控制符,使用该符号后,数据将以左对齐方式显示。下面我们通过一个例子来体会该符号的使用。,(3)l和h,这两个字符可以与输出格式字符d、f、u等连用,以说明是用long型或short型格式输出数据。例如:,%h

28、d短整型 %ld长整型 %hu无符号短整型,(二)普通字符与转义字符,普通字符包括可打印字符和转义字符:可打印字符一般是一些说明字符,这些字符按原样显示在屏幕上;转义字符是不可打印字符,其实质是控制字符,用于产生一些特殊的输出效果,如下表所示。,四、用scanf函数输入数据,scanf()的功能是接收从键盘上输入的数据,输入数据将按指定的输入格式赋给相应的变量。其一般调用格式为:,scanf(格式控制字符串,输入项地址列表);,格式控制字符串规定数据的输入格式,其含义与printf函数类似。输入项地址列表则由一个或多个变量地址组成,当变量地址有多个时,各变量地址之间用逗号“,”分隔。需要注意的

29、是,各变量要加地址操作符“ ch=getchar(); putchar(ch); printf(%dn,ch); ,2gets和puts函数:字符串输入、输出函数,(1)puts()函数,puts()函数用来向标准输出设备(显示器)写字符串并换行,其调用格式为:,puts(s);,(2)gets()函数,gets()函数用来从标准输入设备(键盘)读取字符串直到回车结束,但回车符不属于这个字符串。其调用格式为:,gets(s);,任务实施输出QQ好友信息,QQ是我们日常生活中常用的一款即时通讯软件,图2-14所示为QQ软件中查看好友资料的页面,我们将该好友的信息进行整理如表2-11所示。下面我们

30、将使用C语言编程,在屏幕上输出该好友的资料。,图2-14 QQ好友资料,实施步骤,步骤1 启动VC,按任务一中的方法创建一个C+源程序,命名为“输出QQ好友信息”,在打开的代码编辑框中输入如下代码:,#include stdio.h void main() /定义变量,用于存储QQ好友的信息 int QQ_num; char pet_name10 ;/字符串用数组方式存储,下同 char true_name10 ; char sex; int age; char city15 ;,char E_mail20; printf(*n); printf(输入与输出QQ好友信息n); printf(*

31、n); /输入并存储QQ好友信息 printf(nn); printf(请输入好友QQ号码:n); scanf(%d, ,scanf(%s, ,步骤2 编译连接通过后,执行“组建”“执行输出QQ好友信息.exe”菜单命令,或者直接按【Ctrl+F5】组合键,运行生成的程序,程序执行结果如图2-15所示。,图2-15 程序运行结果,项目拓展,数据类型转换,一、数据类型的自动转换,在C语言中,精度低、表示范围小的数据类型可以向精度高、表示范围大的类型自动转换。下面我们具体看一下在赋值运算中数据类型转换的情况:, = 小数部分自动补0。 = 自动舍去实型表达式的小数部分(注意不进行四舍五入)。 =

32、, = 自动截取表达式值的低字节赋值,舍去高字节。 = = 自动给高字节补0或补1。,二、数据类型的强制转换,若需要转换的数据类型不满足自动转换条件时,我们就需要使用强制转换方法。强制转换的一般形式:,(类型名) (表达式),例如:,(int)( b+3*x)%3) 1/(float)a+6,C语言程序设计项目教程,项目三共分为两个任务,项目三 算法程序设计的灵魂,任务一 了解什么是算法,任务二 掌握算法的表示方法,项目拓展 算法的复杂度,任务一 了解什么是算法,在本任务中我们将了解算法的概念和特性。,任务说明,预备知识,一、什么是算法,二、算法的特性,为解决一个问题而采取的方法和步骤就称为算

33、法。计算机能够执行的算法可分为两大类:,数值运算算法,非数值运算算法,主要用于求解数值,如求复杂算式的值、求方程的根等;,主要用于事务管理领域,如图书检索、公交汽车车辆调度等。,二、算法的特性,(1)有穷性,(2)确定性,(3)有效性,(4)存在零个或多个输入,(5)存在若干输出结果,任务实施汉诺塔问题,汉诺塔(Towers of Hanoi,Hanoi为越南首都河内)也称河内之塔。它源于印度一个古老传说:大梵天创造世界的时候做了三根金刚石柱子,在其中一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大

34、圆盘,在三根柱子之间一次只能移动一个圆盘。当盘子全数搬运完毕之时,也就是世界末日来临之时。,下图为模拟汉诺塔问题的模型玩具,在本任务中我们就来编写算法解决汉诺塔问题,这里将柱子标为A、B、C,要由A搬至C,假设A柱上的盘数为n,n由用户输入。,任务分析,汉诺塔问题是典型的递归调用问题。当n1时,直接将盘子从A移动到C即可。将n(n1)个盘子从A柱移动到C柱可以分为三个步骤:, 将n1个盘子从A借助C移到B;, 将最后一个盘子从A移到C;, 将n1个盘子从B借助A移到C。,实施步骤,步骤1 启动Visual C+ 6.0,新建一个C+源程序,在编辑区中输入以下代码:,#include void

35、hanoi(int n, char A, char B, char C) if(n = 1) printf(Move sheet %d from %c to %cn, n, A, C); else hanoi(n-1, A, C, B); printf(Move sheet %d from %c to %cn, n, A, C); hanoi(n-1, B, A, C); ,int main() int n; printf(请输入盘数:); scanf(%d, ,步骤2 编译、连接后执行程序,执行结果如下图所示。,(a)n=2时移动方法,(b)n=4时移动方法,任务二 掌握算法的表示方法,任务

36、说明,除可以用自然语言对算法进行描述外,还有其他一些表示算法的方法,下面我们就来学习。,一、算法的表示方法,预备知识,二、结构化程序设计方法,一、算法的表示方法,在使用计算机语言编写算法前,可以通过以下几种方式描述算法:,自然语言 流程图 N-S结构图 伪代码,(一)用自然语言表示算法,自然语言就是人们日常生活中所使用的语言,可以使用人类语言加上数学语言描述一个算法的实现,其特点是通俗易懂,但描述不直观、容易造成歧义。,(二)用流程图表示算法,流程图采用图形符号配合文字说明来表示各种操作,这种方法形象直观,易于理解。常用的流程图符号如右图所示。,(三)用N-S结构图表示算法,N-S流程图与传统

37、流程图相比,取消了流程线的使用,算法只能自上而下执行,常用的N-S结构图符号如图3-6所示。,(四)用伪代码表示算法,伪代码介于自然语言和计算机语言之间,通过接近编程语言的文字和符号来描述算法。采用这种方式时,并无固定、严格的语法规则,可以使用英文也可以使用中文,把意思表达清楚即可。,【例3-5】 用伪代码表示计算n!的算法。,begin t1; i2; while(i5) tt*i ii+1 printf t end,二、结构化程序设计方法,任何复杂的问题都可以通过顺序、选择和循环三种基本算法结构来描述。,(1)顺序结构,各部分操作按照书写顺序依次执行,不存在任何跳转。,(2)分支结构,也称

38、选择结构,通过一个判断框来描述。,(3)循环结构,循环结构是对一组操作进行重复操作的结构,往往需要借助对循环控制条件的判断,决定是否继续重复执行操作。,三种基本结构的共同点:,都是只有一个入口和一个出口; 结构内的每一个框都有机会被执行; 结构内没有死循环。,结构化程序设计的基本原则:,采用自顶向下、逐步细化的方法进行设计; 采用模块化原则和方法进行设计。即将大型任务从上向下划分为多个功能模块,每个模块又可以划分为若干子模块,然后分别进行模块程序的编写; 每个模块都是用结构化程序实现,即都只能由三种基本结构组成,并通过计算机语言的结构化语句实现。,任务实施约瑟夫环问题(Josephus Pro

39、blem),据说,著名犹太历史学家Josephus曾讲过故事:在罗马人占领乔塔帕特后,39个犹太人与Josephus及他的朋友躲到一个洞中。39个犹太人决定宁愿死也不要被敌人逮到,于是决定了一个自杀方式:41个人排成一个圆圈,由第1个人开始报数,每报数到3,该人就必须自杀,然后再由下一个人重新报数,直到所有人都自杀身亡为止。,然而Josephus和他的朋友并不想遵从,他将朋友与自己安排在第16个与第31个位置,逃过了这场死亡游戏。,在本任务中,我们将这个问题扩大,假设现在你与m位朋友不幸参与了这个游戏,你要如何做才能保护自己和朋友呢?,任务分析,要解决约瑟夫问题,只要画两个圆圈就可以了,内圈是

40、排列顺序,外圈是自杀顺序,如下图所示。,最后一个自杀的人排在第31位置上,而倒数第二个自杀的人排在第16个位置。约瑟夫将自己和朋友安排在了这两个位置上,之前的人都死了,所以他们也就不知道约瑟夫与他的朋友没有遵守游戏规则了。,如何计算外环的自杀顺序呢?首先我们画出程序的流程图如图3-9所示。,首先我们建立一个长度为41的数组man,数组中的每个值代表一个人,然后使用变量pos记录报数者的位置,变量i记录报数值13,变量cout记录报数为3的数组元素的顺序。,当i的值为3时,将跳出报数循环(此时i的值将会置为0,以备下次报数),将cout的值加1,并将cout存入数组元素manpos,pos开始指

41、向下一个报数者的位置,这里为使pos计数到41后自动回到0,需要通过语句“pos = (pos1) % N;”对数值进行环状处理。,实施步骤,步骤1 启动VC,创建一个C+源程序,在打开的代码编辑框中,输入如下代码:,#include #define N 41 #define M 3 int main(void) int manN = 0;/数组初值为0 int count = 1; int i = 0, pos = -1; int alive = 0; while(count = N) do pos = (pos+1) % N; /环状处理 if(manpos = 0) i+; if(i =

42、 M) /若报数为3 i = 0; break; /报数为3后,将跳出do.while循环 while(1);,manpos = count; /记录自杀顺序 count+; printf(n约琴夫排列:); for(i = 0; i N; i+) printf(%d , mani); printf(nn您想要救多少人?); scanf(%d, ,步骤2 编译连接通过后,按【Ctrl+F5】组合键运行生成的程序,结果如图3-10所示。,图3-10 程序运行结果,项目拓展,算法的效率,对于给定的任意问题,设计出复杂度尽可能低的算法是我们在设计算法时追求的一个重要目标。算法的复杂度有时间复杂度和空

43、间复杂度之分。,一、时间复杂度,一个算法中的语句执行次数称为语句频度或时间频度,记为T(n)。若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数,记作T(n)=(f(n),称(f(n)为算法的渐进时间复杂度,简称时间复杂度。,【例3-6】 分析三个算法的时间复杂度。,(1)x:=x+1; (2)for i:=1 to n do x:=x+1; (3)for i:=1 to n do for i:=1 to n do x:=x+1;,上面三个算法都包含基本语句x:=x1,它们的执行频度分别为1、n和n2,这三个程序段

44、的时间复杂度分别为O(1)、O(n)、O(n2),分别称为常量阶、线性阶和平方阶。,二、空间复杂度,与时间复杂度类似,空间复杂度是指算法在计算机内执行时所需存储空间的度量(一般所讨论的是除正常占用内存开销外的辅助存储单元规模),记作:S(n)=O(f(n)。,【例3-8】 将一维数组的n个数据逆序存放到原数组中。,下面是实现该问题的两种算法:,算法1,for i=1 to n do bi=an-i+1; for i=1 to n do ai=bi;,算法2,for i=1 to n/2 do begin t=ai; ai=an-i+1; an-i+1=t; end;,算法1的时间复杂度为2n,

45、空间复杂度为2n;算法2的时间复杂度为3*n/2,空间复杂度为n1。显然,算法2优于算法1。,C语言程序设计项目教程,项目四共分为两个任务,项目四 逻辑值与分支语句 让你的选择多样化,任务一 掌握常用运算符与if分支语句结构,任务二 掌握条件运算符与swith分支结构,任务一 掌握常用运算符与if分支语句结构,任务说明,预备知识,下面我们就来学习条件表达式中用到的这些运算符、程序的基本控制结构以及if分支语句的相关知识。,一、关系运算符与表达式,二、逻辑运算符与表达式,三、逻辑型变量,四、ifelse分支结构,一、关系运算符与表达式,关系运算符的作用与优先级如表4-1所示。,关系表达式的运算结

46、果为真和假,通过0和1来表示。下面我们来看几个具体的示例:,二、逻辑运算符与表达式,三、逻辑型变量,逻辑型变量是C99标准中新增的一种数据类型,用于存储关系运算和逻辑运算的结果,定义逻辑变量使用类型符_Bool。另外,在头文件中,将bool定义为_Bool的同义词,同时定义符号常量true和false代表真和假。,四、ifelse分支结构,(一)if语句的基本结构,if语句一般有以下三种形式:,(1)单分支语句,if(表达式) 语句;或语句1;语句2;,如果表达式的值为真,则执行if后面的语句;否则,跳过该语句直接执行后面的语句。,执行过程如下图所示。,(2)双分支语句,语句结构如下:,if(

47、表达式) 语句1; else 语句2;,如果表达式的值为真,则执行语句1;否则执行语句2。,执行过程如右图所示。,(3)多分支语句,有时必须判定多个条件以便决定执行什么操作。在这种情况下就要使用多分支语句了,其声明语法如下:,if(表达式1) 语句1; else if(表达式2) 语句2; else if(表达式n) 语句n; Else 语句n1;,执行过程如下图所示。,首先判断表达式1的值,如果值为真,则执行语句1,否则判断表达式2的值;如果表达式2的值为真,则执行语句2,否则判断表达式3的值;依此类推,若所有表达式的值为假,则执行语句n1。,(二)if语句的嵌套,在if语句中又包含一个或多

48、个if语句称为if语句的嵌套,它可以用来实现多路选择功能,其一般形式为:,(三)使用if语句的注意事项,else必须与if配对使用,它总是与它上面最近的且未配对的if配对。,if()if() 语句1;elseif() 语句2;else 语句3;,if()if() 语句1;elseif() 语句2;else 语句3;,虽然第一个else与第一个if写在同一列上,但实际上第一个else是与第二个if匹配的。,为使第一个else与第一个if匹配,可将以上语句改写成:,任务实施制作简易教师考核成绩评定系统,教师的成绩由以下几部分组成:教务处得分、督导处得分、学生评定分和系部自评分,其中教务处得分占总分

49、的10%,督导处得分占总分10%,学生评分占总分的50%,系部自评分占总分的30%。各个单项分值的取值范围为0到100,因此教师总分的取值范围为0100。最后通过各个部分的得分总和评定教师的考核等级,总分小于70分为不“称职”,总分大于等于70小于90分为“称职”,总分大于等于90分为“优秀”。,实施步骤,步骤1 启动VC,创建一个C+源程序,在打开的代码编辑框中输入如下代码:,#include void main() float jw, dd, xb, xs, zf; printf(请依次输入教务处评分、督导处评分、系部评分和学生评分:); scanf(%f%f%f%f,else if (zf = 70) printf(您的评定等级为:称职!); else printf(您的评定等级为:不称职!);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com