




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机程序设计在专升本考试中计算机程序设计为50分由两个编程题题构成的。编程题对考生能力的要求较高,考生应当注意:先仔细阅读问题,了解问题要求,以及已给出的函数对要编写的函数起了哪些作用,应避免在不明题意的情况下盲目答题。不要急于编程。要理清思路,可以先将复杂的任务逐层分解,要看问题用到了C语言中的哪些数据类型,还要看运用了哪些结构。在编写程序的过程中要严格遵守C语言的语法规则,避免犯一些常见的语法错误,避免一些隐性的逻辑错误等。要顺利完成编程题,考生应注意在平时多学习和积累一些典型的例子和算法。第一部分:基本知识点介绍一、程序设计基本概念知识点1程序的构成,MAIN函数和其他函数1、程序的构成例1:在屏幕上输出HelloWorld!字样./*输出字符串*/#include<stdio.h>voidmain(){printf(“HelloWorld!”);}程序结构说明:程序开头用/*和*/注释,并不执行以#开始的语句是预处理命令Void是函数类型,main是函数名用{}括起来的部分是一个程序模块,也称为函数体E、分号“;”是C语言的执行语句和说明语句的结束符知识点2头文件,数据说明,函数的开始和结束标志1、头文件:头文件是后缀为h的文件,引用方法有两种:1)#include<name.h>2)#include“name.h”2、数据说明:C语言中数据可以在函数体外或函数体内说明,但一定要先定义后使用3、函数开始于结束标志函数由两部分组成:1)函数首部(包括函数名、函数类型、函数参数名和参数类型)Intmax(inta,intb)2)函数体(函数首部下面的花括号{}内的部分知识点3C程序的编译是从函数的第一行开始编译,到程序的最后一行结束;C程序的执行总是从主函数的第一行开始到主函数的最后一行结束,无论主函数在什么位置。知识点4C中的语句有很多种,从整体上可以分为六大类,每类语句的书写格式和功能不同,用于实现算法中不同类型的操作步骤:1.变量定义语句2.表达式语句3.程序结构控制语句4.空语句5.复合语句6.声明语句(函数声明,变量声明,类型声明等)虽然语句类型很多,但C语法规定了C语句的基本规则:每个C语句的最后必须有分号,C语句是以分号结束的,分号是C语句的一个组成部分!二、C程序设计的初步知识知识点1用户标识符由字母,数字,下划线组成。并且第一个必须为字母或则是下划线。但关键字不可以作为用户标识符号。注意C程序对大小写敏感。知识点2C的数据类型(基本类型,构造类型,指针类型,空类型)及其定义方法。1、常量和变量2)、常量(分整型、实型、字符型、符号常量和字符串常量)3)变量(定义,特点(先定义后使用))2、数据类型的分类1)基本类型(整型、实型、字符型)2)构造类型(数组、结构体、共用体)3)指针(专门存放地址的数据类型)4)空类型(在定义时不确定数据类型,而在使用时强制转换来确定的数据类型)3、数据类型的定义1)基本类型:定义格式为:类型关键字变量名[=初始化数据]。例如inta1;或floats1=5.0;2)构造类型A)、数组:基本类型数组名[数组长度1][数组长度2]…[数组长度n];B)、结构体:Struct结构体名{成员表列};有以下三种方法:先声明结构体类型再定义变量:structstu{intno;charname[10];};和stustud1,stud2;②在声明类型的同时定义变量:structstu{intno,charname[10];}stud1,stud2;③直接定义结构体变量:struct{intno,charname[10];}stud1,stud2;C)、共用体:union共用体名{成员表列}变量表列;3)指针类型:基类型*指针变量名;例如:int*p;4)空类型:void*p2;知识点3C运算符的种类、运算优先级和结合性。注意:1)同一优先级的运算符,运算次序由结合性决定2)不同的运算符要求不同的运算对象个数知识点4不同数据类型间的自动转换和强制转换说明:1)横向箭头表示必定的转换2)纵向表示不同转换3)以上类型转换是系统自动完成的类型间的强制转换强制转换是用强制类型转换符将结果转换成所需要的数据类型(转换类型)表达式知识点5C表达式类型(赋值表达式,算术表达式,关系表达式,逻辑表达式,条件表达式,逗号表达式)和求值规则。
知识点6按运算符优先级从高到低:单目运算符->双目运算符->三目运算符->赋值运算符->逗号运算符
特别在双目运算符中,按
运算符优先级从高到低:算术运算符->移位运算符->关系运算符(其中==
和
!=优先级又较低)->逻辑运算符(按位与-〉按位异或-〉按位或-〉逻辑与-〉逻辑或)!知识点7在内存中,整型数据以二进制的(ASCII)形式存放,数值在内存中以补码的形式表示(正数的补码是本身,负数采用“符号位不变,其余位变反加1”)。三、顺序结构识点1常见语句。1、简单语句1)、空语句:仅由一个“;”构成语句;不执行任何操作,只作为形式上的语句。2)、函数调用语句3)、表达式语句:在任何一个合法的表达式后附加一个分号构成4)、流程控制语句:(构成流程的控制语句(if,switch,while,for)和流程转向语句(break,continue,goto)5)、赋值语句2、复合语句将一组语句括在花括号内则被视为一个语句(语句块)知识点2数据的输入与输出,输入输出函数的调用。1、数据的输入与输出1)、数据的输入A)getchar()函数:作用是从终端设备接受一个输入字符B)scanf()函数:是格式化输入函数2)、数据的输出A)putchar()函数:作用是向终端(屏幕)输出一个字符。B)printf()函数:一次可以输出多个数据[%d对应整型;%c对应字符;%f对应单精度等等。宽度的,左对齐等修饰。%ld对应longint;%lf对应double。]2、输入输出函数及其调用输入输出函数的声明包含在文件stdio.h中,使用时要利用#include<sdtio.h>四、选择结构知识点1if语句的格式及功能格式1:如果算法步骤包含2个分支,判断条件的真假,如果为真则选择真分支部分执行,如果为假则选择假分支部分执行,那么该算法步骤可以实现为格式1的if语句。说明:A)真假分支部分可以由若干个语句组成,真假分支分别被一对{}组织成一个整体,真分支部分放在if之后else之前,假分支部分放在else之后;B)当真假分支语句部分只有一个语句时,花括号可以省略而且真分支语句可以和if写在同一行中;C)条件表达式可以是任意的数值型表达式,表达式的值非0表示判别结果为真,表达式的值为0表示判别结果为假;格式2:如果算法步骤为(判断条件的真假,如果为真则选择真分支部分执行,如果为假什么也不作,即假分支为空操作)那么该算法步骤可以实现为格式2的if语句。说明:A)真分支部分可以由若干个语句组成;B)当真分支语句部分只有一个语句时,花括号可以省略而且真分支语句可以和if写在同一行中;C)条件表达式可以是任意的数值型表达式,表达式的值非0表示判别结果为真,表达式的值为0表示判别结果为假;知识点2if语句和条件运算符的关系比较if语句对应的算法流程和条件运算符对应的功能,可以发现很类似:结论:当if语句的真假分支都是单个赋值语句,而且真假分支赋值语句都赋给同一个变量时,if语句的功能可以等价地用条件运算符来实现。If(表达式1)变量名=表达式2;Else 变量名=表达式3;等价于:变量名=表达式1?表达式2:表达式3;例如:if(x>0)y=1;elsey=-1;等价于:y=(x>0)?1:-1;知识点3switch语句1.switch语句格式及功能说明:A)C语言的switch语句用于实现算法中操作步骤之间在运行时的多(>=2)分支结构关系。例如问题4(根据某位同学的考试成绩x(整数)的值的分布,给该同学的成绩划分等级)的算法就实现为switch语句。B)switch后的表达式可以是任何类型;C)各个分支使用:case常量表达式:来标识,各个分支的常量表达式不可以相同,各个分支可以由若干个语句组成;分支最后一个语句是break;语句,该语句用跳出整个switch语句;D)运行时,计算switch后表达式的值,找到相匹配的分支入口(表达式的值=case后的常量值),然后执行此分支内的所有语句,最后执行break;语句跳出整个switch语句,结束整个switch语句。例如:当x=60时,x/10的值为:6,因此执行case6:后的分支:printf(“D”); ——输出“D”break;——跳出整个switch语句,其它分支不再执行;E)当表达式的值和所有的常量值都不相等时,就执行default分支;例如:当x=50时,x/10的值为:5,因此执行default:后的分支:printf(“E”); ——输出“E”由于default分支已经在最后,所以自动跳出整个switch语句,其它分支不再执行;F)各个分支的书写先后次序并不影响程序的执行,通常,default分支在最后。知识点4if语句嵌套if语句的真、假分支部分可以是任何的语句,因此,真、假分支中可能又含有if语句,这时就出现了if语句的嵌套使用。C语法规定:当出现if语句嵌套时,else和它前面最近的if语句匹配。知识点5关系表达式和逻辑表达式特别要注意:c语言中是用非0表示逻辑真的,用0表示逻辑假的。1)关系表达式:表达式的数值只能为1(表示为真),或0(表示假)当关系的表达是为真的时候得到1。如9>8这个是真的,所以表达式的数值就是1;2)逻辑表达式:只能为1(表示为真),或0(表示假)a)共有&&||!三种逻辑运算符号。b)!>&&>||优先的级别。c)注意短路现象。考试比较喜欢考到。d)要表示x是比0大,比10小的方法。0<x<10是不可以的(一定记住)。是先计算0<x得到的结果为1或则0;再用0,或1与10比较得到的总是真(为1)。所以一定要用(0<x)&&(x<10)表示比0大比10小。五、循环结构知识点1三种循环结构的比较:while语句do-while语句for语句语句格式while(循环条件表达式){循环体语句部分;}do{循环体语句部分;}while(循环条件表达式);for(E1;E2;E3;){循环体语句部分;}执行流程次数循环体执行0次或0次以上。循环体执行1次或1次以上。循环体执行0次或0次以上。共同点C语言的while语句、do-while语句、for语句都是循环结构。它们在控制循环时,都是使用循环条件表达式来控制循环的结束,一旦进入了循环,只有当循环条件表达式为假时,才推出循环。一般情况,同一个循环结构关系可以使用这三种语句来实现。例如:求1+2+3+…+100i=1;sum=0;while(i<=100){sum=sum+i;i++;}i=1;sum=0;do{sum=sum+i;i++;}while(i<=100);for(i=1,sum=0;i<=100;i++)sum=sum+i;知识点2break和continue的差别break:是打破的意思,(所以看见break就退出整个一层循环。continue:是继续的意思,(继续循环运算),但是要结束本次循环,就是循环体内剩下的语句不再执行,跳到循环开始,然后判断循环条件,进行新一轮的循环。六、函数知识点1函数:是具有一定功能的一个程序块;是C语言的基本组成单位。要求掌握的库函数:sqrt()fabs()pow()sin()其中pow(a,b)是重点。知识点2函数的定义方法A)无参函数的定义形式类型标识符函数名(){声明部分语句}B)有参函数的定义形式类型标识符函数名(形式参数表列){声明部分语句}C)空函数定义形式类型标识符函数名(){}知识点3函数的返回值函数返回值说明:1)return带回(有return;return表达式)2)函数值的类型应该在定义函数时指定3)如果函数值的类型和return语句中的表达式的值不一致,则以函数类型为准4)为了明确表示“不带回值”,可以用“void”定义为“无类型”知识点4函数参数和函数的值函数必须在定义或声明之后才能被调用形式参数是定义函数时定义并在定义的函数中使用;实际参数是在调用函数时给被调函数传递的实际值,在主函数中适用。实参对形参是“值”传递,实际参数向形式参数传递时,遵守赋值转换规则无类型说明的函数,默认为int型,且为外部函数数组作为函数的参数时:1)当数组元素作为函数的实参时,与同类型的变量作为函数的实参时用法相同。2)如果数组名作为函数的实参,此时将该数组的首地址进行传递3)知识点5函数的调用如果函数在使用的位置之前定义,则不需要再声明;函数调用时,按照定义时的形参的顺序将实参的值逐个传递给形参。函数的嵌套调用函数的递归调用(直接递归赫间接递归)知识点6局部变量和全局变量变量用来存放数据,C语法按照变量的空间作用域将变量分为局部变量和全局变量两大类。1.局部变量局部变量包括在函数内部定义的变量和函数的形参。局部变量的空间作用域约定:A)如果此变量在函数的复合语句内定义,则作用域为本复合语句内部,即,复合语句内定义的局部变量只在复合语句内有效!B)函数的形参和不在复合语句内定义的变量的作用域为:本函数内部,即,各函数的局部变量只在本函数内有效!2.全局变量是指在函数外部定义的变量,又称为外部变量。1)全局变量的定义格式及作用域定义格式1:存储类别static变量所属类型全局变量名x[=初值];说明:该语句定义了存储类别为static的全局变量x,x称为静态全局变量,该全局变量的作用域仅限于本源文件,只能在本源文件中使用,不能被其它源文件使用。x存放在静态存储区中,在程序开始运行时创建并赋初值,且只赋初值一次,以后每次使用它时它都是有值的,第n次使用时是第n-1次使用后的值,x在程序运行期间都存在,直到程序运行结束。定义格式2:存储类别extern变量所属类型全局变量名y[=初值];说明:该语句定义了存储类别为extern的全局变量y,该全局变量的作用域不限于本源文件,可以在本源文件和属于本C程序的其它源文件中使用。y存放在静态存储区中,在程序开始运行时创建并赋初值,且只赋初值一次,以后每次使用它时它都是有值的,第n次使用时是第n-1次使用后的值,x在程序运行期间都存在,直到程序运行结束。知识点7内部函数与外部函数。1、内部函数如果一个函数只能被本文件中其他函数调用,称为“内部函数”2、外部函数在定义函数时,如果在函数名和函数类型的前面加extern,则表示此函数是“外部函数”知识点8程序的运行运行程序ctrl+F9编译程序F9切换到屏幕alt+F5结束死循环ctrl+break知识点9静态变量和全局变量全局变量是静态变量,其它变量只有事先用static定义了的才是静态变量。2全局变量使用规则及其声明;存储类别为static的全局变量的作用域作用域不限于本源文件,可以在本源文件和属于本C程序的其它源文件中使用,因此其定义和使用可能发生在同一源文件内,也可能发生在不同的源文件内:定义和使用如果发生在同一源文件内,可以先定义后使用,或者先使用后定义,但当使用在定义之前时,在使用前必须使用“extern全局变量声明语句”来进行声明,该声明语句的格式为: 存储类别extern变量所属类型全局变量名y;或者 变量所属类型全局变量名y;定义和使用如果发生在不同源文件内,则在使用操作发生的源文件内必须在使用操作之前使用“extern全局变量声明语句”来进行声明,该声明语句的格式为: 存储类别extern变量所属类型全局变量名y;或者 变量所属类型全局变量名y;有了全局变量声明语句,就可以在同一源文件内static或extern全局变量定义之前使用该变量,还可以在不含有extern全局变量定义语句的源文件内使用extern全局变量。七、数组知识点1一维数组一维数组的定义
类型说明符
数组名[常量表达式]
(1)数组名的命名方法与变量名相同,遵循标识符命名规则;
(2)数组是用方括号括起来的常量表达式,不能用圆括号;
(3)常量表达式表示数组元素的个数,即数组的长度,数组的下标从0开始,下标的最大值为:
常量表达式-1;
(4)常量表达式中可以包括常量和符号常量,不能包括变量。
可以用赋值语句或输入语句使数组中的元素得到值,但要占用运行时间。可以使数组在运行之前初始化,即在编译阶段使之得到初值。
2、数组初始化:
(1)在定义数组时对数组元素赋以初值。如:
static
int
a[10]={0,1,2,3,4,5,6,7,8,9};
经过上面的定义和初始化后,a[0]=0,a[1]=1,…,a[9]=9。
(2)初始化时可以只对一部分元素赋初值。例如:
static
int
a[10]={0,1,2,3,4};
定义的数组有10个元素,但只对其中前5个元素赋了初值,后5个元素初值为0。
(3)如果想使一个数组的元素值全部为0,可以用下面的方法:
static
int
a[10]={0,0,0,0,0,0,0,0,0,0};
不能用:
static
int
a[10]={0*10};
如果对static型数组不赋初值,系统会对定义的所有数组元素自动赋以0值。
(4)在对全部数组元素赋初值时,可以不指定数组长度。3.一维数组的引用方法是:
C语言规定不能一次引用整个数组,引用时只能逐个元素引用,数组元素的表示形式为:
数组名[下标]知识点2二维数组的定义、初始化和引用
1.二维数组定义的一般形式为
类型说明符
数组名[常量表达式][常量表达式]二维数组可以看做是一种特殊的一维数组:它的元素又是一维数组。在C语言中,二维数组中元素的排列顺序是:先按行存放,再按列存放,即在内存中先顺序存放第一行的元素,再存放第二行的元素。
2.二维数组的初始化:
(1)分行给二维数组赋初值。如:
static
int
a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
以上赋值把第一个花括号内的数据赋给第一行元素,第二个花括号内数据赋给第二元素…,即按行赋值。
(2)可以将所有的数据写在一个花括号内,按数组排列的顺序对各元素赋值。
(3)可以对数组的部分元素赋初值。如:
static
int
a[3][4]={{1},{5},{9}};
以上赋值的结果是:数组第一列的元素分别赋了初值1,5,9,其余元素的值都是0。
(4)如果对二维数组的全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。
3.二维数组的引用:二维数组的元素可以表示为:
数组[下标][下标]
在引用二维数组时,必须是单个元素,不能是整个数组名。下标可以是一个表达式,但不能是变量。如果下标是一个表达式,注意表达式的值不能超出数组定义的上、下限。知识点3对a[10]、a[3][3]数组的讨论。对a[10]数组的讨论1、a表示数组名,是第一个元素的地址,也就是元素a[10]的地址。2、a是地址常量,所以只要出现a++,或者是a=a+2赋值的都是错误的。3、a是一维数组名,所以它是列指针,也就是说a+1是跳一列。对a[3][3]的讨论。1、a表示数组名,是第一个元素的地址,也就是元素a[10]的地址。2、a是地址常量,所以只要出现a++,或者是a=a+2赋值的都是错误的。3、a是二维数组名,所以它是行指针,也就是说a+1是跳一行。4、a[0]、a[1]、a[2]也都是地址常量,不可以对它进行赋值操作,同时它们都是列指针,a[0]+1,a[1]+1,a[2]+1都是跳一列。5、注意a和a[0]、a[1]、a[2]是不同的,它们的基类型是不同的。前者是一行元素,后三者是一列元素。知识点4二维数组中的行指针inta[1][2];其中a现在就是一个行指针,a+1跳一行数组元素。搭配(*)p[2]指针a[0],a[1]现在就是一个列指针。a[0]+1跳一个数组元素。搭配*p[2]指针数组使用a[2]变成*(a+2)a[2][3]变成*(a+2)[3]再可以变成*(*(a+2)+3)字符串知识点1字符串在C语言中,字符串是作为字符数组来处理的,字符串可以存放在字符型一维数组中,故可以把字符型一维数组作为字符串变量。字符串常量是用双引号括起来的一串字符。C语言中约定用′\0′作为字符串的结束标志,它占内存空间,但不计入串的长度,′\0′的代码值为0。系统对字符串常量也自动加一个′\0′作为结束符。例如″c
language″共有10个字符,但在内存中占11个字节,最后一个字节存放′\0′。
1、字符数组的输入输出
(1)逐个字符输入和输出
①在标准输入输出printf和scanf中使用%c格式描述符;
②使用getchar和putchar函数。例如:
for(i=0;i<10;i++)scanf(″%c″,&str[i])
for(i=0;i<10;i++)printf(″%c″,str[i]);
(2)字符串整体输入输出
①在标准输入输出函数printf和scanf中使用%s格式描述符;
输入形式:
char
str[6];
scanf(″%s″,str);
其中str为字符数组名,代表着str字符数组的起始地址,输入时系统自动在每个字符串后加入结束符′\0′。若同时输入多个字符串,则以空格或回车符分隔。
输出形式:
printf(″%s″,str);
输字符串时,遇第一个′\0′即结束。但可人为控制输出串所占的域宽,例如:
printf(″%6s″,str);②使用gets和puts函数输入输出一行
gets函数用来从终端键盘读字符,直到遇换行符为止,换行符不属字符串的内容。
调用形式:
gets(str);
str为字符数组名或字符指针,字符串输入后,系统自动将′\0′置于串尾代替换行符。若输入串长超出数组定义长度时,系统报错。
puts函数用来把字符串的内容显示在屏幕上。
调用形式:
puts(str);
str的含义同上。输出时,遇到第一个′\0′结束并自动换行,字符串中可以含转义字符。
知识点2字符串的指针以及指向字符串的指针变量
1.用指针方法实现一个字符串的存储和运算如:
char*strp=″china″;
此处定义了一个字符指针变量strp,变量中存放的是字符串第一个字符的地址。
C语言对字符串常量是按字符数组处理的,它实际上在内存开辟了一个字符数组用来存放字符串变量,并把字符串首地址赋给字符指针变量strp。在输出时用
printf(″%s″,strp);
通过字符数组名或字符指针变量可以输出一个字符串。而对一个数值型数组,是不能企图用数组名输出它的全部元素的。知识点3字符指针变量与字符数组
虽然用字符数组和字符指针变量都能实现字符串的存储和运算,但它们二者之间是有区别的,不应混为一谈,主要有以下几点:
(1)字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址(字符串的首地址),决不是将字符串放到字符指针变量中。
(2)对字符数组只能对各个元素赋值,不能用以下办法对字符数组赋值。
char
str[12];
str=″I
love
China!″;
而对字符指针变量,可以采用下面方法赋值:
char*b
b="I
love
China!″;
但注意赋给b的不是字符,而是字符串的首地址。
(3)赋初值时,对以下的变量定义和赋初值:
char*b=″I
love
China!″;
等价于:
char*b;
b=″I
love
China!″;
(4)在定义一个数组时,在编译时即已分配内存单元,有确定的地址。而定义一个字符指针变量时,给指针变量分配内存单元,在其中可以放一个地址值,也就是说,该指针变量可以指向一个字符型数据,但如果未对它赋予一个地址值,这时该指针变量并未具体指向哪一个字符数据。
(5)指针变量的值是可以改变的。知识点4字符串处理函数
C语言中没有对字符串进行合并、比较和赋值的运算符,但几乎所有版本的C语言中都提供了有关的库函数。例如:
(1)strcat函数:连接两个字符数组中的字符串
(2)strcpy函数:字符拷贝函数
(3)strcmp函数:字符比较函数
(4)strlen函数:测试字符串长度的函数
(5)strlwr函数:将字符串中大写字母转换成小写字母
(6)strupr函数:将字符中小写字母转换成大写字母八、文件知识点1文件文件就是指一组相关数据的有序集合。每个文件都有一个文件名。文件通常是驻留在外部介质(如磁盘等)上的,在使用时才调入内存中来。从用户的角度看,文件可分为普通文件和设备文件两种。普通文件是指驻留在磁盘或其它外部介质上的一个有序数据集,可以是源文件、目标文件、可执行程序;也可以是一组待输入处理的原始数据,或者是一组输出的结果。对于源文件、目标文件、可执行程序可以称作程序文件,对输入输出数据可称作数据文件。设备文件是指与主机相联的各种外部设备,如显示器、打印机、键盘等。在操作系统中,把外部设备也看作是一个文件来进行管理,把它们的输入、输出等同于对磁盘文件的读和写。通常把显示器定义为标准输出文件,一般情况下在屏幕上显示有关信息就是向标准输出文件输出。如前面经常使用的printf,putchar函数就是这类输出。键盘通常被指定标准的输入文件,从键盘上输入就意味着从标准输入文件上输入数据。sCanf,getChar函数就属于这类输入。从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。例如,数5678的存储形式为:ASC码:00110101001101100011011100111000↓↓↓↓十进制码:5678共占用4个字节。ASCII码文件可在屏幕上按字符显示,例如源程序文件就是ASCII文件,用DOS命令TYPE可显示文件的内容。由于是按字符显示,因此能读懂文件内容。二进制文件是按二进制的编码方式来存放文件的。例如,数5678的存储形式为:0001011000101110只占二个字节。二进制文件虽然也可在屏幕上显示,但其内容无法读懂。C系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制。因此也把这种文件称作“流式文件”。知识点2文件类型指针
文件相关信息存放于结构体变量中,由系统定义,结构名为FILE。
typedefstruct
{shortlevel;
//缓冲区满或空的程度
unsignedflags;
//文件状态标志
charfd;
//文件描述符
unsignedcharhold;
//如无缓冲区不读取字符
shortbsize;
//缓冲区的大小
unsigned
char*buffer;//数据缓冲区的位置
unsignedar*curp;
//指针,当前的指向
unsignedistemp;
//临时文件,指示器
shorttoken;
//用于有效性检查
}FILE;
FILE*fp;
//定义文件型指针变量fp
知识点3打开关闭文件1、文件打开
fp=fopen(文件名,使用文件方式);e.g.fp=fopen("a1","r");
//以只读方式打开文件a1(1)文本文件:"r"-为输入打开一个文本文件;"w"-为输出打开一个文本文件;"a"-向文本文件尾增加数据(2)二进制文件:"rb","wb","ab".(3)文本文件:"r+"/"a+"-为读/写打开一个文本文件;"w+"-为读/写建立一个文本文件。(4)二进制文件:"rb+","wb+","ab+"。e.g.if((fp=fopen("file1","r"))==NULL)
//打开文件进行判断
......2、文件关闭
fclose(文件指针);
//如fclose(fp);
知识点4文件读写函数1、读写字符(1)putc(ch,fp);
//把字符ch输出到文件指针fp指向的文件中,同fputc(ch,fp)(2)ch=getc(fp);
//从文件指针fp指向的文件中读取一个字符,同fgetc(fp)(3)putchar(c);
//在studio.h中定义宏#defineputcharfputc(c,stdout),将c的值输出到终端(4)ch=getchar();
//宏#definegetcharfgetc(stdin),将键盘输入的值给ch2、读写数据项(1)fread(buffer,size,count,fp);
//从文件中读取(2)fwrite(buffer,size,count,fp);
//写入文件注:buffer为读入/读出数据的存放地址;size为要读写的字节数;count要读写多少个size的数据项。e.g.structstudent
{
}stud[30];
for(i=0;i<30;i++)
fread(&stdu[i],sizeof(structstudent),1,fp);
//从fp中读入30个学生的数据
for(i=0;i<30;i++)
fwrite(&stdu[i],sizeof(structstudent),1,fp1);
//将学生数据输出到磁盘文件fp1中3、格式化读写函数(1)fprintf(文件指针,格式字符串,输出列表);
//数据格式化输出到文件(2)fscanf(文件指针,格式字符串,输入列表);
//从磁盘文件格式化读出数据e.g.fprintf(fp,"%d,%6.2f",i,t);
//将i和t的值输出到fp指向的文件中
fcanf(fp,"%d,%6.2f",&i,&t;);//从fp指向的文件中读取ASCII字符,赋给i、t。注意:用fprintf和fcanf函数,在输入时要将ASCII码转换为二进制形式,在输出时又要将二进制形式转换成字符。4、读写一个字(整数)(1)putw(i,fp);
//将整数i输出到fp指向的文件中(2)i=getw(fp);
//从fp指向的文件中读取整数到内存5、读写字符串(1)fgets(str,n,fp);//从文件读取字符串n-1个(末尾为'\0',遇EOF或回车结束),放入字符数据str中。(2)fputs(str,fp);
//将字符串输出到fp指向的文件中e.g.fputs("China",fp);
知识点5文件定位函数1、rewind(fp):使位置指针重新返回文件的开头
e.g.rewind(fp);
//文件的位置指针重新回到fp文件的开头2、fseek(文件类型指针,位移量,起始点):改变文件的位置指针
注:"起始点"用0、1、2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 幼儿园文具仓库管理制度
- 吉林低压配电柜管理制度
- 幼儿园安全五项管理制度
- 日常安全培训管理制度
- 景区讲解工作管理制度
- 天津餐饮店加盟管理制度
- 旅游基础设施管理制度
- 孕婴童协会财务管理制度
- 家装公司市场部管理制度
- 幼儿园设计设备管理制度
- 热电厂汽轮机安全培训
- 2025行政执法人员政治理论和法律知识考试试题及参考答案
- uni-app移动应用开发课件 7-智慧环保项目
- 2025年厦门大学嘉庚学院图书馆员招考高频重点提升(共500题)附带答案详解
- 《oracle性能优化》课件
- 小学生手工剪纸课件
- 中药结肠透析治疗慢性肾衰竭的技术规范
- 2024年广东省广州市中考英语真题卷及答案解析
- 化工设备机械基础习题及参考答案
- 《课件旅游法培训》课件
- 高中生物(部编版)选择性必修3知识清单(问答版)
评论
0/150
提交评论