您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > C语言 第二章 程序的灵魂--算法
第二章程序的灵魂---算法•什么是程序?•计算机是机器----在求解某一问题时----需要有相应程序----程序是用计算机能够识别的语言表示出的如何求解问题的一段“文章”----因为没有程序的计算机是不知如何求解问题的。那如何写出程序呢?•一是:学习掌握计算机能够识别的语言•二是:求解问题的方法步骤----算法•三是:将两者的结合,即用计算机语言将求解问题的方法步骤表达出来即写出程序。•程序是用计算机语言表达的算法。•程序设计首先要进行的是算法设计2.1算法的概念算法就是求解问题的方法步骤。算法从时间和空间两个方面有不同的性质。同一个问题有不同的算法,所以评价一个算法就有优劣之分。如:1+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.22.4(1)、(3)、(8)第三章数据类型、运算符与表达式•§3.1C数据类型•一个程序应包括两个方面的内容•1、对处理数据的描述(数据结构)•2、对处理数据的操作(算法描述)•Wirth提出的公式:•程序=数据结构+算法•C提供的数据结构是以数据类型形式出现的•由于算法千变万化,程序要处理的数据(对象)也是多种多样,在程序设计语言中就将数据处分为不同的类型,如数值型(int、float等)、非数值型(char等)不同类型数据在内存的存贮方式上、运算方式上都是不同的。所以在对处理方法描述之前,要对处理过程中涉及到的数据进行类型说明。•对各种类型的数据,有两种存在形式即:常量和变量。•C程序要处理的各种数据•一、有类型之分,所以要进行类型说明,其作用有二,一是知其存贮方法,二是知其运算方式。•二、无论何种类型数据,在程序中都有两种出现形式,即常量和变量•§3.2常量与变量•3.2.1常量和符号常量•常量定义•常量类型:-3,4.6,‘a’•常量的形式:以常量形式直接出现;•符号常量:#definePRICE35•程序中出现35处可以常量名(符号)PRICE形式出现。符号常量名用大写,变量名用小写。•3.2.2变量•其值可以改变的量称为变量。变量要有一个名字。变量名和变量值的区别。•用来标记变量名、符号常量名、函数名、数组名、文件名和有效字符序列称为标识符。•C语言规定标识符只能由字母、数字和下划线三种字符组成。且第一个字符必须是字母或下划线,长度的规定•合法名、大小写被认为是不同的字符。•在C语言中,要求对所有用到的变量作强制定义,也就是“先定义、后使用”•其意义有三:•1、保证变量名使用正确•2、根据类型分配存贮单元•3、根据类型判断其运算是否合法•§3.3整型数据•3.3.1整形常量•整形常量即整形数。有三种形式:•1、十进制形式如123•2、八进制形式以0开头,如0123•3、十六进制形式以0x开头,如0x123•3.3.2整型变量•一、整型变量的分类•1、基本型,以int表示(integer)•2、短整型,以shortint表示,或short表示•3、长整型,以longint表示,或long表示•4、无符号型,又分无符号整形、短整型和长整型,分别以unsignedint、unsignedshort和unsignedlong表示•C规定各类数据所占字节数。•二、整型变量的定义•inta,b;•unsignedshortc,d;•longe,f;•三、整型常量的类型•整型常量与整型变量之间的匹配关系•四、整型量的运算•进行各种类型的算术运算•§3.4实型数据•3.4.1实形常量•实数在C中又称浮点数。实数有两种形式:•1、十进制数形式:它由数字和小数点组成(必须有小数点)。•如12.9,34.0或34.•2、指数形式:123e3或123E3。注意的是E(或e)之前必须有数字且E后面指数必须是整数。•3.4.2实形变量•实型变量分类与类型说明•分为两类:单精度(float)和双精度(double)•类型说明语句:•floatx,y;•doublez;•在一般的系统中,一个float型数据在内存中占32位,一个double型数据在内存中占64位.•数据的范围和精度、实型常量不分float和double•实型量的运算•§3.5字符型数据•3.5.1字符常量•C的字符常量有两种形式:•1、C的字符常量是用单引号(即撇号)括起来的一个字符。如‘A’,‘a’等•2、特殊形式的字符常量,就是以‘\’开头的字符序列。如‘\n’代表一个“换行”符。因为有些非显示字符难以用一般形式的字符表示,故规定用这种特殊形式表示。•以‘\’开头的特殊字符见表,“转义字符”•自己看例2.3•3.5.2字符变量•字符变量用来存放字符常量。只能放一个字符。字符变量的定义:•charc1,c2;•一个字符变量占用一个字节的内存空间。•3.5.3字符数据在内存中的存储形式及其使用方法•字符是以ASCII形式放在内存单元中的。由于它在存储形式上与整数存贮形式相类似。C就使char数据与int数据可以通用。•[例2.4]•main()•{charc1,c2;c1=97;c2=98;•printf(“%c%c”,c1,c2);}•其中:“%c”是输出字符的格式符•[例2.5]•main()•{inti;•charc;•i=‘a’;•c=97;•printf(“%c%d”,c,c);•}•程序执行的输出结果•3.5.4字符串常量•字符串常量是一对双括号括起来的字符序列。如:“Howdoyoudo.”,“CHINA”等。•可以输出一个字符串,如:•printf(“Howdoyoudo.”);•要注意的是:“A”与‘A’不同。•在C中没有专门的字符串变量,需要用字符数组。•§3.6变量赋初值•程序中需要对一些变量预先设置初值。C中可在定义变量时同时使变量初值化。•如:•inta=4;•floath=3.567;•charc=‘a’;•它等同于:•inta;•a=4;•§3.7各类数值型数据间的混合运算•数值型是整型与实型的总称。•各类int、float和double数据可以混合运算。由于char与int型通用,因此,int、float、double与char间可以混合运算。•例如:•10+‘a’+1.5-8.68*‘b’是合法的。•但:在运算前,计算机要将不同类型的数据先转换成同一类型,然后进行运算。•转换规则是:•类型数据总结•一、常量和变量•常量的形式、标识符•二、变量•1、定义(说明)•2、内存中的存贮形式、导致数据范围(精度)•3、int与char异同点•三、不同类型的数据运算方式不同•§3.8算术运算符和算术表达式•3.8.1C运算符简介•C运算符范围很宽,除了控制语句和输入输出以外的几乎所有操作都作为运算符处理。分为下面几类:•1、算术运算符•2、关系运算符<>==>=<=!=•3、逻辑运算符!&&||•等等•3.8.2算术运算符和算术表达式•一、基本的算术运算符•+-*/%(模运算符,或称求余运算符,要求%两侧都是整型数据)•7%3=1•注意:整型数的除法•如:2/4=0、5/3=1、-5/3=?•二、算术表达式和运算符的优先级与结合性•算术表达式概念:运算对象(操作数)经算术运算符和括号连接起来的式子•C规定运算符的优先级和结合性。•在表达式求值时先按运算符的优先级别进行。如:a-b*c•如果在一个运算对象两侧的运算符的优先级别相同,如:a-b+cC规定了各种运算符结合方向(结合性)。算术运算符的结合方向为“自左至右”,即b先与-号结合。这种结合性称为“左结合性”。•如果运算符两侧操作数的类型不同,先自动进行类型转换,然后进行运算。•注:运算符的意义和表达式值的确定•三、强制类型转换•将一个表达式转换成所需类型,其形式为:(类型名)(表达式)•例如:•main()•{floatx;inti;•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++表达式的值为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()•{inti=3;•printf(%d%d\n,i,i++);}•3.9赋值运算符与赋值表达式•一、赋值符号“=”的作用,将一个数据赋给一个变量。如:c=‘k’;•二、对赋值运算符两侧的类型不一致时,类型转移问题。•例:•main()•{unsigneda;intb=-1;•a=b;printf(“%u”,a);}•注:这部分内容理解有一个前提。•三、复合的赋值运算符•在赋值号之前加上其它运算符,构成复合运算符。•如:a+=3理解为a=a+3•x*=y+8理解为x=x*(y+8)?•四、赋值表达式•赋值运算符将一个变量和一个表达式连接起来的式子,一般形式为•变量赋值运算符表达式•注意:•(1)赋值运算符有两种•(2)赋值表达式作用有二。一是使变量得值;二是使“赋值表达式”得值。•将赋值表达式做为表达式的一种•main()•{inta,b;•a=1;b=a+=3;•a-=a+=a*a;•printf(%d%d\n,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
本文标题:C语言 第二章 程序的灵魂--算法
链接地址:https://www.777doc.com/doc-3369208 .html