《第二章程序的灵魂---算法》由会员分享,可在线阅读,更多相关《第二章程序的灵魂---算法(39页珍藏版)》请在金锄头文库上搜索。
1、第二章第二章 程序的灵魂程序的灵魂-算法算法什么是程序?计算机是机器-在求解某一问题时-需要有相应程序-程序是用计算机能够识别的语言表示出的如何求解问题的一段“文章”-因为没有程序的计算机是不知如何求解问题的。那如何写出程序呢?一是:学习掌握计算机能够识别的语言二是:求解问题的方法步骤-算法三是:将两者的结合,即用计算机语言将求解问题的方法步骤表达出来即写出程序。程序是用计算机语言表达的算法。程序设计首先要进行的是算法设计程序设计首先要进行的是算法设计2.1 算法的概念算法就是求解问题的方法步骤。算法从时间和空间两个方面有不同的性质。同一个问题有不同的算法,所以评价一个算法就有优劣之分。如:1
2、+2+3+100时间性、可读性等 2.2 算法举例例1:求1*2*n即n!S1:使p=1S2:使i=2S3:给定n的值S4:使p*i,将乘积存入p,表示为p*i=iS5:使i的值增加1,即i+1=iS6:如果i不大于n,返回重新执行步骤S4,以及其后的S5和S6,最后得到p的即是n!的值.S7:打印p,即是程序运行结果例2:求1+1/2+1/3+1/100如果题目变为: 1-1/2+1/3-1/1002.3 算法特性1、有穷性2、确定性3、有效性4、0或多个输入5、1或多个输出2.4 算法表示1、用自然语言2、用流程图3、用伪代码4、用计算机语言作业:P372.2 2.4(1)、(3)、(8)
3、第三章第三章 数据类型、运算符与表达式数据类型、运算符与表达式3.1 C数据类型一个程序应包括两个方面的内容1、对处理数据的描述(数据结构)2、对处理数据的操作(算法描述)Wirth提出的公式: 程序=数据结构+算法C提供的数据结构是以数据类型形式出现的由于算法千变万化,程序要处理的数据(对象)也是多种多样,在程序设计语言中就将数据处分为不同的类型,如数值型(int、float等)、非数值型(char等)不同类型数据在内存的存贮方式上、运算方式上都是不同的。所以在对处理方法描述之前,要对处理过程中涉及到的数据进行类型说明。对各种类型的数据,有两种存在形式即:常量和变量。C程序要处理的各种数据一
4、、有类型之分,所以要进行类型说明,其作用有二,一是知其存贮方法,二是知其运算方式。二、无论何种类型数据,在程序中都有两种出现形式,即常量和变量3.2 常量与变量3.2.1常量和符号常量常量定义常量类型:-3,4.6,a常量的形式:以常量形式直接出现;符号常量:#define PRICE 35 程序中出现35处可以常量名(符号) PRICE形式出现。符号常量名用大写,变量名用小写。3.2.2 变量其值可以改变的量称为变量。变量要有一个名字。变量名和变量值的区别。用来标记变量名、符号常量名、函数名、数组名、文件名和有效字符序列称为标识符。C语言规定标识符只能由字母、数字和下划线三种字符组成。且第一
5、个字符必须是字母或下划线,长度的规定合法名、大小写被认为是不同的字符。在C语言中,要求对所有用到的变量作强制定义,也就是“先定义、后使用”其意义有三:1、保证变量名使用正确2、根据类型分配存贮单元3、根据类型判断其运算是否合法3.3 整型数据3.3.1 整形常量整形常量即整形数。有三种形式:1、十进制形式 如1232、八进制形式 以0开头,如01233、十六进制形式 以0 x开头,如0 x1233.3.2 整型变量一、整型变量的分类1、基本型,以int表示(integer)2、短整型,以short int表示,或short表示3、长整型,以long int表示,或long表示4、无符号型,又分
6、无符号整形、短整型和长整型,分别以unsigned int、 unsigned short和unsigned long表示C规定各类数据所占字节数。二、整型变量的定义 int a,b; unsigned short c,d; long e,f; 三、整型常量的类型整型常量与整型变量之间的匹配关系四、整型量的运算进行各种类型的算术运算3.4 实型数据3.4.1实形常量实数在C中又称浮点数。实数有两种形式:1、十进制数形式:它由数字和小数点组成(必须有小数点)。如12.9,34.0或34.2、指数形式:123e3或123E3。注意的是E(或e)之前必须有数字且E后面指数必须是整数。3.4.2 实形
7、变量实型变量分类与类型说明分为两类:单精度(float)和双精度(double)类型说明语句: float x,y; double z;在一般的系统中,一个float型数据在内存中占32位,一个double型数据在内存中占64位.数据的范围和精度、实型常量不分float和double实型量的运算3.5 字符型数据3.5.1字符常量C的字符常量有两种形式:1、C的字符常量是用单引号(即撇号)括起来的一个字符。如A,a等2、特殊形式的字符常量,就是以开头的字符序列。如n代表一个“换行”符。因为有些非显示字符难以用一般形式的字符表示,故规定用这种特殊形式表示。以开头的特殊字符见表,“转义字符”自己看
8、例2.33.5.2 字符变量字符变量用来存放字符常量。只能放一个字符。字符变量的定义:char c1,c2;一个字符变量占用一个字节的内存空间。3.5.3 字符数据在内存中的存储形式及其使用方法字符是以ASCII形式放在内存单元中的。由于它在存储形式上与整数存贮形式相类似。C就使char数据与int数据可以通用。例2.4 main() char c1,c2; c1=97;c2=98; printf(“%c %c”, c1,c2); 其中:“%c”是输出字符的格式符例2.5 main() int i; char c; i=a; c=97; printf(“%c %d”, c,c); 程序执行的输
9、出结果3.5.4 字符串常量字符串常量是一对双括号括起来的字符序列。如:“How do you do.”,“CHINA”等。可以输出一个字符串,如: printf(“How do you do.”);要注意的是:“A”与A不同。在C中没有专门的字符串变量,需要用字符数组。3.6 变量赋初值程序中需要对一些变量预先设置初值。C中可在定义变量时同时使变量初值化。如: int a=4; float h=3.567; char c=a;它等同于: int a; a=4;3.7 各类数值型数据间的混合运算数值型是整型与实型的总称。各类int、float和double数据可以混合运算。由于char与int
10、型通用,因此,int、float、double与char间可以混合运算。例如:10+a+1.5-8.68* b 是合法的。但:在运算前,计算机要将不同类型的数据先转换成同一类型,然后进行运算。转换规则是:类型数据总结一、常量和变量常量的形式、标识符二、变量1、定义(说明)2、内存中的存贮形式、导致数据范围(精度)3、int与char异同点三、不同类型的数据运算方式不同3.8 算术运算符和算术表达式3.8.1 C运算符简介C运算符范围很宽,除了控制语句和输入输出以外的几乎所有操作都作为运算符处理。分为下面几类:1、算术运算符2、关系运算符!3、逻辑运算符 ! & |等等3.8.2 算术运算符和算
11、术表达式一、基本的算术运算符 + - * / %(模运算符,或称求余运算符,要求%两侧都是整型数据) 7%3=1注意:整型数的除法如:2/4=0、5/3=1、-5/3=?二、算术表达式和运算符的优先级与结合性算术表达式概念:运算对象(操作数)经算术运算符和括号连接起来的式子C规定运算符的优先级和结合性。在表达式求值时先按运算符的优先级别进行。如:a-b*c如果在一个运算对象两侧的运算符的优先级别相同,如: a-b+c C规定了各种运算符结合方向(结合性)。算术运算符的结合方向为“自左至右”,即b先与-号结合。这种结合性称为“左结合性”。如果运算符两侧操作数的类型不同,先自动进行类型转换,然后进
12、行运算。注:运算符的意义和表达式值的确定三、强制类型转换将一个表达式转换成所需类型,其形式为: (类型名)(表达式)例如: main() float x; int i; x=3.6; i=(int)x printf(“x=%f,i=%d”,x,i); 从上可知:有两种类型转换,一种是运算时不必用户指定,而由系统按规则自动进行类型转换;另一种是强制类型转换。四、自增、自减运算符该运算符的作用是使变量值增1或减1,如:+i,-i 是一种形i+,i- 式的表达式粗看, +i和 i+都相当于i=i+1,但有不同之处,表达式的值什么,i的值是多少如i=2,则+i表达式的值为3,i值也为3; 而i+表达式
13、的值为2,i值却为3 注意:(1)自增自减运算符的运算对象只能是变量,不能是常量或表达式。如5+或+(a+b)都是不合法的。(2)+和-的结合方向是“自右至左”。如:-i+,相当于-(i+)五、有关表达式使用中的问题说明1、表达式中包含自加或自减时的理解如:若i=3 (i+)+ (i+)+ (i+)=? i=?(+i)+ (+i)+ (+i)=? i=?2、表达式的理解问题问题一:i+j 编译系统将其理解为(i+)+j还是i+(+j)呢?问题二:main()int i=3; printf(%d %dn,i,i+);3.9 赋值运算符与赋值表达式一、赋值符号“=”的作用,将一个数据赋给一个变量。
14、如:c=k;二、对赋值运算符两侧的类型不一致时,类型转移问题。例:main()unsigned a;int b=-1;a=b;printf(“%u”,a);注:这部分内容理解有一个前提。三、复合的赋值运算符在赋值号之前加上其它运算符,构成复合运算符。如:a+=3 理解为 a=a+3 x*=y+8 理解为 x=x*(y+8) ?四、赋值表达式赋值运算符将一个变量和一个表达式连接起来的式子,一般形式为 注意:(1)赋值运算符有两种(2)赋值表达式作用有二。一是使变量得值;二是使“赋值表达式”得值。将赋值表达式做为表达式的一种main()int a,b; a=1; b=a+=3; a-=a+=a*a; printf(%d %dn,a,b);3.10 逗号运算符与逗号表达式逗号表达式的一般形式 表达式1,表达式2如:3+5,6+8 a=3*5,a*4逗号表达式求值过程是:先求表达式1的值,再求表达式2的值。整个逗号表达式的值是表达式2的值。式1:x=(a=3,6*a)式2: x=a=3,6*a重点内容1、数据类型,为什么要进行类型说明?2、变量及变量名、标识符3、表达式概念(算术、赋值和逗号)、表达式求值、运算符优先级、运算符的结合性习题3.2, 3.10 ,3.12