文档详情

《6第6章 函数与模块化程序设计基础》.ppt

发布:2015-10-15约9.7千字共45页下载文档
文本预览下载声明
第6章 模块化程序设计 1. 概述:模块,函数,算法 2. 函数的定义与说明(重点) 3. 函数的调用(重点,难点递归调用) 4. 变量的作用域(重点) 5. 变量的存储属性(重点,难点) 6.1 概述 6.1.1 模块与函数 1.功能模块 求解较小问题的算法和程序称作“功能模块”, 各功能模块可以先单独设计,然后将求解所有子问题的模块组合成求解原问题的程序。 “自顶向下”的模块化程序设计方法: 将一个大问题分解成多个解决小问题的模块的设计思想。 2.由功能模块组成程序的结构图: 【例6-1】 输入年月日,计算出该日为该年的第几天。 程序实现: (1)判断闰年。 int leap(int year) {int lp; lp=(year%4==0year%100!=0||year%400==0)?1:0; return lp; } (2)求某月的天数。 int month_days(int year,int month) { int ds,d; switch(month) {case 1: case 3: case 5: case 7: case 8: case 10: case 12:d=31;break; case 2:d=leap(year)?29:28;break; default:d=30;} return d; } (3)求天数和。 int days(int year,int month,int day) {int i,ds=0; for (i=1;imonth;i++) ds=ds+month_days(year,i); ds=ds+day; return ds; } 4) 在主函数中分别调用三个函数。 void main() { int year,month,day,t_day; printf(Input year-month-day:\n); scanf(%d-%d-%d,year,month,day); t_day=days(year,month,day); printf(%d-%d-%d is %dth day of the year!\n,year, month,day,t_day); } 注意: 在完整的程序中,前三个函数应放在main( )函数之前。 6.1.2 模块设计三个原则 模块独立。 功能独立的子功能 模块之间的关系简单 使用独立变量 模块规模适当 分解模块要注意层次 对问题抽象化 设计时细化 6.2 函数定义与使用 一、标准库函数 定义在不同的头文件中 用户使用时,必须用#include“头文件”把相应的头文件包含到程序中来。 #include math.h /* 包含math.h头文件 */ #include stdio.h /* 包含 stdio.h 头文件 */ main( ) { double a, b; scanf (“%f “,a); /*调用输入函数,输入变量a的值*/ b = sin (a); /*调用sin函数,求sin (a) 的值*/ printf( “%6.4f”, b); } /*调用输出函数,输出变量b的值*/ 二、用户自定义函数 函数类型 无参函数 函数的定义无参数说明 有参函数 定义的参数有一个或一个以上的参数 空函数 当定义的函数既无参数也无执行语句。 空函数被调用时,什么也不做立即返回其调用函数。 2. 函数定义 方式1 函数返回值类型名 函数名(参数列表) 参数类型说明 { 局部变量说明; 语句序列; } 方式2 函数返回值类型名 函数名(参数类型说明及参数列表) { 局部变量说明; 语句序列; } 【例6-3】定义符号函数sign。 int sign(x) /*函数返回值类型未说明,默认为int,建议给出函数类型说明*/ int x; /*形式参数说明*/ {int y; /*函数体局部变量*/ y=x0?1:(x==0?0:-1); return y; /*返回函数值*/ } 注意:C语言函数分为两大部分: 函数的说明部分 函数体部分。 函数各部分作用 1)函数的说明部分 函数说明部分说明函数的类型, 函数名, 参数表及参数类型。 (1)函数的类型说明 函数的类型即函数的返回值类型。若函数不提供返回值,则可定义其类型为: void。 例如: void putdata(int a) (2) 函数名 函数名又称函数标识符。命名遵循C语语言标识符的规定;函数名要反映函数
显示全部
相似文档