第6章函数与编译预处理命令 在C程序设计中,通常将一个较大程序分 成几个功能较为单一的子程序模块,用函数来 完成每个子程序的作用。C语言是函数驱动语 言,C程序都由一个或多个函数构成,其中有 且只有一个名为man的函数,即主函数,C程 序总是从main函数开始执行并最后在main函数 中结束整个程序的运行
第 6 章 函数与编译预处理命令 在C程序设计中,通常将一个较大程序分 成几个功能较为单一的子程序模块,用函数来 完成每个子程序的作用。C语言是函数驱动语 言,C程序都由一个或多个函数构成,其中有 且只有一个名为main的函数,即主函数,C程 序总是从main函数开始执行并最后在main函数 中结束整个程序的运行
函数常识 1、功能模块:求解较小问题的算法和程序称作 “功能模块”,各功能模块可以先单独设计, 然后将求解所有子问题的模块组合成求解原问 题的程序 2、一个解决大问题的程序,可以分解成多个 解决小问题的模块,这就是“自顶向下”的模 块化程序设计方法 3、用一个或多个函数来实现这些功能模块
函数常识 1、功能模块:求解较小问题的算法和程序称作 “功能模块”, 各功能模块可以先单独设计, 然后将求解所有子问题的模块组合成求解原问 题的程序。 2、一个解决大问题的程序,可以分解成多个 解决小问题的模块,这就是“自顶向下”的模 块化程序设计方法。 3、用一个或多个函数来实现这些功能模块
例:打印图形: 大大大大大大大大大大大大大大大大大大 How do you do 大大大大大大大大大大大大大大大大大大 大大大大大大大大大大大大大大大大大 编程 maino 三个语句一样可编写成函数: i printf( 大大大大大大大大大大大大大大 n void printstaro pint( How do you do!hny;:(prit*来***料mn printf( 大大大大大大大大大大大大大大大大大大 n printf( 大大大大大大大大大大大大大大大大大大 An) 源程序可简化为
例: 打印图形: ****************** How do you do! ****************** ****************** 编程: main() { printf(“****************\n”); printf(“How do you do! \n”); printf(“******************\n”); printf(“******************\n”); } 源程序可简化为: 三个语句一样,可编写成函数: void printstar() { printf(“**************\n” ); }
maino i printstarO pr instar o print( How do you do!n”):用户自定义的函数 printstaro 1.说明几点: ①、一个原程序文件由一个或多个函数组成。 个源程序文件是一个编译单位,即以源文件为单位进行 编译,而不是以函数为单位进行编译 ②、C程序的执行从main函数开始,在main函数 中结束整个程序的运行。man函数是系统定义的。 ③、所有的函数都是平行的,不能嵌套定义,但可 以互相调用,但不能调用main函数
main() { printstar(); printstar() printf(“ How do you do!\n”): 用户自定义的函数 printstar(): } 1.说明几点: ① 、一个原程序文件由一个或多个函数组成。一 个源程序文件是一个编译单位,即以源文件为单位进行 编译,而不是以函数为单位进行编译。 ②、C程序的执行从main函数开始,在main函数 中结束整个程序的运行。main函数是系统定义的。 ③、所有的函数都是平行的,不能嵌套定义,但可 以互相 调用,但不能调用main 函数
模块与函数 函数:完成相对独立功能的程序 标准函数:由系统提供的库函数,不必 ①从使用角度分 定义直接引用,如 fabs等 用户自定义函数:用以解决用户专门需要。 无参函数:如 printsaro; ②从函数形式分 有参函数:如sin(x,sqrt(×); 不传递数据 主调函数 被调用函数 传递数据
模块与函数 函数:完成相对独立功能的程序. 标准函数:由系统提供的库函数,不必 ①从使用角度分 定义直接引用,如fabs()等。 用户自定义函数:用以解决用户专门需要。 无参函数:如printsar(); ②从函数形式分 有参函数:如 sin(x), sqrt(x); 不传递数据 主调函数 被调用函数 传递数据
[例]输入三个数,将其按从小到大的顺序输出. maino i float a, b, c, t scanf(%f, %f, %f, &a, &b, &c) if(a>b)t=a, a=b, b=t if(a>c)t=a, a=c, c= if(b>c)t=b, b=C,c=t printf(96.1f,%6.1f,%6.1fn",a,b,c)
[例]输入三个数,将其按从小到大的顺序输出. main() { float a,b,c,t; scanf(“%f,%f,%f”,&a,&b,&c); if(a>b) t=a,a=b,b=t; if(a>c) t=a,a=c,c=t; if(b>c) t=b,b=c,c=t; printf(“%6.1f,%6.1f,%6.1f\n”,a,b,c); }
用函数实现: 输入(用 scanf函数) 主控模块排序 输出(用prin函数) 排序函数 sortable void sortabc() i float t if(a>b)t=a, a=b, b=t if(a>c)t=a, a=C, C= if(b>c)t=b, b=C, C=t
用函数实现: 输入(用scanf函数) 主控模块 排序 输出 (用printf函数) 排序函数sortabc: void sortabc( ) { float t; if(a>b) t=a,a=b,b=t; if(a>c) t=a,a=c,c=t; if(b>c) t=b,b=c,c=t; }
float a b,c;/*定义a,b,c为全程变量* main() scanf("%f,%f,%f,&a,&b,&c);/*输入*/ sortabc(; /米排序*/ print(%6.1f%61%61fn”a,b,c);/*输出* 模块独立:功能独立,关系简单; 模块设计原则:模块规模适当 分解模块要注意层次
float a,b,c; /* 定义 a,b,c为全程变量 */ main( ) { scanf("%f,%f,%f”,&a,&b,&c); /* 输入 */ sortabc( ); /* 排序 */ printf(“%6.1f,%6.1f,%6.1f\n”,a,b,c); /*输出*/ } 模块独立:功能独立,关系简单; 模块设计原则:模块规模适当 分解模块要注意层次
算法 1算法:是求解某一类特定问题的方法和步骤。 2算法的性质 1)算法是一个有限操作序列。即算法的有穷性。 (2)算法的每一步都应是确定的,没有二义性。 (3)算法的每一步都应是计算机能进行的有效操作。 (4)有一个或多个输入。 (5)有一个或多个输出,表示问题的解 3.算法的描述 (1)自然语言 (2)框图语言(N-S流程图) (3)计算机语言
算法 1.算法:是求解某一类特定问题的方法和步骤。 2.算法的性质 (1) 算法是一个有限操作序列。即算法的有穷性。 (2) 算法的每一步都应是确定的,没有二义性。 (3) 算法的每一步都应是计算机能进行的有效操作。 (4) 有一个或多个输入。 (5) 有一个或多个输出,表示问题的解。 3.算法的描述 (1)自然语言 (2)框图语言(N-S流程图) (3)计算机语言
例:找出a,b两数中的较大者,并输出。 1、自然语言描述 (1)输入两个数; (2)如果a>b,则a max 否则b max: (3)输出max的值 2、N-S框图语言描述 输入ab 是 a>b 否 a→maxb→max 输出max的值
例:找出a,b两数中的较大者,并输出。 1、自然语言描述 (1)输入两个数; (2)如果a>b,则a max, 否则b max; (3)输出max的值。 2、N-S 框图语言描述 输入a,b a>b 是 否 a max b max 输出max的值