




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言复习纲要题型:选择、程序填空、写出运行结果、程序改错、编程代码风格:一行写一条;定义同时初始化;花括号各占一行;if,for,while,do各占一行;分支循环用大括号;梯形书写。第一部分:数据类型、运算符与表达式(基础)1. 函数是C程序的基本单位,即C程序是由函数构成的;函数由函数首部(返回值类型、函数名、形参类型、形参名)和函数体构成;书写格式与规则(分号结束,不限制语句与行数的关系,合理的注释)2. 常见符号:关键字(C语言中预先规定的具有固定含义的单词,int,return);标示符(系统预定义标示符,main,scanf,printf,不提倡重新定义;用户自定义标示符,函数名Add,变量名x,y,sum);运算符(算数、关系、逻辑、赋值、增减1、条件、强制类型转换、指针和地址、计算字节数、下标、结构体成员、位、逗号);分隔符(空格、回车、逗号);其他符号;数据(变量和常量)3. 为什么引入数据类型:不同类型的数据在数据表示形式、合法的取值范围、占用内存储器的空间大小、可以参与的运算种类等方面有所不同。4. 标示符命名规则:字母数字下划线,字母或下划线开头;不和关键字和库函数名重复;长度有限制;见名知意;明明风格;不要仅依靠大小写区分。5. 整型常量,实型常量,字符常量(可打印字符和转义字符),字符串常量,宏常量,枚举常量6. 变量: 声明与初始化:所有变量必须在第一条可执行语句前声明,不赋值是随机值,多个变量一一赋初值类型关键字 变量名1,变量名2;类型关键字 变量名1=常量1,变量名2=常量2; Const修饰符:确保标示符不被任何程序修改,和宏常量比有数据类型 使用原则:先定义,后使用;用sizeof获得长度最保险;一个char型变量既能以字符格式输出,也能以整形格式输出(ASCII码)7. 运算符的优先级和结合性:先按优先级,同级的看结合性。8. 算术运算符:两个整数相除结果还是整数;两个整数才能求余;标准数学函数 #include ;只能用圆括号9. 关系运算符:比较运算,结果为真假(非0为真,0为假), =优先级高于= !=10. 逻辑运算符:非(!)与(&)或(|),结果只有真假。11. 赋值运算符:优先级低,右结合,复合赋值运算符:变量 二元运算符 = 表达式 相当于 变量=变量 二元运算符 表达式12. 增1和减1运算符:在前先运算后取值,在后先取值后运算。右结合。13. 强制转换运算符:(类型)表达式,注意改变的部分,类型必须有括号。14. 逗号运算符:实现对各个表达式的顺序求值,并将最后一个表达式的值作为整个逗号表达式的值。主要用在循环语句中,同时对多个变量作用。15. 赋值和表达式中的类型转换:表达式中混有不同类型的常量及变量,则他们全都要先转换成同一类型,把所有操作数都转换成占内存字节数最大的操作数类型,成为类型提升。第二部分:简单的C程序设计(基础)1. 表达式语句:表达式后接一个分号,如函数调用语句和赋值表达式语句。2. 复合语句和空语句:用花括号括起来的语句为复合语句(块语句);为设计完成的模块中放空语句等填充。3. 输入输出函数库:#include 字符输入输出:变量 = getchar(); putchar(变量); 读走回车及其之前的所有无用字符:while (getchar()!=n);4. 格式输入输出:printf( 格式控制字符串 , 输出值参数表 ); 参数表可以是变量或表达式,%才可以输出%,P55格式转换说明符表,P58格式修饰符表。scanf( 格式控制字符串 , 参数地址表 ); 需要取地址&,成功调用时返回值为成功赋值的数据项数,出错时返回EOF(-1),可使用修饰符(最小域宽、精度、左对齐),P57格式转换说明符表,P59格式修饰符表。5. 使用scanf需要注意的问题:引号里面的部分要求原样输入,忽略修饰符(”%d%*c%d”),%c在读入字符时空格和转义字符会作为有效字符输入(可用%1s完全忽略空格和回车,但是可能溢出,所以char改用short int;用getchar读入缓冲区字符;在%c前面加空格),用调用返回值的方法检查非法输入。*与printf不同不能用长度等修饰符。第三部分:程序的控制结构(重点)1. 算法的描述方法:自然语言描述,流程图描述,NS结构化流程图描述,伪码描述。2. 顺序结构:编译预处理命令:#include,到系统子目录寻找;”先搜索当前子目录,之后再搜索系统子目录。3. 选择结构:(条件判断用10=a更好,若写成=会提示错误)1 if ( 表达式 ) 可执行语句A2 if ( 表达式 ) 可执行语句1else 可执行语句23 if ( 表达式1 ) 可执行语句1 (推荐)else if ( 表达式2 ) 可行性语句2else if ( 表达式m ) 可执行语句melse 可执行语句m+1*if 和 else 后用大括号括起来。4 条件运算符:表达式1?表达式2:表达式3 (真2假3)5 开关语句:switch ( 表达式 )case 常量1:可执行语句序列1case 常量2:可执行语句序列2case 常量n:可执行语句序列ndefault:可执行语句序列n+1括号内表达式一般为整型、字符型、枚举型。语句序列省略不写则与下一个case相同。切记break。4. 循环结构1 while 语句while ( 表达式 )可执行语句序列2 do-while 语句do可执行语句序列while( 表达式 );3 for 语句for ( 表达式1;表达式2;表达式3 )可执行语句序列(其中,表达式1初始化循环控制变量,表达式2是判断条件,表达式3是循环变量增值)5. 小算法:取a, a+b-1的随机数 rand(0)%b+a; 用时钟值作为随机种子:#include srand(time(NULL); magic=rand()%b+a;6. 嵌套循环:输出表格、暴力求解方程组(穷尽所有的可能)7. 流程的转移控制:1 goto 语句标号; (转向的目标位置应使用标识符表示)2 break; (循环立即终止,从循环语句后的地一条语句开始执行)3 continue; (跳过未执行的语句直接开始下一次循环)4 exit(code); (code为0或EXIT_SUCCESS时表示正常退出)8. getch() 和 getche() (#include ,TC中特有的函数库。在击键后立即返回,不需要回车,前者不显示输入的字符,后者显示)*通用:在%c前面加空格第四部分:函数(重点)1. 函数需要在main之前先声明(函数定义),推荐写在main之后(函数原型声明),形式要保持一致。2. 函数的定义:返回值类型 函数名(类型 参数1,类型 参数2,)局部变量声明语句可执行语句序列函数必须被main直接或简洁调用才能发挥作用。不需要参数和返回值时一律用void标明。3. 函数的接口说明:/*函数功能:函数入口参数:函数返回值:*/4. 变量的作用域规则:每个变量仅在定义它的语句块(包含下级语句块)内有效,并且拥有自己的内存空间。全局变量:和局部变量相对,在程序所有的位置均有效。从运行直到退出都占用内存,自动初始化为零。当在某作用域中和局部变量重名,局部变量起作用。5. 变量的存贮类型:自动变量(所有的局部变量 auto 类型名 变量名;)、寄存器变量(编译器能自动优化程序 register 类型名 变量名;)、静态变量(仅在语句块内有效,但直到程序完全退出才释放,自动初始化为0 static 类型名 变量名;)、外部变量(extern 类型名 变量名;)6. 预处理指令:以“#”开头。#include(源代码包含指令)、#define(宏定义指令)、#undef(取消宏定义)7. 条件编译实例:用assert()查错。(P181)8. 模块化程序设计:一般每一个模块是一个扩展名为.c 的源文件和扩展名为.h 的头文件的组合。模块间通过调用函数和共享全局变量联系。功能分解:自顶向下、逐步求精。模块划分原则:高聚合、低耦合、(功能单一)、信息隐藏。9. 递归函数:一个对象部分地由它自己组成或按它自己定义,则称它是递归的。递归函数中必须有if,一个给数据的开头赋值,另一个则是递推公式。例如计算阶乘的递归函数:long fact ( long n )if(n0)return -1;else if(n=0|n=1)return 1;elsereturn (n*fact(n-1);第五部分:数组(重点)1. 数组的定义:类型 数组名下标1下标2下标n;用一个统一的名字标识一组数据(数组名是数组的首地址),元素必须有相同的数组类型,下标个数为数组的维数,数组的下标都是从0开始的。2. C语言中不允许用变量下标形式对数组进行动态定义。最好使用宏定义。3. 数组不能整体引用,每次只能引用一个元素。4. 下标越界会引起严重的问题。5. 数组的初始化:类型 数组名XY=a,b,c; (按元素初始化)类型 数组名XY=a1,b1,a2,b2; (按行初始化)6. 排序算法:交换法排序:若满足立即交换,效率较低。(P205)选择法排序:找出余下中的最值与本位交换,每比较一轮只做一次交换。(P212)7. 数组名作为函数参数:函数接收数组的首地址,所以函数可以直接改变数组的值而不需要返回值。最好同时用一个参数传递数组的长度。二维数组也只写数组名。8. 查找算法:顺序查找算法:一个一个核对直到找到为止。(P214)折半查找算法:假设数据信息已经按关键字升或降序排列,然后使用二分法。(P216)9. 字符数组:一个字符型一位数组并不一定是一个字符串,只有当字符型一位数组的最后一个元素值为0时,它才构成字符串。10. 字符数组的初始化:char str=C,h,i,n,a,0;(0和0等价) char str=“China”;二维字符数组,只写一个下标代表其中的一行,即一个字符串(若有0结尾的话)。11. 字符数组的输入输出:按字符输出,按字符串输出 scanf(“%s”,str); printf(“%s”,str); gets(str); puts(str); gets和puts只能输入字符,参数只能用数组,只识别回车作为结束。12. 字符处理函数:#include 求长度:strlen(字符串); 不包括0字符串复制:strcpy(字符数组1,字符数组2); 字符串比较:strcmp(字符数组1,字符数组2);字符串连接:strcat(字符数组1,字符数组2); 把2接到1的后面第六部分:指针(难点)1. 地址:变量在内存中所占存储空间的首地址;内容:变量在内存的存储单元中存放的数据。直接寻址(按变量名),间接寻址(按指针)。2. &:取变量的地址;*:取指针的内容。3. 指针变量的定义(同时初始化):类型关键字 *指针变量名(=&a);一般定义时,用*p=NULL 让它逻辑上无效 指针变量的内容只能是地址;指针变量必须经初始化后才能使用;只能参与赋值、加减、关系运算,其中加减的该变量取决于指针的基类型,n*sizeof(基类型)4. 字符指针:char *ptr(=”China”); 字符数组赋值的时候必须使用字符处理函数,而字符指针可以使用ptr=”China”;5. 指针和数组之间的关系:ai被编译程序解释为*(a+i)指针变量增1运算引用数组元素效率最高6. 插入算法:确定位置,从此处往后退一格,插入。7. 二维数组的地址和指针(重点):aij *(ai+j) *(*(a+i)+j) (*(a+i)j 均表示一个元素;ai表示一行的首地址。行指针: 类型关键字 (*行指针名)常量N; N是一维数组的长度,不可省略,不可以用变量。 初始化:p = a; p = &a0;引用方式:pij *(pi+j) *(*(p+i)+j) (*(p+i)j列指针:类型关键字 *列指针名; 初始化:p = a0; p = *a; p = &a00; 把二维数组当做一维数组看待。 引用方式:*(p+i*n+j) pi*n+j8. 指针数组:类型关键字 *数组名常量N; 一次建立一组指针,和建立多个指针等价。9. 动态数组:#include 分配若干字节的内存:a = (int*)malloc(sizeof(int);给若干同一类型的数据项分配连续的存储空间:a = (float*)calloc(n,sizeof(float);释放申请的空间:free(pi);第七部分:结构体与共用体1. 结构体的声明:(可以直接命名别名)(typedef) struct 结构体名成员变量声明语句(结构体别名);数据从偶数地址开始存放,不能用成员占用内存之和作为结构体占用内存。2. 结构体变量的定义:结构体相当于一种数据类型,同int, float, double 等等。也可以在声明的时候直接定义。struct 结构体名成员变量声明语句变量名列表;3. 指向结构体变量的指针:struct 结构体名 *pt; pt = &student1; 4. 变量的引用:成员运算符 “.”、指向运算符 “-”5. 用指向结构体的指针作为函数参数,效率高,可以改变成员的数值。6. 结构体数组:定义方式和其他数据类型的数组一样。指针每加一则移向下一组数据。7. 动态数据结构,链表链表的每个元素称为一个节点,每个节点包含两部分(data数据域,next下一个节点的地址)链表的建立(P337),链表的删除(P340),链表的插入(P342)8. 共用体:将不同类型的数据组合在一起,共同占用一段内存(按最大者)。共用体在同一时刻只有一个成员是有意义的(唯一性)。union 共用体名成员1成员2 ;9. 共用体不能进行比较,共用体在初始化的时候只能对第一个成员的数据类型初始化。第八部分:文件操作1. 二进制文件(数据以二进制形式存储)、文本文件(数据的每一位数字作为一个字符以其ASCII码存储)2. 文件打开函数原型:FILE *fopen ( const char *filename, const char *mode);打开方式:”r”只读、”w”只写,创建,覆盖、”a”向尾部添加数据,无文件时出错、”+”与前面的组合,读写、”b”与前面的组合,二进制方式。FILE *fp;fp = fopen( “文件名” , ”打开方式” ); 3. 函数关闭(文件使用结束后必须关闭)函数原型:int fclose ( FILE *fp ); 成功时返回0,失败返回非0。fclose (fp);4. 一定要严查每次调用的返回值是否正确,出现错误立即处理。if (fp = fopen(“domo.txt”,”w”) = NULL)printf ( “Failure ot open demo.txt!n”);exit(0);5. 按字符读取文件:从文件上读取字符:ch = fgetc ( fp );将字符写入文件:fputc ( c, fp );6. 检查文件是否读到了末尾:(没有到末尾)(ch = fgetc(fp) != EOF!feof ( fp )7. 检验是否是可打印字符:#include if(isprint(ch) 是可打印字符 if(!iscntrl(ch) 不是控制字符8. 按字符串读取文件:从文件中读取字符串:fgets(str, N, fp); 由于最后一个是0,所以最多读N-1个字符将字符串写入文件:fputs (str, fp);9. 按格式读取文件:从文件读取数据: fscanf(fp, ”格式控制参数”, &输出参数表列);向文件写入数据:fprintf(fp, “格式控制参数”, 输出参数表列) );10. 按数据块读写文件:从文件中读取数据
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农发行赤峰市元宝山区2025秋招笔试英文行测高频题含答案
- 农发行黄冈市蕲春县2025秋招笔试热点题型专练及答案
- 农发行榆林市靖边县2025秋招半结构化面试题库及参考答案
- 农发行苏州市吴中区2025秋招笔试专业知识题专练及答案
- 农发行酒泉市肃州区2025秋招无领导模拟题角色攻略
- 国家能源沧州市青县2025秋招笔试模拟题及答案
- 国家能源吉安市新干县2025秋招心理测评常考题型与答题技巧
- 固原原州区中储粮2025秋招面试半结构化模拟题30问及答案
- 国家能源菏泽市单县2025秋招笔试模拟题及答案
- 国家能源赣州市南康区2025秋招笔试思维策略题专练及答案
- 物业服务提升方案模板
- 不同茶叶的冲泡方法
- 人教版高中地理必修第一册第一章宇宙中的地球第一节地球的宇宙环境练习含答案
- 信息科技风险安全
- 中建幕墙工程安全专项施工方案
- 诊所中药饮片清单汇编
- 红木文化智慧树知到答案2024年广西大学
- 招标代理机构遴选投标方案(技术标)
- 吊车施工专项方案
- 肺栓塞患者护理查房课件
- 9月30日烈士纪念日缅怀先烈功绩弘扬先烈精神课件
评论
0/150
提交评论