2022年C语言小结 .pdf
《2022年C语言小结 .pdf》由会员分享,可在线阅读,更多相关《2022年C语言小结 .pdf(16页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第一章 概述1 C 语言的特点语言简洁、紧凑,使用方便、灵活。共有个关键字,种控制语句。运算符丰富,公有种运算符。数据结构丰富,数据类型有:整型、实型、字符型、数组、指针、结构体、共用体等。具有结构化的控制语句(如if else、while、dowhile、switch、for)语法限制不太严格,程序设计自由度大。允许直接访问物理地址,能进行位(bit)操作,可以直接对硬件操作。生成目标代码质量高,程序执行效率高。可移植性好。2 C 语言的用途C虽不擅长科学计算和管理领域,但对操作系统和系统实用程序以及对硬件进行操作方面,C有明显的优势。现在很多大型应用软件也用编写。第二章数据类型、运算符与表
2、达式第二章数据类型、运算符与表达式1 C 的数据类型C的数据类型包括:整型、字符型、实型或浮点型(单精度和双精度)、枚举类型、数组类型、结构体类型、共用体类型、指针类型和空类型。2 常量与变量常量其值不可改变,符号常量名通常用大写。变量其值可以改变,变量名只能由字母、数字和下划线组成,且第一个字符必须为字母或下划线。否则为不合法的变量名。变量在编译时为其分配相应存储单元。3 整型数据整型常量的表示方法:十进制不用说了,八进制以0 开头,如 0123,十六进制以 0 x 开头,如 0 x1e。整型变量分为:基本型(int)、短整型(short int)、长整型(long int)和无符号型。不同
3、机器上各类数据所占内存字节数不同,一般int型为个字节,long 型为 4 个字节。4 实型数据实型常量表示形式:十进制形式由数字和小数点组成(必须有小数点),如:0.12、.123、123.、0.0 等。指数形式如123e3代表 12310 的三次方。实型变量分为单精度(float)和双精度(double)两类。在一般系统中float型占 4 字节,7 位有效数字,double 型占 8 字节,1516位有效数字。5 字符型数据字符变量用单引号括起来,如a,b等。还有一些是特殊的字符常量,如n,t等。分别代表换行和横向跳格。字符变量以 char 来定义,一个变量只能存放一个字符常量。字符串常
4、量是由双引号括起来的字符序列。这里一定要注意 a 和a 的不同,前名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 16 页 -者为字符常量,后者为字符串常量,c 规定:每个字符串的结尾加一个结束标志,实际上 a 包含两个字符:a 和。6 数值型数据间的混合运算整型、字符型、实型数据间可以混合运算,运算时不同类型数据要转换成同一类型再运算,转换规则:char,short-int-unsigned-long-double =!=)逻辑运算符(!&|)位运算符(|&)赋值运算符(=)条件运算符(?:)逗号运算符(,)指针运算符(*&)求字节数(sizeof)强制类型转换(类型)分量运算
5、符(.-)下标运算符()其它运算符(如函数调用运算符())自增自减运算符(+-)注意:+i 和 i+的不同之处,+i 使用 i 之前先使 i 加,i+使用 i 之后,使 i 加。逗号表达式的求解过程:先求解表达式,再求解表达式,整个表达式的值是表达式的值。第三章 最简单的程序设计c 的种控制语句:if()else for()while()dowhile()continue break switch goto return 程序的三种基本结构:顺序结构,选择结构,循环结构数据输出c 语言不提供输入输出语句,输入输出操作是由c 的库函数完成。但要包含头文件 stdio.h。名师资料总结-精品资料欢
6、迎下载-名师精心整理-第 2 页,共 16 页 -putchar()向终端输出一个字符printf()的格式字符:d 格式符用来输出十进制整数%d 按整型数据的实际长度输出%md 使输出长度为 m,如果数据长度小于m,则左补空格,如果大于m,则输出实际长度%ld 输出长整型数据 o 格式符以八进制形式输出整数 x 格式符以十六进制形式输出整数 u 格式符用来输出 unsigned 型数据,以十进制形式输出 c 格式符用来输出一个字符 s 格式符输出一个字符串%s 输出实际长度字符串%ms 输出的串占 m列,如果串长度小于m,左补空格,如果大于m,实际输出%-ms输出的串占 m列,如果串长度小于
7、m,右补空格,%m.ns 输出占 m列,但只取字符串中左端n 个字符并靠右对齐%-m.ns m、n 含义同上,靠左对齐,如果nm,则 m自动取 n 值 f 格式符以小数形式输出实数%f 整数部分全部输出,小数部分输出6 位%m.nf 输出数据共占 m列,其中有 n 位小数。如果数值长度小于m,左补空格%-m.nf 同上,右补空格 e 格式符以指数形式输出实数%e 系统指定位小数,5 位指数(e+002)g 格式符输出实数,根据数值大小,自动选f 格式或 e 格式3数据输入getchar()从终端输入一个字符scanf(格式控制,地址列表)标准 C scanf 中不使用%u,对于 unsigne
8、d 型数据,以%d或%o或%x输入。后的*,用来跳过它相应的数据。输入数据时不能规定精度如 scanf(%7.2f,&a);是不合法的。第四章 逻辑运算和判断选取控制1 关系运算符:c 提供种关系运算符(=!=)前四种优先级高于后两种。2 If语句C提供了三种形式的if语句If(表达式)语句If(表达式)语句 1 else 语句 2 If(表达式 1)语句 1 Else if(表达式 2)语句 2 else 语句 n 名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 16 页 -3 条件运算符(ab)?a:b 条件为真,表达式取值a,否则取值 b 4 Switch 语句Switch
9、(表达式)case 常量表达式:语句;break;case 常量表达式:语句2;break;case 常量表达式 n:语句;break;default:语句;第五章 循环控制第五章 循环控制1 几种循环语句goto 语句(现已很少使用)while 语句先判断表达式后执行语句do-while语句先执行语句后判断表达式for 语句2 Break 语句和 continue 语句Break 语句用于跳出循环,continue 用于结束本次循环。第六章 数组第六章 数组1 一维数组c 规定只有静态存储(static)和外部存储(extern)数组才能初始化。给数组初始化时可以不指定数组长度。2 二维数组
10、3 字符数组部分字符串处理函数puts(字符数组)将一个字符串输出到终端。gets(字符数组)从终端输入一个字符串到字符数组,并且得到一个函数值,为该字符数组的首地址strcat(字符数组,字符数组 2)连接两个字符数组中的字符串,数组1 必须足够大。Strcpy(字符数组,字符串 2)将字符串拷贝到字符数组中。Strcmp(字符串 1,字符串 2)比较字符串,相等返回0,字符串 字符串 2,返回正数,小于返回负数。Strlen(字符数组)求字符串长度。Strlwr(字符串)将字符串中的大写字母转换成小写名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 16 页 -Strupr(字
11、符串)将字符串中的小写字母转换成大写以上是一些比较常用的字符串处理函数。第七章 函数1 关于形参和实参的说明 在函数被调用之前,形参不占内存 实参可以是常量、变量或表达式 必须指定形参的类型 实参与形参类型应一致 实参对形参的数据传递是值传递 ,即单向传递2 函数返回值如果想让函数返回一个值,在函数中就要用return语句来获得,在定义函数时也要对函数值指定类型,如果不指定,默认返回整型。3 函数调用1)注意在函数调用时实参和形参的个数、类型应一一对应。对实参表求值的顺序是不确定的,有的系统按自左至右,有的系统则按自右至左的顺序。这一点要注意。2)函数调用的方式:函数语句,函数表达式,函数参数
12、3)如果主调函数和被调函数在同一文件中,并且主调函数在前,那么一般要在主调函数中对被调函数进行说明。除非:(1)被调函数的返回值类型为整型或字符型(2)被调函数出现在主调函数之前。4)对函数的说明和定义是不同的,定义是指对函数功能的确立,包括指定函数名,函数值类型,形参及其类型、函数体等。说明则只是对已定义的函数返回值类型进行说明,只包括函数名、函数类型以及一个空的括弧,不包括形参和函数体。5)c 语言允许函数的递归调用(在调用一个函数的过程中又出现直接或间接的调用该函数本身)。4 数组作为函数参数1)数组元素作为函数参数和一般变量相同2)数组名作参数应该在主调和被调函数分别定义数组,形参数组
13、的大小可以不定义。注意:数组名作参数,不是单向传递。3)多维数组作参数,在被调函数中对形参数组定义时可以省略第一维的大小说明,但不能省略第二维或更高维的说明。5 局部变量和全局变量从变量作用域角度分,变量可分为局部变量和全局变量。1)内部变量(局部变量)在一个函数内定义,只在函数范围内有效的变量。2)外部变量(全局变量)在函数外定义,可以为本文件其它函数所共用,有效范围从定义变量的位置开始到本文件结束。建议尽量少使用全局变量,因为它在程序全部执行过程中都占用资源,而且使函数的通用性降低了。如果在定义外部变量之前的函数名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 16 页 -要想
14、使用该外部变量,则应在该函数中用extern 作外部变量说明。6 动态存储变量与静态存储变量从变量值存在的时间(生存期)角度来分,可分为静态存储变量和动态存储变量。静态存储指在程序运行期间给变量分配固定的存储空间,动态存储指程序运行期间根据需要动态的给变量分配存储空间。C语言中,变量的存储方法分为两大类:静态存储类和动态存储类,具体包括:自动的(auto),静态的(static),寄存器的(register),外部的(extern)。1)局部变量的存储方式函数中的局部变量如不作专门说明,都之auto 的,即动态存储的,auto 可以省略。局部变量也可以定义为static的,这时它在函数内值是不
15、变的。静态局部变量如不赋初值,编译时系统自动赋值为,动态局部变量如不赋初值,则它的值是个不确定的值。C规定,只有在定义全局变量和局部静态变量时才能对数组赋初值。为提高执行效率,c 允许将局部变量值放在寄存器中,这种变量叫register变量,要用 register说明。但只有局部动态变量和形式参数可以作为register变量,其它不行。2)全局变量的存储方式全局变量在函数外部定义,编译时分配在静态存储区,可以在程序中各个函数所引用。多个文件的情况如何引用全局变量呢?假如在一个文件定义全局变量,在别的文件引用,就要在此文件中用extern 对全局变量说明,但如果全局变量定义时用 static的话
16、,此全局变量就只能在本文件中引用了,而不能被其它文件引用。3)存储类别小结从作用域角度分,有局部变量和全局变量局部变量:自动变量,即动态局部变量(离开函数,值就消失)静态局部变量(离开函数,值仍保留)寄存器变量(离开函数,值就消失)(形参可定义为自动变量和寄存器变量)全局变量:静态全局变量(只限本文件引用)全局变量(允许其它文件引用)从存在的时间分,有静态存储和动态存储动态存储:自动变量(本函数内有效)寄存器变量(本函数内有效)形参静态存储:静态局部变量(函数内有效)静态全局变量(本文件内有效)全局变量(其它文件可引用)从变量值存放的位置分静态存储区:静态局部变量静态全局变量全局变量动态存储区
17、:自动变量和形参寄存器内:寄存器变量7 内部函数和外部函数名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 16 页 -内部函数:只能被本文件中的其它函数调用,定义时前加static,内部函数又称静态函数。外部函数:可以被其它文件调用,定义时前加extern,如果省略,则隐含为外部函数,在需要调用此函数的文件中,一般要用extern 说明。第八章 预编译处理c 编译系统在对程序进行通常的编译之前,先进行预处理。c 提供的预处理功能主要有以下三种:1)宏定义2)文件包含3)条件编译1 宏定义不带参数的宏定义用一个指定的标识符来代表一个字符串,形式:#define 标识符字符串几点说明
18、:)宏名一般用大写)宏定义不作语法检查,只有在编译被宏展开后的源程序时才会报错)宏定义不是 c 语句,不在行末加分号)宏名有效范围为定义到本源文件结束)可以用#undef 命令终止宏定义的作用域)在宏定义时,可以引用已定义的宏名带参数的宏定义定义形式:#define 宏名(参数表)字符串这和函数有些类似,但他们是不同的:)函数调用时,先求实参表达式值,再代入形参,而宏只是简单替换,并不求值)函数调用是在程序运行时分配内存的,而宏展开时并不分配内存,也没有返回值的概念)对函数中的实参和形参都要定义类型,而且要求一致,宏名无类型,其参数也没有类型。)函数只有一个返回值,而宏可以得到几个结果)宏替换
19、不占运行时间,只占编译时间,而函数调用占运行时间2 文件包含处理#include 文件 1 就是将文件 1 的全部内容复制插入到#include位置,作为一个源文件进行编译。在#include 命令中,文件名可以用 也可以用,假如现在 file1.c中包含file2.h文件,表示系统先在 file1.c所在目录中找 file2.h,如果找不到,再按系统指定的标准方式检索目录,表示系统直接按指定的标准方式检索目录。所以用 保险一点。3 条件编译条件编译指不对整个程序都编译,而是编译满足条件的那部分。条件编译有以下几种形式:1)#ifdef 标识符程序段#else 名师资料总结-精品资料欢迎下载-
20、名师精心整理-第 7 页,共 16 页 -程序段#endif 它的作用:当标识符在前面已经被定义过(一般用#define),则对程序段编译,否则对程序段编译。)#ifndef 标识符程序段#else 程序段#endif 它的作用和#ifdef相反,当标识符没被定义过,对程序段编译,否则对程序段编译。)#if 表达式程序段#else 程序段#endif 它的作用:当表达式值为真(非)时,对程序段编译,否则对程序段编译。第九章 指针指针说白了就是地址。指针变量就是用来存放指针(地址)的变量。1 变量的指针和指向变量的指针变量读起来很拗口,说白了就是变量的地址和用来存放变量地址的地址变量。因为一个变
21、量在编译的时候系统要为它分配一个地址,假如再用一个变量来存放这个地址,那么这个变量就叫做指向变量的指针变量,也就是用来存放变量地址的这么一个变量。所谓 指向 就是指存放的地址,如指向变量的指针变量,指向 就是指用来存放变量的地址,再如指向数组的指针变量,指向 就是指存放数组的地址。只要理解了这个,指针也就不难了。另外,还有指向字符串的指针变量,指向函数的指针变量,指向指针的指针变量等。1)指针变量的定义形式:类型标识符*标识符如:int*pointer;要注意两点:*表示 pointer是个指针变量,在用这个变量的时候不能写成*pointer,*pointer是 pointer指向的变量。一个
22、指针变量只能指向同一个类型的变量。如上面pointer只能指向 int型变量。2)指针变量的引用两个有关的运算符:&取地址运算符&a 就代表变量 a的地址*指针运算符*a 就代表变量 a的值2 数组的指针和指向数组的指针变量数组的指针指数组的起始地址,数组元素的指针指数组元素的地址。1)指向数组元素的指针变量的定义与赋值定义和指向变量的指针变量定义相同,c 规定数组名代表数组的首地址,即第一个数组元素地址。2)通过指针引用数组元素我们通常引用数组元素的形式是a,如果用指针可以这样引用,*(a+i),或定义一个指针变量p,将数组 a 的首地址赋给 p,p=a;然后用*(p+i)引用。注意:指针变
23、量指向数组a 首地址,则 p+指向数组的下一元素地址,即a1 的地址。名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 16 页 -3)数组名作函数参数形参数组和实参数组之间并不是值传递,而是共用同一段地址,所以在函数调用过程中如果形参的值发生变化,则实参的值也跟着变化。4)指向多维数组的指针和指针变量以二维数组为居多。假设定义了一个二维数组a34,那么a 代表整个二维数组的首地址,也代表第0 行的首地址,同时也是第0行第 0 列的元素的首地址。a+0 和 a0 代表第 0行首地址,a+1和 a1 代表第一行的首地址。假设 a 是一个数组的首地址,那么如果a 是一维的,a+I 代表
24、第 I 个元素的地址,如果a是二维的,则 a+I 代表第 I 行的首地址。那么第一行第二列的元素地址如何表示呢?a1+2 或&a12或*(a+1)+2。我们只要记住:在二维数组中a 代表整个数组的首地址,a 代表第 I 行的首地址,a与*(a+I)等价就行了。只要运用熟练了就没什么复杂的了。5)指向由 m个整数组成的一维数组的指针变量如:int(*p)4,p是一个指向包含4个元素的一维数组,如果p 先指向 a0,则 p+1 指向 a1,即 p的增值是以一维数组的长度为单位的,这里是4,举个例子:假设 a34=,p 先指向 a0 也就是数组 a 的首地址,那么 p+1 就是 a1 的首地址即元素
25、 9 的地址,因为在定义p时int(*p)4,定义一维数组长度为4,所以 p+1 就等于加了一个一维数组的长度4。3 字符串的指针和指向字符串的指针变量1)字符串的表示形式c 中字符串有两种表示形式:一种是数组,一种是字符指针char string=I love c!;char*str=I love c!;其实指针形式也是在内存中开辟了一个数组,只不过数组的首地址存放在字符指针变量str 中,千万不要认为str是一个字符串变量。2)字符串指针作函数参数实际上字符串指针就是数组的首地址。3)字符指针变量与字符数组的区别 字符数组由若干元素组成,每个元素存放一个字符,而字符指针变量只存放字符串的首
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年C语言小结 2022 语言 小结
限制150内