谭浩强C程序设计第三版复习要点

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

一、二、介绍部分1。C程序在UNIX系统下运行cca.c默认的所有输出为a.out.可改,如:cc-of.outf.c2。程序包括两个方面,一是对数据的描述也就是数据结构;二是对操作的描述也就是算法。3。算法是为解决一个问题采取的方法和步骤。4。算法特性:有穷性,确定性,有限输入输出,有效性。5。流程图:起止(椭圆),输入输出(平行四边形),判断(菱形),处理(长方形),流程线(--),连接点(小圆)。三、数据类型、运算符、表达式1。C的数据类型:1)基本类型:整型,字符,浮点,枚举2)构造类型:数组,结构体,共用体3)指针类型4)空类型2。整型:8进制0开头,16进制0x开头3。整型在内存中是二进制且以补码存放的占2个字节16位。正数的补码和其原码相同,负数的补码为符号位为1,其它位按位取反再加1。整型范围:-32768(2^15)~~32767(2^15-1)unsigned(0-2^16)注(INT):32767+1=-32768,原因,+1后,符号位为1,其它为0,这是-32768的补码形式。如下:1000000000000000为-327681000000000000001为-327671000000000000010为-32766。。。。。。区别反码,正数不变,负数将原码除符号位外取反。实型(4个字节,32位)实型数据是按指数形式存放的。数符位,+小数部分:.314159,还有指数部为为10的几次方。4。字符型:1)转义字符:/n,/t(8列),/b回退,/r回车不换行,/f换页,//2)存的是ASCII码,'a'97整型可与字符转换,A653)C中没有专门存放字符串的变量,用字符数组。5。类型转换:char,short--int;float--double;int--unsigned--long--double6。运算符:1)算术:+-*/%2)比较:,,=,=,==,!=3)逻辑:||&&!4)位:~|^&5)赋值:=6)条件:?:7)指针:*&8)求字节:sizeof9)分量:.-10)强制转换:()逗号,语句值为最后一个。且顺序执行。printf(%d,-i++)先取i值,再取负输出,再加1四、顺序程序设计1。C语句1)控制语句:if()~else~;for();while;do~while();continue;break;switch;goto;return;2)函数调查用语句:printf();3)表达示语句:a=3;i++;4)空语句5){}复合语句(分程序)2。赋值语句:可以加分号成表达式,也可以在其它语句中3。C的标准库中的输入输出函数:putchar(输出字符)、getchar(输入字符)、puts(输出字符串)、gets(输入字符串)、printf函数和scanf函数。无输入输出可以使程序编译简单,不与硬件相关。4。使用库函数时,要用预编译命令“#include”将相关头文件包在用户源文件中。标准输入输出库要用#includestdio.h其中用printf函数和scanf函数可以不加5。字符数据的输入输出:putchar('A'),charc=getchar(a)6。格式输出unsignedinta=65535;printf(a=%d,%o,%x,%u,a,a,a,a)输出为:a=-1,177777,ffff,65535注:各进制数之间的转换:十进制转为N进制除N取余。从尾到头串。如65535十进制转化为八进制65535/88191余78191/81023余71023/8127余7127/815余715/81余71/80余1结果为17777N进制转成十进制:按位*N的M次方求和17777(八进制转成十进制)1*(8^5)+7*(8^4)+7*(8^3)+7*(8^2)+7*(8^1)+7*(8^0)其它二、八、十六转,全转成二再转其它。7。想输出%时要写成%%8。格式输入:scanf*(%d,&a);输入多个时可用空格,逗号,回车或组合都可以。9。%s输入,字符串,放在一个字符数组中,以/0结尾10。输入时%*表示跳过去不给任何变量。五、选择结构程序设计1。关系运算符优先次序:,=,,=相同,高于==,!=2。运算符优先级为:算术,关系,赋值3。逻辑表达式,用逻辑运算将关系表达式连起来。4。逻辑运算符优先级。!&&||5。&&前面为假不继续,||前面为真不继续6。条件运算符:例max=(ab)?a:b7。条件运算符结合方向右到左。8。多分支选择结构switch后的表达式的值可以为任何类型来匹配case中的常量表达式。一般case语名执行完后加break语句。9。实数(浮点)在计算和存储时都会有一定误差,不能直接判断是否==0。而是用一个极小的数来判断,如1e-610。fabs()绝对值六、循环控制1。goto无条件转向,一般不要用。两种情况可用,一为与IF一起,二为从内层循环跳到最外层2。whiledo-while区别,后者至少会执行一次,若开始判断就不满足条件时结果不同。3。for(初值;条件;增值)4。break跳出循环体,只用于循环语句和switch语句5。PI=4*(1-1/3+1/5-1/7...)七、数组1。C语言不允许对数组大小作动态定义2。C中字符串只能用字符数组来表示charstr[]=hello3。字符串输出:printf(%s,c);或:puts(str)4。字符串处理函数:strcat(str1,str2)连接两个字符串,将2连接到1的后面。strcpy(str1,str2)将2复制给1strcmp(str1,str2)相等时返回1,1大返回正,2大返回负,自左向右比较ASCII码,与长度无关strlen(str1)字符串实际长度,不算'/0'strlwr(str1)将字符串中的大写改成小写strupr(str1)将字符串中的小写改成大写注判断字符串是否结束可以用while((c=str[i])!='/0')八、函数1。子程序通过函数来实现。2。一个C程序由一个主函数和若干个子函数构成。3。善用函数以减少编程的工作量。4。一个源文件由若干函数构成,一个C程序可由多个源文件构成。C程序始于MAIN函数止于MAIN函数。5。函数分类:有参无参,标准函数用户函数6。类型标志符函数名(形参列表)7。实参(主函数调时),形参(函数定义时)必须都在主函数中,及函数定义时定义(类型必须相同)8。函数返回值应当在定义函数时指定返回值的类型。返回值与函数类型以函数值为准。9。void禁止在调用函数中使用被调查函数的返回值。10。函数调用:函数名(实参列表)11。调用系统函数应在头文件说明,调用用户自定义函数(一个文件中)应该在调用函数中申明(以备编译系统检查)。被调函数出现在主调函数之前时可以不申明。12。递归(在调用一个函数的过程中直接或间接调用函数本身)13。递归必须有条件的调用或终止14。数组作为函数参数,实参与形参数组大小可以不一致(形参小于实参),只传数组首地址。15。形参数组可不指定大小,可以同时加参数传数组元素个数方便处理。16。局部变量:在一个函数内部定义的变量只在函数内有效,函数外无效17。在函数之外定义的变量,有效范围是从定义到源文件结束。18。尽量不要使用全局变量。程序运行中始终占用存储单元,且函数通用性降低,并降低程序清晰性。19。同一文件中,外部变量与局部变量同名,在局部变量范围内,全局变量被屏蔽20。变量按存在的时间分:静态存储(程序运行期间分配固定)和动态存储(运行期间根据需要分配)。21。内存中供用户使用的存储空间分为:程序区,静态存储区,动态存储区。22。全局变量全部存在静态储区中;动态存储区中存放以下数据:函数形参,自动变量(未加static申明的局部变量),函数调用时的现声保护和返回地址。23。C语言变量及函数有两个属性,数据类型和数据的存储类别。存储类别(静态,动态)具体包括:自动(auto)、静态(static)、寄存器(register)、外部(extern)。24。静态局部变量:在函数调用结束后保留原值(存储单元不释放),区别自动变量。静态局部变量赋初值的,只赋一次,再次运行时原初值不赋(不管运行多少次),只保留上次运行完的值。25。静态局部变量未赋初值,自动为0。而自动变量则不确定。26。静态局部变量不能被其它函数引用。27。如打印1到5阶乘时用到静态局部变量。来记录上次阶乘值。28。一般情况数据是放在内存中的,但若变量(局部自动变量和形参)使用过于频繁,为使其存取时间减短,可以将其放在寄存器中。用register申明。例计算N的阶乘时,i,f定义为寄存器变量,在N非常大时可节约执行时间。函数调用结束释放寄存器。现在很多编译器自动将频繁使用的变量放入寄存器中,不需要人的干预。29。用extern声明外部奕量。想在作用范围外引用外部变量时需要声明。若一个程序由不同的文件组成,在多文件中要用到同一个外部变量,不能重复定义,只能定义一次其它extern声明。30。若定义的外部变量只限于被本文件引用,要在定义外部变量时加一个static声明。注,只要是外部变量就是静态存储。31。声明和定义:广义声明包括定义。需要分配存储空间的声明是定义,不需要的是狭义声明。32。变量存储类别小结,(可能会和以上有重复)1)作用域角度分:局部变量(自动变量、静态局部变量、寄存器变量)、全局变量(静态外部变量,非静态外部变量)。2)变量存在时间分,看是否程序运行时始终存在的:动态存储(自动变量,寄存器变量,形式参数)和静态变量(静态局部变量,静态外部变量、非静态外部变量)3)存储位置分:内存中的静态存储区(静态局部变量,静态全局变量,外部变量)、内存中的动态存储区(自动变量和形参)、CPU的寄存器(寄存器变量)4)作用域(同1))和生存周期(同2))33。内部函数和外部函数。指定函数不能被其它文件所调用(用static修饰)。34。extern申明可以使用其它文件中的非静态函数,此关键字可以省略。35。运行多文件的程序1)TurbC中(现很少用)把文件名写在一个文本中存在.prj.在主菜单中找到Project回车找到Projectname回车,输入原来的prj名。再F9编译,ctrl+F9运行。2)MSC中先编译,再用link将编译完的obj文件连接起来(扩展名不用写)3)用#include命令将其它要用到的包括在主函数所在文件中。九、预处理命令1。通过预处理命令改进程序设计环境,提高编程效率。2。C提供的预处理功能有三种:宏定义、文件包含、条件编译3。宏定义:(中间无=号,最后无分号)1)不带参数的宏定义:#definePI3.1415可以用#undefPI来结束2)带参数的宏定义:#defineS(a,b)(a)*(b)#defineMAX(x,y)(x)(y)?(x):(y)注意带变量的一般加个括弧,以免代错,如:#defineS(a,b)a*bintx=1,y=2,z=3;则求S(x+y,z)=x+y*z=7,而不是想要的9;原因是宏展开时并不求值再代入,而是直接代入。且宏定义无关类型,不占编译时间。4。文件包含:一个源文件可以将另外一个源文件的全部内容包含进来。用#include命令进行包含。1)宏定义较多且频繁用在程序中时,将定义放在.h文件中,在程序中进和包含。2)用尖括号或双引号包含,都是合法的。区别是用前者系统到存放C库函数头文件所在目录中寻找要包含的文件,为标准方式。而后者引号,系统先在用户当前目录中寻找要包含的文件,找不到时再按标准方式找。一般系统库函数为尖括号,用户自定义头文件用引号。5。条件编译:对程序中一部分内容指定编译条件。1)格式#ifdef标识符程序段1#else程序段2#endif其中else可以没有。当指定的标识符已经被#define命令定义过,在编译时只编译程序段12)例子:调试用,相比在程序中处处printf,修改工作量降了很多。#ifdefDEBU

1 / 21
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功