第5、7、8章函数与结构体
结构体(C语言基础PPT)

7.2结构体数组
结构体数组的定义方式为:结构体类型 数组名[数组大 小]; struct book {long bookid; char name[20]; float price; }; struct book n[5];
与普通数组一样,可以在定义时对数组进行初始化: struct book {long bookid; char name[20]; float price; }; struct book n[5]={ {6003563,"EXPERT SYSTEMS",59.0}, {6003564,"Meditations",32.0}, {6003565,"The Secret",32.0},{6003566, "WUTHERING HEIGHTS",35.0},{6003567, "EMMA",15.8}};
结构体类型名与结构体变量名相同虽编译正确, 但一般不建议如此书写。例7-2:
#include <stdio.h> void main() {struct book {long bookid; char name[20]; float price; }book; scanf("%ld",&book.bookid); printf("%ld",book.bookid); }
例如: struct book { long bookid; char name[20]; float price; }; 这样就声明了一个结构体类型struct book,然后可以 用struct book来定义变量了。 注意: (1)结构体类型名的命名应遵循命名规则。 (2)结构体类型名不可以和它包含的基础类型名相同。
大一c语言章节知识点

大一c语言章节知识点第一章:基本概念和数据类型C语言的历史背景C语言的特点和优势关键字和标识符数据类型及其表示范围变量的定义和声明常量的定义和分类运算符的分类和优先级第二章:运算符和表达式算术运算符和表达式逻辑运算符和表达式位运算符和表达式赋值运算符和表达式关系运算符和表达式条件运算符和表达式运算符的优先级和结合性第三章:控制语句顺序结构选择结构(if语句、switch语句)循环结构(for循环、while循环、do-while循环)循环控制语句(break、continue、goto)嵌套控制语句第四章:数组和字符串数组的定义和初始化数组的访问和操作多维数组字符数组和字符串的处理字符串的输入和输出第五章:函数和递归函数的调用和返回函数的参数传递(值传递、地址传递)递归函数的原理与应用递归和迭代的比较第六章:指针指针的定义和声明指针与数组的关系指针的运算(指针的加减、指针的比较)指针与字符串的处理函数指针和指针数组第七章:结构体和共用体结构体的定义和初始化结构体中成员的访问和操作结构体的嵌套和对齐枚举类型的定义和应用第八章:文件操作文件的打开和关闭文件的读写操作(字符型文件、二进制文件)文件指针的位置控制文件的随机访问和更新第九章:动态内存管理内存分配与释放的概念malloc函数和free函数的使用calloc函数和realloc函数的使用动态分配二维数组的操作第十章:预处理指令宏定义的使用条件编译指令的应用文件包含指令的作用错误指示和行控制指令无论是在学习C语言的过程中,还是在实际应用中,以上这些章节知识点都是非常重要的。
掌握这些知识点,将帮助你深入了解C语言的基本原理和常用功能,为编写高效、健壮的程序奠定扎实基础。
在学习过程中,请务必理解并实践每个章节的知识点,并结合实际案例进行练习和应用,以加深对C语言的理解和应用能力。
祝你在学习C语言的道路上取得优异的成绩!。
c程序设计第七章知识点

c程序设计第七章知识点C程序设计是计算机科学和技术领域中非常重要的一门课程,而第七章作为其中的一部分,涵盖了许多关键的知识点。
本文将对C程序设计第七章的知识点进行介绍和讨论。
一、结构体在C语言中,结构体是一种自定义的数据类型,它能够将不同类型的数据组合在一起,形成一个新的数据类型。
结构体由多个成员组成,每个成员可以是不同的数据类型,比如整型、字符型、浮点型等。
结构体的定义方式如下:```cstruct 结构体名{数据类型成员名1;数据类型成员名2;// ...};```结构体的成员可以通过`.`操作符来访问和修改,比如`结构体名.成员名`。
结构体的应用广泛,常用于创建复杂的数据结构,如链表、树等。
二、共用体共用体是一种特殊的数据类型,它允许不同的成员共享同一块内存空间。
共用体的定义方式与结构体类似,如下所示:```cunion 共用体名{数据类型成员名1;数据类型成员名2;// ...};```共用体的成员在内存中占用相同的空间,成员之间的修改会相互影响。
共用体可以用于节省内存空间,但需要注意成员的使用顺序和类型。
三、枚举枚举是一种特殊的数据类型,它可以定义一组具有名称的常量。
枚举常量可以在程序中代替数字,提高可读性和可维护性。
枚举的定义方式如下:```cenum 枚举名{枚举常量1,枚举常量2,// ...};```在程序中使用枚举常量时,可以直接使用其名称,无需使用具体的数值。
枚举常量默认从0开始递增,但也可以手动指定初始值。
四、指针与结构体指针是C语言的重要组成部分,结合结构体可以实现更灵活的数据操作。
通过指针,我们可以直接访问和修改结构体的成员,而无需复制整个结构体。
指针与结构体的使用方式如下:```cstruct 结构体名 *指针名;```通过将指针与结构体关联,可以使用指针来访问和修改结构体的成员,比如`指针名->成员名`。
指针与结构体的结合使用是C语言中常见的操作方式,可以提升程序的效率和灵活性。
C语言完整资料

2.2.2.1 字面常量(直接常量)
字面常量是直接表示的常量。
2.2.2.2 符号常量
符号常量是用一个标识符代表一个常量,使用编译预处理命令#define定 义,定义格式为:
#define 常量名 字面常量
精选版ppt
2-311
2.2.3 变量
在程序运行过程中,其值可以改变的量称为变量。 C语言规定,变量要先定义后使用。变量的定义一般在函数的声明部分,格式为:
2. 函数体: 函数体为函数首部下面的花括号{……}内的部分。 函数体一般由声明部分和执行部分构成:声明部分定义所用到的变量,声明所调用的函数等; 执行部分有若干语句组成。
1.2.2.3 C语言程序的执行
C语言程序总是从main()函数的第一条执行语句开始执行,执行完main()函数的最后一 条语句,则整个程序执行结束,而其他函精数选则版通pp过t 嵌套调用得以执行。
1-34
1.2.3 C语言程序书写格式 1. 行的书写格式自由,可从一行的任何位置开始书写。 2. 一行可书写多条语句,一条语句也可分写在几行上。 3. 所有语句都必须以分号“;”结束。 4. 允许使用注释。 C语言的注释格式有两种://,/* …… */。 5. 在书写程序时,通常采用缩格形式书写分层结构的程序。
本章主要介绍C语言的特点,C语言程序的结构与书写规则,C程序上机步骤,编译预 处理,算法的概念及表示。
精选返版回pp目t 录
1-12
1.1 语言的特点
1.语言简洁、紧凑,使用方便、灵活 2.运算符丰富 3.数据类型丰富 4.程序设计结构化、模块化 5.语法限制不太严格,程序设计自由度大 6.C语言允许直接访问物理地址,能进行位(bit)操作 7.生成的目标代码质量高,程序执行效率高 8.可移植性好
第8章结构体(答案)

第8章结构体(答案)第8章结构⼀、选择题1、设有以下说明语句struct ex{ int x;float y;char z;}example;则下⾯的叙述中不正确的是(B)A)struct是结构体类型的关键字B)example是结构体类型名C)x,y,z都是结构体成员名D)struct ex是结构体类型2、设有以下说明语句typedef struct{int a;char c[10];} ST;则下⾯的叙述中正确的是(B)A)ST是结构体变量名B)ST是结构体类型名C)typedef struct是结构体类型名D)struct是结构体类型名3、有以下定义,能输出字母M的语句是(D)struct person{char name[9];int age;};struct person class[10]={ “ohu”,17, “Paul”,19,“Mary”,18,“Adam”,16 } A)printf(“%c\n”,class[3].name[0]);B)printf(“%c\n”,class[3].name[1]);C)printf(“%c\n”,class[2].name[1]); D)printf(“%c\n”,class[2].name[0]);4、以下对结构体类型变量的定义中,不正确的是( B )A)typedef struct B)#define AA struct aa{int n; AA{int n;C)struct aa D)struct{int n;float m; {int n;}; float m;struct aa td1; }td1;5、下列程序输出的结果是(B)A)5 B)6 C)7 D)8struct abc{int a,b,c;};main(){struct abc s[2]={{1,2,3},{4,5,6}};int t;t=s[0].a+s[1].b;printf("%d\n",t);}6、在TC2.0下,int 类型为2个字节。
C语言程序设计教案---第八章-函数

第八章函数课题:第八章函数§1~§4教学目的:1、驾驭函数定义的一般形式2、驾驭函数调用的一般形式教学重点:教学难点:函数定义、调用的一般形式形式参数和实际参数步骤一复习引导一个C语言源程序可由一个主函数和假设干个协助函数组成。
由主函数调用其他函数,其他函数也可以相互调用。
步骤二讲授新课§8.1 概述例8.1main( ){ printstar( );print_message( );printstar( );}printstar( ){ printf( “ ********** \n”); }print_message( ){ printf(“How do you do ! \n”); }说明:1、一个源程序文件由一个或多个函数组成。
一个源程序文件是一个编译单位。
2、一个C程序由一个或多个源程序文件组成。
这样可以分别编写、分别编译,提高调度效率。
3、C程序的执行从main 函数起先,在main函数中完毕整个程序的运行。
4、全部函数都是平行的,即函数不能嵌套定义,函数可以相互调用,但不能调用main函数。
5、从用户运用的角度看,函数有两种:标准函数(库函数)和用户自己定义的函数6、从函数的形式看,函数分为两类:无参函数和有参函数§8.2 函数定义的一般形式〔一〕无参函数的定义形式类型标识符函数名( ){函数体(包括声明局部和执行局部)}例:printstar( ){ printf( “ ********** \n”); }〔二〕有参函数定义的一般形式类型标识符函数名(形式参数表){函数体(包括声明局部和执行局部)}例如:int max(int x, int y){ int z;z=x>y?x:y;return (z);}〔三〕一个函数可以是空函数如dummy( ) { }§8.3 函数参数和函数的值〔一〕形式参数和实际参数形式参数:定义函数时函数名后括号中的变量名,简称形参;实际参数:调用函数时函数名后括号中的表达式,简称实参。
C语言课件教学-第8章-函数

• main( )
• { int a=3, b=5;
• void swap( int , int );
• swap (a, b); • printf(“a=%d,
b=%d\n”, a, b);
调用 Main()函数:
•} • void swap (int x, int y)
像调用库函数 一样调用
函数定义
8.3 函数参数和函数的值
8.3.1 形式参数与实际参数
在调用函数时,大多情况下,主调与被调函 数间有数据传递关系,这就是有参函数。在定义 函数时,函数名后面括号中的变量名称为“形式 参数”,在主调函数中调用一个函数时,函数名 后面括号中的参数(可以是表达式)称为“实际 参数”。
}
max(x,y) int x, y; { int z;
z=x>y ? x : y; return(z); }
/ x, y为形式参数/
说明: 1)形参变量在被调用前不占用存储单元;在被调用结束 后,
形参所占存储单元亦被释放。因此,形参只有在该函数 内有效。调用结束,返回调用函数后,则不能再使用该 形参变量。
如:main( )
{
…
double new_style ( int, double ); /*函数声明*/
…
}
Double new_style (int a, double x) /*函数定义*/
{
…
}
说明:
1)类型标识符 被调函数名( );这种声明形 式也是合法的,但不提倡。
2)如果被调函数为自定义函数且其定义 在主调函数定义之前,则在主调函数中可 不必说明其类型。因为编译程序已知道其 类型。
第8章结构体-PPT精品

};
C语言程序设计 - 第8章 结构体 9
结构体变量的定义 (1)
先声明结构体类型再定义变量
struct student {
unsigned num;
char
name[20];
char
sex;
unsigned age;
float score;
char
addr[50];
};
struct student stu1, stu2;
结构体类型的声明举例
struct student {
unsigned num;
/* 学号 */
char
name[20]; /* 姓名 */
char
sex;
/* 性别 */
unsigned age;
/* 年龄 */
float score; /* 分数 */
char
addr[50]; /* 地址 */
动态存储分配函数
动态分配存储
根据需要开辟或释放存储单元
相关函数
malloc函数 calloc函数 free函数
说明
应包含malloc.h或stdlib.h
C语言程序设计 - 第8章 结构体 26
malloc函数
函数原型
typedef unsigned size_t; void *malloc(size_t size);
scanf("%d %s %c %d.%d.%d %f", &p->num, p->name, &p->sex, &p->birthday.year, &p->birthday.month, &p->birthday.day, &p->score);
C语言程序设计-第5章--函数

实参可以是常量、变量或表达式,但要求 它们必须要有确定的值,在调用时将实参 的值赋给形参。另外,实参和形参的类型 应相同或兼容。
— 31 —
5.2 函数的参数传递和返回值
➢ 5.2.2 函数的返回值
一般情况下,主调函数调用完被调函数后,都希望能够得到一 个确定的值,这就是函数的返回值。在C语言中,函数返回值 是通过return语句来实现的。return语句的一般形式有3种:
/*函数声明*/
/*调用逆序函数,将a的逆序值赋给b*/ /*调用逆序函数,将b的逆序值赋给c */
— 23 —
5.2 函数的参数传递和返回值
➢ 5.2.1 函数的形参与实参
{
int y=0,sign=1;
/*定义sign表示x的符号,定义变量y代表逆序数据*/
if(x<0)
/*当x小于0时取符号及取反*/
— 18 —
5.1 函数的定义和调用
➢ 5.1.2 函数的调用
另外,按函数在语句中的作用来分,可以有以下3种函数调用方式:
函数表达式
函数语句
函数作为实参
函数作为表达式中的一项出 现,以函数返回值参与表达 式的运算。
函数调用的一般形式加上分 号即构成函数语句。
函数作为另一个函数调用的 实际参数出现,即把该函数 的返回值作为实参进行传送。
#include<stdio.h> int main() {
int x=0,y; y=trans(x); printf("y=%d\n",y); printf("x=%d\n",x); return 0; } trans(int a) { a++; printf("a=%d\n", a); return a; }
第8章 结构体_教学设计

(1)由基本数据类型引出结构体类型概念
教师在讲解结构体时,简单回顾数据类型中的分类。让学生了解到结构体类型是数据类型的一种。对结构体出现的意义进行简单讲解。
(2)进入主题,逐项讲解以下内容
教师讲解结构体类型的声明ຫໍສະໝຸດ 定义教师讲解结构体变量的大小
教师讲解结构体的初始化、访问
(3)教师对结构体类型的初始化、结构体变量访问进行讲解
教师在讲解结构体初始化、结构体变量的访问时结合Dev-C++开发工具进行讲解。
三、归纳总结,布置课后作业
(1)回顾上课前的学习目标,对本节课知识点进行总结。
提问讲解的知识点,对存在问题进行讲解。带领学生总结本课内容:结构体类型的声明、结构体类型定义、结构体类型大小、结构类型的初始化、结构体类型的访问。本课时内容要求学生掌握,对提问后存在的问题及时解决。
(2)使用课后习题作为课后作业。
第二课时
(结构体数组)
一、构造情境,导入结构体数组的概念
(1)由日常生活工作学习结构体数组概念
教师在讲结构体数组时,类比生活中的示例引出结构体数组的概念。比如存储一个班学生的年龄、成绩等信息。
(2)进入主题,逐项讲解以下内容
教师讲解结构体数组的定义
教师讲解结构体数组的初始化与访问
(2)教师对结构体数组作为函数参数进行讲解
教师在讲解结构体数组作为函数参数时,结合使用Dev-C++开发工具进行讲解,编写简单的程序进行实际操作。
(3)教师对结构体指针作为函数参数进行讲解
教师在讲解结构体指针作为函数参数时,结合使用Dev-C++开发工具进行讲解,编写简单的程序进行实际操作。
三、归纳总结,布置课后作业
8章 c语言程序设计 结构体,共用体与枚举类型

当通过指针变量引用结构体成员时,若表达式中含有++,-等运算符时,应根据运算符优先级来确定表达式含义。例: ++ p-> score 相当于++( p-> score),结果使score加1。 (++ p)-> score 则再访问成员score之前,使p加1。 例:struct abc {char a[20]; int *pt; }p; pt是结构体类型中的成员,则表达式*p->pt引用的是pt所 指存储单元; *p->pt++是再引用了pt所指存储单元后,使 指针pt加1;( *p->pt)++使pt所指向的单元的值加1;而 *p ++ ->pt在访问了pt所指存储单元后,p加1。
例:struct std_info {char name[9]; char sex[3]; float score; struct date birthday; }stud,arr[5],*p; p=& stud; (1)若要引用结构体类型变量stud 中score成员项,可写成: stud. score p-> score *(p). score arr[1] .score /*通过结构体变量引用*/ /*通过指针变量引用*/ /*通过指针变量引用*/
2.将一个结构体变量作为一个整体赋给另一具有相同类型的 结构体变量 例:struct {char name[15]; int num; }stud1,stud2={“wangfang”,01}; 执行赋值语句: stud1=stud2; 则stud2中把每个成员的值依次赋给stud1中对应的同名成员。 C不允许把一个结构体变量作为一个整体进行输入和输出。 例: scanf(“%d”,& stud1); printf(“%d”,stud1);都是错误的 结构体变量有多个不同类型的数据项,必须逐个用相应的格 式像普通变量一样输入和输出。 scanf(“%s,%d”, stud1. name ,& stud1.num); 注意name[15]是数组,数组名本身就是地址。
结构体与函数

stu.sex= ‘M’;
stu.score[0]=78; stu.score[1]=96; stu.score[2]=86;
printf("调用函数前为:%d,%s,%c,%d,%d,%d\n",
stu.num, , stu.sex, stu.score[0],
stu.score[1], stu.score[2] );
1.1 结构体变量的成员作函数实参(续)
void main( )
程序执行后输出结果为:
{ struct student stu; stu.num=10446;
调用函数前数据为:
10446,zhangsan,M,78,96,86 调用函数后数据为:
strcpy(, "zhangsan"); stu.sex= 'M';
程序执行后输出结果为: 调用函数前数据为: 10446,zhangsan,M,78,96,86 调用函数后数据为: 10447,lisi,W,60,60,60
stu.sex= ‘M’;
stu.score[0]=78; stu.score[1]=96; stu.score[2]=86;
p=&stu;
printf("调用函数前为:%d,%s,%c,%d,%d,%d\n",
int num; char name[20]; char sex; int score[3]; }; void fun(struct student stu) { stu.num= 10447; strcpy(, “lisi”); stu.sex=‘W’; stu.score[0]=60; stu.score[1]=60; stu.score[2]=60; }
c语言大学实用教程 第5章 函数

如果没有参数,则应该用void注明
函数的返回值只有一个
如果不需要返回值,则应该用void定义返回值类型
– 返回值类型与return语句配合
当函数执行到return语句时,就中止函数的执行,返回到 调用它的地方
函数内部可以定义只能自己使用的变量,称内部变量。
– 参数表里的变量也是内部变量
2020/11/17
– 此话音落不久,诸葛亮果然病故于五丈原。 “事无巨细”,“事必躬亲”
– 管理学的观点是极其排斥这种做法的,认为工作必
须分工,各司其职
– 其中的思想,在程序设计里也适用
2020/11/17
4
程序设计的艺术
结构化程序设计有两大最高级的艺术 – 算法设计艺术 – 结构设计艺术
C语言为程序的结构提供了两样武器 – 函数和模块
因变量 的关系
一个变量 二个变量
…… N个变量
9
数学函数(5)
关系
2020/11/17
集合B
集合A
10
程序设计中的函数
程序设计中的函数不局限于计算 – 计算类,如打印阶乘表的程序…… – 判断推理类,如排序、查找……
2020/11/17
11
用函数解决问题的要点
分而治之
– 函数把较大的任务分解成若干个较小的任务,并提炼出
函数(function)是结构设计的最基本单位
– “一个程序应该是轻灵自由的,它的子过程就象串
在一根线上的珍珠。”
Geoffrey James的《编程之道》
2020/11/17
5
数学函数(1)
y f (x)
因变量
2020/11/17
函数名
自变量
6
C语言 第八章 结构体

共用体
3)直接定义联合变量 union {
int i;
float f; }num; 说明:(1)共用体变量的所有成员占有同一段内存,所占内存空 间是其成员中字节数最大的成员占有的字节数。
(2)共用体变量中可以定义许多不同类型的成员,但同一时刻只
有一个成员的数据有效。
共用体
4.共用体变量初始化 初始化时,只能对第一个成员的数据类型初始化。 例:union data num={10}; 正确 union data num={10,25.4}; 错误
结构体变量
方法三:定义结构体类型的同时定义结构体变量,省略结构体类型名
struct DATE{ int year; int month; int day;}; struct {
long int number;
char name[8]; int age;
char *sex;
struct DATE birthday; }stu1,stu2;
数据类型
数据类型
成员名1;
成员名2;
//成员表
……
};
结构体类型
2.结构体类型的定义: 说明: (1) struct是关键字,标识一个结构体类型定义的开头 (2)“结构体类型名”是表示该结构体类型的名称的标识符,可
类比int、char
(3)“成员表”是构成结构体类型的成份,由一个或多个成员构
成,每个成员有自己的成员名。各成员数据类型可以不同,既可以
枚举类型
3.枚举变量定义
方式一:类型和变量分开定义 enum WEEKDAY{Sun,Mon,Tue,Wed,Thu,Fri,Sat};//定义枚举类型 enum WEEKDAY w;//定义枚举变量w
C语言第5章数据结构函数

C语言第5章数据结构函数数据结构是计算机科学中非常重要的概念,它是描述数据元素之间关系的一种方式。
在C语言中,我们可以通过定义结构体来表示数据结构。
结构体是一种用户自定义的数据类型,可以包含多个不同类型的数据成员。
在第5章中,我们将学习如何在C语言中使用数据结构函数。
数据结构函数是一种对数据结构进行操作的函数,通过调用这些函数,我们可以实现对数据结构的插入、删除、查找等操作。
首先,我们需要学习如何定义一个数据结构函数。
在C语言中,我们使用以下语法来定义一个数据结构函数:```void functionName(structName *ptr, parameters)// function body```其中,functionName是函数的名称,structName是数据结构的名称,ptr是指向数据结构的指针,parameters是函数的参数。
接下来,我们可以在数据结构函数中实现对数据结构的操作。
比如,如果我们想在一个链表中插入一个新节点,我们可以定义一个函数来实现这个操作,函数的代码可以如下:```void insertNode(struct Node *ptr, int data)struct Node *newNode = (struct Node *)malloc(sizeof(struct Node));newNode->data = data;newNode->next = NULL;if(ptr == NULL)ptr = newNode;return;}struct Node *temp = ptr;while(temp->next != NULL)temp = temp->next;}temp->next = newNode;```在上面的例子中,我们定义了一个名为insertNode的函数,它可以在一个链表中插入一个新节点。
在函数的实现中,我们首先使用malloc 函数动态分配一个新的节点,并将数据赋值给节点的成员变量。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数组作函数参数
形参:一维数组无 需指定大小,二维数 组无需指定第二维大 小,但需指定第一维 大小 实参:使用数组名即 可,无需带[ ]
P96
如:
void sort(char s[ ]) { …… } 函数参数 是数组 void main() { char c[100]; …… sort(c); 数组名 …… }
函数的缺省参数值
P102
声明函数原型时,可为一个或多个形参指定 缺省参数值。调用函数时如给出实参,则采用 实参值,否则采用对应的缺省参数值。
如:int add(int x=5, int y=6); void main() { cout<<add(10,20); //10+20 cout<< add(10); //10+6 cout<< add(); //5+6 } int add(int x, int y) { return x+y; }
数组作函数参数
数组名是数组的地址。 函数调用时,形参数组得到的是 实参数组的地址,它们表示的是同 一个对象。 函数执行时对形参数组的任何操 作即是对实参数组操作。
e.g. 编写函数统计某字符串中字母、数字及其 他字符的个数。在主函数中输入字符串和输出 统计结果。
#include<iostream> using namespace std; void main() { void count(char s[ ], int d[ ]); char s[100]; int d[3]={0,0,0}; cout<<“请输入s:" ; gets(s); count(s,d); cout<<"s中有"<<d[0]<<"个字母、"<<d[1]<<"个 数字和"<<d[2]<<"个其他字符。"<<endl; }
35
#include <iostream> using namespace std; int x; // 声明全局变量 int func1(int x) // 函数func1()有一个名为x的参数 { return (x+5)*(x+5); } int func2(int y) { int x=y+5; // 函数func2()中声明了一个名为 x的局部变量 return x*x; } 36
如:f( ,10, 20); //错误
函数的调用
函数的嵌套调用
在调用一个函数的过程中又调用 另一个函数。 函数的递归调用不做要求
e.g.输入两个整数,求平方和。
#include <iostream> using namespace std; int main() { int a,b; int fun1(int x,int y); cin>>a>>b; cout<<"a、b的平方和:" <<fun1(a,b)<<endl; return 0; 25 }
P99
局部变量与全局变量
1。局部变量 定义在函数内或块内的变量称为局部变量。 局部变量在程序运行到它所在的块时建立, 该块执行完毕局部变量占有的空间即被释放。 2。全局变量 全局变量说明于所有函数之外,可以为本源程 序文件中的所有函数共同使用。 全局变量可以在各个函数之间建立数据传输通 道,但滥用会破坏程序的模块化结构。
void main() { int i1=1, i2=2; char c1='A', c2='B'; double d1=1.123, d2=2.123; char s1[ ]="abc", s2[ ]="def"; swap(i1,i2); swap(c1,c2); swap(d1,d2); swap(s1,s2); cout<<i1<<","<<i2<<endl; cout<<c1<<","<<c2<<endl; cout<<d1<<","<<d2<<endl; cout<<s1<<","<<s2<<endl; }
声明格式:函Βιβλιοθήκη 首部;e.g. 设计函数判断某个整数是否为质数, 并求100以内的所有质数。
#include<iostream> using namespace std; void main() { bool IsPrime(int n); int x; for(x=2;x<100;x++) if (IsPrime(x)) cout<<x<<„\t‟; }
函数的缺省参数值
函数原型中,所有取默认值的形参都必须 出现在不取默认值的形参的右边。 如:int f(int x, int y=5, int z=6); //正确 int f(int x=1, int y=5, int z=6); //正确 int f(int x=1, int y=5, int z); //错误 int f(int x=1, int y, int z=6); //错误 函数调用时,若省略某个实参,则其后的 实参都应省略。
函数重载
如果两个函数的函数名相同,参数 个数不同或参数的数据类型不完全 相同,则称它们互为重载函数。
void f(int x, char h, float d) void f( ) 形参个数不同 void f(int x) void f(int x, char h, float d) void f(int a, char b, double c)
函
函数的定义 函数的调用
全局变量和局部变量 变量的存储类型
数
参数的传递方式 数组作函数参数 函数递归 函数的默认参数值
函数的定义
P91
格式: 函数类型名 函数名(形参说明表) {
语句序列
函数体
函数 首部
}
说明:1°函数由函数首部和函数体构成
2°函数名的命名规则同变量名
函数的定义
说明:
⑦
结束
⑥
恢复: ⑤ 主调程序现场 返回地址
返回
10
参数的传递方式
数组作函数参数
函数间的参数传递
1. 值传递
方式:实参的值传给形参。
特点:不会影响实参的值, 实现数据的单向传递。
void main( ) { int max(int a,int b); int x=5,y=3,z; z=max(x,y); cout<<“The bigger one is: ”<<z; } int { max(int(5)a,int b) (3) if (a>=b) return a; return b; }
形参类型 不完全相 同
函数重载
参数名的不同或函数返回值的不同 均不能构成重载条件 重载函数的参数必须不同:个数不同 或类型不同。
编译器根据实参和形参在类型及个 数上的最佳匹配来选择调用重载函数中 的哪一个。
e.g. 设计数据交换重载函数。
#include<iostream> using namespace std; void swap(int &a, int &b); //交换两个整数 void swap(char &a, char &b); //交换两个字符 void swap(double &a, double &b); //交换两个实型数 void swap(char a[ ], char b[ ]); //交换两个字符串
函数间的参数传递
2. 引用传递
引用是一个变量的别名。
类型名 &引用名=已定义的同类型变量名 int x=10, &y=x; //创建int型的引用y, //并初始化为变量x的别名 cout<<y; y=100; cout<<x; //输出10 //输出100
三、函数调用时的参数传递方式
2. 引用传递
创建引用时,须对其进行初始化, 使其指向一个已存在的对象。 引用一旦被初始化后,就不能改为 指向其它对象。 引用可作函数形参。
如:交换两个整数的值。
void main( ) { int a=3, b=7; swap(a,b); cout<<“交换后:a=”<<a<<“,b=”<<b<<endl; } void swap (int &x, int &y) { int t; t=x; x=y; y=t; }
如:交换两个整数的值。
void main( ) { int a=3, b=7; swap(a,b); cout<<“交换后:a=”<<a<<“,b=”<<b<<endl } void swap (int x, int y) (3) (7) { int t; t=x; x=y; y=t; /*无法交换实参a和b的值*/ }
格式:函数名(实参列表)
如: m=2 * max (x, y); // 调用有参函数 pick ( ); // 调用无参函数
函数的调用
说明:
1°形参:出现在函数定义中 实参:出现在函数调用中 两者的类型、个数必须一致 并一一对应。 2°调用函数前先声明函数原型 (function prototype)。