ImageVerifierCode 换一换
格式:DOCX , 页数:60 ,大小:114.78KB ,
资源ID:11156736      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11156736.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C语言基础知识大全.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C语言基础知识大全.docx

1、C语言基础知识大全1. 语言变量声明和变量赋值1)基本数据类型在C语言中,仅有4种基本数据类型整型、浮点型、指针和聚合类型(如数组和结构等),所有其他的类型都是从这4种基本类型的某种组合派生而来。整型:整型家族包括字符、短整型、整型和长整型,它们都分为有符号(signed)和无符号(unsigned)两种版本。规定整数值相互之间大小的规则很简单:长整型至少应该和整型一样长,而整型至少应该和短整型一样长。浮点类型:诸如3.14159和2.31023这样的数值无法按照整数存储。第一个数为非整数,而第二个数远远超出了计算机整数所表达范围,这样的数就可以用浮点数的形式存储。浮点数家族包括float、d

2、ouble和long double类型。通常,这些类型分别提供单精度、双精度以及在某种扩展精度的机器上提供扩展精度。ANSI标准仅仅规定long double至少和double一样长,而double至少和float一样长。标准同时规定了一个最小范围:所有浮点类型至少能够容纳从10-37到1037之间的任何值。指针:变量的值存储于计算机内存中,每个变量都占据一个特定的位置。每个内存的位置都由地址唯一确定并应用,就像一条街上的房子由他们的门牌号码标识一样,指针知识地址的另一个名字。2)变量声明形式只知道基本的数据类型是远远不够的,你还应该知道怎样声明变量。变量的基本形式是:说明符(一个或多个) 声

3、明表达式列表对于简单的类型,声明表达式列表就是被声明的标识符的基本类型。对于相对比较复杂的类型,声明表达式列表的每个条目实际上是一个表达式,显示被声明的名字的可能用途。例如:int a, double b;该语句就是一条声明语句,其中a,b就是变量名,该语句指明了变量a,b是int数据类型。所有变量在使用前都必须写在执行语句之前,也就是变量声明要与执行语句相分离,否则就是出现编译错误。3)变量命名C语言中任何的变量名都是合法的标示符。所谓标识符就是由字母、数字和下划线组成的但不以数字开头的一系列字符。虽然C语言对标示符的长度没有限制,但是根据ANSI标准,C编译器必须要识别前31个字符。C语言

4、是对大小写敏感的,即C语言认为大写字母和小写字母的含义是不同的,因此a1和A1是不同的标识符。到目前为止,没有一种命名规则可以让所有的程序员赞同,程序设计教科书一般都不指定命名规则。常用的命名规则有匈牙利命名法和驼峰命名法等,在实际操作中,我们会采取相对简单方便的命名规则,即“类型首字母”+“_”+“变量用途英文缩写”,其中英文缩写首字母为大写,例如 int i_Num,char c_Name5。4)变量赋值在一个变量声明中,你可以给一个标量变量指定一个初始值,方法是在变量名后面跟一个等号(赋值号),后面就是你想要给变量的值。例如:int i_Num=10; char c_Name=”stud

5、ent”;上述语句声明i_Num为一个整数变量,其初始值为10,声明c_Name为一个字符数组,其初始值为“student”。在C语言中,全局变量和静态变量,如果没有赋初值,则默认初始值int,float,char分别为0,0.0,0,除了全局变量和静态变量以外,其他变量如果没有赋初值,则默认初始值为内存中的垃圾内容,对于垃圾内容不能有任何假设。注意:定义指针后,默认初始值不是0,而是随机的一个值,故定义指针后,一定要初始化。在实际操作中,变量的赋值都是以赋值语句的形式出现,赋值语句是由赋值表达式再加上分号构成的表达式语句。其一般形式为:变量=表达式;在赋值语句的使用中需要注意以下几点:a)

6、由于在赋值符“=”右边的表达式也可以又是一个赋值表达式。下述形式:变量=(变量=表达式);该语句是成立的,从而形成了嵌套的情形。其展开后的一般形式为:变量=变量=表达式;例如:a=b=c=d=e=5;按照赋值运算符的右结合性,因此实际上等效于:e=5;d=e;c=d;b=c;a=b; b) 注意在变量声明中给变量赋初值和赋值语句的区别给变量赋初值是变量说明的一部分,赋初值后的变量与其后的其他同类变量之间仍必须用逗号隔开,而赋值语句则必须用分号隔开。例如:int a=5,b,c;c) 在变量声明中,不允许连续给多个变量赋初值。如下述说明就是错误的:int a=b=c=5;正确写法为:int a=

7、5,b=5,c=5;但是,赋值语句允许连续赋值。d) 注意赋值表达式和赋值语句的区别。赋值表达式是一种表达式,它可以出现在任何允许表达式出现的地方,而赋值语句则不能。下述语句是合法的:If(x=y+7)0) z=x;语句功能为若表达式x=y+5大于0则z=x。但是,下述语句是错误的:If(x=y+7;)0) z=x;因为x=y+7;是语句,不能出现在表达式中。实例:#include “stdafx.h”void main() int i_Tmp,i_Type=8; float f_Tmp; double d_Tmp; char c_Tmp; d_Tmp=d_Tmp=f_Tmp=12; f_Tm

8、p=i_Type; i_Tmp=i_Type+3; printf(a=%d,b=%d,c=%.3f,d=%.6lf,i_Tmp,i_Type,f_Tmp,d_Tmp); 参考书目:1. (美)Kebbeth A.reek.C与指针29-402. H.M.Deitel P.J.Deitel等how to program Second Edition19-232. 算术运算符及使用方式C语言提供了最基本的算术运算符,如下表: 运算符含义举例结果+加法运算符a+ba和b的和-减法运算符a-ba和b的差*乘法运算符a*ba和b的乘积/除法运算符a/ba除b的商%求余运算符a%ba除b的余数+自加运算符

9、a+,+aa自加1-自减运算符a-,-aa自减11、+、-、*、/都适用于浮点类型和整数类型,当两个操作数都为整数时进行整数运算,其余情况则进行double型运算;当/除法运算符的两个操作数为整数时,结果为整数,舍去小数部分,例如5/3的结果为1;%求余运算符只接受两个整型操作数的运算,结果为余数2、+、-:作用是使变量自加1或自减1,例如i+、+i,都是使i的值加1,但其执行的步骤是不同的。例如:int i=3,j;j=i+;/ i的值为4 ,j的值为3int i=3,j;j=+i;/i的值为4,j的值为4可见当变量在左侧时,先进行赋值运算再进行自加1操作,当变量在右侧时,先进行自加1操作再

10、进行赋值运算。3、在赋值运算符之前加上算术运算符既构成复合运算符,例如:a+=b,等价于a=a+b。-=、*=、/=也是如此。3. 位运算符及使用方式(、|、&、)位运算符是用来对二进制位进行操作,如下表:运算符含义右移取反|按位或&按为与按为异或:移位运算符,例如左移运算符:int i=3;i=i、=、大于=大于或等于小于3为关系表达式,大于号为关系运算符,当表达式成立时,“a3”的值为“真”,当“a3”不成立时,“a3”的值为“假”。其中应当注意的是关系表达式的返回值为整型值,而不是布尔型。表达式为真时返回值为1,表达式为假时返回值为0。5. 逻辑运算符及使用方式(&、|、!)运算符含义举

11、例结果&逻辑与a&ba,b都为真则结果为真,否则为假|逻辑或a|ba,b至少有一个为真则结果为真,否则为假!逻辑非!a当a为真则结果为假,当a为假则结果为真其中应当注意逻辑或,例如a|b,当a为真时,C语言中直接跳过对b的判断,其返回值为“真”。当一个表达式包括几种运算符时,则以运算符的优先级对表达式进行运算,表达式的优先级如下:优先级运算符类型说明1初等运算符()、-、.2单目运算符!、+、-、*(指针运算符)、&(取地址运算符)3算术运算符先乘除后加减4关系运算符、=、=、=、!=5逻辑运算符&、|6条件运算符三目运算符,例如?:7赋值运算符=8逗号运算符,6. 指针的概念与使用1) 指针

12、的定义指针就是变量的地址,是一个常量。定义指针的目的就是为了通过指针访问内存单元。在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。指针变量定义的一般形式为: 存储类型 数据类型 * 指针变量名2) 指针变量运算符1、取地址运算符:& 该运算符表示的是对&后面的变量进行取地址运算。例:int a;则 &a表示取变量a的地址,该表达式的值为变量a的首地址。2、指针运算符:*该运算符也称为“取内容运算符”,后面接一个指针变量。表示的是访问该指针变量所指向的变量,即访问指针所指向的存储空间中的数据。 例:int a=7; int *p; p=&a;则 *p 表示指针变量 p 指向变量 a,

13、即 *p 就是 a,所以 *p=7。 一个指针变量 p 在程序中通常有如下表示形式: p: 指针变量,它的内容是地址量; *p:指针所指向的变量,是指针所指向的内存空间中的数据; &p:指针变量所占存储空间的地址;【例1】分析程序的运行结果源程序如下:#includevoid Locate()int i_a; int *pst_a; printf(n请输入i_a的值:); scanf(%d,&i_a); pst_a =&i_a; printf(i_a的值为:%dn,i_a); printf(pst_a的值为:%xn, pst_a); printf(&i_a的值为:%xn,&i_a); prin

14、tf(*pst_a的值为:%dn,* pst_a); printf(&pst_a的值为:%xn,& pst_a); printf(n);运行结果:请输入i_a的值:3i_a的值为:3pst_a的值为:12fe8c&i_a的值为:12fe8c*pst_a的值为:3&pst_a的值为:12fe80以上实例中,12fe8c是pst_a的值,也就是i_a的地址;12fe80是pst_a的地址;两者有区别,不能混为一谈。3) 地址与指针的概念指针可以有效地表示复杂的数据结构;动态分配内存;方便的使用字符串;有效而方便地使用数组;能直接处理内存地址。如果在程序中定义了一个变量,在编译时就给这个变量分配内存

15、单元。系统根据程序中定义的变量的类型,分配一定长度的空间。例如,一般微机使用的C系统为整形变量分配两个字节,为实型变量分配4个字节。内存区的每一个字节有一个编号,这就是“地址”,它相当于旅馆中的房间号。在地址所标志的内存单元中存放数据,这相当于旅馆中各个房间中居住旅客一样。在程序中一般通过变量名对内存单元进行存取操作,这称作“直接访问”,还可以采用 另一种“间接访问”方式,将变量的地址存放在另一个变量中。所谓“指向”就是通过地址来体现的,由于通过地址能找到所需的变量单元,我们可以说,地址“指向”该变量单元,因此在C语言中,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。一个

16、变量的地址成为该变量的“指针”。如果有一个变量专门用来存放另一个变量的地址,则称它为“指针变量”。4) 变量的指针和指向变量的指针变量变量的指针就是变量的地址。存放变量地址的变量是指针变量,用来指向另一个变量。为了表示指针变量和它指向的变量之间的关系,用“*”符号表示“指向”。定义指针变量的一般形式为:基类型 *指针变量名;5) 数组与指针一个变量有地址,一个数组包含若干元素,每个数组元素都在内存中占有存储单元,它们都有相应的地址。指针变量也可以指向数组元素。6) 空间操作函数malloc、freeC语言提供了两个函数,malloc与free,分别用于执行动态内存分配与释放。这些函数维护一个可

17、用内存池。当一个程序另外需要一些内存时,它就调用malloc函数从内存池中提取一块合适的内存,并返回一个指向这块内存的指针。这块内存此时并没有以任何方式进行初始化,使用时需手动初始化。这两个函数的原型如下所示,它们都在头文件stdio.h中声明。void *mallloc(size_t size);Void *free(viod* pointer);malloc的参数就是需要分配的内存字节数。如果内存池中的可用内存可以满足这个需要,malloc就返回一个指向被分配的内存块起始位置的指针,如果系统无法向malloc提供更多的内存,malloc就会返回一个NULL指针。free的参数必须要么是NU

18、LL,要么是一个先前从malloc或其他空间申请函数返回的值。malloc的一般用法基类型*=(基类型)*Malloc(数量*sizeof(基类型);7) 动态数组动态数组是指在声明时没有确定数组大小的数组,即忽略方括号中的下标;当使用时可用malloc语句重新指出数组的大小。使用动态数组的优点是可以根据用户需要,有效利用存储空间。动态数组的内存空间是从堆上分配的。是通过执行代码而为其分配空间。当程序执行到这些语句时,才为其分配空间。程序员自己释放内存。遵循原则:申请的时候从外层往里层,逐层申请;释放的时候从里层往外层,逐层释放。【例2】:一维数组的动态开辟与释放:【例3】:二维数组的动态开辟

19、:7. 数组数组是构造类型,是一组具有相同类型数据的有序集合。每个数据成为数组的元素,用一个统一的数组名和下标来唯一地确定数组中的元素。一维数组的声明方式为:常量表达式类型标识符是任一种基本数据类型或构造数据类型;数组名由用户自定义,表示存储空间的地址;常量表达式表示数组元素的个数,也是数组的长度。例:int a6;表示一个整型、数组名为a、长度为6的一维数组。(2)一维数组的引用形式:下标法:数组名下标 例如:ai;或pi;a为数组名,p为指向数组的指针变量。注:C语言中不能依次引用整个数组,只能逐个引用数组中的各个元素。下标就是被访问的数组元素在所定义的数组中的相对位置。下标为0表示的是数

20、组元素在数组的第一个位置上,下标等于1表示的是数组元素在数组的第二个位置上,依次类推。例如: int a10; a0=100;/正确 a10=100;/不正确,下标越界例如:下标法:int main() int a10; for(int i=0;i10;i+) ai=2*i; for(int i=0;i10;i+) printf(“%dt”,ai);return 0;指针法:*(a+i)或 *(p+i);a是数组名,p为指向数组的指针变量。例如:指针法:int main() int *p=a;int i; for(i=0;i10;i+) ai=2*i; for(i=0;i10;i+) prin

21、tf(“%dt”,*(p+i));return 0;二维数组的声明方式为:常量表达式1 常量表达式2:二维数组与一维数组的区别在于多出常量表达式2。常量表达式1 是第一维,常称为行; 常量表达式2是第二维,也就是列。例:int a35;表示一个3行5列的二维数组;数组元素的个数为:3*5=15个。二维数组的引用形式:下标法:数组名下标 下标注:二维数组在引用时和一维数组一样,只能逐个引用数组中的各个元素。例如: sz_A56下标可以是整数表达式,如sz_A8-52*3-1。不要写成sz_A2,3、sz_A8-5,2*3-1形式。注意:严格区分定义数组时用的sz_A56和引用元素时用的sz_A5

22、6的区别。前者sz_A56用来定义数组的维数,后者sz_A56的5和6是下标,代表的是数组中的某一个元素。 【例2】分析程序的运行结果源程序如下:#includevoid main() int sz_Array6;/一维数组 int sz_DlArray35;/二维数组 int i_a;int i_dla; int i_dlb;/一维数组 for (i_a=0;i_a6;i_a+) sz_Arrayi_a=i_a*2+2; printf(n输出一维数组元素为:n); for(i_a=0;i_a6;i_a+) printf(%dt,sz_Arrayi_a); /二维数组 for(i_dla=0;

23、i_dla3;i_dla+) for(i_dlb=0;i_dlb5;i_dlb+)sz_DlArrayi_dlai_dlb=i_dla+i_dlb; printf(n输出二维数组元素为:n); for(i_dla=0;i_dla3;i_dla+) for(i_dlb;i_dlb5;i_dlb+) printf(%d ,sz_DlArrayi_dlai_dlb); printf(n); 运行结果为:输出一维数组元素为:2 4 6 8 10 12输出二维数组元素为:0 1 2 3 41 2 3 4 5 2 3 4 5 63 4 5 6 74 5 6 7 8指针法:可以通过行指针来引用二维数组元素。

24、定义行指针变量:int (*p)3,指针p是指向一个由3个元素所组成的整型数组指针。 例如:void main()int a34=1,2,3,4,5,6,7,8,9,10,11,12 int (*p)4=a; for(int i=0;i3;i+) for(int j=0;i4;j+) printf(“%dt”,pij); printf(“n”);参考书目:1. C+语言程序设计教程与实验(第二版) 温秀梅 丁学钧 李建华主编2. C/C+程序设计教程 张世民主编8. 字符数组1) 字符数组的定义与赋值 字符数组是一串字符的集合,其数组元素为字符型。字符数组的赋值形式: char 数组名常量表达

25、式=“字符串”;或 char 数组名常量表达式=“字符串”;例:char sz_A5=s, t, u, d, y, ; 定义数组sz_A,包含5个元素,其在内存中的存放情况为: sz_A0 sz_A1 sz_A2 sz_A3 sz_A4study 则各元素赋值如下: sz_A0=s; sz_A1=t; sz_A2=u; sz_A3=d;sz_A4 =y如果花括号中的字符个数大于数组长度,编译系统就会报错,如果花括号中的字符个数小于数组长度,其余元素则由系统自动定义为空字符,即0。0作为字符串的结束标志,因此在定义数组长度时,应在字符串原有的长度上加1,为字符串结束标志预留空间。例:char s

26、z_A6=s, t, u, d, y, ;定义数组sz_A,包含6个元素,其在内存中的存放情况为: sz_A0 sz_A1 sz_A2 sz_A3 sz_A4 sz_A5study0 则各元素赋值如下: sz_A0=s; sz_A1=t; sz_A2=u sz_A3=d; sz_A4=y; sz_A5=0【例3】分析程序的运行结果源程序如下:#includevoid main()char sz_A10=work hard;int i;for(i=0;i9;i+)printf(%c,sz_Ai);运行结果:work hard以上实例中,逐个显示字符数组的各个元素,但需注意的是在定义字符数组的下标时,至少比后面的字符串长度大1。其中,字符串长度应包括其中空格的长度。2) 字符串操作函数:a) 字符串复制函数strcpy()格式:strcpy(字符数组1,字符数组2)功能:是将字符数组2中字符串复制到字符数组1中

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1