资源描述:
《c语言 语言复习》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
C语言复习C语言概述1.C语言的关键字有哪些?作了关键字就不能做标识符(如变量名、数组名,函数名、结构体类型名)2.C语言的运算符有哪些,掌握常用运算符的优先级、运算对象的个数及结合性。参见附录3.C语言是完全模块化和结构化的程序设计语言。函数是C语言程序的基本单位,一个程序由一个或多个函数组成,其中必须有一个main()函数(也只能有一个),程序从main()开始执行,执行完main()函数结束。4.函数的首部:5.函数体:用花括号括起来,一般包括两部分:声明部分和执行部分。6.C语言的每个语句和数据声明后面必须有一个分号。7.C语言本省没有输入输出语句,由库函数实现。8.了解运行C语言程序的过程,理解“源程序”、“目标程序”、“可执行程序”、“编译”、“连接”和“执行”的概念最简单的C程序设计掌握C语言的9种控制语句(P70页),包括各控制语句的使用方法和语法规范,掌握1.switch语句的用法,理解break和continue的区别并能准确运用。2.注意复合语句的概念和用法,注意在使用if,while,for等控制语句时,一组语句是否加括号构成复合语句对语句执行顺序的影响。3.输入输出由库函数实现,故使用前要#include4.掌握单字符输入输出函数putchar()和getchar()函数的调用方法。5.掌握格式化输入输出函数printf()和scanf()的调用方法。掌握常用的格式说明符的功能和规则。6.printf()中双括号括起来的内容除了%d等格式说明符外,其他字符原样输出,同样,格式化输入函数scanf()中双引号括起来的内容除了%d等格式说明符外,其他字符照原样输入。特别注意在输入数据时格式要和scanf中设定的格式说明符匹配。算法1.什么是算法?什么是数据结构?2.掌握求阶乘、判断闰年和判断素数的算法3.C语言程序的3种基本结构:顺序、选择和4.算法的表示:了解流程图法和N-S图法5.了解结构化程序设计思想。数据类型,运算符和表达式2.了解C语言提供了哪些数据类型(P37),总结我们学过哪些数据类型?3.了解常量和变量的区别4.掌握由宏定义表示的符号常量5.理解变量实质上对应一个内存单元,理解变量名、变量地址和变量值之间的区别。6.变量必须先定义后使用,变量名的命名要符合标识符命名规范并却不能和系统关键字同名。C语言对大小写敏感。掌握变量定义的格式。 7.变量的三要素是:类型,名字和当前值。变量的值通过赋值方式改变,如iAge=20,其中“=”叫做赋值符号,将其右边的数据存入左边变量名所表示的存储空间中。变量在定义的同时赋值叫做初始化。初始化不是在编译阶段完成的,(只有静态存储变量和外部存储变量的初始化是在编译阶段完成的),而是在程序运行时执行本函数是实现的。8.理解整型变量在内存里的存放形式,掌握整型变量的分类,包括每一种整型变量在内存中占字节数和取值范围。9.理解浮点型数据在内存中的存放形式,掌握各类浮点型所占字节数,有效位数。了解浮点型数据的舍入误差10.了解转义字符,特别是”,\,’,ddd,xhh的含义。11.掌握字符型变量在内存中的存储形式,掌握字符型数据和整形数据之间的关系。C语言字符型数据和整型数据在字符型数据的取值范围内通用。即:一个字符型变量,可以赋以一个字符型变量,也可以赋以一个0~255之间的整数;输出时,可以用字符格式输出,也可以以整数格式输出;可以对字符型数据进行算术运算,此时相当于对其ASCII码进行运算。12.理解字符串常量的存储形式,理解“a”和‘a’的区别。13.掌握各类型数据之间的混合运算中的转换原则,明确哪些是自动的必定要进行的转换,那些是不同类型数据混合运算进行的转换。14.掌握算术运算符的优先级和结合性。注意:两个整数参与运算,结果仍为整数,如5/9=0,5/3=1。15.了解强制类型转换运算符的用法。16.掌握自增,自减运算符的用法,理解++j,--j,j++,j--的含义。17.掌握赋值运算符和赋值表达式的用法,注意“=”与“==”的区别,注意赋值时要将等号右边的值转换成等号变量的类型再赋值。18.掌握逗号表达式的求值方法。选择结构程序设计1.掌握各种关系运算符和逻辑运算符的用法,掌握关系表达式和逻辑表达式的值都是逻辑值“真”或者“假”。C语言把整数0作为逻辑假,把任何非0值作为逻辑真。2.不要把关系运算符“==”误用为赋值运算符“=”。比如,如果将判断x是否等于8的关系表达式“x==8”写成“x=8”,那么它永远为真(不管x的原值为多少)。3.要正确书写关系表达式。如果表示“x大于等于5且小于等于20”,在数学上可写成式子:5≤x≤20,但是如果在C语言中写成下面的表达式:5<=x<=20则是错误的。但这种错误是一种语义上的错误,而不是语法上的错误,编译器查不出来,不会报错。但运行是,不论x为何值(比如3或60)表达式的值都是“真”,所以这种错误比较“隐蔽”,不易被发现,希望引起注意。正确的写法是x>=5&&x<=204.混合运算时注意运算符的优先级,从而确定计算的次序。优先级从高到低依次是:!(非)>算术运算符>关系运算符>&&>||>赋值运算符6.掌握单分支选择结构if语句和双分支选择结构if-else语句的使用。注意:1.if和else同属于一个if语句,else不能单独作为语句单独使用,它只是if语句的一部分,与if配对使用。因此程序中不可能没有if而只有else。2.if-else语句在执行时,只能执行与if的分支语句或else的分支语句,不可能同时执行两者。3.if语句的表达式可以是任意类型的C语言的合法表达式,除常见的关系表达式或,也可以是其他类型的数据,如整型、实型、字符型。4.在if和else后面,可以是单条语句,也可以是复合语句。是单条语句是,注意不要忘记写分号“;”;是复合语句要注意用{}括号扩起来。 7.条件运算符的结合性为“从右到左”。比如表达式A>B?A:C>D?C:D,相当于A>B?A:(C>D?C:D)。8.条件表达式的一般形式(表达式1?表达式:表达式3)中“表达式1”、“表达式2”和“表达式3”的类型,可以各不相同。表达式2和表达式3不仅可以是数值表达式,也可以是赋值表达式或函数表达式。比如:x>y?printf(“%d”,x):printf(“%d”,y)8.嵌套if-else语句和switch语句都是用来实现多分支选择结构的,它们的应用环境不同,嵌套if-else语句用于对多条件并列测试,从中取一的情形;switch语句用于但条件测试,从多种结果中选取一种的情形。9.一般情况下用switch语句能解决的问题,用嵌套if-else也一样能解决,反之用嵌套if-else语句能解决的问题用switch语句也能解决,在使用时要根据具体问题灵活运用。10.如果多分支选择结构需要判断的逻辑关系只是是否相等,则最好使用switch语句,switch语句的执行效率高于嵌套if-else语句。11.掌握用switch语句编程,注意switch后面括号里表达式的值只能是整数或字符型,每个case后面的“常量表达式”的值要各不相同。注意break的使用。注意:某些情况下,case语句顺序改变对结果的影响。循环结构程序设计1.掌握while,do-while和for语句在循环结构程序设计中的应用,掌握while,do-while和for三种循环语句的嵌套和互换。2.循环的3个要点:循环变量的初始值,循环条件和循环变量的增量。在使用循环时,一定要仔细分析循环的3个要点,即从什么地方开始、什么情况下结束和反复做什么。3.如果循环体中包含两条或两条以上的语句,则两条语句形成复合语句,需要用{}将循环体括起来。如果去掉{},则只对着第一条语句进行循环,容易出现死循环的状况。所以当循环体只有一条语句是,{}可以省略;如果有多条语句,即复合语句是,一定要加{}。4.while(表达式)语句的后面不需要分号;如果有分号,系统会认为循环没有循环体语句,即为空循环,则不执行任何循环操作。5.注意do-while和while语句的执行过程不同,do-while语句的循环体至少被执行一次。6.do-while语句中while(表达式)语句后面的分号(;)必不可少。7.理解break语句和continue语句的功能和使用方法。注意:如果程序中包含双重循环语句时,如果再内层循环中使用break或continue语句,则只对内层循环起作用。8.掌握for语句的执行过程及编程运用。for语句的3个表达式都可以省略,但是中间的分号不能省略。省略的表达式的功能可以用其他语句去完成。数组1.掌握各种类型的数据的定义形式、在内存中的存储形式,初始化形式及对数组元素的访问。注意:数组名是数组的首地址,是一个地址常量(不能对常量赋值)2.数组必须先定义,后使用。数组的长度必须事先给定,或者根据初始值的个数给定,不允许动态定义。数组元素的下标从0开始标记。3.掌握对数组元素的输入输出方法。注意,不能对数组整体进行输入输出,必须使用循环结构逐个元素进行输入输出。4.注意,对数组元素初始化时,可以对全部元素初始化,也可以对部分元素进行初始化。对部分元素初始化,则其他元素的值自动设为0。 5.特别注意:对静态数组如果不在定义的时候初始化,则编译系统对数组全部元素赋初值为0;对动态数组如果不进行初始化,则其元素的初值不确定。6.掌握对二维数组的定义,在内存中的储存形式,初始化的形式,掌握对二维数组元素的引用和输入输出方法。注意:二维数组元素下标的取值(行下标和列下标都是从0开始编号)。注意:常用双重循环对二维数组的元素逐个进行存取操作。8.掌握字符数组的定义,初始化形式。特别注意对字符数组进行初始化有哪些形式。9.掌握字符数组和字符串的输入输出方法,如puts、gets,scanf和printf函数。注意:对字符数组元素逐个输入输出方法和对字符串进行整体输入输出的方法。整体输入时使用gets()或scanf()函数的差别是:scanf()以回车或空格结束输入,而gets()以回车作为输入结束符。所以,如果想输入带有空格的字符串,应该使用gets()函数。10.熟悉常用的字符串处理库函数,理解各函数的工作原理。注意:要使用这些库函数,需要包含其相关头文件:#include11.本章特别注意掌握数组元素的排序算法,特别是冒泡法。函数1.函数就是对实现某一功能的函数进行封装,使其成为一个函数封装,可以通过参数和返回值与其它函数进行通信。2.C语言程序有一个主函数和若干个其他函数组成。由主函数可以调用其他函数,其他函数也可以互相调用。3.被调用的函数要先声明后调用,但若是定义位于调用前面,可省略声明。为了统一或标准化起见,一般将自定义的所有函数都在程序前面予以声明。4.掌握有参函数与无参函数的定义方法。能够根据题目要求,将实现某种功能的一段程序转换成函数的形式加以定义。5.掌握实参和形参的概念,理解形参为函数内定义的参数,为局部变量,只在函数执行时才有意义。函数执行完毕后,即释放该参数。6.理解参数传递中值传递和地址传递的原理和本质。值传递是单向传递,只能从实参向形参传递,而不能有形参传回实参。实参和形参占有不同的内存单元,即使同名也互不影响。7.掌握函数的调用的方式:函数语句,函数表达式和函数参数的形式。8.掌握数组作函数参数的应用,主要有两种形式:(1)数组元素作为实参使用,该方式与其它类型的普通变量作实参并没有区别,在发生函数调用时,把数组元素的值传递给形参,实现单向值传递;(2)把数组名作为函数的实参和形参使用,要求形参和对应的实参都是必须是类型相同的数组(或者是指相同类型数组的指针变量),并且必须由明确的数组定义。该方式实现的是地址传递,即把实参的地址传递给形参。9.理解函数嵌套调用的运行过程。10.理解递归函数的运行过程,掌握编写递归函数的两个要点:确定递归公式和递归结束的条件。11.理解内部变量(局部变量)和外部变量(全局变量)的定义和各自的作用范围。12.理解变量的存储类型,掌握自动变量(auto)和静态变量(static)的区别。自动变量在动态存储区分配存储单元,其初始值是个不确定的致。函数返回时,系统将放弃这些存储单元,其单元内的数据也随之消失了。静态变量在静态存储区分配存储单元,初始值默认为0,因此函数调用结束后,它的值并不消失,可以保存到下一次函数调用。指针 1.明确指针就是内存的地址,所谓指针变量就是存放变量的首地址的变量称为指针变量。2.掌握指针变量的定义、初始化方法。定义的指针变量一定要初始化,否则它可能只想不确定的存储单元,对其进行操作可能出现运行出错。3.掌握通过指向变量的指针对变量进行存取的方法。4.掌握指向数组的指针的定义和初始化方法。掌握引用数组元素的指针法和下标法。例如:inta[10],*p=a;其中p=a等价于p=&a[0];这对于数组元素a[i],有a[i]=p[i]=*(a+i)=*(p+i).5.根据课本10.8节小节进行复习。6.能够理解有关应用指针变量的程序。结构体1.掌握使用结构体变量来处理“记录”类数据及使用结构体变量类数组来处理多个“记录”类数据。2.掌握在函数中使用结构体数组的方法。3.结构体类型必须先声明(给出一个模板),然后才能定义结构体变量或数组(生成实体,分配存储空间)。掌握结构体变量和数组定义的几种形式。4.如果两个函数都用到一种结构体类型,则对结构体类型的声明要在这两个函数之前。否则如果结构体类型声明在一个函数内部,则另一函数中就不能识别这种类型。5.掌握访问结构体变量的成员的访问方法。如果指针pStr已指向结构体变量stPerson,则以下三种形式等价:stPerson.成员,(*pStr).成员,pStr->成员。5.注意对结构变量和数组元素不能整体输入输入,要访问到成员,对各成员分别输入输出。第九章预处理命令1.预处理命令包含文件包含、宏定义和预编译命令三种。2.掌握文件包含和宏定义的正确形式。3.理解宏定义的本质就是字符串替换。注意掌握带参数宏定义的宏展开的正确形式及其结果。文件1.掌握二进制文件和文本文件的区别。2.掌握以缓冲文件系统方式读写文件的步骤为:(1).定义文件指针,(2).打开文件,(3).读写文件,(4).关闭文件。3.掌握fopen函数和fclose函数的用法。4.掌握文件操作方式及含义。5.掌握fputc,fgetc,fread和fwrite函数的用法,明确其每个参数的含义。本课程要求掌握的经典算法包括:求阶乘算法,判断素数算法、求最小公倍数和最大公约数算法、排序算法、求三个数最大值或最小值算法、将三个数按从大到小顺序输出的算法、大写字母改小写字母算法,计算字符串中单词的个数的算法、统计字符串中第一章第二章C语言概述C语言形式背景 C语言是国际上广泛流行的,很有发展前途的计算机高级语言,既可用来写系统软件,也可用来写应用软件。发展形成过程:机器语言——汇编语言——面向过程语言——面向对象语言。汇编语言:依赖硬件,可读性,可移植性差。面向过程:CBasic,C对底层操作(位,地址操作)面向对象语言VCVBDelphi(面向对象语言:一种结构模拟语言,对消息的接收与发送,具有分装,继承以及多态性,满足人们所见即所得的要求。)C语言发展史B语言的基础上发展起来的,1960,algol60是一种面向问题的语言,不能写系统程序1963,剑桥大学推出CPL,接近硬件,规模大,难以实现1967,剑桥大学推出BCPL,简化了的1970,贝尔实验室B语言,很接近硬件,unix操作系统过于简单,功能有限1972-1973贝尔实验室C精炼接近硬件多次改写1978以后,C可移植性(BCPL还有应用,在欧洲)1983ANSIC1990ISOC1972年由美国DennisRitchie设计,并首次在一台使用UNIX的DECPDP-11的计算机上实现,它是由早期的编程语言BCPL发展演变而来的,至今欧洲还有使用BCPL,MartinRichards改进了BCPL,从而促进KenThompson所设计的B语言的发展,最终导致70年代C的问世。一般使用的是TC,它按照C语言的标准,快速,高效的编译程序。TC提供了一个功能强劲的集成开发环境,按传统方式提供了一个命令行编译程序版本。C语言的特点C语言以其简洁,灵活,表达能力强,产生的目标程序高,可移植性好为基本特点而著称于世,归纳起来有如下几点:1)兼容其他计算机语言的一些优点,其程序结构紧凑,简洁,规整,表达式简炼,灵活,实用,用C写的程序可读性强,编译效率高。(与Pascal比较)2)运算符丰富:34种,支持强制类型转换int(3.45)3)数据结构丰富,具有现代化语言的各种数据结构。Int、double、char、string、union、struct链表、树、堆、指针4)具有结构化的控制语句if、while、for、.switch5)语法限制不太严格,程序设计自由度大6)C语言允许直接访问物理地址,位操作,对硬件直接操作双重性:低级:汇编语言 中级:宏汇编,TC3.0、forth高级:Ada、pascal、cobol、Basic、SmallTalk可视化:VC、Delphi、VB、C#、JAVAC语言是一种结构化程序设计语言,适合大型程序的模块化设计。是一种中间语言。7)生成目标代码高、程序执行效率高。8)移植性好,硬件控制能力高C与其他一些语言比较C、Basic、Pascal、Cobol简单的程序举例例1:问候main(){printf(“hi”)}例2:输出格式{printf(“%d,%s,%f ”,a,b,c);例3:自定义函数swap(intx,inty)可以看出C语言的格式特点:1、由函数组成2、一个函数由两部分组成a首部名+类型属性、参数参数类型b函数体declare+execute3、总是从main()函数开始执行的4、格式自由,一般习惯小写书写,但有规定的语法和功能{a=b;b=c;c=a}可以分多行写,一行写一句5、不使用行号,每条语句后必有分号;作为语句间的分隔符6、C语言本身没有输入输出语句7、注释/*………*/增加程序的欣赏性,可读性,可维护性{}表示程序的结构层次范围可适当使用空格和空行,增加程序的可读性。C程序上机步骤(TC环境)目前使用CTC(TURBOC)MICROSOFTCBORLANDCQUICKCEdit(编辑)?compile(编译)?link(链接)?run(运行)C程序编译一般有解释程序和编译程序两种,理论上讲任何一种编程语言既可编译,又可解释解释程序一次只读一行源程序,并且执行该行源程序所指定的操作BASIC编译程序读进整个程序并将其转换为目标代码(按照计算机能够直接运行的形式而实现对源程序的一种解释,也叫二进制码或机器码)分片编译对于一个比较长且大程序,一次编译时间长,TC允许程序分割成块,对块进行单独编译,再进行链接,形成一个可执行的目标代码文件。上机调试程序 1、打开写字板。2、输入源代码,进行剪切,复制等操作,这样容易写,速度快。3、保存为后缀为*.c的文件。4、打开TC环境,打开刚才写的文件*.c。(F3是快捷方式)5、编译(F9)调试,修改。6、执行(CTRL+F9)C程序设计要求1、程序思想对遇到的一些问题要善于思考,能否用C程序实现,形成思想,编写下简单的算法,再上机调试,以后对其不断地扩充,增加其功能,将问题扩大化,使所写程序的功能实用化,通用化,最后市场化。2、程序风格任何人都有自己的程序编写习惯,一般的程序编写都有一定的风格,希望编写程序时能遵循一些约定俗成的习惯:1、区分大小写2、缩格写3、分块写不同的程序块功能块之间有间隔4、文档备份使这些成为习惯,对程序的以后维护,思想的承前启后有一个清楚的设计思路。3、程序维护所写的程序,设计思想,要有一个比较完整的备份文档,记录一些算法,思路,程序的关键步骤以及程序最终要求等。第二章程序的灵魂—算法一个程序包括以下两个方面的内容:1、对数据的描述----数据结构(DataStructer)数据类型,数据的组织形式详细的参考《数据结构》2、对操作的描述----算法(algorithm)操作步骤著名计算机科学家沃思提出一个公式:程序=数据结构+算法再加上程序设计方法和语言环境,可以这样表示:程序=算法+数据结构+程序设计方法+语言工具环境算法是解决“做什么”和“怎么做”的问题。2.1算法的概念广义的说,为解决一个问题而采取的方法和步骤,就称为算法。解决一个问题,可以有不同的方法和步骤,一般的说,希望采用简单的和运算步骤少的方法。不仅要保证算法正确,还要考虑算法的质量,选择合适的算法。计算机算法可分为两大类别:数值运算算法和非数值运算算法。1)数值运算 求解数值解2)非数值运算事务管理类计算机在非数值运算方面的应用远远超过了在数值运算方面的应用。算法的概念由若干条指令组成的有限序列,必须满足以下性质1输入性有零个或多个输入2输出性至少有一个输出3有穷性每一条指令的执行次数必须是有限的4确定性每一条指令的含义必须明确,无二义性(岐义)5可行性每条指令应在有限的时间内完成2.2算法,过程,程序的区别可以想到许多称为算法的计算过程,但一个算法并不等于一个计算机程序,只是类似方法,过程和程序1)算法和过程的区别算法经过有限次计算执行后必会终止,过程可以有穷的,也可以无穷的2)算法和程序的区别程序用某种机器语言书写的一个计算过程算法并一定表现为一个计算机程序,它可以采用多种语言和方式来描述。算法优化2.3、简单的算法举例例1.5!例2.score>80例3.平闰年判断例4.分数计算例5.素数判断#include#includemain(){intn,i,r;scanf("%d",&n);for(i=2;i0)dobeginm:=n;n=r;r:=mmodn;end;end;附:类Pascal语言1、基本语句1)赋值语句 变量名:=表达式;2)条件语句1if条件 then语句组2 if……then……else……3)循环语句1while条件 do语句组2 repeat语句组 until条件3 for循环变量:=初值 [downto]to终值 do语句组4)选择语句(分支语句)1 case条件1: 语句组1; 条件2: 语句组2;条件i: 语句组i; else: 语句组n+1;end;2case表达式 of 常量1:语句组1; 常量i: 语句组i; 常量n: 语句组n;otherwise语句组n+1;end;5)过程或函数调用call过程名(参数表);变量:=函数名(参数表);允许嵌套和递归调用6)错误处理 error(字符串)7)跳出循环 exit8)读写语句read(变量表);write(变量表);各变量中间用逗号隔开9)注释形式{字符串}附加相应的注释2、除过程或函数中的参数,变量说明省略 3、所有算法用以下过程或函数形式表示procedure 过程名(参数表)function函数名(参数表);类型名begin语句组 end;例 最大分因子 (辗转相除法)procedureEUCLID(n,m:integer;varr:integer);beginr:=mmodn;while(r≠0)dobeginm:=n;n=r;r:=mmodn;end;end;{EUCLID} 第三章数据类型、运算符与表达式3.1、C的数据类型对数据的描述,数据结构是数据的组织形式。程序设计时应当考虑算法和数据结构,选择最佳的算法和数据结构,以达到最优化的解和计算效率。C的数据结构是数据类型的形式出现的。数据类型:1、基本类型整型字符型实型(单精度、双精度)枚举型2、构造类型数组类型结构体类型共用体类型3、指针类型4、空类型数据分为:常量C、变量V可以通过以上的数据类型构造更复杂的数据结构。如:表,树,栈,堆、图主要介绍基本数据类型。3.2常量与变量3.2.1常量常量:值不发生改变的量(字面/直接常量)#definePRICE30#definePI3.1415926#definero206265(其它语言中定义常量的方法如:constheight=72.260在高级程序设计语言中,定义常量用const)符号常量名大写1、含义清楚PRICE、PI、RO、E;起到见名知义的作用,有一定的含义。2、在需要改变一个常量能做到“一改全改”HDDY—>ECGI(考虑软件的升级时使用);这些要求在软件工程学里有体现。3.2.2变量变量:其值可以改变的量有一个名字,占一定的存储单元a---?变量名(符号地址) ?变量值存储单元标识符:用来标识变量名,符号常量名,函数名,数组名,类型名,文件名的有效字符序列。变量命名规则:字母,数字,下划线,且第一个是字符,字母或下划线,区分大小写的。要求:对所有用到的变量做强制定义,“先定义,后使用”的原则。1、保证程序中变量名使用正确。Debug(编译)时,会发现未定义。2、每一个变量被指定为一个确定类型,编译时就能为其分配相应的存储单元。3、检查变量运算的合法性。A%B3.3、整型数据3.3.1整常数(三种表示方法)1.十进制123,0.4562.八进制以o开头o123,o4563.十六进制以ox开头3.3.2整型变量1、整型数据在内存中的存放形式二进制形式存放数值补码;正数的补码和其原码的形式相同负数的补码:绝对值按位取反加12、分类基本类型int+修饰符1、基本整型int2、短整型shortint(简写为short)3、长整型longint(简写为long)无符号型:unsigned+1/2/3short