还剩10页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
C语言入门必需驾驭的75个学问点1C语言中整数默认为INT型两个整数相除(如1/2结果照旧是整数要得到带小数点的答案则要改成L0/22在C语言中,“二”是赋值运算符,表示把某个值赋给某个变量(X=0即把0值赋给X变量;“二”是关系运算符,表示“等于(X=0即X等于0,在编写C程序时要留意区分1个字节等于8位二进制(某整形数据依据2字节在内存中支配空间,即该数据对应的二进制形式是16位二进制;在ASCII码中,英文字母(不分大小写,英文标点占一个字节,中文汉字,中文标点占两个字节基本运算符的优先等级(PS:手机无法显示部分符号“!”than算术运算符(+/-Athan关系运算符than逻辑运算符than赋值运算符(二;要想从C菜鸟变成C老手,一些基本的优先等级是必需知道的(C运算符的优先等级详见附录C5关于putchar函数putchar函数即字符输出函数,表示向输出设备(显示器输出一个字符无论用户输作何种输入,函数都只会输出字符(putchar(65输出结果是“A”putchar(„65输出结果是“65”;putchar函数可以通过输出限制字符,让程序执行某种指令(putchar(\n«则程序会执行换行指令6教材在介绍格式符的章节里有不精确的地方(见P33d格式符,s格式符,f格式符的介绍里,“m”应是最少输出位数(书上的描述是“总位数”%md%ms%mf分别对应输出最少m位整型数据,m位字符串,m位浮点数,位数不足时左补空格7对于我们来说,C语言不仅是一门必修课现代人类生活中所用的儿乎每件电子和机械产品中都会集成有单片机,单片机的前同时遇到空字符为止同时遇到空字符时函数的返回值为0;遇到不同字符时,比较两个字符的ASCII值,当属于strl的那个字符的ASCII值较大时,函数的返回值大于0较小则函数返回值小于0o字符串copy函数strcpy(strlstr2该函数的作用是把某个字符串数组的内容复制到另外一个字符串数组中执行strcpy函数后,则strl中的内容变成str2中的内容运用时要保证字符串数组strl有确定的长度,足够容纳str2的内容(三个字符串函数的用法都比较简洁把握别把函数名记错就没问题了测试字符长度函数strlen(strl用于测试字符串的实际长度,其中不包括空字符,strl可以是字符串或字符数组(灵敏调用各种字符串处理函数能够实现很多不同的功能,希望大家能够娴熟驾驭58结构体和结构体变量的定义结构体的定义方式:struct结构体名{成员表;},成员表中的各个部分必需包括成员类型及成员名;结构体变量的定义方式:struct结构体名结构体变量结构体变量可以有多个各个变量之间用逗号间隔开来59结构体和结构体变量的定义(2共有三种方法1定义结构体再定义结构体变量;2定义结构体类型的同时定义结构体变量;3利用无结构体类型名定义变量(第一种和其次种比较常用,由于篇幅的限制,详细的定义形式详见教材P152——P153OPS:三种定义方法都有提及到结构体嵌套虽然篇幅很少,但也要留意一下60定义了结构体变量后,系统要为变量支配内存空间在内存中,结构体变量占有连续的一段内存空间结构体变量占用的一段连续内存空间二结构的各成员所占用的内存空间之和61结构体数组以结构体变量作为元素的数组即为结构体数组(PS:XX数组就是以XX变量作为元素的数组,和结构体变量的定义特殊相像结构体变量的定义方式有三种:先定义结构体再定义结构体数组;定义结构体类型的同时定义结构体数组;利用无结构体类型名定义结构体数组(同样由于篇幅限制,详细定义格式详见P15662字符串的输入和输出(1用scanf(和printf(进行输入和输出字符串时,双引号内应出现%S输入项处应放入字符串数组的数组名(如printf(u,strl其中strl是数组名,虽然输出的是strl的内容,但这种格式的输出只要放入数组名就可以了63用puts(和gets(来进行输入输出字符串时,要保证括号内的是单个字符数组名(是字符数组名,而不是字符串数组名另外,利用puts(函数进行字符串输出时,要保证括号内数组名对应的数组的末尾是一个空字符否则会出现惊异的输出结果64成员运算符“.”是成员运算符,在全部运算符中它的级别最高因此,在程序中的任何地方,“结构体变量名.成员名”都是整体出现的(也就是说,我们可以习惯地把“结构体变量名.成员名”看成一个整体结构体指针变量当一个指针变量用来指向一个结构体变量时,称之为结构体指针变量;结构体指针变量的声明struct结构体名*Pustruct结构体名”可视作一个类型说明符(intcharfloat这些就是类型说明符结构体指针变量的含义:假如p是一个结构体指针变量,则P指向一个具有结构体名对应的结构的结构体变量(如structstudent*p,此时p指向具有“student”结构的结构体变量指向运算符利用结构体指针引用结构体成员时,一般会用到指向运算符;指向运算符拥有最高的优先级别(和成员运算符是同一个优先级别的),结合方向从左到右;设SP是一个结构体指针,指向一个名为Stu结构体变量,则有如下对应关系*sp=Stu(*sp.(成员名二Stu.(成员名二sp-(成员名68动态链表的特点能够实现在程序运行的过程中开拓新的内存空间或者释放旧的内存空间;可以看作是由一条条链和一个个节点交替形成的链式结构,其中的节点就是结构体变量;后一节点的地址会存放在前一节点,则可以实现通过前一节点访问后一节点,这就是节点之间的关联,也就是节点的“链”69关于exit(函数exit()函数的作用是干脆终止程序,一般状况下括号里放的是0当程序执行到语句“exit(0;”时,程序就会终止执行70动态链表的建立(思路)
1.先建立一个表头,作为链表的首节点,作用是标记链表的位置,表头一般不用来储存数据;
2.利用malloc(函数建立新的节点,把节点的地址存在表头的链域;循环进行该步骤即可建立出随意长度的链表71共同体变量
1.定义共同体变量及定义结构体变量的方式极其相像,此处不作赘述,详见P174;
2.共同体变量的最大特点是能够自由更变更量的数据类型,我们可以把共同体变量理解成一个能够变换类型的变量72typedef语句作用是建立一个等效字符串,这个等效字符串能够代替某个类型说明符进行类型说明,简言之,typedef语句的作用是为某个类型说明符起别名;(例执行语句“typedefintAA;”后,“AA”能够代替int对变量进行类型声明,如AAx;)”73左移运算符属于双目运算符,格式是“变量名〈〈操作数”,操作数确定了变量移位的位数,变量移位后在右侧补074右移运算符属于双目运算符,格式是“变量名》〉操作数”,操作数确定了变量移位的位数,变量移位后,假如变量原来是负数则在最高位补1否则补075“字符串”表示的是字符串的首地址,字符表示字符的ASCII码景是很广袤的(有爱好的同学可以向老师询问或者上网了解,要设计出现代化的电子产品无疑要懂得用单片机单片机的运行全靠程序,不把程序设计学好如何谈得上运用所以,盼望各位能够重视C语言这门课程8定义变量时不能运用赋值语句inti=j=k=O;这种定义方法有误要正确定义变量并对变量进行初始化则应修改成“inti=Oj=Ok=O;(顺带提示一下每个语句的结尾都应该添上“;”9关于if语句“if(”括号里面输入的数据或表达式是其判定条件,只要数据或表达式对应的值非零,便会执行if语句之后的语句反之不执行(如语句“if(a=O”详细是把0值赋给a,括号里的数值是0则不执行if语句之后的内容10基础学问巩固结构化程序设计的三种基本结构:依次结构,选择结构,循环结构;算法的4种表示方式自然语言,伪码,流程图,N-S图对于一些基础的C语言学问最好能够做到心中有数不仅是为了巩固基础这些内容以后考试也会涉及到的11强制类型转换运用强制转换运算符可以实现对变量的数据类型进行转换,强制转换运算符的格式为“(类型名,如(int是其中一种强制转换运算符(intx+y只对变量x进行强制转换;(int(x+y对x+y的值进行强制转换12条件运算符运算优先等级低于关系运算符,高于赋值运算符条件运算符的结合性是自右至左,运用时有以下技巧:第一个条件运算符的“”后面的内容加上括号(手机无法正常显示例子详见P46中条件运算符的介绍13利用关系运算符对字符和数据进行比较时要先将字符转换成对应的ASCII值如“if(A=65,要先将A转换成对应的ASCII值(65,再和65进行比较14continue语句和break语句的运用continue语句的作用只是跳过该次循环转而进入下一次循环条件的推断并不会中止整个循环;break语句只能用在switch语句和循环体内,在循环体内的作用是干脆终止整个循环体不再进行任何循环条件推断和执行循环体内的语句15对于无符号变量二进制的最高位代表数据的最高位;对于有符号变量二进制的最高位数代表数据的符号位仅用来确定数据是正数还是负数在进行反码,补码运算时不参及运算16运用case语句时确定要在case后面加空格(如“case1,否则系统会把case及常量表达式一同识别为一个标识符(如“easel,是一个标识符;case后面确定要是一个常量表达式,不能是关系表达式或者别的表达式常量表达式必需的〜17字符及字符,字符及数据均可以通过关系表达式进行比较进行比较吐字符先转换成对应的ASCII值(if(A〉B先把AB分别转换成6566;if(65B先把B转换成6618逻辑运算符“非”(“!”书上说的原值取反并非取相反数逻辑“非”的运算法则中,“取反”是“取反义值”对非0值取0(如“!2”等于0代表“假”,对0取非0值(如“!0”等于1代表“真”;凡是非0值都能代表“真”,C语言中的“真”默认用数值“1”来表示(即当运算结果为“真”时对应的数值是119循环结构中要让变量进行自增或自减时,既可以运用前缀自增自减(如++i—i也可以运用后缀自增自减(如i++i—互换两种增减方式对循环结构不造成影响,编写C程序时可依据自己的个人习惯进行选择(由于自增自减在循环结构中一般是独立语句,所以可以互换20编译器在求解逻辑表达式的值时,接受“非完全求解”的方法并不是所以的逻辑运算符都被执行,只有在须要执行下一个逻辑运算才能求出表达式的解时,才接着运算(如“023”,0代表假,后两个表达式不必推断运算立即终止goto语句goto语句的作用是无条件转向“语句标号”处执行(如“ibm:x=a”中,“ibm:即为“语句标号”;“语句标号”仅仅对goto语句有效,“语句标号”后面的语句在程序中照样会执行,也就是说“语句标号”不影响其后语句的执行,只是一个标记;因为无条件转向使程序结构无规律,可读性差一般应避开运用goto语句,除非它能大幅提高程序的执行效率1猛烈建议大家在写困难程序之前先把算法写出来!!!!!!(一般来说接受流程图来写算法比较便利2while语句条件符合时执行语句,直到不符合条件;do-while语句先执行语句,再进行判定,条件符合时接着执行语句两种“while”语句要视实际状况来运用23用printf来输出浮点型数据时,一般格式为【printf(%f”浮点型变量或浮点型常量】,系统默认输出的浮点数有6位小数假如须要增加或削减输出的小数位数可以利用格式【printf(%.nf”浮点型变量或浮点型常量】,其中的n表示了输出的浮点数的小数位数(PS:用格式【printf(%lf浮点型变量或浮点型常量】无法变更小数位数24假如被调函数的返回值是整型或字符型,可以不对被调函数进行声明,而干脆调用这时,系统将自动对被调函数的返回值按整形处理也就是说,在没有对函数返回值进行定义的状况下,系统默认为整型量25关于无参函数般状况下无参函数没有返回值,此时函数类型标识符可以写为void向系统表明该函数将不会返回任何值此外须要说明的是假如要定义带返回值的无参函数,也是可以的无参函数也可以有返回值,不过一般状况下让它有返回值也没多大意义26形参变量只有在函数被调用时才支配内存单元,在调用结束时,便会释放所支配的内存单元因此,形参只在本函数内部有效,函数调用结束返回主调函数后则不能再运用该形参变量了也就是说形参变量在运用过后便会“消逝”27关于函数参数把某个函数A作为另一个函数B的实际参数时,必需保证A函数有返回值【如sqrtsumabsum函数必需有返回值】;假如在A函数内,B函数和C函数同时充当A函数的实际参数则依据自右向左的依次求值当求值依次会影响函数结果时就要留意这一点【如printf%d%d”sumabsqrtc先计算sqrt函数的值】28“void”是其中一个C语言关键字,用来对函数类型进行声明,表明函数不会有返回值;被“void”声明白的函数不能用来给变量赋值,因为函数是没有值的29主函数放最终的话,可以不用进行函数声明如“voidfunlong,是一个函数声明;假如主函数不是放在最终,要保证全部函数在main函数出现之前已经声明白函数类型和形参变量类型30初学者编写函数时的常见错误I函数体的花括弧或复合语句的花括弧不配对;II调用函数时,实参及形参在个数,类型以及依次上不匹配;III调用库函数时遗忘#include语句,调用自定义函数时遗忘进行函数声明(其中第三点是最常见的错误,记得调用库函数时要加头文件31主函数中定义的变量只能在主函数中运用,不能在其他函数中运用同时,主函数中也不能运用其他函数中定义的变量主函数也是一个函数,虽然被称作“主函数”,但实际上它及其他函数是平行关系,应予以留意32关于全局变量
1.它不属于哪一个函数,它属于一个源程序文件;
2.其作用域是整个源程序(在哪个函数哪个复合语句中都能取用;
3.全部全局变量的储存位置都是静态储存区33全局函数建议尽量少用,缘由
1.全局变量在程序的全部执行过程中都占用着存储单元;
2.降低函数的独立性,继而降低程序的牢靠性,同时也不利于将来程序的移植(最主要的缘由,用太多的全局变量会导致函数移植后难以独立运用;
3.运用过多的全局变量,会使程序的可读性降低人们往往难以明确推断各个时刻各变量的取值34关于自动变量(aut函数中的局部变量如不特地声明为static存储类别,都是动态地支配存储空间的,数据存储在动态存储区中,函数中的形参变量和在函数中定义的局部变量(包括在复合语句中定义的变量都属此类在调用这种函数时系统会自动给他们支配空间,在函数调用结束时将自动释放这些空间(最大的特点是函数调用完毕后会“消逝”35^include文件包含指令,一个include叮嘱只能指定一个被包含文件(也就是说,要包含多个文件,则须要用多个include叮嘱;文件包含允许嵌套,即在一个被包含的文件中还可以包含另一个文件36寄存器变量为了提高效率,C语言允许将频繁运用的局部变量的值存放到CPU的寄存器中,这种变量成为“寄存器变量”,用关键字register来声明;会“消逝”的变量才可以作为寄存器变量(如局部自动变量,形参变量;寄存器变量的数目是有限的不能随意定义37静态局部变量静态局部变量储存在静态储存区;假如不给静态局部变量赋初值,则系统自动赋其0值;静态局部变量只能进行一次初始化(即赋初值,如“intx=0”38关于无参数宏-——无参数宏可以用来替代常数和表达式;无参数宏的定义必需在函数外,作用域为自宏定义叮嘱起到源程序结束(定义之后就能用到最终;宏定义后面不用加分号关于带参数宏带参数宏在进行替换时,保留函数中的实参(可以理解成把宏替换掉后再将实参“放回去”;定义带参数宏时,为了避开程序在执行过程中出现副作用,需要加两重括号:第一重括号加在形参上,其次重括号加在整个字符串上(如“ttdefineM(x((x*(x”关于指针型变量指针型变量只能存放变量的地址,赋值时只能赐予地址;未经赋值的指针变量不能运用(有可能导致死机;定义指针时的类型说明符:表示了指针型变量指向的变量的数据类型(可记成“指向类型”数组和指针型变量的联系数组名是一个地址,可以把数组名赐予指针型变量(假设p是指针型变量,执行语句“p二a”后,P指向数组a的第一个元素a
[0];若已经把数组名赐予指针型变量,则指针型变量可以通过加减运算变更其对数组a的指向(执行语句p二a;p=p+2;“后,p指向数组a的第三个元素a
[2]o指针变量的初始化指针变量必需进行初始化才能运用,一般格式有两种,一种是同时进行类型说明和赋值(如int*p=x;,一种是把类型说明和赋值分开进行(如int*p;p=x;,初始化必需包括类型说明和赋值43指针运算符符号为“,作用是返回一个指针所指向的对象的值(如“int*p=x;i=*p;,语句“i二*p;在执行时先执行指针运算符,把P指向的变量x的值调出来,然后把该值赋给变量i44对指针变量进行赋值定义两个指针变量plp2“int*pl=x*p2=y”当执行语句“pl=p2”时,p2的值对应的是y的地址,把该值赐予pl则此时pl的值也会变成y的地址;当执行语句“*pl二*p2”时,p2指向的变量y的值会被赐予pl指向的变量xo45假如要把指针变量p指向数组a的第一个元素,可以运用下面的语句“P二或“p=a;”两种赋值方式是完全等效的(这里的“a”就是a
[0]的地址46关于空指针空指针不同于未赋值的指针变量,空指针可以运用而未赋值的指针变量不能;空指针不指向任何变量对应的值是0(假设P是一个空指针,则有p==0o47二维数组的两种赋值设p是指针变量a是一个二维数组,运行语句“p二a”后P指向二维数组的第一行;运行语句“p=a
[0]”后,p指向二维数组的第一行第一个元素a
[0]
[0]o48二维数组行指针和列指针假设[j]是一个二维数组,则“a+m”指向二维数组的第m行,是一个行指针;*(a+m是一个列指针,指向第m行第0歹U(限制由行转为列,但仍为指针;*(*(a+m是数组元素a[n)]
[0]的值函数中的指针变量函数中的指针变量用来对主函数中的变量进行运算,这是指针变量在函数中的重要应用;关于数组名数组名是数组第一个元素的首地址它不是一个变量不能对其数值进行更改;调用形参为指针类型的函数时,留意要保证函数内新增加的指针变量已经进行定义和初始化并且要在运行程序之前做好检查确保调用函数时没有对无关地址的内容进行修改这样便能避开严峻后果的发生(运用指针进行编程的确须要当心谨慎字符串及其操作对字符变量进行赋值时运用的必需是一对单引号,运用双引号来赋值属于非法操作;C语言中空字符用«\0«来标识此处的《\0«事实上是指八进制的0o52指向指针的指针指针变量也有自己对应的地址,这个地址储存的是指针变量的值(具体为另外某个变量的地址;可以把指针变量(假设是P1的地址值赐予另外一个指针变量(假设是P2,则此时P2指向PlP2是一个指向指针的指针53关于字符数组字符型及整型相互通用,因此inta[i]也可以定义为字符数组但两种类型支配的字节不同,用整型来定义会奢侈空间,另外这样定义的实际意义也不大这里只是为了说明其合法性(不知道考试会不会涉及到这种内容所以给大家提点一下54字符串连接函数strcat(用于把两个字符串连接在一起,组成一个字符串用法如下strcat(strlstr2其中strl和str2是两个字符串,该函数把str2连接在strl中的字符串后面,并删除原来strl后面的空字符运用该函数须保证strl能够储存连接后的长字符串55字符串比较函数strcmp(strlstr2依据字符的ASCII值对两个字符串自左向右逐个字符比较大小直到遇到不同字符或。