南京邮电大学C语言大一上期末复习.pdf

高级语言程序设计期末总复习高级语言程序设计期末总复习 课程的全部内容可分为五大模块课程的全部内容可分为五大模块 1 1基础知识基础知识 2 2三种基本结构及流程控制三种基本结构及流程控制 3 3函数函数 4 4数据类型数据类型 5 5文件文件 下面按这五大模块分别作回顾下面按这五大模块分别作回顾 模块一基础知识部分模块一基础知识部分 需要掌握的知识要点需要掌握的知识要点 1 1C C 语言程序的组成语言程序的组成由一个或多个文件组成,每个文件由一个或多个由一个或多个文件组成,每个文件由一个或多个函数函数组成,组成,函数函数 是是 C C 程序的基本单位,程序的基本单位,一个程序有且只有一个一个程序有且只有一个 mainmain 函数函数,这是程序的入口函数,这是程序的入口函数 2 2从从 C C 的源程序到可执行的文件的全过程的源程序到可执行的文件的全过程编辑编辑编译编译链接链接最后才能最后才能运行运行各阶段生各阶段生 成的文件扩展名分别为成的文件扩展名分别为.c.c.obj.obj.,.,头文件的扩展名头文件的扩展名.h.h 3 3)函数的组成)函数的组成函数首部和函数体,函数中可有注释行函数首部和函数体,函数中可有注释行/*/* */*/ 4 4)编译预处理有三种文件包含、宏、条件编译)编译预处理有三种文件包含、宏、条件编译预处理命令行都必须预处理命令行都必须以以 号开始号开始 宏定义宏定义definedefine 宏名宏名 串串也是一种编译预处理,也是一种编译预处理,取消宏定义用取消宏定义用undefundef 宏名宏名 C C 程序中程序中 定义一个定义一个符号常量符号常量是借助于宏定义实现的,例如是借助于宏定义实现的,例如 definedefine NUMNUM 3535 注意注意不在行末加分不在行末加分 号号,因为在对源程序,因为在对源程序编译过程中(不是运行时)编译过程中(不是运行时)进行宏替换时,将宏所代表的字符串原样进行宏替换时,将宏所代表的字符串原样 替换进去,有时加了分号是要出错的,例如替换进去,有时加了分号是要出错的,例如 intint arrNUMarrNUM 宏替换因为只在编译时进宏替换因为只在编译时进 行,所以行,所以不占运行时间,只占编译时间不占运行时间,只占编译时间 带参数的宏可以完成一些简单函数的功能带参数的宏可以完成一些简单函数的功能,例如,例如 definedefine MULx,yMULx,y x*yx*y 主函数中如果有变量定义如下主函数中如果有变量定义如下intint a2,b3,c;a2,b3,c;用形如用形如cc MULa,b;MULa,b;实现求实现求 a ab b 的的 乘积。但是请大家思考,如果用乘积。但是请大家思考,如果用 cc MULa2,b5MULa2,b5,则变量,则变量 c c 的值为的值为 因此,一般将宏中的参数在所定义的串中打上括号,如因此,一般将宏中的参数在所定义的串中打上括号,如 definedefine MULx,yMULx,y x x* *y y)再求)再求 cc MULa2,b5MULa2,b5 5 5C C 程序中的六种符号程序中的六种符号关键字、标识符、运算符、分隔符、其它符号、数据(包括常关键字、标识符、运算符、分隔符、其它符号、数据(包括常 量和变量)量和变量) 熟记所有常见关键字熟记所有常见关键字关键字中最多的是流程控制语句中的关键字关键字中最多的是流程控制语句中的关键字如如forforwhilewhiledodo ififelseelseswitchswitchcasecasedefaultdefaultbreakbreakcontinuecontinuegotogotoreturnreturn 等,还有一大类是等,还有一大类是 变量类型及存储类别的变量类型及存储类别的如如intintshortshortlonglongsignedsignedunsignedunsignedcharchardoubledoublefloatfloat enumenumunionunionstructstructtypedeftypedefstaticstaticregisterregisterautoautoexternextern, ,还有一些如还有一些如voidvoid sizeofsizeof 等;等; 能正确定义标识符能正确定义标识符在程序中在程序中符号常量名符号常量名变量名变量名函数名函数名都是用户自定义标识符都是用户自定义标识符 自自 定义标识符的正确与否可从以下几方面判断定义标识符的正确与否可从以下几方面判断是否以字母或下划线开头;是否以字母或下划线开头;是否是只有是否是只有 字母、数字、下划线的序列字母、数字、下划线的序列是否选用了关键字是否选用了关键字 练习练习下列下列哪一个是哪一个是合法的合法的用户自定义标识符用户自定义标识符 A A_ _do_whiledo_while; ;B Bb beginendeginend; ;C Cfor;for;D D1st_run1st_run; ; 掌握所有的运算符及其优先级、结合方向及特殊的运算规则掌握所有的运算符及其优先级、结合方向及特殊的运算规则 3434 种运算符的优先级关系大致为种运算符的优先级关系大致为 .-.-一元运算符一元运算符乘除类算术运乘除类算术运 算符算符加减类算术运算符加减类算术运算符移位运算符移位运算符有大小关系的关系运算符有大小关系的关系运算符等与不等与不 等的关系运算符等的关系运算符位运算符位运算符逻辑与逻辑与逻辑或逻辑或条件运算符条件运算符各种赋值运各种赋值运 算符算符逗号运算符。逗号运算符。 结合方向结合方向一元运算符、条件运算符、赋值运算符一元运算符、条件运算符、赋值运算符三种为三种为自右向左自右向左结合,其它均为自左向结合,其它均为自左向 右结合右结合 能改变变量值的运算符赋值、能改变变量值的运算符赋值、- - - -,注意前后,注意前后- - - -的区别的区别 具有特殊运算规则的运算符逻辑与具有特殊运算规则的运算符逻辑与 ; f fn;n; returnreturn f;f; voidvoid mainmain intint i;i; fori1;i ,则对应的输入语句是什么,则对应的输入语句是什么 2)选择结构)选择结构用用 if.elseswitch 语句配合复合语句、语句配合复合语句、break 语句控制实现。语句控制实现。If 语句有三语句有三 种形式单分支种形式单分支 if、双分支、双分支 if、嵌套、嵌套 if,注意,注意 else 应与其前最靠近的未匹配过的应与其前最靠近的未匹配过的 if 相对应相对应 而与对齐的形式无关,而与对齐的形式无关,每一个每一个 else 实际上都隐含了一个条件,要充分利用这些条件分析程实际上都隐含了一个条件,要充分利用这些条件分析程 序序if 后的条件通常是关系表达式后的条件通常是关系表达式但是实际上可以是任何表达式但是实际上可以是任何表达式仅以该表达式是仅以该表达式是 0 或或非非 0 来判断条件的假和真。注意来判断条件的假和真。注意if 及及 else 后面都只能控制后面都只能控制一条语句一条语句,经常需要用到复合,经常需要用到复合 语句。语句。 switch 语句中特别要注意的是语句中特别要注意的是 1switch 后面的表达式类型应当为整型、字符型,而不后面的表达式类型应当为整型、字符型,而不 可以是可以是 float 或或 double 型,因为表达式的取值必须是离散值。型,因为表达式的取值必须是离散值。 2找到与表达式匹配的常量后开始执行找到与表达式匹配的常量后开始执行直到直到遇到遇到 break 或语句结束才会停止或语句结束才会停止因此每因此每 一个分支后如果没有及时用一个分支后如果没有及时用 break则继续向下执行则继续向下执行这样这样switch 结构可以选择多个分支结构可以选择多个分支 执行执行 3)这些常量的顺序调整不影响程序的正确性,只要每个分支执行的功能固定就可以了)这些常量的顺序调整不影响程序的正确性,只要每个分支执行的功能固定就可以了 练习练习 1 1已知变量已知变量 tftf 为整型,下面的条件语句中,为整型,下面的条件语句中,五种表达有一种与其它四个不五种表达有一种与其它四个不等价等价,它是,它是 A Aifif tftf 语句语句 1;1; elseelse 语句语句 2;2; B Bifif tftf00 语句语句 2 2; ; elseelse 语句语句 1 1; ; C Cifif tftf00 语句语句 1;1; elseelse 语句语句 2;2; D Difif tftf 语句语句 2 2; ; elseelse 语句语句 1 1; ; E Eifif tf1tf1 语句语句 1;1; elseelse 语句语句 2;2; 2 2、下列程序段执行后,、下列程序段执行后,a ab b 的值是的值是 a1;a1;b2;b2;c0;c0; ifif abab ca;ca; ab;ab; bc;bc; 3)循环结构)循环结构常用常用 whiledowhilefor 三种流程控制语句实现三种流程控制语句实现注意注意 while 和和 for 属属 于当型循环于当型循环dowhile 属于直到型循环属于直到型循环若若 while 后的条件为非后的条件为非 0 则继续循环则继续循环若为若为 0 则则 结束结束,三种循环是可以相互转化的。这里特别强调的是循环的退出一般是条件为,三种循环是可以相互转化的。这里特别强调的是循环的退出一般是条件为 0for 的表达式的表达式 2,如果表达式,如果表达式 2 缺省,则表示永真条件、缺省,则表示永真条件、while 或或 dowhile 后的表达式就可以后的表达式就可以 表示条件,如表示条件,如while A ,这就是一个永真条件,这就是一个永真条件)时不进入循环体,但是在循环体内也)时不进入循环体,但是在循环体内也 可以用一定条件下的可以用一定条件下的 break 语句退出本层循环。如果表示条件的表达式值永远语句退出本层循环。如果表示条件的表达式值永远不可能为不可能为 0 则为一个死循环则为一个死循环,这一点要注意,这一点要注意 在循环语句中可以用在循环语句中可以用 break 表示退出本层次循环表示退出本层次循环 continue 表示忽略本次循环体中的后续语表示忽略本次循环体中的后续语 句句重新开始下一次循环条件的判断重新开始下一次循环条件的判断以便决定是否要继续循环。以便决定是否要继续循环。 循环体只有一条语句,注意复合语句的正确使用,不要误用分号形成循环体为空语句,例循环体只有一条语句,注意复合语句的正确使用,不要误用分号形成循环体为空语句,例 如如for i0;i 头文件中头文件中 练习练习 1下列程序运行后下列程序运行后x x 和和 y y 的值分别是的值分别是 includeinclude voidvoid mainmain intint x x 1 1, ,y y 2 2; ; for;for;x 7 7 printf“printf“xxddydydn“,n“,x,yx,y;; break;break; ifif x x 66 continue;continue; y y * * x x; ; 这一模块中有很多经典算法,下面几个是同学们必须非常熟悉的这一模块中有很多经典算法,下面几个是同学们必须非常熟悉的 1质数问题质数问题 1 1判断一个整数是否为质数(用一层循环可以解决)判断一个整数是否为质数(用一层循环可以解决) 会定义函数实现会定义函数实现,函数原型函数原型int primeint n; 判断参数判断参数 n 是否为质数是否为质数如果是如果是返回返回 1 如果不是,返回如果不是,返回 0 2 2找出一定范围内所有的质数找出一定范围内所有的质数 能按一定的格式输出能按一定的格式输出 2求和问题求和问题 掌握求和问题中条件的控制方式、累加的方式掌握求和问题中条件的控制方式、累加的方式 1 1可以根据求和的项数要求来求解,例如求可以根据求和的项数要求来求解,例如求 100 项之和;项之和; 2 2可以根据每一项的精度进行求解可以根据每一项的精度进行求解例如例如求到这一项的绝对值不超过求到这一项的绝对值不超过 1E-6 为为 止止注意这时的循环条件应该为注意这时的循环条件应该为whilefabsterm1E-6,如果用如果用 do.while 循环循环条条 件也是这样表示。件也是这样表示。 3 3注意分子、分母、当前项、和分别用一个变量表示,正确定义变量的类型,注意分子、分母、当前项、和分别用一个变量表示,正确定义变量的类型, 正确解决变符号问题正确解决变符号问题s-s; 模块三函数模块三函数 C 语言的源程序由一个或多个函数组成语言的源程序由一个或多个函数组成其中其中必须有且只能有一个主函数必须有且只能有一个主函数 mainmain 程序执程序执 行行总是总是从从 mainmain 函数函数开始开始的,也是因的,也是因 mainmain 函数的结束而结束整个程序。函数的结束而结束整个程序。 C C 函数函数只可以只可以嵌套嵌套调用,而不能调用,而不能嵌套定义嵌套定义 C C 函数可以在定义的时候调用自己,这就是直接递归方式函数可以在定义的时候调用自己,这就是直接递归方式 这一部分需要搞清楚以下问题这一部分需要搞清楚以下问题 1函数定义函数定义包括包括函数首部和函数体函数首部和函数体函数首部又包括了函数首部又包括了函数返回值类型函数返回值类型函数名函数名形形 式参数表式参数表 函数体是由一对大括号括起的语句系列组成函数体是由一对大括号括起的语句系列组成函数的形式参数名字是无关紧要函数的形式参数名字是无关紧要 的,若函数无需返回值,则将返回值类型可以定义为的,若函数无需返回值,则将返回值类型可以定义为 void。函数的返回值由首部的。函数的返回值由首部的函数返函数返 回值类型回值类型决定决定return 后的表达式类型若与其不一致后的表达式类型若与其不一致则自动转换则自动转换函数只能返回一个值函数只能返回一个值 如果一个函数需要返回多个信息,则要考虑其中的形式参数采用指针参数。如果一个函数需要返回多个信息,则要考虑其中的形式参数采用指针参数。 例如例如int fint a,int n,int *max; 由函数返回数组由函数返回数组 a 的前的前 n 个元素之和,而元素的最大值个元素之和,而元素的最大值 通过设定通过设定 max 指针指针在函数体内求在函数体内求*max 实现实现外部调用时外部调用时要用一个地址实参对应于形式要用一个地址实参对应于形式 参数参数 max 2函数原型函数原型函数应当函数应当先定义后被调用先定义后被调用如果出现调用先于定义的情况如果出现调用先于定义的情况则必须对后定则必须对后定 义的函数在调用点之前进行义的函数在调用点之前进行原型声明,原型声明,函数原型就是函数定义的首部最后加一个分号,在函数原型就是函数定义的首部最后加一个分号,在 原型声明中原型声明中形式参数名字可以缺省形式参数名字可以缺省 3)函数调用)函数调用形式为形式为函数名(实在参数表函数名(实在参数表 ,实在参数与形式参数对应的要求是个,实在参数与形式参数对应的要求是个 数相同、对应位置的类型最好一致数相同、对应位置的类型最好一致 4形式参数类型形式参数类型有有值形式参数值形式参数这时实在参数将值赋值到值形式参数变量中这时实在参数将值赋值到值形式参数变量中指针形指针形 式参数式参数,这时将实参的地址赋值到指针形式参数中,虽然都是单向传递,但是可以通过在,这时将实参的地址赋值到指针形式参数中,虽然都是单向传递,但是可以通过在 被调函数中修改指针所指向的内容达到修改实参变量的目的。如被调函数中修改指针所指向的内容达到修改实参变量的目的。如swapint *x,int *y,在该在该 函数体内交换的是函数体内交换的是*x 和和*y 的值的值对对 swap 的几种正确与错误实现需要能正确理解。如果函的几种正确与错误实现需要能正确理解。如果函 数原型为数原型为swapint *x,int y,在函数体内交换在函数体内交换*x 和和 y 的值的值则主函数中的调用形式应该为则主函数中的调用形式应该为 swap只有实参只有实参 a 可能会得到改变,无法完成可能会得到改变,无法完成 ab 互换的目的。互换的目的。 5)变量的作用域问题)变量的作用域问题 全局变量全局变量在所有函数之外定义的变量,作用于定义点到程序结束处,但应在所有函数之外定义的变量,作用于定义点到程序结束处,但应去除掉同名去除掉同名 局部量的作用域部分局部量的作用域部分 局部自动变量局部自动变量在某函数内部定义的变量在某函数内部定义的变量包括形式参数也是包括形式参数也是其作用域只在本函数内其作用域只在本函数内 生命期为所在函数被调用时分配空间,该函数当次结束时空间不复存在。下次再调用则生命期为所在函数被调用时分配空间,该函数当次结束时空间不复存在。下次再调用则 重新分配空间重新分配空间在不同函数中定义的局部量可以同名在不同函数中定义的局部量可以同名因此形式参数可以与实在参数同名因此形式参数可以与实在参数同名 因为处于不同的函数。因为处于不同的函数。 局部静态变量局部静态变量在某函数内部定义的变量在某函数内部定义的变量有有 static 关键字关键字其作用域只在本函数内其作用域只在本函数内生生 命期为所在函数被调用时在命期为所在函数被调用时在静态存储区静态存储区分配空间,分配空间,只初始化一次只初始化一次,本次函娄数调用结束,本次函娄数调用结束 后仍然存在,其值保留,但是在函数之外的后仍然存在,其值保留,但是在函数之外的其余部分均不可见其余部分均不可见,等该函数再次被调用时等该函数再次被调用时, 该变量就在原来值的基础上继续变化。该变量就在原来值的基础上继续变化。 6)函数的递归)函数的递归会阅读递归函数,并能对简单的调用得到运行结果,理解递归的条件会阅读递归函数,并能对简单的调用得到运行结果,理解递归的条件 有明确的边界条件;原问题可转化为新问题,新旧问题的解决方法一样。有明确的边界条件;原问题可转化为新问题,新旧问题的解决方法一样。 模块四数据类型模块四数据类型 C 语言源程序中所处理的任何数据(常量或变量)都是属于某一种数据类型的,数据类型语言源程序中所处理的任何数据(常量或变量)都是属于某一种数据类型的,数据类型 将决定该类型的值在内存中占用空间的大小、数据值的表现形式及数据范围、可进行的运将决定该类型的值在内存中占用空间的大小、数据值的表现形式及数据范围、可进行的运 算及操作、变量值的组成情况等。算及操作、变量值的组成情况等。 C 中数据类型分为中数据类型分为基本类型、构造类型、指针类型、空类型四大类,基本类型、构造类型、指针类型、空类型四大类,其中基本类型包括其中基本类型包括 整型、实型、字符型整型、实型、字符型、枚举型、枚举型构造类型有构造类型有数组类型、结构体类型、数组类型、结构体类型、共同体类型,共同体类型,指针指针 类型的特殊性在于类型的特殊性在于其变量中存放的是内存地址信息其变量中存放的是内存地址信息而不是内存中的值。而不是内存中的值。 这一模块的重点是数组、结构体、指针类型。这一模块的重点是数组、结构体、指针类型。 1)数组类型)数组类型 基本知识一维及二维数组变量的定义及初始化、如何正确访问元素、一维字符数组操作基本知识一维及二维数组变量的定义及初始化、如何正确访问元素、一维字符数组操作 字符串字符串会正确输入输出数组的元素会正确输入输出数组的元素正确输出字符串正确输出字符串掌握掌握 string.h 函数中的一些常用函函数中的一些常用函 数的使用,如两个字符串的比较数的使用,如两个字符串的比较例如判断串例如判断串 s1 是否大于是否大于 s2,不能用,不能用 s1s2,而应该而应该用用 strcmps1,s20、字符串的赋值、字符串的连接等。、字符串的赋值、字符串的连接等。 算法算法首先要理解一维数组名作实参和形式能数传地址的实质;首先要理解一维数组名作实参和形式能数传地址的实质; 掌握在一维数组中掌握在一维数组中输入数组所有元素、输出数组所有元素、寻找最大数、最小数、求元输入数组所有元素、输出数组所有元素、寻找最大数、最小数、求元 素的平均值、查找某一个值是否是数组中的元素、数组元素逆置、某种常见排序算法素的平均值、查找某一个值是否是数组中的元素、数组元素逆置、某种常见排序算法等。等。 2指针类型指针类型定义形式为定义形式为数据类型数据类型*指针变量名指针变量名例例int*p;注意注意 p 与与*p 的区别的区别指指 针变量若未赋值,不能对针变量若未赋值,不能对*p 操作,若对指针赋值为空值,也不能对操作,若对指针赋值为空值,也不能对*p 操作。操作。 练习练习 1已知已知 char *s “student“; 则则 printf“sn“, c3输出为输出为 2、若有说明、若有说明int a, b9, *p则能完成则能完成 ab 赋值功能的语句是赋值功能的语句是 Aa*p;B*p*CaD*p 指针与数组的关系指针与数组的关系对指针操作一维数组要熟练掌握,理解数组名是地址常量的概念,指对指针操作一维数组要熟练掌握,理解数组名是地址常量的概念,指 针指向数组的时候执行针指向数组的时候执行 pp- -的意义的意义,以及数组元素的下标法访问及指针运算符访问方以及数组元素的下标法访问及指针运算符访问方 法例法例int a41,2,3,4 ,*pa ;pp2或或*p2都是表示元素都是表示元素 a3,但是但是 p1 或或 a2 都是表示地址概念的,都等于都是表示地址概念的,都等于一级指针,可等于普通一级指针,可等于普通 int 变量地址、一维数组名、二维数组中的列地址变量地址、一维数组名、二维数组中的列地址 int *p3一个行指针一个行指针指向具有指向具有 3 个整型元素的一维数组个整型元素的一维数组与二维数组一起使用与二维数组一起使用用于用于 获得行指针值,例获得行指针值,例 int a23 ;pa int *p3含含 3 个整型指针元素的一维指针数组个整型指针元素的一维指针数组 p int *p 函数指针,指向返回值为函数指针,指向返回值为 int 型的函数入口型的函数入口 int *p形式参数表形式参数表 返回值为返回值为 int 指针的函数指针的函数 p int p ; 二级指针二级指针 p 用来获得一级指针的地址用来获得一级指针的地址 必须两次间接寻址才能访问必须两次间接寻址才能访问 int 值值 例如例如 int a,int *r则下列三句等效则下列三句等效 1a1 ;2*r1 ;3p1 ; 这里,有几种访问是不正确的这里,有几种访问是不正确的1 r1 ; 2p 3pr ; 4*p1 ; 二维数组中元素的表示二维数组中元素的表示 例例int a34 元素元素 aij的正确表示的正确表示aij*aij**aij**ai*4j,但是但是*ai*4j不正确不正确 这里需要正确理解行指针与列指针的表示及它们执行算术运算每次移动的字节数这里需要正确理解行指针与列指针的表示及它们执行算术运算每次移动的字节数 用字符指针操作字符串用字符指针操作字符串比用字符数组操作字符串具有更大的灵活性,注意二者的区别比用字符数组操作字符串具有更大的灵活性,注意二者的区别 例例char *sABC char *s;s”ABC”都是正确的都是正确的 char p4ABC 正确正确但是但是 char p4; p”ABC”却错误却错误 sp是正确的赋值是正确的赋值但是但是 s*p*s”AB”都是错误的都是错误的 3结构体类型结构体类型会正确定义结构体类型会正确定义结构体类型掌握三种变量定义的方式及变量的初始化方式掌握三种变量定义的方式及变量的初始化方式 理解结构体变量理解结构体变量内存占用内存占用的情况(的情况(各成分依次存放,故结构体变量所占空间各成分依次存放,故结构体变量所占空间至少至少为所有成为所有成 员需要的空间之和员需要的空间之和 ,会正确访问结构体变量的成员(,会正确访问结构体变量的成员(用点运算符或是箭头运算符用点运算符或是箭头运算符 ,结合,结合 结构体数组及指针会正确访问结构体的元素。结构体数组及指针会正确访问结构体的元素。 练习练习 1定义定义 struct Point int x,y; pos 1,2,3,4,5,6, *ptpos;则表达式则表达式pt-y 的值为的值为 ,pt-x 的值为的值为_, pt-x 的值为的值为*pt.y 的值为的值为_ 2以下对结构体变量以下对结构体变量 stu 中成员的非法引用是中成员的非法引用是 struct Point int x; int y; pos, *p Apos.xB*p.yCp-xDPoint.y 作为函数参数作为函数参数,通常定义结构体的指针作为形式参数,将实参结构体变量的地址传入,这通常定义结构体的指针作为形式参数,将实参结构体变量的地址传入,这 样省时效率高,而且可在被调函数中修改对应实参结构体成员的值样省时效率高,而且可在被调函数中修改对应实参结构体成员的值 利用结构体和指针的递归定义可以实现单链表利用结构体和指针的递归定义可以实现单链表 例例 struct node intdata; struct node *next; *head; 在单链表中,最重要的是在单链表中,最重要的是头指针头指针的信息,头指针用于指向单链表的第一个结点处,顺着链的信息,头指针用于指向单链表的第一个结点处,顺着链 依次寻找其它的结点依次寻找其它的结点单链表单链表不可随机访问不可随机访问其中的结点其中的结点最后一个结点的指针域置为空最后一个结点的指针域置为空 理解单链表的理解单链表的遍历、插入一个结点、删除链表遍历、插入一个结点、删除链表等方法。等方法。 2、链表中的结点的形成,、链表中的结点的形成,动态申请一个结点空间动态申请一个结点空间p struct node*mallocsizeofstruct node,然后才能执行,然后才能执行p-datap-next; 可以利用指针生成动态数组空间,例如可以利用指针生成动态数组空间,例如 int *p; pint *mallocsizeofint; /*申请一个申请一个 int 空间空间*/ pint *malloc2*sizeofint; /*申请申请 2 个连续的个连续的 int 空间,实现动态一维数组空间,实现动态一维数组*/ pint *calloc2, sizeofint; /*申请申请 2 个连续的个连续的 int 空间,实现动态一维数组空间,实现动态一维数组*/ 注意利用指针变量完成两个元素互换的算法注意利用指针变量完成两个元素互换的算法 指针为函数的参数传递数组指针为函数的参数传递数组 排序算法排序算法 在数组中如何查找关键字在数组中如何查找关键字 模块五文件模块五文件 C C 语言中的文件的组成及分类语言中的文件的组成及分类 C C 中的中的文件由文件由数据流形式数据流形式组成,可按组成,可按数据的存放形式数据的存放形式分为分为二进制文件和文本文件二进制文件和文本文件 C C 文件打开的方式文件打开的方式 基本方式基本方式 rr只读只读 ww只写只写 aa追加追加 后面可以加上后面可以加上 表示可读可写表示可读可写注意注意如果打开一个新文件可读可写如果打开一个新文件可读可写则一定是则一定是 ww如果打如果打 开一个旧文件可读可写开一个旧文件可读可写则一定是则一定是 rr 加上加上 b b 表示打开表示打开二进制文件二进制文件否则默认是对否则默认是对文本文文本文 件件操作操作 注意注意 文件的操作步骤文件的操作步骤 1 1定义定义 FILE*FILE*文件指针,一个文件对应一个指针文件指针,一个文件对应一个指针 2 2利用文件指针打开文件利用文件指针打开文件 fpfp文件名文件名 打开方式打开方式 注意文件名要用双引号括起注意文件名要用双引号括起 并且路径之间用并且路径之间用,打开方式也要用双引号括起,打开方式也要用双引号括起 3 3进行文件读写操作,一般用进行文件读写操作,一般用 fgetcfp,cfgetcfp,c来从已有文件中获取一个字符,来从已有文件中获取一个字符,用用 fputcfp,cfputcfp,c向向 fpfp 所对应的文件中写入一个字符所对应的文件中写入一个字符该操作往往要用循环条件控制执该操作往往要用循环条件控制执 行。行。 用用 fwritefwrite 和和 freadfread 实现数据块的读写实现数据块的读写这在内存变量为结构体类型时特别有用这在内存变量为结构体类型时特别有用例如例如 structstruct nodenode intintx,y;x,y; s102,3,1,8;s102,3,1,8; intint i;i; FILEFILE *fp*fpcABC.datcABC.dat,wb;,wb; fwrites,sizeofstructfwrites,sizeofstruct node,10,fp;node,10,fp; 则可以实现一次将则可以实现一次将 s s 数组的数组的 1010 个结构体元素写入到文件个结构体元素写入到文件 ABC.datABC.dat 中中以上还可以用下面的以上还可以用下面的 语句实现写入语句实现写入 1 1fwrites,10*sizeofstructfwrites,10*sizeofstruct node,1,fp;node,1,fp; forfor i0;iinclude includeinclude voidvoid mainmain FILEFILE *fp;*fp; charchar ch;ch; ifif fp“caaa.txt“,“r“NULLfp“caaa.txt“,“r“NULL printf“cannotprintf“cannot openopen thisthis file“;file“; exit0;exit0; whilefeoffpwhilefeoffp chfgetcfp;chfgetcfp; putcharch;putcharch; fclosefp;fclosefp; 思考思考 1 1)如果需要逆序在屏幕上显示原文件的内容,上述程序如何修改)如果需要逆序在屏幕上显示原文件的内容,上述程序如何修改 2 2)若将文件)若将文件 caaa.txtcaaa.txt 原样复制到原样复制到 D D 盘下作为盘下作为 bbb.txtbbb.txt,程序该如何修改,程序该如何修改 3 3)若将文件)若将文件 caaa.txtcaaa.txt 中的字母都转变为小写字母复制到中的字母都转变为小写字母复制到 D D 盘下作为盘下作为 bbb.txtbbb.txt 程序该如何修改程序该如何修改 5 5)若将文件)若将文件 caaa.txtcaaa.txt 连接到连接到 Dccc.txtDccc.txt 后面,程序应该如何修改后面,程序应该如何修改

南京邮电大学c语言实验报告5,南京邮电大学C语言大一上期末复习.pdf相关推荐

  1. 上海应用技术学院c语言实验报告9,上海工程技术大学C语言实验报告

    <上海工程技术大学C语言实验报告>由会员分享,可在线阅读,更多相关<上海工程技术大学C语言实验报告(7页珍藏版)>请在人人文库网上搜索. 1.实 验 报 告高级语言程序设计20 ...

  2. 2015华北水院c语言实验报告5,华北水利水电大学C语言实验5.doc

    华北水利水电大学C语言实验5 C语言程序设计实验报告 实验5 使用数组的程序设计 班级 2013156 学号 201315613 姓名 吴浩 一.实验目的二.实验内容及步骤#include int m ...

  3. 离散数学c语言实验报告,离散数学数理逻辑C++或C语言实验报告

    离散数学实验报告 专业班级:12级计算机本部一班 姓名:鲍佳珍 学号: 1016 实验成绩: 1.[实验题目] 命题逻辑实验一 2.[实验目的] 熟悉掌握命题逻辑中的联接词,实现二元合取.析取.蕴涵 ...

  4. 南京邮电大学通达学院c语言实验报告,南京邮电大学通达学院c语言程序报告.docx...

    南京邮电大学通达学院c语言程序报告 南京邮电大学通达学院程序设计(上机)报告 题 目: R015M P008E 专 业 学 生 姓 名 班 级 学 号 指 导 教 师 日 期 2015年5月 评 分 ...

  5. 南京邮电大学通达学院c语言实验报告,南京邮电大学通达学院c语言程序报告..docx...

    南京邮电大学通达学院c语言程序报告. 南京邮电大学通达学院程序设计(上机)报告题 目: R015M P008E专 业 学 生 姓 名 班 级 学 号 指 导 教 师 日 期 2015年5月 评 分 细 ...

  6. 金陵科技学院c语言实验报告册,金陵科技学院C语言实验册

    金陵科技学院C语言实验册 学 生 实 验 报 告 册 (理工类) 课程名称: C语言程序设计实验 专业班级: 学生学号: 学生姓名: 所属院部: 指导教师: 20 --20 学年 第 学期 金陵科技学 ...

  7. 金科院c语言实验报告册,金陵科技学院c语言

    金陵科技学院c语言 更新时间:2017/2/9 1:36:00  浏览量:603  手机版 试卷编号:647 所属语言:C语言 试卷方案:1 试卷总分:9分 共有题型:2种 一.填空 共5题 (共计5 ...

  8. c语言实验报告《文件操作》,c语言文件操作总结.docx

    C语言文件操作总结 File manipulation function File on / off FILE, *infile, =fopen ("ride? in"," ...

  9. 潜艇大战c语言实验报告,潜艇大战游戏【C语言游戏】

    # include # include "13h.h"  /*显示中断*/ # include # include # include "timer.h" # ...

最新文章

  1. Java脚本学习-笔记二
  2. android特效按钮点击效果
  3. 用linux运行sublime,在Deepin Linux上用Sublime Text3配置GoLang开发环境
  4. 网工路由基础(2)路由选路原理
  5. 十、Docker快速搭建Elastic Stack(下篇)
  6. CreatePipe匿名管道通信
  7. java批量提取文件夹名称_bat 批量提取指定目录下的文件名
  8. law是什么的缩写_Lawyer和Attorney 有什么不同?
  9. python flask源码解析_Flask知识全套及源码分析
  10. 支撑200并发_搞清楚系统到底怎样支撑高并发以及架构图的绘制(面试向)
  11. Word Cookbook by Eric
  12. 计算2的任意次方[通用版]
  13. 【iCore4 双核心板_uC/OS-II】例程八:消息邮箱
  14. 如何将两个PDF合并成一个?PDF合并方法
  15. 信息内容安全-图像文字识别OCR
  16. 软件工程网络15结对编程作业1(201521123018谢元将)
  17. Win32计算器:输入出生年月日,输出周岁,星座以及距离下一次生日的天数
  18. 陆涛带着孙飞和汪贺早早的等在这里
  19. 信用社pb通用记账_信用社会计记账采用的是()。A、收付实现制B、权责发生制C、借贷记账法D、单式记账法...
  20. Excel 查重小技巧,适用于office2003

热门文章

  1. 真良心干货保姆级手把手教你Python网络编程,学不会我去你家教你
  2. 刺激战场服务器未响应加载失败,刺激战场辅助提示驱动加载失败 怎么办 | 手游网游页游攻略大全...
  3. oa办公自动化软件搬到手机上使用的好处
  4. Web前端入门(十一)CSS字体属性
  5. 百加得有限公司任命Kerry Carr为全球领导团队成员
  6. java中把一个字符串中大写字母转换为小写,小写字母转换为大写
  7. 改计算机高级设置吃鸡,吃鸡低配置怎么优化 绝地求生大逃杀低配置优化方法...
  8. 织梦js广告不显示原因,dedecms后台不显示广告预览(最新2016年2月29日)
  9. 踩坑日记-使用poi生成word文档设置内容换行
  10. java登录代码带验证码实现_两种方法实现带验证码的用户登录