首页 c语言基础知识

c语言基础知识

举报
开通vip

c语言基础知识C语言期末复习之基础知识篇---杨士帅一C语言概述·程序:一组计算机能够识别和执行的指令。指令的有序的集合。·计算机语言:人和计算机交流信息,计算机和人都能识别的语言·C语言的注释://单行注释/*……*/多行注释。·C语言的结构:1.由一个或多个源程序文件组成。2.函数是C程序的基本单位。3.一个C程序至少含有一个main函数,也可以由一个main函数和若干个其他函数组成。4.C的这些特点容易实现程序的模块化。5.C程序总是从ma...

c语言基础知识
C语言期末复习之基础知识篇---杨士帅一C语言概述·程序:一组计算机能够识别和执行的指令。指令的有序的集合。·计算机语言:人和计算机交流信息,计算机和人都能识别的语言·C语言的注释://单行注释/*……*/多行注释。·C语言的结构:1.由一个或多个源程序文件组成。2.函数是C程序的基本单位。3.一个C程序至少含有一个main函数,也可以由一个main函数和若干个其他函数组成。4.C的这些特点容易实现程序的模块化。5.C程序总是从main函数开始执行,而且不论main函数的位置如何。·每个语句和数据的定义后面必须有一个括号。·C语言本身没有输入输出函数,输入输出操作是库函数scanf和printf提供的。二数据的类型和运算(1)常量:在程序运行的过程中,其值不能被改变。1.整型常量:1000.2.实型常量:0.34,12.34e3.3.字符常量:’a’,’\n’.4.字符串常量:“boy”。5.符号常量:#definePI3.1416(2)变量:在程序运行期间,变量的值是可以改变的。1.变量必须先定义后使用。2.刚定义尚未赋值的变量具有随机值。3.定义变量要同时定义名字和类型。4.变量名和变量值是两个不同的概念。i.变量名实际是以这个名字代表一个内存地址。ii.变量值就是该内存单元当前存储的值。(3)标识符:一个对象的名字。1.只能由字母,数字和下划线三种字符组成,而且第一个字符必需为字母或下划线。2.标识符的长度无限制,但不能以关键字作为标识符。3.不合法的标识符:M.D.John,#33,3D64,Include。(4)数据类型:就是对数据分配储存单元的安排,包括储存单元的长度以及数据的存储形式。 数据类型 宽度 Char 1B Shortint 2B Int 4B Longint 4B Float 4B Double 8B Longdouble 80B整数的默认时signed,各整数类型均可加修饰符unsigned表示无符号整数类型,unsignedint可以简写成unsigned.1.整型:·一个十进制数是0到9的序列。·十六进制应该加前缀0x。如:0xfa,0xAE03·八进制应该加前缀0.如:030.·使用科学记数法,e/E的后面绝对不能在跟小数,且E/e的前面必须有值。2.字符型:·用单引号括起来的单个字符。如:’a’,’0’.实际上存储的是该数据的ASCII码。所以也可以把他们看成是整型量,C语言容许对整型变量赋以字符型,也允许对字符变量赋以整形值。3.转义字符: 转义字符 含义 \b Backspace \t Tab \n 换行 \r 回车 \” 双引号 \’ 单引号 \\ 反斜杠4.字符串:·C语言中并没有字符串类型,用字符数组来处理字符串。·字符串是由一对双引号括起来的字符数列。·字符串常量和字符常量的区别:·字符常量由单引号括起来,字符串常量由双引号括起来。·字符常量只能是单个字符,字符串常量则可以是一个或多个字符。·字符常量占一个字节的内存空间,字符串所占的内存空间常量等于字符串中的字符数加一。增加的一个字节中存放字符‘\0’.·ASCII为0,这是字符串结束的标志。·Ex:·‘a’在内存中占一个字节,“a”在内存中占2个字节。5.符号常量:·在C语言中,可以用一个标识符来表示一个常量,称之为符号常量。符号常量在使用之前必须先定义:#define标识符常量名常量值·#define是一条预处理命令,称为宏定义命令,其功能是把该标识符定义为其后的常量值。习惯上常量的标识符用大写字母,而变量名用小写字母。(5)运算符:1.算术运算符:·整数除法:两个整数相除的结果为整数。Ex:5/3=1,舍去小数部分。-5/3=-1,向零取整。·浮点除法:保证除数和被除数中至少有一个是浮点数。Ex:5/4.0=1.25.·%模运算要求运算元为整数,结果也是整数。Ex:5%3=2.·C语言没有乘方运算,但pow函数可以实现乘方运算。pow(x,y)x的y次方。#include<math.h>.算数运算符的优先级与结合性:先乘除后加减,从左至右。·不同类型数据的混合运算:类型的自动转换,编译系统会自动把各操作系统操纵数转化为操作数中最长的类型。EX:若int型与float或double型数据进行运算时,系统会自动把int与float型数据转化为double型,然后在进行运算,结果时double型。2.自加自减运算符:·i++,i--:在使用i之后将i的值加/减1.·++I,--i:在使用i之前,先将i的值加/减1.3.强制类型转换:(double)a将a转化为double类型。短类型->长类型安全长类型->短类型有可能会丢失数据。4.运算符的优先级:1,()、{}、[]、.、(结构体成员运算符)、->(指向结构体成员运算符)2,单目运算符!(非)、--(自减)、++(自加)、~(按位取反)、正号(+)、负号(-)3,算术运算符*、%、/,+、-4,关系运算符<、>、>=、<=,==、!=5,逻辑运算符&&和||6,赋值运算符=7,逗号运算符(表达式1),(表达式2),(表达式3)...还有就是左右运算顺序a+b+为双目运算符,(a>b)?a:b中?:为3目运算符.!a为单目运算符.单目,三目运算符都为自右向左结合,双目运算符除赋值运算符都为自左向右结合.5.关系运算符:>,<,>=,<=,==,!=.用来比较两个操作数之间的关系,运算结果为1或0.6.逻辑运算符:!,&&,||。用来实现逻辑运算和逻辑判断。用非0表示逻辑值的true,用0表示逻辑值的false。7.条件运算符:三目运算符:表达式a?表达式b:表达式c若表达式的值非0,则返回表达式b的值;若表达式的a的值为0,则返回表达式c的值。8.逗号运算符:用来将若干独立的表达式分隔并连接构成一个逗号表达式。9.赋值运算符:变量=表达式。右结合性。三输入输出函数(1)控制台I/O:程序与外界交流。(2)C语言中所有的I/O都是由库函数完成的,要用#include将相关头文件包含在源文件当中。使用标准输入输出函数时要用到stdio.h文件。(3)格式输出函数:printf(“格式控制字符串”,表达式列表)。 格式字符 意义 d,i 以带符号的十进制输出整数 o 以八进制形式输出无符号整数(不带前缀0) X,x 以十六进制的无符号数输出整数(不带前缀0x) u 以无符号的十进制形式输出整数 f 以小数的形式输出单,双精度实数,隐含6位小数 E,e 以指数的形式输出单,双精度实数 G,g 以%f或%e中较短的输出宽度输出单、双精度实数 c 输出单个字符 s 输出字符串格式修饰符:·%-m.nlf,%-mld 字符 说明 l 用于输出长整形数据以及double型数据 m 数据显示的最小宽度 n 对实数,表示输出n位小数。对字符串,表示截取的字符个数。 - 输出的数字或字符在显示宽度区域内左对齐。·未指定输出宽度m,则按实际位数输出。·未指定小数位数,默认6位。·宽度计算中小数点要占一位。·若数据实际宽度比制定宽度要小,默认右对齐,即左补空格。有修饰符-,则左对齐,即右补空格。·若数据的实际宽度比指定宽度大,则按实际宽度输出。<4>格式输入函数:用户用指定的格式从盘上把数据输入到指定的变量中。scanf(“格式控制字符”,变量地址列表);·在scanf语句的格式字符串中,如果没有非格式字符在“%d%d%d”之间做输入时的间隔,在输入时要用一个或一个以上的空格或回车或TAB键作为输入数据之间的间隔。·scanf函数中的格式控制后面应当是变量地址,而不是变量名。·不能用格式控制来规定输入数据的精度。·:scanf("%7.2f",&a); ×scanf("%f",&a); √·如果输入在格式控制字符串中除了格式字符还有其它字符,那么在输入时这些字符将被作为间隔符,要输入相同的字符。·scanf(“a=%d,b=%d",&a,&b) a=12,b=34在输入数据时遇到以下情况,则认为是一个数据输入的结束:遇到空格键,回车键,tab键。满足域宽,如%4d,输入4位结束。遇到非法字符。·在输入字符型数据时,若格式控制字符中没有非格式字符,则认为所有输入的字符均为有效字符。·如:scanf("%c%c%c",&a,&b,&c);·只有当输入为:def时(即:不能有间隔),才能把‘d’赋于a,‘e’赋予b,'f'赋予c。四流程控制(1)顺序:·按语句的先后顺序依次执行。·复合语句:可用{}括起来的多个语句,构成一个复合语句。在C语言中复合语句被认为是一条语句。(2)分支:if语句:实现两个分支的选择结构。最常用的3种if语句的形式:1.if(表达式)语句1(没有else子句)2.if(表达式)语句1else语句2(有else子句)3.if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3┆elseif(表达式m)语句melse语句m+1IF嵌套:在if语句中又包含一个或多个if语句称为if语句的嵌套。else总是与它上面最近的为配对的if配对。if()if()语句1else语句2elseif()语句3else语句4Switch语句:实现多分支的选择结构。根据表达式的值,使流程跳转到不同的语句。 switch语句的一般格式:switch(表达式){case常量1:语句1case常量2:语句2┇┇┇case常量n:语句ndefault:语句n+1}switch语句中表达式和常量可以是整形以及字符型。任何两个case后面的常量不可有相同的值。先计算表达式的值,在根据表达式的值转向不同的分支。每个case分支的语句无需用{}括起来。每个case分支都是入口点。break语句时转移语句,即跳出switch,无break语句,将执行入口点之后的所有语句。(3)循环:·While(表达式)语句先判断循环条件表达式的值,若为真,则执行循环体;若为假则不执行循环体语句。·do循环体语句whilie(表达式)先无条件执行一次循环体,然后在判断循环条件是否成立。·For(表达式1;表达式2;表达式3)循环体语句。表达式1:为循环变量设置初始值。表达式2:判断是否继续循环。表达式3:修改循环变量的值。循环嵌套:一个循环体内又包含另一个完整的循环结构,称之为循环嵌套。内层循环中还可以嵌套循环,这就是多层循环。3种循环可以互相嵌套。三种循环的比较:·一般情况下,三种循环可以互相代替。·循环中应包含使循环趋于结束的语句。·用while和do…while循环变量操作应在while和do…while之前完成。而for语句可以在表达式1中实现循环变量的初始化。·Break:从循环体中强行退出,结束整个循环。·Continue:停止本次循环,直接开始下次循环。五函数使用角度来看函数包括库函数和用户自定义函数。库函数:由C系统提供,用户无须定义,也不必在程序中作类型说明,只需在程序中包含有该函数的头文件即可在程序中直接调用。用户自定义函数:用户按照需要自己编写的函数。从函数形式来看:函数分为无参数函数和有参数函数。无参数函数:无参数函数一般用来 执行一组操作。无参数函数可以带回或不带回函数值。有参数函数:在调用函数时,主调函数要通过参数向被调函数传递数据。函数可以带回或者不带回函数值。一般情况下,被调函数会返回一个函数值,供主函数使用。一个C程序由一个或多个程序模块组成,每一个程序模块作为一个源程序文件。对较大的程序,一般不希望将所有的内容都放在一个文件中,而是将它们分别放在若干个源文件当中,由若干个源文件组成一个C程序。一个源程序文件由一个或多个函数及其他相关语句组成。一个源程序文件是一个编译的单位,在程序进行编译是以源程序文件为单位进行编译的,而不死以函数为单位进行编译的。C程序的执行是从main函数开始的,如果在main函数的执行过程中调用其他函数,调用函数结束后流程返回到main函数,main函数结束时整个程序运行结束。所有函数都是平行和平等的,即在定义函数时是分别进行的,互相独立的,一个函数并不从属于另一个函数,即函数不能嵌套定义。函数间可以互相调用,但不能调用main函数,main函数是被操作系统所调用。定义函数:C语言要求在程序中遇到的所有函数,必须先定义后使用。函数的定义指明了函数名,函数返回值类型,函数实现的功能以及参数的个数与类型,将这些信息通知给编译系统。函数定义格式:类型名函数名(形式参数表列){函数体}类型说明了函数返回值的类型,它可以是任何有效类型,如果省略,默认为int。参数列表使用逗号分割变量表,各变量表由类型和变量名组成,参数列表可以为空,表示无参,但此括号不能省略,不管定义还是声明时,每个函数参数必须同时含有类型和参数名。空函数:{}中类容为空,调用函数,什么也不做,目的时方便以后对功能的扩充,而不会影响程序的结构。函数的返回:return表达式。用途:使得本函数立即退出,返回到调用语句的地方,返回一个值。函数可以用两种方法停止运行并返回到调用它的地方:执行到函数最后一个语句。遇到return语句,函数的返回值是靠return语句获得的。如果不希望函数有返回值,将函数类型声明为void。除了类型为void函数外,其他函数均有返回值,该值由return语句决定,如果没有return语句函数将返回一个不确定的值。如果函数没有指明函数返回值的类型,默认为int。当函数的返回值不是整型时,应该:明确说明函数的类型。函数声明位于第一次调用之前。参数传递:C语言中的函数调用传递参数是按值传送。如果实参的修改通过形参带回主调函数,用指针。用数组作为函数参数时,就把数组的地址传给了参数。函数的作用域:每个函数都是一个独立的代码块,一个函数的代码属于该函数专有。一个代码块中定义的变量成为局部变量,局部变量随代码块的产生而产生,随代码块的退出而消亡。函数的形参也是局部变量。在任何一个函数之外定义的变量成为全局变量,可以被任何一个函数访问,修改。在函数内部用存储类型符static说明变量不随函数的运行,退出而产生,消亡。但仍然只能在函数内部访问它。如果全局变量和局部变量同名,局部变量屏蔽全局变量。函数的嵌套调用:C语言容许在一个在一个函数的定义中出现对另一个函数的调用。这样就出现了函数的嵌套调用。即在被调函数中又调用其他函数。六数组数组是一组有序数据的集合,下标代表了数据在数组中的序号。用数组名和下标唯一确定数组中的元素。数组中每一个元素都必须属于同一个数据类型。一维数组的定义:类型数组名[常量表达式]数组名的命名规则与变量命名规则相同,数组也必须先定义后使用。数组类型实际上是数组元素的取值类型。对于同一数组,其所有元素的数据类型都是相同的。数组民是用户定义的标识符,不能与其他变量名相同。定义数组时,方括号必须是一个常量表达式,表示数据的元素个数,也称为数组长度。可以是符号常量或常量表达式,但不能时变量。一维数组的使用:使用数组就是使用他的元素。数组的元素和普通变量一样,只不过是名字有些特殊。数组元素的一般表示形式:数组名[下标序号]使用数组时,数组下标可以是常量,变量和表达式,从0开始。一维数组的初始化:Inta[10]={0,1,2,3,4,5,6,7,8,9};可以只给部分元素赋值,当{}中元素少于元素个数时,系统自动给前面元素赋值,其余元素自动赋0。Inta[10]={1,2,3,4,5};只能给逐个元素赋值,而不能给数组整体赋值。·给十个元素全部赋3,只能写为:inta[10]={3,3,3,3,3,3,3,3,3,3};·而不能写为:inta[10]=3;在定义数组时,若要给全部元素赋值,可以省略数组元素的长度。·如:inta[5]={1,2,3,4,5};·可写为:inta[]={1,2,3,4,5};二维数组的定义:类型变量名[常量表达式1][常量表达式2]二位数组的使用:数组名[下标1][下标2]数组中元素顺序:C语言中,二维数组是按行储存的。·inta[3][4] a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3] a[2][0] a[2][1] a[2][2] a[2][3]二维数组的初始化:Inta[5][3]=]={{80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85}};如对全部元素赋值,行下表可以省略,但列下表不能省略。inta[3][3]={1,2,3,4,5,6,7,8,9};可以写为:inta[][3]={1,2,3,4,5,6,7,8,9};字符数组:charc[10];字符数组的初始化:如果初始值小于数组长度,则将这些字符赋给数组中前面的那些元素,其余元素自动定位空字符。字符’\0‘作为字符串的结束标志。字符串处理函数:输入字符串到字符数组。scanf(”%s”,字符数组名);gets(字符数组名);·charst[20];gets(st);scanf(“%s”,st);把字符数组中存放的字符串输出:·printf(“%s”,字符数组名)·puts(字符数组名)·charst[20]=”China”;puts(st);printf(“%s”,st);#include<string.h>stract(字符串1,字符串2)把字符串2链接到字符串1后面。Strcpy(字符串1,字符串2)把字符串2的内容拷贝的字符串1(覆盖)strcmp(字符串1,字符串2)按照ASCII码顺序比较两个字符串,返回比较结果。字符串1=字符串2,返回值=0;字符串1>字符串2,返回值>0;字符串1<字符串2,返回值<0;Strlen(字符串)返回字符串中包含的字符个数(不包括结束标志‘\0’)Strlwr(字符串)将大写字母转化成小写字母。strupr(字符串)将小写字母转换成大写字母。‘A’~’Z’:41H-50H‘a’~’z’:61H-70H七结构体定义结构体的类型:struct结构体名{成员列表=类型名+变量名;};结构体可以嵌套引用,即一个结构体的定义中可以引用其他结构体类型。structDate   {intmonth;intday;intyear;};  structStu  {intnum;charname[20];charsex;intage;structDatebirthday;charaddr[30];};结构体类型与结构体变量是不同的概念,相当于变量类型和变量。只能对变量赋值,存取或运算,而不能对一个类型赋值,存取或运算。在编译时,对类型是不分配空间的,只对变量分配空间。定义结构体类型的变量:1.先声明结构体类型,再定义该类型变量structstudent{ intnum;charname[20]; charsex;intage; floatscore;charaddr[30];};structstudentstu1,stu2;2.在声明类型的同时定义变量structStudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}student1,student2;3.不指定类型名而直接定义结构体类型变量·其格式为:struct{ 成员表列}变量名表列;结构体变量的初始化:Structdate{Intmonth;Intday;Intyear;};Structdatebirthday={10,22,83};使用结构体变量:只能通过成员运算符引用结构体变量的各个成员,一般不能对结构体变量整体使用。·结构体变量名.成员名·如:stu1.num birthday.year如果成员本身又是一个结构体类型,则要用若干个成员运算符,一级一级找到最低一级的成员。·如:stu2.birthday.day对结构体变量的成员可以像普通变量一样进行各种运算。stu1.num++;类型定义在前,不分配内存,变量定义后,给变量分配一段连续的内存单元。结构体成员名可与程序中的其他变量同名,二者占不同的内存单元互不干扰。结构体数组:就是数组中的每一个元素都是一个结构体类型的变量。structPerson { charname[20]; intnum; }teacher[3]={“Li”,1,“Zhang”,2,“Sun”,3};指向结构体变量的指针:指向结构体对象的指针变量既可以指向结构体变量,也可以用来指向结构体数组中的元素。指向结构图变量的指针,其类型必须与结构体变量类型相同。structStudent*p;为了使用方便和直观,C语言允许把(*p).num用p->num来代替。结构体变量做函数参数:用结构体变量的成员作参数:例如,用stu[1].num或stu[2].name作函数实参,将实参值传给形参用结构体变量做参数:用结构体变量做实参时,将结构体变量所占的内存单元的内容全部按顺序传给形参,形参也必须是同类型的结构体变量。用指向结构体变量:指针做实参,将结构体变量的地址传给形参。八指针内存单元的地址称之为指针。变量A中存放变量B的地址,称A是B的指针,即A指向B.定义指针变量:Type*nametype可以时C语言中的任何一种类型。指针运算符:&一元运算符,返回变量的内存地址。*一元运算符,返回指针所指向变量的值。指针指向变量:Inta;Int*p;P=&a;指针赋值:与其他变量一样,指针变量也可以出现在赋值语句中,将一个指针变量的值赋给另一个指针变量。指针运算:+和-Int*p,当前p的值为2000,由于整型数占4个字节,p++的值将变成2004,p--值将变为1996.p每递增一次就指向下一个整形数,递减时也一样。指针比较:int*p=10,*q=20;if(p<q)…·比较的是两个指针所指向的内存地址的大小指针与数组:指针与数组是紧密相连的。一个变量有地址,一个数组包含若干个元素,每个元素都有相应地址,指针变量可以指向数组元素。Inta[10];数组名a其实就是一个地址值,记录的数组开始的地址,即a[0]地址。通过指针引用数组元素:(1)下标法,如a[i]形式(2)指针法,如*(a+i)或*(p+i)指针数组:指针可以像任何数据类型 一样构成数组。Int*x[10]定义的是一个包含10个整型指针的数组。Ex:要将变量a的地址给数组中的第三个元素。·x[2]=&a;·a的值为:*x[2]多级间指—指向指针的指针可以构造一个指针指向另一个指针,后者指向目标值。指针的初值:指针可以看作是一种特殊的变量类型,没有赋值的指针是一个随机值,而指针的指向错误会带来严重的错误。给一个指针赋初值null,将使这个指针为空,即哪也不指。动态内存分配:变量都是非静态的局部变量,系统将它们分配在内存中动态存储区中,这个存储区称之为栈区。C语言还允许用户建立自己的内存动态分配区,以存放一些临时用的数据,这些数据需要时可随时开辟内存空间,不需要时可随时释放内存空间。这些数据是临时存放在一个特别的自由存储区,称为堆区动态内存分配由库函数实现:malloc,calloc,realloc,free。包含在头文件#include<stdlib.h>中。Mallocvoid*malloc(unsignedintsize);其作用时内存的动态存储区中分配一个长度为size的连续空间。函数的返回值为所分配区域的第一个字节的地址,或者说,此函数是一个指针型函数 ,返回值的指针指向该分配域的开头位置。malloc(100);·开辟一个100字节的临时内存分配区,函数值为其第1个字节的地址·注意:函数返回的指针的基类型是void,即不指向任何类型的数据,只提供一个地址·如果此函数执行失败(如:内存空间不足),则函数返回空指针(NULL)Calloc·其函数原型为:void*calloc(unsignedn,unsignedsize);其作用实在内存中动态存储区连续分配n个长度为size的连续空间,这个空间一般比较大,足以保存一个数组。函数返回值指向所分配域起始位置的指针,如果分配不成功,返回NULLP=calloc(50,4);开辟50X4个字节的临时分配域,把起始位置赋给变量p。Free·其函数原型为:voidfree(void*p);其作用时释放变量p所指向的动态空间,使这部分空间释放后就能重新被其他变量所使用。p是调用calloc和malloc函数得到的返回值。free函数无返回值。Relloc·其函数原型为: void*realloc(void*p,unsignedintsize);对于已经用calloc或malloc分配好的内存空间,若想改变其大小,可以用realloc重新分配。realloc函数将p所指向的动态空间大小改变为size,若成功返回值为p,若分配不成功返回值为NULL。
本文档为【c语言基础知识】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
真诚文档交流
本人从事临床麻醉五年有余,工作兢兢业业,拥有丰富的临床麻醉经验及临床医学资料,并取得了助理医师资格。
格式:doc
大小:40KB
软件:Word
页数:36
分类:初中语文
上传时间:2020-02-15
浏览量:13