C语言程序设计 第8章 函数

合集下载

《C语言程序设计教程》第三版课后习题参考答案

《C语言程序设计教程》第三版课后习题参考答案

《C语言程序设计教程》第三版课后习题参考答案C语言程序设计教程第三版课后习题参考答案第一章:C语言概述1.1 C语言的特点答案:C语言是一种通用的、面向过程的程序设计语言,具有高效、简洁、灵活等特点。

它提供了丰富的程序设计元素和功能,适用于各种不同的应用领域。

1.2 C语言程序的基本结构答案:C语言程序由预处理指令、函数声明、函数定义、变量声明和语句组成。

其中,预处理指令用来引入头文件或定义宏,函数声明用来声明函数的名称和参数,函数定义用来实现函数的功能,变量声明用来声明变量的类型和名称,语句用来表达具体的计算过程。

1.3 C语言的数据类型答案:C语言提供了多种数据类型,包括基本类型(整型、浮点型、字符型等)和派生类型(数组、指针、结构体等)。

每种数据类型在内存中占据一定的存储空间,并具有特定的取值范围和操作规则。

1.4 C语言的运算符和表达式答案:C语言支持各种运算符和表达式,例如算术运算符(+、-、*、/等)、关系运算符(>、<、==等)、逻辑运算符(&&、||、!等)等。

通过运算符和表达式可以进行各种数值计算和逻辑判断。

第二章:基本数据类型与运算2.1 整型数据类型答案:C语言提供了不同长度的整型数据类型,包括有符号整型(int、long等)和无符号整型(unsigned int、unsigned long等)。

整型数据类型可以表示整数值,并具有不同的取值范围。

2.2 浮点型数据类型答案:C语言提供了浮点型数据类型(float、double等),用来表示带小数部分的实数值。

浮点型数据可以表示较大或较小的数值,并具有一定的精度。

2.3 字符型数据类型答案:C语言提供了字符型数据类型(char),用来表示单个字符。

字符型数据可以用于表示各种字符(包括字母、数字、符号等)。

2.4 布尔型数据类型答案:C语言不直接支持布尔型数据类型,但可以使用整型数据类型来表示布尔值(0表示假、非零表示真)。

C语言程序设计教程(电子教案)

C语言程序设计教程(电子教案)
实用文档
学习目标
对C语言有一个概括的了解, 能够编写包含键盘输入、计算和 显示输出等操作的简单C程序。
4
主要内容
• C语言的产生与特点 • 简单C程序的组成 • C语言应用程序开发的基本步骤
5
1.1 C语言的产生及特点
C语言是为了编写系统程序而在1968年开始 研发的计算机高级语言
C语言表达能力强,使用灵活,程序结构清 晰,紧凑,可移植性好
指针 类型
17
基本数据类型说明符
整型:int long
字符型:char 实型:float
double long double
18
2.2 常 量
常量∶在程序运行过程中,其值不能被改 变的量。
一. 不同数制整型常量的表示
例如: 12 :十进制数 12
012 :八进制数 12(等于十进 制数10,用前导符0表示八进制数常量)
计算x+y+z,并将结 8果赋给变量sum
显示变量 sum的值
主函数 main()
一般C程序的组成
【例1-2】采用模块结构,改写例1-1的程序。 add(int x,int y,int z )
{ return(x+y+z);
}
函数add()
调用函数 add()
main() { int x,y,z; printf("Please Input Three Integers:\n "); scanf("%d,%d,%d ",&x,&y,&z);
4. 用‘\’ ’表示字符’ ,‘\”’表示字符”, ‘\\ ’表示字符\ 。
5. 用双引号括起来的字符序列表示字符串常量,其 中最后一个字符是字符串结束符‘\0’,不显式 地表示出来。如:“English” 。

C语言程序设计第8单元

C语言程序设计第8单元

二维数组的地址
【例8.9】使用指针变量输出二维数组元素 #include<stdio.h> main() { int a[2][3]={{1,2,3},{4,5,6}},*p;
for(p=a[0];p<a[0]+6;p++) { if((p-a[0])%3==0)printf("\n");
printf("%2d",*p); } }
0x62fe3a
0x62fe3b
0x62fe3c
数组指针的运算
对于指针变量p,可以做以下运算: p++,p--,p+i, p-i, p+=i, p-= i等。
#include <stdio.h> main() { int a[]={1,3,6,7,9,12};
int x,*p=&a[2]; x=(*--p)++; printf("x=%d\n",x); printf("a[1]=%d\n",a[1]); }
0x62fe50
二维数组的地址
#include <stdio.h>
main()
{
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,a1是1,1行2指}};针
printf("%x,%x,%x\n",a,a+1,a+2); printf("%x,%x,%x\n",*a,*(a+1),*(a+2)); *a是列指针
二维数组的地址
二维数组名是数组的首地址,二维数组名的基类型不是数组元素类 型,而是一维数组类型,因此,二维数组名a是一个行指针。

2022年C语言程序设计教程(第3版) 谭浩强 课件 最新 8

2022年C语言程序设计教程(第3版) 谭浩强 课件 最新 8
程序对文件的操作(读/写)过程如图8.2所 示。进行文件的读写,首先要为文件建立一个相 应的缓冲区。当要向文件写据时,程序先把数据 送到缓冲区,再把数据送到外部设备的指定文件 中;当要从文件读取数据时,也要先把数据送到 缓冲区,再由变量从缓冲区中提取相应的数据。
程序数据区
输入缓冲区 输出缓冲区
外部介质
一般说,二进制文件节省存储空间而且输入输出的速 度快(因为在输出时不需要把数据由二进制形式转换为字 符代码,在输入时也不需要把字符代码先转换成二进制形 式然后存入内存)。如果存入磁盘中的数据只是暂存的中 间结果数据,以后还要调入继续处理的,一般用二进制文 件以节省时间和空间。如果输出的数据是准备作为文档供 给人们阅读的,一般用字符代码文件,它们通过显示器或 打印机转换成字符输出。一般高级语言都能提供字符代码 文件(ASCII文件)和二进制文件,用不同的方法来读写这 两种不同的文件。
f:\\exe3\\file1.txt 文件名是文件的主要标志,它必须符合C语言关于标 识符的规定。 文件名后缀,用于对文件进行补充说明,一般不超过 三个字符,通常用特定的后缀表明文件的类型。例如.txt 表明是纯字符文件,用.c表示是C语言源程序文件, 用.exe表示是可执行文件等。
8.1.3 文件的位置指针与读写方式
fp1 文 件 1 fp2 文 件 2 fp3 文 件 3
的信息
的信息
的信息



8.2.3 文件的打开与关闭——流的创建与 撤销
1. 文件的打开 fopen (文件名,文件操作方式); 说明:
(1)文件名应当包含文件路径、主文件 名和文件后缀,即提供找到文件的有关信 息。
(2)应当理解文件操作用方式的意义。
FILE * fp; char name[20]; int num; float score; if ((fp=fopen(“f:\\C3exe\\file3.txt”,”w”))==NULL) {

C语言程序设计基础 第8章 数据文件处理技术

C语言程序设计基础 第8章 数据文件处理技术

offset为long型的位移量,以ptname为基准,移动 的字节数。
函数返回值:成功移动返回0,否则返回非0。
10. 函数fseek-例 【例1】 fseek (fp, 40L, SEEK_SET); 表示:将当前位置移到离文件头40个字节处。 【例2】 fseek(fp, 20L, SEEK_CUR); 表示:将当前位置移到离当前位置20个字节处。 【例3】 fseek(fp, -30L, SEEK_END);
文件不能打开时,函数 fopen()将返回空指针值 NULL。 程序应考虑到文件不能正常打开的极端情况,应用以下形式 的代码描述打开一个文件的要求: if ((fp = fopen(fname, "r")) == NULL) { printf("不能打开文件 %s。\n", fname); return; }
fputc()和fgetc()函数-例2
【例2】将一个文件中的数据复制到另一个文件中。 #include <stdio.h>
void main()
{ FILE *in, *out; char ch, infile[40], outfile[40]; gets (infile); if (( in = fopen(infile, "r")) == NULL) { printf ("不能打开源文件 %s\n", infile); scanf ("%*c"); return; } /* 起暂停作用 */
12. 成批读数据函数fread() 形式指向的文件读入count*size个字节,存入buffer。 函数返回值:读取成功返回count值,否则返回0。
说明:常用于二进制文件的读。

C语言程序设计 第3版 第8章 函数

C语言程序设计 第3版 第8章 函数

s=a+b;
return s;
}
main()
//主函数
{
int s;
s=sum();
printf("s=%d\n",s);
}
运行结果
2 3↙ s=5
C语言程序设计
2.函数的定义
无返回值无参数 无返回值有参数
有返回值无参数 有返回值有参数
一般形式:
类型标识符 函数名(形式参数表列) {
函数体; return 表达式; }
调用方式
函数调用的一般形式:
函数名(实际参数表) 实际参数表中的参数可以是常数、变量或表达式,各实参之间用逗号分隔。
调用方式:
(1)函数表达式:函数作为表达式中的一项出现在表达式中,这种方式要求函数有返回值。 例如:s=sum(x,y);把sum的返回值赋予变量s。
(2)函数语句:函数调用的一般形式加上分号即构成函数语句,这种方式不要求函数有返回值。 例如:sum(x,y);以函数语句的方式调用函数。
void sum(int a,int b) //自定义函数
{
int s;
s=a+b;
ห้องสมุดไป่ตู้
printf("s=%d\n",s);
} main()
//主函数
{
int x=2,y=3;
sum(x,y);
}
运行结果
s=5
C语言程序设计
2.函数的定义
无返回值无参数 无返回值有参数
有返回值无参数 有返回值有参数
一般形式:
类型标识符 函数名( ) {
函数体; return 表达式; }
注意说明:
(1)函数的类型实际上是函数返回值的类型。

《C语言程序设计》 课后习题答案 高等教育出版社

《C语言程序设计》 课后习题答案 高等教育出版社

《C语言程序设计》课后习题答案高等教育出版社《C语言程序设计》课后习题答案高等教育出版社第一章:C语言概述1. C语言的特点C语言是一种以处理底层任务和系统编程为目标的高级编程语言。

其特点包括语法简洁、执行效率高、可移植性强等。

第二章:C语言基本数据类型1. C语言中的基本数据类型C语言中的基本数据类型包括整型、字符型、浮点型等。

整型可以进一步细分为有符号整型和无符号整型。

第三章:C语言运算符1. C语言中的运算符C语言中常见的运算符包括算术运算符、赋值运算符、关系运算符、逻辑运算符等。

这些运算符用于执行各种数学和逻辑操作。

第四章:C语言控制语句1. C语言中的条件语句C语言提供了if语句和switch语句来实现条件判断。

if语句用于执行基于布尔表达式的条件分支,而switch语句用于根据不同的值执行不同的代码块。

第五章:C语言函数1. C语言中的函数定义和调用函数是C语言中的基本模块,用于封装可重用的代码。

函数定义包括函数返回类型、函数名、参数列表和函数体等部分。

第六章:C语言数组1. C语言中的数组定义和使用数组是一组相同类型的数据元素的集合。

C语言中可以使用数组来存储和操作大量数据。

第七章:C语言指针1. C语言中的指针概念指针是一种变量,它存储了内存地址。

通过指针,可以直接访问和修改对应内存地址中的数据。

第八章:C语言字符串1. C语言中的字符串操作字符串是由一系列字符组成的数据类型。

C语言通过字符数组来表示和操作字符串。

第九章:C语言结构体1. C语言中的结构体定义和使用结构体是一种自定义的复合数据类型,它可以包含多个不同类型的成员变量。

第十章:C语言文件操作1. C语言中的文件读写操作文件操作是一种重要的数据输入和输出方式。

C语言提供了一系列函数来实现文件的读写操作。

总结:通过解答以上习题,我们可以更好地掌握C语言的各个方面,提升我们的编程能力和解决问题的能力。

希望本文对读者有所帮助。

C语言程序设计(第八章)

C语言程序设计(第八章)
字符读写函数fgetc()和fputc()是以字符(字节)为单位
的读写函数。 每次可从文件读出或向文件写入一个字符。
第八章
1.读字符函数fgetc()
fgetc() 函数的功能是从指定的文件中读一个字符,函
数调用的形式为:
字符变量 = fgetc(文件指针);
例如:
ch = fgetc(fp);
的意义是从打开的文件fp中读取一个字符并送入ch中 。
(1)字符读/写函数 :fgetc()/fputc()
(2)字符串读/写函数:fgets()/fputs()
(3)数据块读/写函数:freed/()fwrite()
(4)格式化读/写函数:fscanf()/fprinf()
以上函数原型都在头文件stdio.h中加以声明。
第八章
8.5.1字符读/写函数 :fgetc()/fputc()
关闭文件则断开指针与文件之间的联系,禁止再对该文
件进行操作。
第八章
8.3.1 文件打开的函数fopen()
open函数用于打开一个文件,其调用的一般形式为: 文件指针名 = fopen(文件名, 使用文件方式);
“文件指针名”:必须是被说明为FILE 类型的指针变量。
“文件名”:被打开文件的文件名,“文件名”是字符串常 量、字符数组或字符指针。 “使用文件方式”:指文件的类型和操作要求。
/* 输出系统提示信息 */
上面程序段的意义是,如果返回的指针为空,表示不能 打开test.dat文件,则给出提示信息“打开文件test.dat出 错!”,然后输出系统提示信息,当用户从键盘敲任一键后 执行exit(1)退出程序 。
第八章
8.3.2 文件关闭的函数fclose()
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

8.1 问题的提出和程序示例
问题提出: int fac(int n) /* 求某个数 n 的阶乘 */ { int i, x=1; for(i=1; i<=n; i++) x = x * i; return(x); } void main() /* 求组合函数的解 */ { int m, n, cmn; scanf("%d%d", &m, &n); cmn = fac(m) / ( fac(n) * fac(m-n)); printf("cmn = %d", cmn); }
发生函数调用时,实参与形参的传递方式有两种:值传递 方式、地址传递方式。 1.值传递方式
如果参数传递的是数据本身,就称为“值传递”。C语言规 定,数值只能由实参传递给形参,形参不能反过来传值给实 参,即传值是单向的。
值传递过程如下: (1)函数调用时,系统临时创建形参变量; (2)实参将其数值复制一份给形参变量; (3)函数调用过程中,形参的任何改变只发生在被调函数内 部,不会影响到实参; (4)当被调函数运行结束返回主调函数时,形参的存储空间 被自动释放。
编程序求组合函数
C n= . m n!*(m-n)!
m!
8.1 问题的提出和程序示例
void main( ) { int m, n, x=1, y=1, z=1, i, cmn; scanf("%d%d", &m, &n); for(i=1; i<=m; i++) /* 求 m! */ x = x * i; for(i=1; i<=n; i++) /* 求 n! */ y = y * i; for(i=1; i<=m-n; i++) /* 求 (m-n)! */ z = z * i; cmn = x / (y * z); printf("Cmn = %d", cmn); }
(4)当被调函数运行结束返回主调函数时,形参指针 变量自动释放。注意:此时释放的是形参所占的临时存 储空间,而不是释放实参所对应的存储空间。
8.3.4 函数参数的传递方式
【例8-7】
void swap(int *a, int *b) { int t; printf("(2)子函数开始时: *a=%d, *b=%d\n",*a,*b); t = *a; *a = *b; *b = t; printf("(3)子函数结束时: *a=%d, *b=%d\n", *a, *b); } void main( ) { int x = 2, y = 4; printf("(1)子函数调用前: x=%d, y=%d\n", x, y); swap(&x, &y); printf("(4)子函数调用后:x=%d, y=%d\n", x, y); }
函数定义:即定义函数的功能。未经定义的函数不能使用。 函数调用:即执行一个函数,调用函数时,程序跳转到被调用 函数的第一句开始执行,执行至被调用函数的最后一句,然后 程序返回调用该函数处继续向下执行。 函数声明:即通知编译系统该函数已经定义过了。 对于库函数,不需写出函数声明,只需在程序前面用 #include包含具有函数原型的头文件即可; 对于自定义函数,如果函数定义的位置在函数调用之后 ,则前面必须有函数说明;如果函数定义在函数调用之前,则 可以省略函数声明。
8.3.4 函数参数的传递方式
2.地址传递方式
函数的“地址传递方式”顾名思义,就是指实参 与形参之间传递的不是普通数值,而是地址值。
当函数的实参是“地址”时,对应的形参是同类 型的指针变量。发生函数调用时,实参将它的地址 值复制一份给形参指针变量,形参指针变量便指向 了实参所对应的存储单元。于是在被调函数内部, 可以借助形参指针变量间接地修改主调函数中实参 所对应存储单元中的数值。
是否可以减少 相似类型的操 作而使程序变 得简洁?
8.1 问题的提出和程序示例

使用函数的作用及好处:



可以方便地使用其他人已经编写的代码,就像我 们调用系统提供的库函数一样。 可以在后续程序中使用自己编写的代码,避免重 复劳动。 实现结构化程序设计的基本思想。
8.2 函数定义 8.2.1 函数基础知识
8.3.4 函数参数的传递方式
地址传递过程如下: (1)发生函数调用时,系统临时创建形参指针变量; (2)实参将其地址值复制一份给形参,于是形参指针 变量与实参变量间建立了“指向”关系,即形参指针变 量指向了实参所对应的存储空间; (3)函数调用过程中,利用形参指针变量间接地引用 或修改实参对应存储空间中的数值;
8.3.2 函数的调用与返回值
当被调用函数运行结束时,通常函数的调用者 会获得一个确定的值,称为函数的返回值。 情况一:被调用函数运行结束后,返回确定值给 函数调用处,即返回值类型为非空的情况。 情况二:被调用函数运行结束后,对调用者不返 回任何值,即返回值类型为空的情况。 被调用函数的值只能通过return语句返回给调 用者,return语句的一般格式有三种: return (表达式); return 表达式; return;
8.2.2 函数定义的一般形式
函数返回值类型 函数名([类型名 参数1,类型名 参数2],…) { 函数体语句 } 说明: 1. 函数定义由两部分组成——函数首部、函数体。 2. 函数返回值类型是安徽给主调函数的结果的类型。注意: (1)如果不指定,即缺省,就是 int;(2)如果函数无返 回值类型,则说明为void。 3. 函数名:一个有效的标识符。在同一程序中,函数名唯一。 4. 参数列表:表示接收传递进来的数据。 如果有多个参数, 则参数之间用逗号隔开。注意:必须为每个参数指定数据类 型。 5. {}内括起来的是函数体,由说明部分和执行语句组成,它决 定了该函数所要实现的功能。 注意:函数的定义不允许嵌套。
8.3.2 函数的调用与返回值
1.函数的返回值类型为非空
这类函数在定义时,函数首部的“函数返回值类型”需明 确指出数据类型,可以是C语言的基本数据类型、指针类型、 结构体类型等。此时要求被调用函数中使用上述return语句 的前两种格式“return(表达式);”或“return 表达式;”向调用 者返回一个确定值,并且return语句中“表达式”的类型必 须与函数定义时“函数返回值类型保持一致。
8.2.4 有参函数与无参函数 例8.2 定义一个函数fun( ),其功能是用“*”号打 印直角三角形,三角形的行数由函数的形参决定,
程序运行结果: * *** ***** ******* *********
8.2.4 有参函数与无参函数
2、无参函数
函数返回值类型 函数名( ) { 函数体语句 } 括号不可省
8.3 函数调用
8.3.1 函数调用的一般形式
函数定义好后,只有被调用了才能实现该函数的功能,一 个不被调用的函数是没有任何作用的。只有发生了函数调用, 函数体内的语句才会被执行。 函数调用的一般形式: 函数名([实际参数表])
•调用有参函数时,函数名 后的括号内需写入实参。 如:fun(5) •调用无参数时,函数名后 需跟一对空括号。 •用户自定义函数都需“先 定义后调用”,main( )函 数可以调用其它函数,但 不能被其它函数调用,其 它函数之间可以相互调用。
8.3.4 函数参数的传递方式
【例8-6】 #include <stdio.h> void swap(int a, int b) { int t; printf("(2)子函数开始时: a=%d, b=%d\n", a, b); t = a; a = b; b = t; printf("(3)子函数结束时: a=%d, b=%d\n", a, b); } void main( ) { int x = 2, y = 4; printf("(1)子函数调用前: x=%d, y=%d\n", x, y); swap(x, y); printf("(4)子函数调用后: x=%d, y=%d\n", x, y); }
8.2.3 形参与实参的关系
1、形参 函数定义时,函数名后面小括号内的参数就是形 式参数,简称形参。 2、实参 函数调用时,函数名后面小括号内的参数就是实 际参数,简称实参。 实参是有确定值的常量、变量 或表达式。 函数调用时,实参将它的值复制一份给形参,我 们称实参向形参传值。当程序进入到被调用函数内部 时,实参就不能使用了。
【例8-5】定义一个函数max( ),求两个整数中的较大数 。
注意:被调函数体中可以有多个return 语句,但只有其中的一个会被执行, 一旦程序执行到其中某一个return语句, 表示被调用函数运行在此结束,流程 便返回到主调函数。
8.3.3 函数调用的一般形式
在C语言中,调用函数主要有以下三种方式: 1.函数语句形式 C语言中的函数可以只进行某些操作而不返回函数值,这 时的函数调用可作为一条独立的语句。 2.函数表达式形式 函数作为表达式的一项,出现在表达式中,以函数返回值 参与表达式的运算。 3.函数实参形式 函数作为另一个函数调用的实际参数出现。这种情况是把 该函数的返回值作为实参进行传送。
8.3.3 函数调用的一般形式
1.函数语句形式举例 #include <stdio.h> void max(int a, int b) { int m; m = (a > b) ? a : b; printf("%d \n", m); return; } void main(void) { int x = 5, y = 9; max(x, y); }
8.3.2 函数的调用与返回值
【例8-4】定义一个函数max( ),求两个整数中的较大数,并在 main( )函数中调用max( )函数。
相关文档
最新文档