西安野马-C语言第2章讲义.ppt_第1页
西安野马-C语言第2章讲义.ppt_第2页
西安野马-C语言第2章讲义.ppt_第3页
西安野马-C语言第2章讲义.ppt_第4页
西安野马-C语言第2章讲义.ppt_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

0,程序设计基础,C语言,程序设计基础,第2章 程序的灵魂-算法,2,第2章程序的灵魂-算法,2.1 算法的概念 2.2 算法的特性 2.3 算法的描述,3,2.1 算法的概念,算法是指解题方案的准确而完整的描述。从程序来说,也可以说算法是一个有限条指令的集合,这些指令确定了解决某一特定类型问题的运算序列。,对于同一个问题可以有不同的解题方法和步骤,也就是有不同的算法。算法有优劣,一般而言,应当选择简单的、运算步骤少的,既运算快、内存开销小的算法(算法的时空效率)。,4,2.2 算法的特性,1.有穷性:一个算法应当包含有限的步骤;算法在执行时不能出现死循环。,2. 确定性:算法中的每一个步骤都应当是确定的, 不应产生歧义。,3.有0个或多个输入 所谓输入是指算法执行时从外界获取必要信息。,4.有1个或多个输出 算法必须有结果,没有结果的算法没有意义。,5.有效性 算法的每个步骤都应当能有效执行,并能得到确定的结果。,5,2.3 算法的描述,常用的算法表示方法: 自然语言,传统流程图,结构化流程图(N-S流程图),伪代码、计算机语言等。,流程图:用一些约定的几何图形来描述算法。用某种图框表示某种操作,用箭头表示算法流程,常用的流程图符号:,起始框,输入输出框,判断选择框,处理框,流程线,连接点,注释框,例:求5!,t=1,i=2,t=t*i,i=i+1,i5,结束,y,n,开始,输出t,三种基本结构的流程图,1.顺序结构:按指令的顺序依次执行 2.判断选择结构:根据判别条件有选择地改变执行流程 3.循环结构:有条件的重复地执行某个程序块,只有一个入口。 只有一个出口。 结构中的每一部分都有机会被执行到。(没有“死语句”) 结构内不存在“死循环”(无终止的循环),三种基本结构,有以下共同点:,已经证明:由三种基本结构顺序组成的算法结构,可以解决任何复杂问题。 由基本结构组成的算法属于“结构化”算法。,10,用N-S流程图表示算法,基本结构的顺序组合可以表示任何复杂的算法结构 全部算法写在一个矩形框内,完全去掉了带箭头的流程线。 这种流程图称为N-S结构化流程图(盒图)。 N-S流程图适于结构化程序设计.,11,顺序结构程序设计,执行a块,执行b块,依次顺序执行程序语句,先执行a操作,再执行b操作,12,选择结构程序设计,满足条件否,满足,不满足,执行a块,执行b块,当条件成立,执行a操作,否则,执行b操作。,13,循环结构程序设计,循环又分“当型循环”和“直到型循环”,当条件p满足时,执行循环中指令,直到条件p满足为止,执行循环中的指令,当型循环先判断,再决定是否执行循环体,所以在条件p一次都不满足时,循环体可能一次都不执行,直到型循环先执行循环体,然后再判断条件p,所以循环体至少执行一次。,14,用伪代码表示算法,伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。伪代码不用图形符号,书写方便,格式紧凑,便于向计算机语言算法过渡,用计算机语言表示算法,用某种程序设计语言编写的程序本质上也是问题处理方案的描述,并且是最终的描述。 程序是程序设计的最终产品,需要经过每一步的细致加工才能得到,对于大型程序,不提倡一开始就编写程序。,15,i=1,count=0,输入n,当in,n%i=0?,Yes,N0,count加1,i 加1,count2?,Yes,N0,输出n不是素数,输出n是素数,N-S图:判断n是否为素数。,程序设计基础,第3章 数据类型、运算符与表达式 教师:杨振平 E-mail: ,3.1 C的数据类型,数据类型,基本类型,构造类型,指针类型(),空类型(void),字符型(char),数值类型,枚举类型(enum),数组类型( ),结构体类型(struct),共用体类型(union),整型(short,int,long,unsigned),实型,单精度型(float),双精度型(double),18,3.2 常量与变量,常量的分类: 1)整型常量(如12、0、-3为整型常量) 2)实型常量(4.6、-1.23为实型常量) 3)字符常量( a、d字符常量) 4) 字符串常量(”A”、“Hello,C” 字符串常量) 5)符号常量(具有含义清楚、见名知意、修改方便的优点 )。 如:#define PI 3.1415926,常量 程序运行过程中不能被改变的量。,19,变量: 在程序运行过程中,其值可以被改变的量,变量与内存单元相联系。程序中它用来存取数据。 每个变量都必须有一个名字变量名。 变量名的构成与标识符构成相同。,变量命名的规定:语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。 例: sum,_total, month, Student_name, lotus_1_2_,BASIC, li_ling M.D.John, ¥123,3D64,ab,变量遵循“先定义,后使用”的原则,20,3.3 整型数据,1整型常量,整型常量即整常数。整常数有三种表示形式: 1)十进制; 2)八进制;以0头的数是八进制数。 3)十六进制 以0x开头的数是16进制数。,2.整型变量,整型数据在内存中的存放形式(二进制),根据占用内存字节数的不同,整型变量又分为类:,1)基本整型(类型关键字为int)。 2)短整型(类型关键字为short int)。 3)长整型 4)无符号整型。 (类型关键字为unsigned int)。,21,整数在内存中存放形式:,22,整型变量的分类:,注意:括号表示其中的内容是可选的。,六种,有符号基本整型 有符号短整型 有符号长整型 无符号基本整型 无符号短整型 无符号长整型,(signed)int (signed)short (int ) (signed) long (int) unsigned int unsigned short (int) unsigned long (int),23,整数类型数据的特征,类型 类型说明符 长度 数的范围 基本型 int 2字节 -3276832767 短整型 short 2字节 -215215-1 长整型 long 4字节 -231231-1 无符号整型 unsigned 2字节 065535 无符号短整型 unsigned short 2字节 065535 无符号长整型 unsigned long 4字节 0(232-1),24,整型变量的定义,变量说明的一般形式为: 类型说明符 变量名标识符,变量名标识符,.;,int a,b,c; (a,b,c为整型变量) long x,y; (x,y为长整型变量) unsigned int p,q; (p,q为无符号整型变量),25,例3.3 整型数据的溢出 #include void main() short int a,b; a=32767; b=a+1; printf(“%d,%dn”,a,b); ,说明:数值是以补码表示的。一个整型变量只能容纳-3276832767范围内的数,无法表示大于32767或小于-32768的数。遇此情况就发生“溢出”。,运行结果: 32767,-32768,26,3.4 浮点型数据,1. 浮点型常量的表示方法,两种表 示形式,小数 指数,0.123 3e-3,注意:字母e(或E)之前必须有数字,且e后面的指数必须为整数:,1e3、1.8e-3、-123e-6、-.1e-3 e3、2.1e3.5、.e3、e,27,3.4 浮点型数据(续),2. 浮点型变量 (1)浮点型数据在内存中的存放形式,28,(2) 浮点型变量的分类 浮点型变量分为单精度(float型)、双精度(double型)和长双精度型(long double)三类形式。,3.4 浮点型数据(续),29,例3.4 浮点型数据的舍入误差 #include void main() float a,b; a = 123456.789e5; b = a + 20 ; printf(“%fn”,b); ,说明:一个浮点型变量只能保证的有效数字是7位有效数字,后面的数字是无意义的,并不准确地表示该数。应当避免将一个很大的数和一个很小的数直接相加或相减,否则就会“丢失”小的数,运行结果: 12345678868.000000,30,3.5 字符型数据,1 . 字符常量 (1)用单引号包含的一个字符是字符型常量 (2)只能包含一个字符,例,a,A, 1 abc、“a”,31,字符型数据:,字符常量:用一对单引号括起来的单个字符,转义字符: 是以反斜杠“ ”开头的。,字符变量: char,一般占用1字节内存单元。,C语言中的字符变量可以存储字符数据(实际为该字符的ASCII码值)和整型数据;字符数据也能进行整数运算;字符数据可以按字符输出也能按整数输出。 例:char ch=A; printf(”%d,%cn”,ch,ch); 结果:65,A,32,转义字符表:,字符形式,n,t,v,b,r,f,ddd,xhh,功能,换行,横向跳格(即跳到下一个输出区),竖向跳格,退格,回车,走纸换页,反斜杠字符“ ”,单引号(撇号)字符,1到3位8进制数所代表的字符,1到2位16进制数所代表的字符,33,例3.6 向字符变量赋以整数。 #include void main() char c1,c2; c1=97; c2=98; printf(“%c %cn”,c1,c2); printf(“%d %dn”,c1,c2); ,说明:在第和第4行中,将整数和分别赋给c1和c2,它的作用相当于以下两个赋值语句: c1;c2; 因为a和b的ASCII码为和,运行结果: 97 98,34,例3.7 大小写字母的转换 #include void main() char c1,c2; c1=a; c2=b; c1=c1-32; c2=c2-32; printf(“c c,c1,c2); ,说明:程序的作用是将两个小写字母a和b转换成大写字母A和B。从代码表中可以看到每一个小写字母比它相应的大写字母的码大。语言允许字符数据与整数直接进行算术运算。,运行结果: ,35,字符串常量,字符串常量是用一对双引号括起来的若干字符序列。,C语言规定:在存储字符串常量时,由系统在字符串的末尾自动加一个0作为字符串的结束标志。, a是字符常量,而” a”是字符串常量。,不能将一个字符串赋给一个字符变量。,C中没有字符串变量,需要用字符数组存放字符串。,C规定,可以在定义变量的同时给变量赋初值。,36,3.6 变量赋初值,(1)语言允许在定义变量的同时使变量初始化。 如: int a=3; / 指定为整型变量,初值为 float f=3.56; / 指定为浮点型变量,初值 为.56 char c= a; / 指定为字符变量,初值为a,37,各类数值型数据间的混合运算,整型、单精度型、双精度型数据可以混合运算。 不同类型的数据要先转换成同一类型,然后进行运算。转换规则如图:,38,3.8 C运算符简介,运算符:狭义的运算符是表示各种运算的符号。 C语言提供丰富多彩的运算符,可以构造灵活多样的表达式:如常见的算术、关系、逻辑运算符、赋值运算符、位操作运算符、自增自减运算符等。另外,数组下标,函数调用都作为运算符。,39,运算符类别,40,C中各类运算符的优先级:,初等运算符 ( )、 、,单目运算符 !、+ +、 、+ 、 、(类型),算术运算符 、/ 、% ,+、 ,关系运算符 、= ,= =、! =,逻辑运算符 &、,条件运算符 ? :,赋值运算符 =、+=、 =、=、/=、%=,逗号运算符 ,41,3.8 算术运算符和算术表达式,1 算术运算符和算术表达式 (1)基本的算术运算符: (加法运算符,或正值运算符,如:、) (减法运算符,或负值运算符,如:、) * (乘法运算符,如:*) (除法运算符,如:) (模运算符,或称求余运算符,两侧均应为整型数据 如:的值为)。,42,例:输入一个4位无符号整数, 反序输出这4位数。,算法1:分离出整数n的每位数字,将其形成一个新的反序整数输出。 unsigned int n,c1,c2,c3,c4; c1=n%10; c2=n/10%10; c3=n/100%10; c4=n/1000; n=c1*1000+c2*100+c3*10+c4,43,算法2:将n的每位数字转换为字符,反序输出各个字符,unsigned int n; char c1,c2,c3,c4; c1=n%10 + 0; c2=n/10%10 + 0 ; /分离十位数字字符 c3=n/100%10 + 0 ;/分离百位数字字符 c4=n/1000 + 0 ; /分离千位数字字符 输出c1,c2,c3,c4,44,3.8 算术运算符和算术表达式(续),(2) 基本算术表达式: 用算术运算符和括号将运算对象(也称操作数)连接起来的、符合语法规则的式子,称为算术表达式。运算对象包括常量、变量、函数等。 例如: *.5a 是一个合法的表达式。,(3)运算符的优先级和结合性: 在表达式求值时,先按运算符的优先级别高低次序执行,例如先乘除后加减。 算术运算符的结合方向为“自左至右”,即先左后右 。,45,强制类型转换,强制转换是通过类型转换运算符来实现。 一般形式:(类型说明符)表达式 功能:把表达式的结果强制转换为类型说明符所表示的类型。,(int)a 将a的结果强制转换为整型量。 (int)(x+y) 将x+y的结果强制转换为整型量。 (float)a+b 将a的内容强制转换为浮点数,再与b相加,无论隐式转换,强制转换都是临时转换,不改变数据本身的类型和值。,46,3.8 算术运算符和算术表达式(续),(4) 自增、自减运算符( +、-) 作用是使变量的值增或减。 如: , (在使用之前,先使的值加 (减) , (在使用之后,使的值加(减),47,3.8 算术运算符和算术表达式(续),例如:int i=4,j; ; i的值先变成4, 再赋给,j的值均为 ; 先将 i的值3赋给,的值为,然后变为,注意: (1)自增运算符(),自减运算符(),只能用于变量,而不能用于常量或表达式, (2)和的结合方向是“自右至左”。,如:int a=-2;b; b=-a+; a,b=?,48,3.9 赋值运算符和赋值表达式,符号“ = ”为赋值运算符。 赋值表达式:变量名 = 表达式,2. 整型数据赋给实型变量,数值不变,但按实数形式存放. float b; b=5/3; b=?,将实型数据(无论单,双精度)赋给整型变量时,舍弃小数. int a; a=3.14; a=?,赋值时,两边类型若不一致,则按以下规则转换:,49,4. 将intlong int, 进行符号扩展。 即: 符号扩展, 低16位long 的低16位。,5. long int int 则高16位截断。,3. 字符型数据赋给整型变量时:,(2)字符带符号整型变量,则字符高位扩展。,(1)字符无符号整型变量,则存入低8位,高8位补零。,50,6. 将unsigned int 型long int高位补0。,原值传送,但数据大小不能超值。 如: unsigned int a=65535; int b; b=a; 则越界。,而位数相同部分赋值 unsigned int int unsigned long long unsigned short short,51,7. 非unsigned 型长度相同的unsigned型数据,原样传送(包括符号位),一、复合赋值运算符:在“ “号之前加一个其它运算符。,C语言规定:凡是二目运算符均可构成复合赋值运算符。,例: a+=3; 相当于 a=a+3 x=y+8; 相当于 x=x (y+8) x%=3; 相当于x=x%3,52,一般形式: ,二、赋值表达式,例: x=10 为一赋值表达式 其中又可以是一个赋值表达式。,例: x=(y=10) 相当于 y=10;x=y 由于赋值号为右结合性,于是“ ( ) “可省略, 即为:x=y=10;,53,例: a + = a =aa (设a12),进一步,还可用复合赋值运算符作下列运算:,步骤: aa144. a =a a a=a a a=12 144= 132 a + = 132 a = a+(132) = 264,54,3.10 逗号运算符和逗号表达式,一般形式: 表达式1, 表达式2,表达式3, 表达式n,其计算规则: 先计算表达式1,再计算表达式2,最后值为表达式n的值。,例:a=35, a 4 则: 先计算3 5, a15, a 4=60,结果为60。,55,又如: (a=35, a 4), a+5,扩展形式: 表达式1, 表达2, ,表达式n,结果为20(作为逗号表达式的值

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论