C语言单元7 文件
C语言教材第七章指针实验
C语⾔教材第七章指针实验第七章指针第⼀部分知识训练【知识要点】1. 地址与指针指针变量的概念:⽤⼀个变量专门来存放另⼀个变量的地址。
2. 指向变量的指针变量指针变量的形式:基类型 *指针变量名;&: 取地址运算符;*:指针运算符。
3. 指针与数组引⽤⼀个数组元素可以⽤下标法和指针法;可以⽤数组名作函数的参数。
4.指针与函数函数指针变量定义的⼀般形式为:类型说明符 (*指针变量名)();⼀个函数的返回值可以是⼀个函数。
【典型习题与解析】5. char * const p;char const * pconst char *p上述三个有什么区别?【解析】char * const p; //常量指针,p的值不可以修改;char const * p;//指向常量的指针,指向的常量值不可以改;const char *p; //和char const *p。
6. main(){int a[5]={1,2,3,4,5};int *ptr=(int *)(&a+1);printf("%d,%d",*(a+1),*(ptr-1));}输出结果是什么?【解析】答案:输出:2,5*(a+1)就是a[1],*(ptr-1)就是a[4],执⾏结果是2,5。
&a+1不是⾸地址+1,系统会认为加⼀个a数组的偏移,是偏移了⼀个数组的⼤⼩(本例是5个int)。
1)&a是数组指针,其类型为 int (*)[5];⽽指针加1要根据指针类型加上⼀定的值,不同类型的指针+1之后增加的⼤⼩不同。
2)a是长度为5的int数组指针,所以要加 5*sizeof(int),所以ptr实际是a[5],但是prt与(&a+1)类型是不⼀样的(这点很重要),所以prt-1只会减去sizeof(int*) a,&a的地址是⼀样的,但意思不⼀样。
3)a是数组⾸地址,也就是a[0]的地址,&a是对象(数组)⾸地址,a+1是数组下⼀元素的地址,即a[1],&a+1是下⼀个对象的地址,即a[5]。
C语言开发基础教程(Dev-C++) 第7章 字符串
✎
7.1.2 字符串
小提示:'\0'字符 字符串其实就是一个以空字符'\0'结尾的字符数组,在定义存储字符 串的数组时,要手动在数组末尾加上'\0',或者直接使用字符串对数 组进行初始化。
✎
7.1.2 字符串
字符数组的输出: 字符数组可以通过%s格式化输出,直接输 出数组名。 char char_array[6] = {"hello"}; printf("%s", char_array); //结果为hello
✎
7.2.1 常见的输入函数
2、getchar()函数 getchar()函数用于从标准输入中读取一个字符,其函数声明如下: int getchar(void); getchar()没有参数,可直接使用,其返回值为读取到的字符。
✎
7.2.1 常见的输入函数
3、gets()函数 gets()函数用于读取一个字符串,其函数声明如下: char *gets(char *str); gets()函数读取换行符之前的所有字符(不包括换行符本身),并在字 符串的末尾添加一个空字符‘\0’用来标记字符串的结束,读取到的字 符串会以指针形式返回。
✎
第7章 字符串
·字符数组与字符串 · 字符串指针 · 字符串的输入输出
· 字符串操作函数 · 数字与字符串转换 · 阶段案例
✎
7.1 字符数组和字符串
字符数组是由字符类型的元素所组成 的数组,字符串就存储在字符数组中, 在访问字符数组时,可使用下标法读 取指定位置的字符,也可使用%s格式 将字符数组中的元素以字符串的形式 全部输出。
✎
7.3.1 字符串比较函数
C语言第7章_文件及应用
精选ppt课件
16
7.2.2 用于文件操作的函数
2.文件的读写函数
1)字符读写函数:
int fputc ( int ch, FILE *fp); int fgetc(FILE *fp);
2)串读写函数
int fputs(const char *str, FILE *fp); char *fgets(char *str,int length,FILE *fp);
cchh=agretachd(d);r[20];
} sitf;(ch=='e' || ch=='E' ) break;
}i;f ((fp=fopen("mail","w"))==NULL)
f{close(fp);}
printf("file open failed!!!\n");exit(精0)选; ppt课件
21
}
7.2.2 用于文件操作的函数 /* 功 能: 建立一个学生通讯录的数据库文件*/
/* 说 明: 使用块写入函数fwrite()*/
#m{ inawcinlhu(i)dlee(1【录")std。例io.7h."15】如例7.11,用块写函数来建立学生通讯
FIL{E p*rfipn;tf("姓名:"); scanf("%s",);
返回值为指向此文件的指针,以后使用。 如果打开失败,返回值为NULL。
精选ppt课件
15
7.2.2 用于文件操作的函数
1.文件的打开与关闭函数
2)关闭文件 函数fclose()关闭由fopen()函数打开的流。 fclose()函数把遗留在缓冲区的数据写入文 件,实施操作系统级的关闭操作。同时释 放与流联系的文件控制块。
电大C语言程序设计 第7章 结构和联合
第7章 结构和联合 章 7.3 结构成员的访问 1.访问结构成员:通过点操作符“.”进行。 访问结构成员: 进行。 访问结构成员 通过点操作符“ 进行 访问code成员 例:person.code//访问 访问 成员 person.salary//访问 访问salary成员 访问 成员 2. 同类型的结构变量可相互赋值。 同类型的结构变量可相互赋值。 struct person { char name[20]; unsigned long id; float salary; }; person pr1={“Frank voltaire”,12345678,3.35}; person pr2; pr2=pr1; //同类型的结构变量可相互赋值 同类型的结构变量可相互赋值
第7章 结构和联合 章 7.2 结构变量的定义和初始化 结构变量定义方法有三种。 结构变量定义方法有三种。 1. 先定义结构类型,再定义变量 先定义结构类型, struct Arith { char op; int a,b; }; int xx=40; (1)struct Arith x,y; (2)struct Arith z1={'+',10,xx},z2={'*',60},z3=z1; (3)struct Arith *d=&z1; (4)struct Arith a[4]={{'+',3,7},{'-',10,5},{'*',6,4}, {'/',8,5}}; (5)struct Arith *b[ ]={&z1,&z2,a+2,&a[3]};
struct D{ int * a; int * ap; int maxsize; }; struct E{ int d,* e; struct B b; }; struct F{ double data; struct F * next; };
C语言程序设计(向华主编)_第7章_函数
fun1_2() {…… }
fun2() { …… fun2_1(); …… fun2_2(); …… }
fun2_1() {…… }
fun2_2() {…… }
《C语言程序设计》 语言程序设计》
清华大学出版社
第7章
函数
7.1
二、C 二、C函数的分类
1.从函数定义的角度分类 从函数定义的角度分类
函数概述
《C语言程序设计》 语言程序设计》
清华大学出版社
第7章
函数
习题
P187 3.(1)(2)(3)
《C语言程序设计》 语言程序设计》
清华大学出版社
第7章
函数
7.3
一、函数参数
函数参数及返回值
参数的作用: 参数的作用: 函数的参数用于建立函数之间的数据联系。当一个函数调用另一个函数时, 实际参数的值会传递给形式参数,以实现主调函数与被调函数之间的数据通 信。同时,函数参数的运用还可提高一个函数的灵活性和通用性。 [例7.3] 编写一个函数,打印一条由星号构成的横线。 例 编写一个函数,打印一条由星号构成的横线。 main() { pstar() ; /* 第一次调用pstar函数 */ printf(" 欢迎使用本程序!\n") ; 运行结果: 运行结果: pstar() ; /* 第二次调用pstar函数 */ ******************** } 欢迎使用本程序! pstar() /* 定义pstar函数 */ ******************** { printf("********************\n") ; }
《C语言程序设计》 语言程序设计》
清华大学出版社
第7章
c语言文件的语法
c语言文件的语法
在C语言中,文件操作是通过标准库中的文件函数实现的。
下面是一些基本的文件操作语法:
1. 打开文件:使用fopen()函数打开文件。
该函数需要两个参数,第一个参数是文件路径和文件名,第二个参数是打开文件的模式。
例如,以下代码打开名为""的文件,并以只读模式打开它:
```c
FILE fp = fopen("", "r");
```
2. 读取文件:使用fscanf()或fgets()函数读取文件内容。
例如,以下代码从文件中读取一行文本并将其存储在字符串变量中:
```c
char line[100];
fgets(line, 100, fp);
```
3. 写入文件:使用fprintf()或fputs()函数将数据写入文件。
例如,以下代码将字符串写入文件中:
```c
fprintf(fp, "Hello, world!");
```
4. 关闭文件:使用fclose()函数关闭文件。
例如,以下代码关闭之前打开的文件:
```c
fclose(fp);
```
5. 删除文件:使用remove()函数删除文件。
例如,以下代码删除名为""的文件:
```c
remove("");
```
这些是C语言中文件操作的基本语法。
在实际使用中,还需要注意文件的错误处理,例如检查文件是否成功打开、读取或写入。
计算机二级C语言第七章函数
C.int fun(int a[], int *, int);
D.int fun(int [], int *, int);
正确答案:A 【解析】C语言中,函数声明的函数名、返回值类型和参数列表必须与函数定义相同,其中参数列表中可以省略参 数名。题意中,fun()函数返回整型,三个参数分别是:整型指针、整型指针、整型,选项A中,第一个参数应该是 整型指针类型,第二个参数也应该是指针类型,错误;其他选项都正确,本题答案为A。
函数说明的一般形式如下: 类型名 函数名(参数类型1,参数类型2,……) 如: double sum( double, double );
也可采用下面的形式: 类型名 函数名(参数类型1 参数名1,参数类型2 参数名2,……) 如: double sum( double p, double q );
正确答案:A 【解析】数学库中定义了函数的名称、参数个数与类型、返回值类型与具体的函数体,A选项正确。编译预处理时, 预处理程序将查找指定的被包含文件,并将其复制到#include命令出现的位置上,B、C选项错误。不引用 math.h文件,文件编译时,编译器无法识别没有被定义的sin函数,D选项错误。
关于C语言函数说明的位置,以下叙述正确的是( ) A.在函数说明之后对该函数进行调用,编译时不会出现错误信息 B.函数说明可以出现在源程序的任意位置,在程序的所有位置对该函数的调用,编译时都不会出现错误信息 C.函数说明只能出现在源程序的开头位置,否则编译时会出现错误信息 D.函数说明只是为了美观和编译时检查参数类型是否一致,可以写也可以不写
C语言程序设计_课件_第七章(适于清华谭浩强版)
注意:
(1) return(表达式); 和return 表达式;都 是正确的。 (2) 带返回值的函数只能返回一个值。 (3) 在函数定义时,允许使用多个return语句, 但是应尽量在末尾使用一个return语句。 (4) return语句中的表达式与函数的返回值类 型不匹配时,以函数定义时的返回类型为准。
问题的提出 函数基础 函数的定义 函数说明 函数调用 参数传递 程序举例 递归调用 变量的存储类别
7.1 问题的提出
例6.20它可以解决的问题有: ①输入若干个学生的姓名、某课程的期中 和期末成绩,并计算每个学生的总评成绩; ②计算总评成绩的分数段情况; ③输出所有学生的姓名、期中、期末和总 评成绩; ④查询某个学生的总评成绩。
函数调用时需要传递数据。调用函数要将 实参的值传送给被调用函数的形参。 若函数定义首部是 double power(double x,int n) /*函数定义 */ 调 用 形 式 是 可 以 是 power(y,m) , 也 可 以 是 power(3.0,5)。 其中,x和n是形式参数,y和m是实际参数,3.0 和可以是一个变量 名,因为变量名也构成一个表达式,形式参数只 能是变量名。当实际参数是变量名时,它与形参 的名称既可以相同,也可以不同,只是要注意, 在函数定义内部应该使用形参的名称。 (2) 实际参数与形式参数的参数个数、数据类型 和顺序都应该一致,如果数据类型不一致,系统 将按照自动转换规则进行转换。
7.3 函数的定义
7.3.1 函数的定义形式 在C语言中函数定义的形式有两种。
第一种:
函数返回值的数据类型说明 函数名称(带有类型说明的参数表)
{
函数内部数据说明; 语句;
}
第二种:
习题7 文件
b.从文件f中读取长度为n的字符串存入指针s所指的内存
c.从文件f中读取n个字符串存入指针s所指的内存
d.从文件f中读取长度不超过n-1的字符串存入指针s所指的内存
14、命令行参数是指在操作系统状态下执行命令程序时允许带的参数。
对
错
15为了提高读写效率,我们进行读写操作后不应关闭文件以便下次再进行读写。
对
错
16、系统的标准输入文件是指_______。
a.键盘
b.显示器
c.软盘
d.硬盘
对
错
10、fseek函数中的第二个参数代表的位移量是相对于的文件的开始来说的。
对
错
11、fgetc函数的作用是从文件读入一个字符,该文件的打开方式必须是_______。
a.只写
b.追加
c.答案B和C都正确
d.读或读写
12、C语言中的文件是一种流式文件,读写时均以字符为单位。
对
错
13、标准库函数fgets(s,n,f)的功能是_______。
对
错
4、在c语言中将文件视为无结构的字节流。
对
错
5、若执行fopen函数时发生错误,则函数的返回值是_______。
a. 1
b. 0
c.地址值
d. EOF
6、c语言通过文件指针对它所指向的文件进行操作。
对
错
7、
rewind函数的作用是位置指针返回移动前的位置。
对
错
8、文件正常关闭时返回1。
对
错
9、由于在c语言中将文件视为无结构的字节流,所以不能对文件进行二进制读写。
1、利用fseek函数可实现的操作是_______。
c语言思政单元课程设计
c语言思政单元课程设计一、课程目标知识目标:1. 理解C语言的基本语法和编程结构,掌握顺序、选择和循环三种基本控制结构。
2. 学会使用C语言进行简单的数据处理和运算,并能解决实际问题。
3. 了解C语言在计算机科学中的地位和作用,认识到编程对培养逻辑思维和解决问题能力的重要性。
技能目标:1. 能够独立编写简单的C程序,具备调试和修改程序的能力。
2. 学会使用C语言进行基本的输入输出操作,掌握常用库函数的使用方法。
3. 培养良好的编程习惯,遵循代码规范,提高代码的可读性和可维护性。
情感态度价值观目标:1. 培养学生对编程的兴趣,激发他们主动探索计算机科学的热情。
2. 通过团队合作解决问题,培养学生沟通协作、共同进步的精神。
3. 使学生认识到编程在社会主义现代化建设中的重要作用,树立科技强国的信念。
分析课程性质、学生特点和教学要求,本课程目标旨在让学生掌握C语言的基本知识和技能,培养他们运用编程解决问题的能力。
同时,注重培养学生的情感态度价值观,使他们在学习过程中形成正确的价值观和积极的学习态度。
通过分解课程目标为具体的学习成果,为后续的教学设计和评估提供明确的方向。
二、教学内容本课程教学内容主要包括以下几部分:1. C语言概述:介绍C语言的发展历程、特点和应用领域,使学生了解C语言在计算机科学中的地位。
2. 基本语法:讲解变量、数据类型、运算符、表达式等基本概念,使学生掌握C语言的基本语法。
3. 控制结构:分别介绍顺序结构、选择结构(if-else语句、switch语句)和循环结构(for、while、do-while循环),培养学生的逻辑思维能力。
4. 函数:讲解函数的定义、调用、参数传递等概念,使学生学会模块化编程。
5. 数组与字符串:介绍一维数组、二维数组、字符串的基本操作,培养学生处理数据的能力。
6. 指针:讲解指针的概念、使用方法和指针与数组、函数的关系,提高学生的编程技巧。
7. 结构体与文件:讲解结构体的定义和使用,文件的基本操作,使学生能够处理复杂的数据结构。
C语言讲义第07章-结构体与其他构造数据类型(原)
atoi(char*str);将数字字符串转换为整型。
atof(char*str);将数字字符串转换为双精度的 实型。 atol(char*str);将数字字串转换长整型。 使用上述函数,要包含头文件"stdlib.h"。
7.1 结构体
• 例7-1类型转换函数在结构体变量数据输 入中的应用示例。定义结构体类型及变 量,输入一个学生的有关信息并输出。 例7-1源程序
7.1 结构体
结构体变量一旦进入其作用域,系统便根据结构体类 型定义时成员排列的先后,自动为结构体变量的每一 个成员分配相应的存储空间。结构体变量的各个成员 均有自己的存储空间,结构体变量所占存储空间的大 小为各成员所占空间之和。 例如:student1 所占空间大小为:8 + 10 + 1+ 4 * 2 = 27(字节)。
例如:指针变量p1,p2指向结构体变量x。
p1 = p2 = &x; 例如:通过结构体指针p1和p2来引用结构体变量x成员。以下三种 方式是等价的。 x.no、、x.score[0] p1->no、p1->name、p1->score[0]
(*p2).no、(*p2).name、(*p2).score[0]
7.2 结构体数组的定义和引用
• 结构体数组的输入与输出一般在循环结构中进行, 一次循环可以输入或输出一条结构体记录。 • 例7-3定义一个结构体数组用于存储和显示三个学 生的基本信息。
例7-3源程序
• 程序运行结果如下:
no. 06030217 06050105 06010116 name zhang san li si wang wu sex m m f age 19 18 18 depart Economy & Commerce engineering Computer science
C语言---7-class-while和函数市公开课获奖课件省名师示范课获奖课件
1.函数调用旳形式和过程
函数名(实参表)
常量、变量
❖ 使用返回值: 常用于返回成果旳函数旳调用
volume = cylinder (radius, height ); printf(“%f \n” , cylinder (radius, height ));
❖ 完毕操作: 常用于void类型函数旳调用
调用函数 实参形参
执行函数中旳语句 返回调用它旳地方
2.参数传递
❖ 函数定义时旳参数被称为形式参数(简称形参)
double cylinder (double r, double h);
❖ 函数调用时旳参数被称为实际参数(简称实参)
volume = cylinder (radius, height);
return result;
/* 返回成果 */
}
运营成果:
Enter radius and height: 3.0 ,10
Volume = 282.743
5.1.2 函数旳定义
❖ 函数是指完毕一种特定工作旳独立程序模块。
库函数:由C语言系统提供定义
如scanf()、printf()等函数
自定义函数:需要顾客自己定义
b = a + b; a = a + b; } printf ("%d " , a ); return 0; }
printf ("Volume = %.3f\n", volume);
}
例5-1源程序
double cylinder (double r, double h) /* 定义求圆柱体积旳函数 */
{ double result; result =3.1415926 * r * r * h;
c语言(7)
内容:
§6.5 循环嵌套
§6.6 break和continue语句
§6.7 循环结构程序举例
§6.5 循环的嵌套
一、 循环的嵌套
在一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。
二、循环嵌套结构的执行
外循环每执行一次,内循环执行一个周期。
k=sqrt(m);
for (i=2;i<=k;i++)
if (m%i==0) {flag=1;break;}
if (flag==0) /* 按flag的值判断m是否为素数 */
{if (n%5==0) printf("\n"); /*每行输出5个数据*/
printf("%8d",m); /*输出格式字符使用%8d是为了输出格式清晰*/
#include "math.h" /* 要使用数学函数,必须包含math.h头文件 */
main ()
{int s=1; /* 变量s用来存放每项的系数 */
float pi=0,n=1; /* 变量pi用来存放总和,n用来存放项数 */
while (1/(2*n-1)>=1e-6) /* 循环结束条件是当项值的绝对值小于0.000001 */
printf("\n");/* 内循环的第三个语句输出回车换行符 */
}
}
§6.6 break语句和continue语句
一、 break 语句
1. 格式: break;
2. 功能: 提前结束循环,从循环体中无条件跳出来,转到循环语句后面的语句执行。
计算机等级考试 C语言 第7章C语言 函数
/* 函数功能: 用迭代法计算n!
返回值函数类入型口参数:函整数型名变说量n明表示阶乘的形阶参数表,函
函数返回值: 函返数回的n!功的能值
数入口
*/
long Fact(int n) /* 函数定义 *函/ 数内部可以定义
{
只能自己使用的变
int i;
量,称内部变量
long result = 1;
for (i=2; i<=n; i++)
2/51
问题的提出
此前,我们所有的代码基本上都是放在main函 数中,这对于一个小的问题来说没问题,但如 果一个问题较大,里面涉及到成百上千个变量 ,将所有代码放在main函数里面显然是非常糟 糕的事情。
我们可以将一个大的问题分解成一个一个的小 问题,每个小问题放在一个函数里面,最后在 main函数里整合。这种思想实际上就是所谓的 “分而治之”。
printf("Input data error!\n"); } else {
for(i=2;i<=n;i++) {
result*=i;
2019/9/10
} return result; } }
25/51
防御性程序设计(Defensive Programming)
但是输入-1后,会输出 :
Input data error!
int i; long result=1; for(i=2;i<=n;i++) {
result*=i; } return result; }
int main() { int m; long ret;
printf("input m:"); scanf("%d",&m); ret=Fact(m); printf("%d!=%d\n",m,ret); return 0; }
C语言第七章
4、strcpy(字符数组1,字符数组2):
例:main()
把“字符串2”的值拷贝到“字符串1”中。
{char str1[10]; char str2[ ]="Chinese"; strcpy(str1,str2); puts(str1); } 输出: Chinese 说明: (1)字符数组1的长度不应小于字符串2的长度。 (2)“字符数组1”必须写成数组名形式,“串2”可以是字符数 组名,也可以是一个字符串常量。如:strcpy(str1,“China”); (3)拷贝是‘\0‟一起拷贝。 (4)不能用赋值语句将一个字符常量或字符数组直接赋给一个 字符数组。 (5)可以用strcpy函数将字符串2中前面若干个字符拷贝到字符 数组1中去。 例如:strcpy(str1,str2,2);
3、部分元素赋值: int a[3][4] = {{1},{5},{9}}; 1 0 0 0 5 0 0 0 9 0 0 0
仅对a[0][0]、a[1][0]、a[2][0]赋值,编译器自动为未赋
值元素指定初值0。
4、如果对全部元素赋初值,则第一维的长度可以 不指定,但必须指定第二维的长度。 int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 与下面定义等价: int a[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12};
[例6.6]: main() { int i; char c1[ ] = {"How are you?"}; char c2[15]; scanf("%s", c2 ); for(i=0;i<12;i++) printf("%c", c2[i] ); printf("%s", c1 ); } 程序运行时:输入:abcdefghijklmno 结果:abcdefghijklHow are you?
C语言第7章 函数
函数的 参数?
int main() {
int a=12, b=24; … printf("%d\n", Average(a, b)); … return 0; }
int Average(int x, int y) {
int result;
result = (x + y) / 2;
return result; }
C语言程序设计
22/114
7.3.1 函数调用
每次执行函数调用时
现场保护并为函数的内部变量(包括形参)分配内存 把实参值复制给形参,单向传值(实参形参) 实参与形参数目一致,类型匹配(否则类型自动转换)
int main()
{
①
int a=12, b=24,ave;
…
ave = Average(a, b);
21
1*2
3 (1*2)
(1*2)*3
}
4 (1*2*3)
(1*2*3)*4
return result;
……
…
}
n (1*2*3*4*…)
(1*2*3*4*…)*n
C语言程序设计
监视窗(Watches)
26/114
7.3.2函数原型
第7章 函数
函数原型(Function Prototype)
调用函数前先声明返回值类型、函数名和形参类型
Function Call?
int main() {
int a=12, b=24, ave; … ave = Average(a, b); … return 0; }
int Average(int x, int y) {
int result;
《C语言程序设计》课件 《C语言程序设计》课件 第7章 函数的使用
<<C语言程序设计>>
电脑模块化组装
模块化程序
Page 4
7.1 为什么使用函数
【例7-1】打印输出如下所示超市购物小票的票头
某某超市欢送您 *****************************
*
分析
1、第一行为欢送词,自定义一个函数print_welcome来实 现欢送词的输出功能 2、第二行为一定数量的“*〞号,自定义一个函数 print_star来实现 “*〞号的输出功能
第7章 函数的使用
<<C语言程序设计>> 课程
<<C语言程序设计>>
Page 1
主要内容
1 为什么使用函数 2 函数的根本使用 3 函数递归调用 4 用带参数的宏定义代替公式型函数 5 函数和变量的作用域及存储类型
<<C语言程序设计>>
Page 2
问题引入
数学函数sqrt()、字符串处理函数strlen() 等。这些具有通 用功能的函数称之为标准库函数,是由C语言开发环境提供, 标准库函数给编程带来了极大的方便。
形式参数 实际参数
<<C语言程序设计>>
Page 17
7.3 函数的调用
函数调用的形式
函数名(参数表) – 对实参的要求
• 实参个数和形参个数相等。 • 实参的类型要和形参的类型一
致。 • 被调用函数无形参,实参表是
空的,但括号不能省略。
main( ) { int a=1,b=3,c;
函数调用
c=max(a,b);
{ int n=1, i; for(i=1;i<=a;i++) n=n*i; return n;
c语言第七章PPT课件
{ float z;
z=x+y;
return (z);
共 71 页 第 21 页
}
第21页/共70页
3. 函数声明和函数定义的区别
函数声明的作用是把函数的名字、函数类型以 及形参的类型、个数和顺序通知编译系统,以便在调 用该函数时系统按此进行对照检查。
函数定义是指对函数功能的确立,包括指定函 数名、函数值类型、形参及其类型、函数体等,它是 一个完整的、独立的函数单位。
[例7-2]
}
形参变量的说明
(现代形式) int max ( x, y)
int max (int x,int y) { int z; z=x>y?x : y; return z; }
int x,y; { int z;
形参变量的说明 (传统形式)
z=x>y?x : y;
return z;
}
共 71 页 第 7 页
用户定义函数: 形式
无参函数 有参函数 空函数
共 71 页 第 2 页
第2页/共70页
函数示例
[7-1] 输入三个整数,计算它们的和并输出运算结果。
main( )
{ int a, b, c, sum ;
scanf("%d,%d,%d",&a,&b,&c);
sum=add(a,b,c); printf(" sum= %d\n",sum); }
}
形参:通知系统 要预留内存位置.
把函数的 结果赋给函数名
实参:在运行时把 值传给函数.
共 71 页 第 14 页
第14页/共70页
数据在函数间的传递
main()
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
fclose(fp);
}
程序运行后,屏幕显示:
说明:在书写时,要严格按照格式书写,例如:将路径写 成 “ C:\STUDENT\ch01_01\ch01_01.c” 是 不 正 确 的 , 这 一 点 要特别注意。路径写成“C:\\STUDENT\\ch01_01\\ch01_01.c” 才是正确的,这里的“\\”的含义是:第一个“\”代表转义 字符,第二个“\”才是字符本身。
7.2 文件的分类
在C语言程序设计中,从不同的角度可以对文件作不同的分类。
1)根据文件的内容,可分为程序文件和数据文件。其中程序文件是程 序的源文件代码,数据文件是程序运行时需要的原始数据及输出的结果。 这两类文件都保存在磁盘上,随时可以使用。
2)根据文件的组织形式,可分为顺序存取文件和随机存取文件。可以 进行顺序存取的文件称为顺序文件;可以进行随机存取的文件称为随机 文件。
例如:
if((fp=fopen(“file1”,”rb”))= =NULL) { printf(“\n error on open file1”); getch( ); exit(1); }
该程序段表示:如果返回的指针为空,则不能打开当前 目录下的文件“file1”,同时给出错误提示信息“error on open file1”。程序中的getch()函数的功能是从键盘输入 一个字符,该字符不在屏幕上显示。其实getch()在这里的 作用是停留等待,只有当用户从键盘敲任意键时,程序才继续 执行,我们可以利用这个等待时间来阅读出错提示,找到错误 原因。当敲任意键后,执行语句“exit(1);”,从而退出程序。
7.4 文件的读写
文件的读写操作由文件读写函数完成,常用的读写函数 有 fputc 、 fgetc 、 fread 、 fwrite 、 fputs 、 fgets 、 fprintf 、 fscanf、putw、getw等。
7.4.1 字符读写函数
1. 读字符函数——fgetc函数 读字符函数——fgetc函数:
的文件不存在,则按照指定的文件名建立该文件,若打开的文 件已经存在,则将该文件删除,重建一个新文件。使用时要特 别注意这一点。
3. 如果要向一个已经存在的文件后面追加新的信息,那 只能用“a”方式打开文件。但此时该文件必须是存在的,否则 将会出错。
4.在打开一个文件之前,应该定义文件型指针, 以便接收函数fopen返回的地址。如果出错,fopen将返回 一个空指针NULL。在程序中可以用这一信息来判别是否完成 打开文件的工作,并做相应的处理。
fgetc函数用来从指定的文件读入一个字符,该文件必须是读 或写方式打开的。fgetc函数的调用格式如下:
ch=fgetc(fp);
文件名通常是文件变量或文件数组;“使用文件方式”是 指文件的类型和操作要求。文件的使用方式共有12种,下表 给出了文本文件的符号和意义。
文本文件的符号及其含义
以上六种方式是针对“文本文件”类型的,下表给出了 另外六种文件的操作方式是针对“二进制文件”类型的。
二进制文件的符号及其含义
可以看出,上面两个表的作用基本上是相同的,唯一的区
C语言在标准输入输出函数库中定义了对文件操作的若干函数, 其中fopen()函数用来打开磁盘文件。
格式:FILE *fp; fp=fopen(“文件名”,“文件使用方式”);
功能:以指定的文件使用方式打开一个文件。 说明: (1)fp是FILE文件类型指针,用来指向被打开文件数据区(结构 变量)的起始地址。 (2)“文件名”为要打开文件的文件名,若不在当前默认路径, 则要把路径书写完整。 (3)“文件使用方式”指文件类型和操作方式,见表9-1。
上述语句的含义是关闭fp所指向的文件,同时自动释 放分配给文件的内存缓冲区。当正常完成关闭文件的操作 时,fclose函数的返回值为0,表示已正确关闭指定的文 件;如返回非0值则表示有错误发生。
【例7.2】文件的打开与关闭应用举例。
/*功能:文件的打开与关闭。*/
#include<stdio.h>
别是下表增加了一个表示二进制的字符“b”。其中,文件使 用方式由r、w、a、t、b和+六个字符组成,各字符的含义 如表所示。
文件使用方式中的字符及其含义
对上表做以下补充说明: 1. 程序中凡是用“r”打开一个文件时,表明该文件必须
已经存在,且只能从该文件读出数据。 2.用“w”打开的文件也只能向该文件写入数据。若打开
void main()
{
FILE *fp;
/*定义一个文件指针*/
if((fp=fopen("C:\\STUDENT\\ch01_01\\ch01_01.c","rb
"))==NULL)
{
printf("file can not open!\n");
exit(1);
}else
printf("The file succeed open!\n");
ห้องสมุดไป่ตู้ 7.3.2 文件的关闭
文件一旦使用完毕,应使用关闭文件函数fclose把文件 关闭,以避免文件数据丢失等情况的发生。
fclose函数调用的一般形式为: fclose(FILE *fp);
其中,参数fp是文件型指针,通过fopen()函数已经获得, 它指向某个打开的文件。例如 :
fclose(fp);
3)根据文件的存储形式,可分为ASCII和二进制文件。其中,ASCII文 件也称文本文件,是一种字符流文件。ASCII码文件的每1个字节存储1 个字符,因而便于对字符进行逐个处理。但一般占用存储空间较多,而 且要花费转换时间(二进制与ASCII码之间的转换)。
1
7.2 文件的打开与关闭
9.2.1 文件的打开
2
7.3 文件的打开与关闭
由于文件的打开与关闭都是利用系统函数来实现的,因此, 在编写有关文件的程序时,应该在其中包含“stdio.h”头文 件。
7.3.1 文件的打开
文件打开函数fopen用来打开一个文件,其调用的一般 形式为:
文件指针名=fopen(文件名,使用文件方式); 其中:“文件指针名”必须是被说明为FILE类型的指针变量; “文件名”是被打开文件的文件名;