C语言复习2----函数.

Slides:



Advertisements
Similar presentations
C++语言程序设计教程 第5章 构造数据类型 第6章 C++程序的结构.
Advertisements

C语言程序设计 主讲教师 :张群燕 电话:
计算学科的基本问题 本章首先介绍一个对问题进行抽象的典型实例——哥尼斯堡七桥问题。然后,通过“梵天塔”问题和“停机问题”分别介绍学科中的可计算问题和不可计算问题。从“梵天塔”问题再引出算法复杂性中的难解性问题、P类问题和NP类问题,证比求易算法,P=NP是否成立的问题。
“八皇后”问题 崔萌萌 吕金华.
第一章 C语言概述 计算机公共教学部.
项目五——校园一卡通程序功能模块化设计 5-1项目显示查询和退出函数设计.
C语言程序设计 第八章 函数.
第5章 函数与模块化设计 学习目的与要求: 掌握函数的定义及调用方法 理解并掌握参数的传递方法 理解函数的嵌套与递归调用
高级语言程序设计 主讲人:陈玉华.
第5章 函数与预处理 《 C语言程序设计》 (Visual C++ 6.0环境) 本章导读
由C程序结构所知,一个完整的C语言程序是由一个且只能有一个main()函数(又称主函数)和若干个其他函数组合而成的。而前面各章仅学习main()函数的编程,本章将介绍其他函数的编程,包括其他函数的定义、调用、参数传递及变量的作用域等。
選擇排序法 通訊一甲 B 楊穎穆.
C的發展史 C程式初體驗 C程式設計基本注意事項 上機實習課程
第4章 函数与预处理 4.1 概述 4.2 定义函数的一般形式 4.3 函数参数和函数的值 4.4 函数的调用 *4.5 内置函数
教材 《C++程序设计》.谭浩强. 清华大学出版社 王雪晶
C 程式設計— 指標.
Chap 10 函数与程序结构 10.1 函数的组织 10.2 递归函数 10.3 宏定义 10.4 编译预处理.
If … else 選擇結構 P27.
程序讲解 第一题: 将指定文件的m行到n行字符写到显示屏上,m和n值从键盘输入。 运行时输入及结果: please enter m,n:
第七章 函数 目录 有参的加法函数的开发 函数定义的一般形式 函数参数和函数的值 函数的调用
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
Function.
程序设计专题一 结构化程序设计与递归函数 主讲教师: 刘新国.
第八章 函数.
第7章 编译预处理 本章要求: 本章重点: 本章难点: 掌握用#define定义无参数宏和带有参数宏定义和调用方法;
作弊是否很有诱惑性? 上堂课已经讲了 作业不一定在两个小时里都能完成 答疑没有一个人? 作弊是有记录的 心理系很多同学集体作弊,让人震惊
第6章 函数 学习的意义.
6 使用者函數 6.1 函數定義 宣告函數 呼叫函數 呼叫多個函數 6-6
6.4.1指针与二维数组 1、二维数组结构的分析 设有数组定义为:int a[3][4]; 则有: a表示数组在内存中的首地址。
第二章 C++对C 在非面向对象方面的改进 更简洁,更安全.
C语言 程序设计基础与试验 刘新国、2012年秋.
第3讲 C++程序控制结构 3.1 顺序结构 3.2 分支结构 3.3 循环结构 3.4 转向控制 3.5 综合案例分析.
期中考试成绩分布 《程序设计》-2017年秋.
多维数组与指针 用指针变量可以指向一维数组中的元素,也可以指向多维数组中的元素。但在概念上和使用上,多维数组的指针比一维数组的指针要复杂一些。 1. 多维数组元素的地址 先回顾多维数组的性质,可以认为二维数组是“数组的数组”,例 : 定义int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};
第13章 结构体的应用 13.1 了解由用户构造的数据类型 13.2 结构体类型说明及结构体变量 13.3 结构体数组
計數式重複敘述 for 迴圈 P
第七章 函数及变量存贮类型 7.1 函数基础与C程序结构 7.2 函数的定义和声明 7.3 函数的调用 7.4 函数的嵌套与递归
第0章作业: 教材P12-练习与实践 1.写出用符号’*’输出描绘汉字”大”的流程图。
第1章 概述 本章要点: C语言程序结构和特点 C语言程序的基本符号与关键字 C语言程序的编辑及运行 学习方法建议:
C语言大学实用教程 第5章 函数与程序结构 西南财经大学经济信息工程学院 刘家芬
C语言复习3----指针.
第 二 章 数据类型、运算符与表达式.
第一章 程序设计和C语言 主讲人:高晓娟 计算机学院.
C语言程序示例: 1.输入10个数,按从小到大的顺序排序。 2.汉诺塔问题。.
Main() { Dfas Asdfasf fasdfa } #include <stdio.h> void main( ) {
函数 概述 模块化程序设计 基本思想:将一个大的程序按功能分割成一些小模块, 特点: 开发方法: 自上向下,逐步分解,分而治之
Introduction to the C Programming Language
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
指標
Chap 5 函数 5.1 计算圆柱体积 5.2 使用函数编写程序 5.3 变量与函数.
Chap 5 函数 5.1 计算圆柱体积 5.2 数字金字塔 5.3 复数运算.
7.1 C程序的结构 7.2 作用域和作用域规则 7.3 存储属性和生存期 7.4 变量的初始化
C程序设计.
第5章 函 数.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
第7章 程序的结构 四、生存期与存储属性 五、extern关键字与外部连接属性 六、static关键字与内部连接属性.
第一章 C语言概述 目录 什么是语言、程序 C语言的历史与发展 C语言的书写形式与程序结构 运行C语言的步骤与方法
第二章 类型、对象、运算符和表达式.
Introduction to the C Programming Language
本节内容 函数嵌套调用的内存布局 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
#include <iostream.h>
第七章  数 组.
程式設計--linear search 通訊一甲 B 楊穎穆.
单片机应用技术 (C语言版) 第4章 C51程序设计入门
C/C++基礎程式設計班 C語言入門、變數、基本處理與輸入輸出 講師:林業峻 CSIE, NTU 3/7, 2015.
C/C++基礎程式設計班 陣列 講師:林業峻 CSIE, NTU 3/14, 2015.
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
Introduction to the C Programming Language
函式庫補充資料 1.
隨機函數.
Presentation transcript:

C语言复习2----函数

C函数的特点 1)每个函数有唯一的函数名,程序调用这个函数就是转去执行此函数所包含的语句。 2)一个函数完成一个特定的任务。 3)函数的定义是独立的,封闭的,不受程序其它部分的干预,也不干预其它部分。函数不能嵌套定义。 4)函数能用函数名给调用程序返回一个值。 5)程序调用函数时可以用实参把数据传送给函数,但是不能用实参反向传回。

函数定义----无参函数和有参函数 无参函数定义的形式为: 类型标识符 函数名( ) { 说明部分 语句部分 } 有参函数定义的形式为: 类型标识符 函数名(形式参数列表及类型说明 )

double power(int x,int n) 函数类型标识符 函数类型标识符用void,表示不要函数返回值。 void main() 函数类型标识符没有void,表示要函数返回值。 函数类型标识符用double,表示返回数据的数据类型是双精度浮点。 double power(int x,int n)

函数的参数 函数定义中的参数列表说明函数参数的名称和类型,参数之间用逗号隔开。函数定义中的参数称为形参,主函数通过形参把数据传送给被调用函数。 参数列表为空就成为无参函数,只需写一对圆括号。 函数执行的最后一个return语句是返回,从被调用函数返回主调用函数,并将1个数值带回给主调用函数。

函数声明----先调用后定义 先调用后定义。如【例8-3】,在主函数中需要对自定义的函数声明,其作用是指出被调用函数的类型和参数类型,否则被调用函数被默认为是int类型。 被调用函数可在其它文件中定义,即先定义后调用。 先定义后调用。如果自定义函数的定义放在mian( )函数之前,则可以不需要声明。 如【例8-4】,power( )函数的定义在main( )函数之前,所以在main( )函数中不对power( )函数作任何声明,直接就使用power( )函数。

#include<stdio.h> void main() { int x,n; double num; double power(int,int); scanf("%d%d",&x,&n); num=power(x,n); printf("%lf\n",num);} double power(int x,int n) { int i; double p; p=1; for(i=1;i<=n;i++) p*=x; /* p=p*x */ return p;} 【例8-3】 运行结果: 2 5 32.000000

#include<stdio.h> double power(int x,int n) { int i; double p; p=1; for(i=1;i<=n;i++) p*=x; /* p=p*x */ return p;} void main() { int x,n; double num; scanf("%d%d",&x,&n); num=power(x,n); printf("%lf\n",num); } 【例8-4】

函数的返回 见【例8-4】当执行到return语句时,被调用函数结束,程序流程返回到主调用函数,并通过return语句把返回值带回到主调用函数, 。

形参与实参 形参是变量,实参是形参的值。 函数定义时是形参。主调用函数通过形参把数据传递给被调用函数。 函数执行时是实参。在主调用函数执行调用一个函数时,函数名后面的圆括号中的参数称为实参。 定义函数时指定的形参,在未出现函数调用时,形参并不占用内存单元,只有函数被调用时才分配给内存单元。 实参有确定的值,可以是常量、变量或表达式,在函数调用时实参的值赋给形参。 注意:实参的值必须与形参类型相同。见【例8-7】

#include<stdio.h> void main() { int i,j; void print(int,int); i=1,j=2; print(i,j); printf("i和j的值=%d,%d\n",i,j);} void print(int x,int y) x++; y++; printf("x和y的值=%d,%d\n",x,y);} 【例8-7】 运行结果: X和y的值=2,3 i和j的值=1,2

函数调用的一般过程 1)主调用函数首先为每个形参分配存储单元,然后把实参值复制到对应形参的单元中。 注意:实参与形参按位置一一对应,而不是按变量名对应。 2)将控制转移到被调用函数,执行函数体内的语句。 3)函数体执行完毕后,执行return语句,控制返回到主调用函数的调用处,从此调用点继续执行主调用函数下面的操作。见【例8-8】

#include<stdio.h> void main() { int i=2,p; int f(int,int); p=f(i,++i); printf("%d\n",p); } int f(int x,int y) printf("%d %d\n",x,y); int c; if(x>y) c=1; else if(x==y) c=0; else c=-1; return c; 【例8-8】 运行结果: 3 3

库函数的调用 C语言提供了丰富的库函数,正确使用这些函数,可以不必自己编写,省去很多时间。 调用C语言标准库函数要求有#include预处理命令, include必须以#开头。 C系统提供的头文件以.h为后缀,文件名要用一对双引号” ”或尖括号< >括起来。 Include不是C语句,后面不能加分号;。

常用的库头文件 stdio.h :输入/输出库函数 在VC++2012中用 “stdafx.h” 代替stdio.h math.h、stdlib.h、float.h :数学库函数 time.h :时间库函数 ctype :字符分类和转换库函数 string.h :字符串处理库函数 malloc.h、stdlib.h :内存分配库函数 signal.h、process.h :进程控制库函数

函数的嵌套调用 C语言中,一个函数不能在另一个和函数中定义,但可以嵌套调用。 当一个函数作为被调用函数时,它也可以作为另一个函数的主调用函数,而它的被调用函数又可以调用其它的函数,这就是函数的嵌套调用。

函数的嵌套调用 main函数 a函数 b函数 调用a函数 调用b函数 结束 返回main函数 返回a函数

局部变量和全局变量 在一个函数内部定义的变量是内部变量,它只在本函数范围内有效。 全局变量可以为本文件内其它函数共用,它的有效范围从定义变量的位置开始到本文件结束。

变量的存储类型 C语言有两种属性:数据类型和存储类型 一个完整的变量的定义是: 存储类型标示符 数据类型标示符 变量名; 存储类型标示符 数据类型标示符 变量名; C语言的4种存储类型:auto(自动),extern(外部),static(静态),register(寄存器)。 存储类型缺省为auto。

动态存储和静态存储 静态存储区----固定的分配给某些数据,程序在整个运行过程中都可以使用这些数据。如全局变量就存储在静态存储区,在整个程序运行中,全局变量一直占据这些存储单元。 动态存储区----在程序运行期间根据需要分配给不同的数据,当程序进入它的作用范围,就会在动态存储区为其分配存储单元,一旦程序离开了它的作用范围,这些分配的存储单就会被释放,如局部变量。函数的形参就是在动态存储区分配存储单元。

动态变量 auto 每个函数中定义的变量默认为auto,C系统在动态存储区中为它们分配存储单元,函数的形参和函数内定义的变量都是这种类型。只有当函数被调用时,这些变量才能被分配存储单元,函数调用结束,这些变量占用的存储单元被释放。 定义变量时可以显式的加auto来标识 [auto] 数据类型 变量名 [=初值表达式],……; 例如: auto int a;

寄存器变量 register 计算机的CPU中有多个寄存器,把数据放在这些寄存器里,其处理和传输速度比放在内存里快得多。 例如: register int a; 当一个变量被频繁使用,使用寄存器变量可以节省很多时间。

局部静态变量static 局部静态变量在程序运行过程中都占用内存单元,在其所在的函数被调用时,它才可以被使用,函数结束后,此变量仍然在内存中,且保持其内容不改变。 为何要使用这样的一种局部静态变量? 有时需要局部变量在函数结束后不消失且保留原值,其占用的存储单元也不释放,下次再调用此函数时可以使用上次函数结束时的值。这就需要使用局部静态变量。

定义局部静态变量static 定义局部静态变量,格式如下: static 数据类型 变量名 [=初始化表达式],……; 例如: static int a;

外部变量 外部变量的生命周期是整个执行过程,其存储类型标识是extern 。 建立静态外部变量,其内容可以由各个函数填入。

在一个文件内声明外部变量 如果外部变量不在文件的开头定义,它的作用域仅限于定义处到文件结束。 如果在定义之前的函数想要引用该外部变量,应该在引用之前用extern声明该变量,有了此声明,就可以从声明处起,合法的使用此外部变量。 变量的语句放在所有函数之前,这些函数就不必用extern声明外部变量了。其作用跟全局变量基本相同。

在多个文件中声明外部变量 如果一个C程序由多个程序文件组成,可以在一个文件引用另一个文件中已经定义的外部变量,起到共享变量交换数据的作用。 例如一个程序包含2个文件,这2个文件都要用到变量A,不能分别在2个文件中都定义一个外部变量A,否则会出现重复定义。 正确的做法是:在1个文件中定义1个外部变量A,而在另1个文件中用extern对A做外部变量声明。见【例8-29】

【例8-29】 File1.c #include "stdio.h" int A; void main() { int power(int); int c,d,m; printf("enter the A and m :\n"); scanf("%d%d",&A,&m); c=A*m; printf("%d*%d=%d\n",A,m,c); d=power(m); printf("%d**%d=%d\n",A,m,d); system("pause"); } File2.c #include "stdafx.h" int extern A; int power(int n) { int i,y=1; for(i=1;i<=n;i++) y*=A; printf("%d\n",y); return(y); }

如:static int fun(int a,int b); 如:extern int fun(int a,intb); 内部函数和外部函数 内部函数只能被本文件中其它函数调用,定义时在前面加static,又称静态函数。 如:static int fun(int a,int b); 外部函数可供其它文件调用,定义时在前面加extern。 如:extern int fun(int a,intb);