C语言课件(4,5)资料
合集下载
C语言课件

此后,两人合作,重写了UNIX操作系统。C语言伴随着UNIX操 作系统成为一种很受欢迎的计算机语言。
C语言程序设计
第一章 C语言概述
1.2 C语言特点
– 语言简洁、紧凑、灵活 > –运算符和数据类型丰富 > – 程序设计结构化、模块化 – 生成目标代码质量高 – 可移植性好
> >
>
<
>
C语言程序设计
有问题请随时与任课老师(实验和理论)
联系
理论老师QQ:947593546
C语言程序设计
第一章 C语言概述
本课程在本科生教学中的地位及教学宗旨
本课程为专业基础课,属我校所有理工科专业本科教学 计划中的主要必修课程之一。在计算机教育方面,C 语言是为 数不多的与国外保持内容同步的课程之一,可见,它在本科生 教学中的地位之重要不言而喻。由于C 语言是许多后续专业课 程的基础,因此,在本科生教学体系中中, C 语言教学仅是 起点,而非终点。 本着面向未来的精神,本课程的教学宗旨是要努力把 C 语言从应试课程转变为一种实践工具,主要目的不再局限于使 大家单纯地了解和掌握 C 语言的基本语法规范,而是要致力 于培养大家运用C 语言解决实际问题的编程能力, 以 C 语言 为工具,介绍程序设计的基本思想和方法,培养学生无论以后 在学习、工作中使用什么语言编程,都能灵活应用这些思想和 方法的能力。
C语言程序设计
第一章 C语言概述
参考书目:
1.《C语言程序设计教程》,孙家启等编著, 安徽大学出版社; 2.《C程序设计》,谭浩强主著,清华大学出 版社; 3.《C语言程序设计》,孙家启编著,中国科 学技术出版社。
C语言程序设计
第一章 C语言概述
课时安排
C语言程序设计
第一章 C语言概述
1.2 C语言特点
– 语言简洁、紧凑、灵活 > –运算符和数据类型丰富 > – 程序设计结构化、模块化 – 生成目标代码质量高 – 可移植性好
> >
>
<
>
C语言程序设计
有问题请随时与任课老师(实验和理论)
联系
理论老师QQ:947593546
C语言程序设计
第一章 C语言概述
本课程在本科生教学中的地位及教学宗旨
本课程为专业基础课,属我校所有理工科专业本科教学 计划中的主要必修课程之一。在计算机教育方面,C 语言是为 数不多的与国外保持内容同步的课程之一,可见,它在本科生 教学中的地位之重要不言而喻。由于C 语言是许多后续专业课 程的基础,因此,在本科生教学体系中中, C 语言教学仅是 起点,而非终点。 本着面向未来的精神,本课程的教学宗旨是要努力把 C 语言从应试课程转变为一种实践工具,主要目的不再局限于使 大家单纯地了解和掌握 C 语言的基本语法规范,而是要致力 于培养大家运用C 语言解决实际问题的编程能力, 以 C 语言 为工具,介绍程序设计的基本思想和方法,培养学生无论以后 在学习、工作中使用什么语言编程,都能灵活应用这些思想和 方法的能力。
C语言程序设计
第一章 C语言概述
参考书目:
1.《C语言程序设计教程》,孙家启等编著, 安徽大学出版社; 2.《C程序设计》,谭浩强主著,清华大学出 版社; 3.《C语言程序设计》,孙家启编著,中国科 学技术出版社。
C语言程序设计
第一章 C语言概述
课时安排
c语言课件ppt

C语言课件
汇报人:XXX 202X-12-31
目录
• C语言概述 • C语言基础语法 • C语言函数和数组 • C语言指针和内存管理 • C语言文件操作和程序调试 • C语言高级特性
01
C语言概述
C语言的起源和历史
C语言起源于20世纪70年代,由美国 贝尔实验室的Dennis Ritchie设计开 发。
使用智能指针或垃圾回收机制可以自动管理内存,减轻程序员负担。
05
C语言文件操作和程序调 试
文件打开和关闭
文件打开
使用fopen()函数打开文件,指定 文件名和打开模式(如只读、写 入等)。
文件关闭
使用fclose()函数关闭已打开的文 件,释放资源。
文件读写操作
文件读取
使用fscanf()或fgets()函数从文件中 读取数据。
位域
位域是C语言中一种节省内存的技能,它允许我们指定一个结构体中某个成员所占的位数。位域通常 用于存储二进制位或状态信息。
预处理器指令和宏定义
预处理器指令
预处理器指令在编译之前处理源代码。 常见的预处理器指令包括#include、 #define和#if等。#define指令用于定义 常量或宏,可以在编译时替换代码中的 文本。
01
02
03
04
指针是变量,用于存储内存地 址。
指针变量必须先定义类型,然 后才能存储地址。
使用“&”运算符获取变量的 地址,使用“*”运算符访问
指针所指向的值。
指针可以用于函数参数传递和 返回值,实现数据共享和函数
调用时的数据交换。
动态内存分配
使用“malloc()”,“calloc()”和 “realloc()”函数在堆上动态分配内 存。
汇报人:XXX 202X-12-31
目录
• C语言概述 • C语言基础语法 • C语言函数和数组 • C语言指针和内存管理 • C语言文件操作和程序调试 • C语言高级特性
01
C语言概述
C语言的起源和历史
C语言起源于20世纪70年代,由美国 贝尔实验室的Dennis Ritchie设计开 发。
使用智能指针或垃圾回收机制可以自动管理内存,减轻程序员负担。
05
C语言文件操作和程序调 试
文件打开和关闭
文件打开
使用fopen()函数打开文件,指定 文件名和打开模式(如只读、写 入等)。
文件关闭
使用fclose()函数关闭已打开的文 件,释放资源。
文件读写操作
文件读取
使用fscanf()或fgets()函数从文件中 读取数据。
位域
位域是C语言中一种节省内存的技能,它允许我们指定一个结构体中某个成员所占的位数。位域通常 用于存储二进制位或状态信息。
预处理器指令和宏定义
预处理器指令
预处理器指令在编译之前处理源代码。 常见的预处理器指令包括#include、 #define和#if等。#define指令用于定义 常量或宏,可以在编译时替换代码中的 文本。
01
02
03
04
指针是变量,用于存储内存地 址。
指针变量必须先定义类型,然 后才能存储地址。
使用“&”运算符获取变量的 地址,使用“*”运算符访问
指针所指向的值。
指针可以用于函数参数传递和 返回值,实现数据共享和函数
调用时的数据交换。
动态内存分配
使用“malloc()”,“calloc()”和 “realloc()”函数在堆上动态分配内 存。
《计算机c语言》课件

数据
关闭文件:使用fclose()函 数,关闭打开的文件
程序调试技巧和方法
单步调试:逐行执行代码, 观察变量值和程序状态
异常处理:使用try-catch 语句捕获和处理异常,避免
程序崩溃
代码审查:与他人共同审查 代码,发现潜在问题
断点调试:设置断点,逐 步执行代码,观察变量值
和程序状态
打印调试:在关键位置打 印变量值,观察程序状态
数组的定义:使用关键字 "int[]"、"char[]"等定义数
组
添加标题
数组的访问:通过数组下标 访问数组元素,下标从0开始
添加标题
数组的修改:可以通过数组 下标修改数组元素
数组的查找:可以使用查找 算法在数组中查找元素,如
二分查找、顺序查找等
字符串的处理和操作
字符串的定义:由字符组成 的序列,用双引号括起来
嵌套控制结构
概念:在一个控制 结构中嵌套另一个 控制结构
应用场景:循环嵌 套、条件嵌套等
语法:使用{}、() 等符号表示嵌套关 系
示例:for(int i=0;i<10;i++){if(i %2==0){...}}
函数和程序结构
函数的定义和调用
函数的定义:函数是完成特定任务的独立代码块,可以重复使用。 函数的调用:在程序中使用函数名和参数列表来调用函数。 函数的参数:函数可以接受参数,参数可以是变量、常量或表达式。 函数的返回值:函数可以返回一个值,返回值可以是任何类型的数据。
数据类型和运算 符
变量和常量
变量:在程序运行过程中可以改变的值
常量类型:整型、浮点型、字符型、布 尔型等
常量:在程序运行过程中不能改变的值
关闭文件:使用fclose()函 数,关闭打开的文件
程序调试技巧和方法
单步调试:逐行执行代码, 观察变量值和程序状态
异常处理:使用try-catch 语句捕获和处理异常,避免
程序崩溃
代码审查:与他人共同审查 代码,发现潜在问题
断点调试:设置断点,逐 步执行代码,观察变量值
和程序状态
打印调试:在关键位置打 印变量值,观察程序状态
数组的定义:使用关键字 "int[]"、"char[]"等定义数
组
添加标题
数组的访问:通过数组下标 访问数组元素,下标从0开始
添加标题
数组的修改:可以通过数组 下标修改数组元素
数组的查找:可以使用查找 算法在数组中查找元素,如
二分查找、顺序查找等
字符串的处理和操作
字符串的定义:由字符组成 的序列,用双引号括起来
嵌套控制结构
概念:在一个控制 结构中嵌套另一个 控制结构
应用场景:循环嵌 套、条件嵌套等
语法:使用{}、() 等符号表示嵌套关 系
示例:for(int i=0;i<10;i++){if(i %2==0){...}}
函数和程序结构
函数的定义和调用
函数的定义:函数是完成特定任务的独立代码块,可以重复使用。 函数的调用:在程序中使用函数名和参数列表来调用函数。 函数的参数:函数可以接受参数,参数可以是变量、常量或表达式。 函数的返回值:函数可以返回一个值,返回值可以是任何类型的数据。
数据类型和运算 符
变量和常量
变量:在程序运行过程中可以改变的值
常量类型:整型、浮点型、字符型、布 尔型等
常量:在程序运行过程中不能改变的值
C语言完整 ppt课件

1.4.1 宏定义
用一个标识符来表示一个字符串,称为“宏”,标识符称为“宏名”。在 程序中 用宏名替代字符串称为“宏调用”。在编译预处理时,将对程序中所有出现的 “宏 名”,都用宏定义中的字符串代换,这个过程称为“宏展开”。
1.4.1.1 不带参数的宏定义
格式为:#define 标识符 字符串
1.4.1.2 带参数的宏定义
1-4
1.3 C程序上机步骤
C源程序编好后,要经过编辑、编译、连接, 生成可执行文件后,才可运行。
运行集成开发软件
编辑源程序
编译
有 有错? 无 连接
不正确
运行
结果正确? 正确
结束
1-5
1.4 编译预处理
编译预处理是指,在C编译程序对C源程序进行编译之前,由编译预处理程 序对源程序中的预处理命令进行处理的过程。
1.2.1 C语言程序举例
1.2.2 C语言程序的结构
1.2.2.1 函数是C语言程序的基本单位。
1.2.2.2 函数的一般结构
任何函数(包括main()函数)都是由函数首部和函数体两部分组成。
1. 函数首部: 函数首部即函数第一行,由函数类型、函数名和函数参数表三部分组成。
2. 函数体: 函数体为函数首部下面的花括号{……}内的部分。 函数体一般由声明部分和执行部分构成:声明部分定义所用到的变量,声明所调用的函数等; 执行部分有若干语句组成。
2.6.1 运算符及表达式简介 2.6.1.1 运算符
C语言中的运算符具有2个特点: ⑴ 运算符的优先级 C语言中,运算符的优先级共分为15级,1级最高,15级最低。 ⑵ 运算符的结合性 C语言中各运算符的结合性分为左结合性(从左到右)和右结合性(从右到左)。 2.6.1.2 表达式 表达式是由常量、变量、函数和运算符组成的式子。 表达式求值是按运算符的优先级和结合性规定的顺序进行的。
用一个标识符来表示一个字符串,称为“宏”,标识符称为“宏名”。在 程序中 用宏名替代字符串称为“宏调用”。在编译预处理时,将对程序中所有出现的 “宏 名”,都用宏定义中的字符串代换,这个过程称为“宏展开”。
1.4.1.1 不带参数的宏定义
格式为:#define 标识符 字符串
1.4.1.2 带参数的宏定义
1-4
1.3 C程序上机步骤
C源程序编好后,要经过编辑、编译、连接, 生成可执行文件后,才可运行。
运行集成开发软件
编辑源程序
编译
有 有错? 无 连接
不正确
运行
结果正确? 正确
结束
1-5
1.4 编译预处理
编译预处理是指,在C编译程序对C源程序进行编译之前,由编译预处理程 序对源程序中的预处理命令进行处理的过程。
1.2.1 C语言程序举例
1.2.2 C语言程序的结构
1.2.2.1 函数是C语言程序的基本单位。
1.2.2.2 函数的一般结构
任何函数(包括main()函数)都是由函数首部和函数体两部分组成。
1. 函数首部: 函数首部即函数第一行,由函数类型、函数名和函数参数表三部分组成。
2. 函数体: 函数体为函数首部下面的花括号{……}内的部分。 函数体一般由声明部分和执行部分构成:声明部分定义所用到的变量,声明所调用的函数等; 执行部分有若干语句组成。
2.6.1 运算符及表达式简介 2.6.1.1 运算符
C语言中的运算符具有2个特点: ⑴ 运算符的优先级 C语言中,运算符的优先级共分为15级,1级最高,15级最低。 ⑵ 运算符的结合性 C语言中各运算符的结合性分为左结合性(从左到右)和右结合性(从右到左)。 2.6.1.2 表达式 表达式是由常量、变量、函数和运算符组成的式子。 表达式求值是按运算符的优先级和结合性规定的顺序进行的。
《C语言学习》课件

04 C语言编程实践
常见算法和数据结构
排序算法
快速排序、冒泡排序、插入排序 等,以及它们的时间复杂度和适
用场景。
树和图的数据结构
二叉树、红黑树、图等,以及它们 的应用。
常见数据结构操作
链表、数组、队列、栈等,以及它 们的插入、删除、查找等操作。
程序调试和优化
01
调试技巧
断点、单步执行、查看变量值等 ,以及如何使用调试工具进行程 序调试。
for语句
用于循环执行一段代码,控制循环 次数和循环变量的值。
04
函数
函数
用于将一段代码封装在一起,方便重复使用 。
函数定义
包括函数名、参数列表和函数体。
函数调用
通过函数名和参数列表来调用函数,执行函 数体中的代码。
函数返回值
函数执行完毕后,可以返回一个值给调用者 。
03 C语言进阶知识
指针和内存管理
C与Python
Python是一种解释型语言,语法简洁明了 ,与C在实现方式和性能上有较大差异。
THANKS
《C语言学习》PPT课 件
目录
Contents
• C语言概述 • C语言基础语法 • C语言进阶知识 • C语言编程实践 • C语言常见问题和解决方案
01 C语言概述
C语言的起源和历史
C语言起源于20世纪70年代, 由美国贝尔实验室的Dennis
Ritchie设计开发。
C语言最初是作为UNIX操作 系统的开发语言而出现的, 随着UNIX的普及,C语言逐 渐成为一种通用的编程语言
网络通信
实现基于TCP/IP协议的客户端和 服务端通信,以及如何处理网络 数据传输和协议解析。
05 C语言常见问题和解决方案
c语言ppt课件

用于对二进制位进行操作。
编译器自动将一种数据类型转换为另一种数据类型。
自动类型转换
通过强制类型转换操作符将一种数据类型转换为另一种数据类型。
强制类型转换
03
程序流程控制
Chapter
依照代码的先后顺序执行,是最基本的程序流程结构。
顺序结构依照代码的顺序从上到下执行,每条语句依照出现的先后顺序执行,直到程序结束。
指针的算术运算
指针数组是指包含相同类型的指针元素的数组,可以通过数组索引访问各个指针,实现对数组元素的间接访问。
指针数组
使用malloc、calloc和realloc函数可以在运行时动态分配内存,这些函数返回一个指向分配内存的指针,可以通过该指针访问和操作内存。
使用free函数可以释放之前动态分配的内存,以避免内存泄漏。释放内存后,应将指针置为NULL,以避免野指针的产生。
打开文件
使用fclose()函数关闭已打开的文件,释放相关资源。
关闭文件
读取文件
使用fscanf()、fgets()等函数从文件中读取数据,并将其存储到变量中。
写入文件
使用fprintf()、fputs()等函数将数据写入文件中。
使用断点、单步执行等调试技能,检查程序中的错误和特殊。
使用try-catch语句或setjmp/longjmp函数,捕获和处理程序中的特殊情况。
C语言的发展经历了多个版本,从C89到C99再到C11,不断引入新的特性和标准。
C语言具有高效、可移植、可扩大性等特点,能够直接与硬件进行交互,合适开发操作系统、嵌入式系统、游戏、图形界面等。
01
02
C语言在计算机科学、电子工程、数学等领域有广泛应用,也是许多程序员入门的首选语言。
编译器自动将一种数据类型转换为另一种数据类型。
自动类型转换
通过强制类型转换操作符将一种数据类型转换为另一种数据类型。
强制类型转换
03
程序流程控制
Chapter
依照代码的先后顺序执行,是最基本的程序流程结构。
顺序结构依照代码的顺序从上到下执行,每条语句依照出现的先后顺序执行,直到程序结束。
指针的算术运算
指针数组是指包含相同类型的指针元素的数组,可以通过数组索引访问各个指针,实现对数组元素的间接访问。
指针数组
使用malloc、calloc和realloc函数可以在运行时动态分配内存,这些函数返回一个指向分配内存的指针,可以通过该指针访问和操作内存。
使用free函数可以释放之前动态分配的内存,以避免内存泄漏。释放内存后,应将指针置为NULL,以避免野指针的产生。
打开文件
使用fclose()函数关闭已打开的文件,释放相关资源。
关闭文件
读取文件
使用fscanf()、fgets()等函数从文件中读取数据,并将其存储到变量中。
写入文件
使用fprintf()、fputs()等函数将数据写入文件中。
使用断点、单步执行等调试技能,检查程序中的错误和特殊。
使用try-catch语句或setjmp/longjmp函数,捕获和处理程序中的特殊情况。
C语言的发展经历了多个版本,从C89到C99再到C11,不断引入新的特性和标准。
C语言具有高效、可移植、可扩大性等特点,能够直接与硬件进行交互,合适开发操作系统、嵌入式系统、游戏、图形界面等。
01
02
C语言在计算机科学、电子工程、数学等领域有广泛应用,也是许多程序员入门的首选语言。
c语言ppt课件

汇编语言的应用场景
汇编语言主要用于系统软件、嵌入式系统等领域 。
C语言与汇编语言的混合编程方式
01
直接调用汇编代码
在C语言中直接使用内联汇编, 通过关键字__asm__将汇编代码 嵌入到C代码中。
02
通过函数调用汇编 代码
将汇编代码封装成函数,在C语 言中调用。
03
使用编译器特定的 语法
一些编译器支持特定的语法来混 合C语言和汇编语言,如GCC中 的asm()函数。
广度优先搜索
从根节点开始,逐层访问相邻的节点 ,直到所有的节点都被访问过。
05 C语言与汇编语言 的混合编程
汇编语言的概述
1 2
汇编语言定义
汇编语言是一种面向机器的语言,使用特定的符 号表示机器指令,如MOV, ADD, SUB等。
汇编语言的特点
汇编语言执行速度快,代码可读性较差,不易维 护。
3
嵌入式系统的概述
嵌入式系统的定义
01
嵌入式系统是一种专为特定任务设计的计算机系统,
通常具有体积小、功耗低、可靠性高等特点。
嵌入式系统的应用范围
02 嵌入式系统广泛应用于工业控制、智能家居、汽车电
子等领域。
嵌入式系统的硬件和软件
03
嵌入式系统的硬件通常包括微控制器、传感器、执行
器等,软件则包括嵌入式操作系统、应用程序等。
THANKS
感谢观看
搜索算法
顺序搜索
逐个比较待搜索元素与表中的每个元素,直到找到目标元素或搜索完整个表。
二分搜索
在有序表中,取中间位置元素,如果中间元素正好是要查找的元素,则搜索过程结束;如果待查元素 大于中间元素,则在右半部分继续查找;若待查元素小于中间元素,则在左半部分继续查找。
C语言程序设计教程ppt课件(2024)

打印九九乘法表
使用嵌套的for循环打印九九乘法表。
23
04
数组与字符串处理
2024/1/30
24
一维数组定义和操作
2024/1/30
01
一维数组定义
类型说明符 数组名
[常量表达式];
02
一维数组初始化
在定义数组时对数 组元素赋以初值;
04
一维数组操作
包括赋值、输入输
03
出、排序、查找等
。
一维数组引用
do-while循环
与while循环类似,但至少会执行一次 循环体。
示例
int i = 0; do { printf("%d ", i); i; } while (i < 10);
语法
do { // code to be executed } while (condition);
2024/1/30
19
赋值运算符
包括赋值运算符(=)和复合赋 值运算符(+=、-=、*=、/=、 %=),用于为变量赋值或进行 运算后赋值。
12
类型转换与运算顺序
2024/1/30
类型转换
当不同类型的数据进行运算时,需要进行类型转换,包括自 动类型转换和强制类型转换。自动类型转换由编译器自动完 成,而强制类型转换需要使用类型转换运算符。
0。
free函数
用于释放已分配的内存空间 ,避免内存泄漏。
2024/1/30
36
指针在数组、字符串等数据结构中应用
指针与数组
数组名本质上是一个指向数组首元素的指针;通过指针可 以访问和修改数组元素。
指针与字符串
字符串在C语言中以字符数组的形式存储,指针可以方便 地操作字符串。
使用嵌套的for循环打印九九乘法表。
23
04
数组与字符串处理
2024/1/30
24
一维数组定义和操作
2024/1/30
01
一维数组定义
类型说明符 数组名
[常量表达式];
02
一维数组初始化
在定义数组时对数 组元素赋以初值;
04
一维数组操作
包括赋值、输入输
03
出、排序、查找等
。
一维数组引用
do-while循环
与while循环类似,但至少会执行一次 循环体。
示例
int i = 0; do { printf("%d ", i); i; } while (i < 10);
语法
do { // code to be executed } while (condition);
2024/1/30
19
赋值运算符
包括赋值运算符(=)和复合赋 值运算符(+=、-=、*=、/=、 %=),用于为变量赋值或进行 运算后赋值。
12
类型转换与运算顺序
2024/1/30
类型转换
当不同类型的数据进行运算时,需要进行类型转换,包括自 动类型转换和强制类型转换。自动类型转换由编译器自动完 成,而强制类型转换需要使用类型转换运算符。
0。
free函数
用于释放已分配的内存空间 ,避免内存泄漏。
2024/1/30
36
指针在数组、字符串等数据结构中应用
指针与数组
数组名本质上是一个指向数组首元素的指针;通过指针可 以访问和修改数组元素。
指针与字符串
字符串在C语言中以字符数组的形式存储,指针可以方便 地操作字符串。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第 四章
模块化程序设计
例 求一个整数的绝对值的函数。 int absolute_value( int x) 形参 { return(x>=0?x:-x); }
当调用结束时,如果需要 函数提供一个运算结果的 话,就需要用return语句 来带回该值。
第 四章
模块化程序设计
例 打印n个空格的函数。 void space(int n) { 如果不要求函数在运算结束提 供值的时候,对于函数类型就 int i; 可以选择void型。 for (i=0; i<n; i++) printf(“ ”); 此时,return函 return; 数不带回任何值。 }
第 四章
模块化程序设计
main( ) { int a=3,b=5; void swap(int x, int y); swap( a, b); printf( “a=%d, b=%d\n”,a, b); } void swap(int x,int y) { int temp; temp=x,x=y,y=temp; printf(“x=%d, y=%d\n”,x, y); }
模块化程序设计
main( )
函数
x
3
y 4
(实参)
fun( ) 函数
a
3
x b
(形参)
第 四章
模块化程序设计
注意: 1. 形参与实参各占一个独立的存储空间。 2. 形参的存储空间是函数被调用时才分配的。 调用开始,系统为形参开辟一个临时存储 区,然后将各实参之值传递给形参,这时 形参就得到了实参的值。 3. 函数返回时,临时存储区也被撤消。 4. 传值方向只能由实参向形参传递,而不能 由形参向实参传递。即值传递是单向传递。 也就是说,形参的改变,不会影响实参的 值。
第 四章
模块化程序设计
7. 函数的嵌套调用及递归调用 •嵌套调用:在一个函数中又调用另外一个 函数。 函数不允许嵌套定义,但可以嵌套调用!
main 函数 { u=f1(i,t); } 1 7 f1 函数 { 2
c=f2(b-1,b+1);
f2 函数 3 5 4
返回f2函数值
} 6
第 四章
模块化程序设计
第 四章
5. 函数的声明
模块化程序设计
如果函数的定义出现在函数调用之后,则对 将要调用的函数作一个声明,即向编译系统 提供函数必要的信息:函数名,函数类型, 函数参数个数、类型及排列次序。
类型标识符 函数名(类型标识符 参数1,…); 当一个函数要被一个文件中的多个函数调用 时,可以将该函数的声明写在所有函数之前。
main( ) { int x=1; { void prt(void); int x = 3; prt( ); printf(“2nd x = %d\n”,x); } printf(“1st x = %d\n”,x); } void prt (void) { int x = 5 ; printf(“3th x = %d\n”,x) }
• 函数递归调用:一个函数直接或间接调用 它自己。 f1( ) { … f1( ) … } f1( ) { … f2( ) … f2( ) { … f1( ) … }
}
第 四章
递归方式 中止条件
模块化程序设计
long rfact( int n) { if(n<0) { printf(“Negative”); exit(-1); } else if(n<=1) return(1); else return(n*rfact(n-1)); }
函数不能嵌套定义,也就是说,一个函数不 能定义在另外一个函数内部。函数与函数在 定义时是相互独立的。
第 四章
4 . 函数的返回
模块化程序设计
函数执行的最后一个操作是返回。其意义是: (1) 使流程返回主调函数,宣告函数的一次执行 终结,在调用期间所分配的变量单元被撤消。 (2) 送函数值到调用表达式中。有些函数有返回 值,有些可以没有。
第 四章
一 函数
模块化程序设计
main函数
C程序
其他函数
库函数
用户自定义函数
第 四章
模块化程序设计
1. 函数与函数之间的调用关系
第 四章
2. 函数基本组成
模块化程序设计
函数返回值类型 函数名(参数列表)
{ 函数体; }
第 四章
3 函数定义 函数类型
模块化程序设计
函数名 形式参数数目、类型 函数体
第 四章
模块化程序设计
6. 函数的调用:使用函数的功能。 变量参数:传值 参数 指针参数:传址
第 四章
形参:
虚 实 结 合
模块化程序设计
被调函数,表示将从主调函数中获得哪 些类型的信息。
实参: 主调函数,向被调函数传递必要信 息。
第 四章
假定函数fun: fun(int a, int b) { … } main( ) { int x=3,y=4; t = fun(x, y ); }
第 四章
模块化程序设计
说明: 1、自动变量是局部变量 2、在对自动变量赋值之前,它的值是不确定的。 3、对同一个函数的两次调用之间,自动变量的 值是不保留的。
第 四章
模块化程序设计
x=1 x=3 调用prt printf(“2nd x=%d\n”,x); printf(“1st x = %d\n”, x);
第 四章
二 变量的存储属性
模块化程序设计
变量的值
变量 变量的操作属性 变量的存储属性 变量存储器位置 变量生存期
变量可用域
第 四章
1 动态变量
模块化程序设计
动态变量是在程序执行的某一时刻被动态地 建立并在另一时刻被动态地撤消的一种变量, 它们存在于程序的局部,也只在这个局部中 可以使用。动态变量有两种:自动(auto)变量 和寄存器(register)变量。 ① 自动变量 [auto] 数据类型 变量名[=初值表达式],…;
第 四章
例 float y(float x) { if (x<0) return(x*x-x+1); else return(x*x*x+x+3); }
模块化程序设计
虽然,这里有两个return语 句,但是,每调用一次, 只有一个return语句有效。 另外,要求两个return语句 后的表达式类型要相同。 (为什么?)
prt
x=5 printf(“3th x = %d\n”, x);
第 四章
模块化程序设计
② 寄存器变量:具有与自动变量完全相同的 性质。 2 静态变量 “静态”是相对于“动态”而言的。 (1) 静态变量的存储空间在程序的整个运行 期间是固定的(static) 。一个变量被指定为静 态变量,则在编译时就为其分配存储空间, 程序一开始执行便被建立,直到该程序执行 结束都是存在的。