C程序设计 主讲教师:汪闽 南京师范大学 地图学与地理信息系统04级 专业选修课
C程序设计 南京师范大学 地图学与地理信息系统04级 专业选修课 主讲教师: 汪闽
回顾∶数组 下标从0开始,最大n-1 数组的初始化方式非常灵活 字符数组比较特殊(0)
回顾:数组 • 下标从0开始,最大n-1 • 数组的初始化方式非常灵活 • 字符数组比较特殊 (‘\0’)
第七章巫数 本章学习要点 7,1概述 7.2函数的定义 ◆函数的概念和定义方法 7.3函数的返回值 7.4函数的调用 ◆函数中各种数据的传递方法和差别 7.5函数参数及其传递方式 7.6函数的嵌套与递归调用 ◆变量的作用域和存储类型(特别是 static变量的特点) 77数组作为函数参数 7.8变量的属性 ◆利用函数进行综合程序设计 7.9内部函数与外部函数
第七章 函数 7.1 概述 7.2 函数的定义 7.3 函数的返回值 7.4 函数的调用 7.5 函数参数及其传递方式 7.6 函数的嵌套与递归调用 7.8 变量的属性 7.7 数组作为函数参数 本章学习要点: ◆函数的概念和定义方法 ◆函数中各种数据的传递方法和差别 ◆变量的作用域和存储类型(特别是 static 变量的特点) ◆利用函数进行综合程序设计 7.9 内部函数与外部函数
7.1概述 模块化程序设计语言:C语言 C程序 源程序文件1源程序文件源程序文件n 预编译命令 函数1 函数n 说明部分执行部分 C程序结构 皿C是函数式语言 必须有且只能有一个名为main的主函数 但C程序的执行总是从main函数开始,在main中结束 主函数调用其他函数,其他函数也可以相互调用
源程序文件1 预编译命令 说明部分 执行部分 函数1 函数n 源程序文件i 源程序文件n C程序 C程序结构 C是函数式语言 必须有且只能有一个名为main的主函数 C程序的执行总是从main函数开始,在main中结束 主函数调用其他函数,其他函数也可以相互调用 模块化程序设计语言:C语言 7.1 概述
函数基本分类 printf(.) scanf(.) getchar 从用户角度 putchar(.) 标准函数(库函数):由系统提供 用户自定义函数 sort( maX 从函数形式 message(.) 无参函数 getch(或 有参函数 int getch( void) int printf( const char format argument.)
• 从用户角度 – 标准函数(库函数):由系统提供 – 用户自定义函数 • 从函数形式 – 无参函数 – 有参函数 * 函数基本分类 printf(…) scanf(…) getchar() putchar(…) … sort(…) max(…) message(…) … int getch() 或 int getch(void) int printf( const char *format [, argument]... )
72函数的定义 函数返回值类型 缺省int型 格式 无返回值void 合法标识符 现代风格 函数类型函数名(形参类型说明表) 函数体 说明部分 语句部分 例有参函数(现代风格) 例有参函数(现代风格) int max(int x, int y) int max(int x, y) i int z i int z Xy:xy return(z return(z)
– 格式 合法标识符 函数返回值类型 缺省int型 无返回值void 函数体 函数类型 函数名(形参类型说明表) { 说明部分 语句部分 } 现代风格: 例 有参函数(现代风格) int max(int x,int y) { int z; z=x>y?x:y; return(z); } 例 有参函数(现代风格) int max(int x, y) { int z; z=x>y?x:y; return(z); } 7.2 函数的定义
传统风格 例有参函数(传统风格) 函数类型函数名(形参表) int max(x,y) 形参类型说明 Int x,y 说明部分 Z-y! y, 语句部分 return(z) 无参函数? 例无参函数 例空函数 printstar() dummy printf(“****n”);,} 或 printstar( void 函数体为空* printf((“****n”);}
函数类型 函数名(形参表) 形参类型说明 { 说明部分 语句部分 } 传统风格: 例 有参函数(传统风格) int max(x,y) int x,y; { int z; z=x>y?x:y; return(z); } 例 空函数 dummy( ) { } 函数体为空* 例 无参函数 printstar( ) { printf(“**********\n”); } 或 printstar(void ) { printf(“**********\n”); } 无参函数?
73函数的返回值例 例无返回值函数 void swap(int x, inty) maIn 返回语句 i int temp 形式: return(表达式); temp=X 或 return表达式; X-V 或 return; 功能:使程序控制从被调用函数返回 e y=temp 到调用函数中,同时把返值带}} 给调用函数 ts(本函数有问题 说明 函数中可有多个 return语句 (a+b<0 若无 return语句,遇}时, return ab: 自动返回调用函数 else if(atb==0) 若函数类型与 return语句中表达 eturn(a+b); 式值的类型不一致,按前者为准,sef 自动转换函数调用转换 printf("%d %d",a, b); return; void型函数
– 返回语句 • 形式: return (表达式); 或 return 表达式; 或 return; • 功能:使程序控制从被调用函数返回 到调用函数中,同时把返值带 给调用函数 • 说明: – 函数中可有多个return语句 – 若无return语句,遇} 时, 自动返回调用函数 – 若函数类型与return语句中表达 式值的类型不一致,按前者为准, 自动转换------函数调用转换 – void型函数 7.3 函数的返回值 例 return 语句的示意 main() { int i=-4; int j=4; int aa=test(i, j); printf("%d",aa); getch(); } test (int a, int b) { if (a+b<0) return a*b; else if(a+b ==0) return (a+b); else { printf("%d %d",a,b); } return; } 例 无返回值函数 void swap(int x,int y ) { int temp; temp=x; x=y; y=temp; } (本函数有问题!!) *
74函数的调用 74.1调用形式 函数语句: 例 printstar(; printf( Hello, World!ln”) 函数表达式 例m-max(ab)*2; 函数参数: 例 printf(“%od”max(ab) m=max(a, max(b, c)
7.4.1 调用形式 7.4 函数的调用 • 函数语句: 例 printstar(); printf(“Hello,World!\n ”); • 函数表达式: 例 m=max(a,b)*2; • 函数参数: 例 printf(“%d”,max(a,b)); m=max(a,max(b,c));
74.2函数申明(说明) 例函数的申明 int test(int, int); int test(int a, int b); 对被调用函数要求: int test(; main(t 必须是已存在的函数 int i, j; 库函数:# include int test(int, int); 用户自定义函数:一般要加上函数类型申明(说明) testo: 函数申明(示例) int test (int a. int b 般形式:函数类型函数名(形参类型[形参名例函数的申明 或 函数类型函数名O int test (int a, int 函数定义与函数申明不同 b){ main(t 作用:告诉编译系统函数类型、参数个数及类型,以inti; 函数申明位置:程序的数据申明部分(函数内或外) test(, 下列情况下,可不作函数说明 》若函数返值是nt型,系统自动按it型处理(不推荐!) 被调用函数定义出现在主调函数之前 有些系统(如 Borland c++)要求函数申明指出函数返值类型和形 参类型,并且对void和int型函数也要进行函数申明*
• 对被调用函数要求: – 必须是已存在的函数 – 库函数: #include – 用户自定义函数: 一般要加上函数类型申明(说明) • 函数申明 (示例) – 一般形式: 函数类型 函数名(形参类型 [形参名],….. ); 或 函数类型 函数名(); – 函数定义与函数申明不同 – 作用:告诉编译系统函数类型、参数个数及类型,以便检验 – 函数申明位置:程序的数据申明部分(函数内或外) – 下列情况下,可不作函数说明 »若函数返值是int型,系统自动按int型处理(不推荐!) »被调用函数定义出现在主调函数之前 – 有些系统(如Borland C++)要求函数申明指出函数返值类型和形 参类型,并且对void 和 int 型函数也要进行函数申明* 7.4.2 函数申明(说明) 例 函数的申明 int test(int, int); int test(int a, int b); int test(); main(){ int i, j; test(); } int test (int a, int b){ } int test(int ,int); 例 函数的申明 int test (int a, int b){ } main(){ int i, j; test(); }