C程序设计复习知识点总结_第1页
C程序设计复习知识点总结_第2页
C程序设计复习知识点总结_第3页
C程序设计复习知识点总结_第4页
C程序设计复习知识点总结_第5页
已阅读5页,还剩7页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C程序设计复习知识点总结一、C语言基础核心(必背)1.1C语言概述C语言是面向过程的结构化编程语言,简洁、高效、可移植,适合编写系统软件和应用程序,是后续学习其他编程语言(如C++、Java)的基础。C程序的执行流程:编辑(编写代码,后缀为.c)→编译(通过编译器将.c文件转为.obj目标文件)→链接(将.obj文件与库文件结合,生成.exe可执行文件)→运行。核心特点:语法简洁、运算符丰富、数据类型多样、可直接操作内存、生成的目标代码高效、移植性好(需注意不同编译器的细微差异)。1.2基本数据类型与常量、变量(1)基本数据类型(3类核心)整型(int):用于存储整数,默认是有符号(signed),取值范围随编译器(32位/64位)不同,通常为-2³¹~2³¹-1(4字节);无符号整型(unsignedint)取值范围0~2³²-1。实型(浮点型):分为单精度(float,4字节,有效数字6~7位)和双精度(double,8字节,有效数字15~16位),用于存储小数或精度要求较高的数值,注意浮点数存在精度误差,不可直接用==判断相等。字符型(char):用于存储单个字符(如'a'、'1'),本质是ASCII码值(1字节),signedchar取值范围-128~127,unsignedchar取值范围0~255。(2)常量常量是程序运行中值不可改变的量,分为4类:整型常量:如123、-456、0(十进制)、0123(八进制,以0开头)、0x123(十六进制,以0x开头)。实型常量:如3.14、-5.6(小数形式)、3.14e5(科学计数法,即3.14×10⁵)。字符常量:用单引号包裹,如'a'、'0',注意与字符串常量区分(单引号vs双引号)。符号常量:用#define定义,格式为#define常量名常量值(无分号),如#definePI3.14159,作用是提高代码可读性和可维护性。(3)变量定义:变量是程序运行中值可改变的量,定义格式为“数据类型变量名;”,如inta;floatb;charc;。初始化:定义时赋值,如inta=10;charc='A';,未初始化的局部变量值是随机的,全局变量默认初始化为0。变量命名规则:由字母、数字、下划线组成,不能以数字开头,区分大小写(如a和A是两个不同变量),不能使用C语言关键字(如int、if、for等)。1.3运算符与表达式(1)优先级与结合性优先级:括号(())>单目运算符(++、--、!等)>算术运算符(*、/、%>+、-)>关系运算符(>、<、==等)>逻辑运算符(&&>||)>赋值运算符(=、+=等)>逗号运算符(,)。结合性:大部分运算符从左到右(如a+b+c),单目运算符、赋值运算符从右到左(如a=b=5;先执行b=5,再执行a=b)。(2)核心运算符详解算术运算符:+(加)、-(减)、*(乘)、/(除)、%(取余)。注意:整数除法结果取整(如5/2=2,不是2.5);%仅适用于整型,且余数符号与被除数一致(如-5%2=-1)。自增自减运算符:++(自增1)、--(自减1)。前置(++a):先自增,再使用;后置(a++):先使用,再自增(如inta=3;printf("%d",a++);输出3,a变为4)。关系运算符:>、<、>=、<=、==(等于)、!=(不等于),结果是逻辑值(1代表真,0代表假)。注意:==不能误写为=(赋值运算符),否则会导致逻辑错误。逻辑运算符:!(非,真变假,假变真)、&&(与,两边都真才为真)、||(或,两边有一个真就为真)。短路特性:&&左边为假时,右边不执行;||左边为真时,右边不执行(如3>5&&a++,a不会自增)。赋值运算符:=(赋值)、+=(a+=b等价于a=a+b)、-=、*=、/=、%=,简化代码书写。(3)表达式由运算符和操作数组成,如a+b*c、(a>b)&&(c!=0),表达式执行后会产生一个结果(值或逻辑值)。二、C语言流程控制(考点重点)2.1顺序结构最基础的流程结构,程序从main函数开始,自上而下依次执行每一条语句,没有分支、没有循环,如变量定义、赋值、简单输出等。示例:inta=10;intb=20;intc=a+b;printf("%d",c);//依次执行,输出30。2.2选择结构(分支结构)(1)if语句(3种形式)单分支:if(条件表达式){语句块;}——条件为真,执行语句块;为假,跳过。双分支:if(条件表达式){语句块1;}else{语句块2;}——条件为真执行语句块1,否则执行语句块2。多分支:if(条件1){语句1;}elseif(条件2){语句2;}...else{语句n;}——依次判断条件,满足哪个就执行对应语句,都不满足执行else语句。(2)switch语句用于多分支选择,适用于条件表达式为整型或字符型的场景,格式如下:c

switch(表达式){

case常量1:语句1;break;

case常量2:语句2;break;

...

default:语句n;break;//所有case都不匹配时执行

}注意:case后的常量必须是不同的整型/字符型常量,不能是变量或表达式;break的作用是跳出switch语句,若省略break,会继续执行下一个case的语句(穿透现象)。default可放在任意位置,不影响执行逻辑,建议放在最后。2.3循环结构(1)for循环(最常用)格式:for(初始化表达式;条件表达式;更新表达式){循环体;}执行流程:初始化表达式→判断条件表达式(真则执行循环体,假则退出循环)→执行更新表达式→再次判断条件,重复上述过程。示例:for(inti=1;i<=10;i++){printf("%d",i);}//输出1~10。注意:初始化表达式可省略(需在循环外定义变量),条件表达式省略则视为真(无限循环),更新表达式可省略(需在循环体内更新变量)。(2)while循环格式:while(条件表达式){循环体;}执行流程:先判断条件表达式,若为真,执行循环体,重复判断;若为假,退出循环。注意:循环体内必须有更新变量的语句(如i++),否则会导致无限循环。(3)do-while循环格式:do{循环体;}while(条件表达式);执行流程:先执行一次循环体,再判断条件表达式,若为真,继续执行循环体;若为假,退出循环。特点:无论条件是否为真,循环体至少执行一次(区别于for和while循环)。(4)循环控制语句break:跳出当前循环(或switch语句),不再执行循环体内剩余语句,也不再进行下一次循环判断。continue:跳过当前循环体内剩余语句,直接进入下一次循环判断(不跳出循环)。三、数组(重点+难点)3.1数组的定义与初始化(1)定义格式:数据类型数组名[数组长度];,如intarr[5];(定义一个长度为5的整型数组,存储5个int类型数据)。数组长度必须是常量(不能是变量),如intn=5;intarr[n];是错误的(C99标准支持变长数组,但考试中通常不允许)。数组下标从0开始(如arr[0]是第一个元素,arr[4]是长度为5的数组的最后一个元素),下标越界(如arr[5])会导致程序崩溃或数据异常(未定义行为)。(2)初始化完全初始化:intarr[5]={1,2,3,4,5};//每个元素都赋值。部分初始化:intarr[5]={1,2};//前2个元素赋值为1、2,剩余元素默认初始化为0。省略长度初始化:intarr[]={1,2,3,4,5};//编译器自动根据初始化元素个数确定数组长度为5。字符数组初始化:charstr[5]={'a','b','c'};或charstr[]="abc";(注意:字符串初始化会自动在末尾添加'\0'作为结束标志,占用一个字节,如"abc"实际占用4个字节)。3.2数组的使用访问数组元素:通过下标访问,如arr[i](i为下标,范围0~长度-1),可用于赋值、输出等操作。数组遍历:通常用for循环遍历数组,如for(inti=0;i<5;i++){printf("%d",arr[i]);}。字符数组与字符串:字符数组可存储字符串,常用字符串处理函数(需包含头文件<string.h>):

strlen(str):计算字符串长度(不包含'\0'),如strlen("abc")=3。strcpy(str1,str2):将str2复制到str1中(注意str1的长度要足够,否则会溢出)。strcmp(str1,str2):比较两个字符串,相等返回0,str1>str2返回正数,str1<str2返回负数。strcat(str1,str2):将str2拼接在str1末尾(注意str1长度足够)。3.3二维数组(拓展重点)定义:数据类型数组名[行长度][列长度];,如intarr[3][4];(3行4列,共12个元素)。初始化:intarr[3][4]={{1,2},{3,4,5},{6}};//按行初始化,未赋值元素默认0;也可省略行长度,如intarr[][4]={1,2,3,4,5,6};(编译器自动计算行数为2)。访问:arr[i][j](i为行下标,j为列下标,均从0开始),遍历通常用双重for循环(外层控制行,内层控制列)。四、函数(核心考点)4.1函数的定义与声明(1)函数定义格式:返回值类型函数名(参数列表){函数体;return返回值;}返回值类型:函数执行后返回的数据类型,若没有返回值,用void表示(此时return可省略);若有返回值,return后的值类型需与返回值类型一致。参数列表:函数接收的输入数据,格式为“数据类型参数名1,数据类型参数名2,...”,无参数时写void(可省略)。函数体:函数的核心逻辑,包含一系列语句。示例:intadd(inta,intb){intc=a+b;returnc;}//定义一个加法函数,接收两个int参数,返回它们的和。(2)函数声明作用:告诉编译器函数的返回值类型、函数名和参数列表,便于编译器检查调用的合法性,格式与函数定义的头部一致,末尾加分号。位置:通常放在main函数之前,或包含在头文件中。示例:intadd(inta,intb);//函数声明,与上面的add函数定义对应。4.2函数调用格式:函数名(实参列表);,实参的个数、类型需与形参(函数定义中的参数)一致,顺序对应。示例:intx=3,y=5;intsum=add(x,y);//调用add函数,x、y是实参,sum接收函数返回值。注意:函数调用时,实参向形参传递的是“值传递”——形参是实参的副本,修改形参的值不会影响实参的值(如在add函数中修改a的值,x的值不会变)。4.3函数的分类按返回值分:有返回值函数(如add函数)、无返回值函数(void类型)。按参数分:有参函数(如add函数)、无参函数(如voidprint(){printf("hello");})。按作用域分:库函数(C语言自带,如printf、scanf、strlen等,需包含对应头文件)、自定义函数(用户自己定义的函数)。4.4递归函数(难点)定义:函数自身调用自身,称为递归,需满足两个条件:①递归终止条件(避免无限递归);②递归递推公式(将大问题分解为小问题)。示例:求n的阶乘(n!=n×(n-1)×...×1):注意:递归深度不宜过深,否则会导致栈溢出(栈内存有限),可通过迭代(循环)替代部分递归场景。五、指针(难点+高频考点)5.1指针的基本概念指针的本质:变量,用于存储内存地址(内存单元的编号),通过指针可以间接访问内存中的数据。指针定义:格式为“数据类型*指针名;”,如int*p;(定义一个指向int类型数据的指针p)、char*str;(指向char类型数据的指针)。关键符号:

&:取地址符,&a表示变量a的内存地址。*:解引用符,*p表示指针p所指向的内存单元中的数据(即p存储的地址对应的变量值)。示例:inta=10;int*p=&a;//p存储a的地址,*p=10(等于a的值),修改*p会直接修改a的值(如*p=20,a的值也变为20)。5.2指针与数组数组名的本质:数组名是数组首元素的地址(常量,不能修改),如intarr[5];arr等价于&arr[0]。指针访问数组元素:int*p=arr;则*p=arr[0],*(p+1)=arr[1],*(p+i)=arr[i](i为下标),遍历数组可通过指针自增实现(p++)。注意:指针p可以自增(p++),但数组名arr不能自增(arr++是错误的,因为arr是常量)。5.3指针与函数指针作为函数参数:解决“值传递”无法修改实参的问题,将实参的地址传递给形参(指针),通过解引用修改实参的值。示例:交换两个变量的值:指针作为函数返回值:函数可以返回一个指针(地址),但不能返回局部变量的地址(局部变量在函数执行结束后会释放,地址失效)。六、结构体(拓展重点)6.1结构体的定义结构体用于存储不同类型的数据(如一个学生的姓名、年龄、成绩),定义格式:c

struct结构体名{

数据类型成员名1;

数据类型成员名2;

...

};

//示例:定义学生结构体

structStudent{

charname[20];//姓名

intage;//年龄

floatscore;//成绩

};6.2结构体变量的定义与使用定义:struct结构体名变量名;,如structStudentstu;。赋值与访问:通过“变量名.成员名”访问,如stu.age=18;strcpy(,"ZhangSan");stu.score=95.5;。初始化:structStudentstu={"ZhangSan",18,95.5};。6.3结构体指针定义:struct结构体名*指针名;,如structStudent*p=&stu;。访问成员:通过“指针名->成员名”访问(等价于(*指针名).成员名),如p->age=19;printf("%s",p->name);。七、常见输入输出与头文件7.1核心头文件<stdio.h>:标准输入输出头文件,包含printf、scanf等函数。<string.h>:字符串处理头文件,包含strlen、strcpy、strcmp等函数。<math.h>:数学函数头文件,包含sqrt(开平方)、pow(幂运算)、sin(正弦)等函数,使用时需在编译时加-lm(如gcctest.c-otest-lm)。7.2输入函数scanf格式:scanf("格式控制符",&变量名);,用于从键盘输入数据,注意变量名前必须加&(取地址)。格式控制符:%d(整型)、%f(float)、%lf(double)、%c(字符)、%s(字符串)。示例:scanf("%d%f",&a,&b);//输入一个整数和一个浮点数,用空格、回车或制表符分隔。注

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论