实验一函数实验目的一1)掌握函数定义、函数调用、函数原型与函数返回值;2)理解函数间参数的传递规则以及变量的作用域;3)了解函数递归调用;二程序示例[源程序2-1]】计算两个整数的平均值1#include<stdio.h>231/函数原型声明4int Average(int x, int y);56void main()7(8inta=15;9int b=20;10int ave;1112ave = Average(a, b);1314printf("Average of %d and %d is %d. n",15a, b, ave);1611718/*19函数定义20函数功能:计算平均数21整型x,存储第一个运算数函数入口参数:22整型y,存储第二个运算数23平均数函数返回值:24 */
实验一 函数 一 实验目的 1) 掌握函数定义、函数调用、函数原型与函数返回值; 2) 理解函数间参数的传递规则以及变量的作用域; 3) 了解函数递归调用; 二 程序示例 [源程序 2-1] 计算两个整数的平均值 1 #include <stdio.h> 2 3 // 函数原型声明 4 int Average(int x, int y); 5 6 void main() 7 { 8 int a = 15; 9 int b = 20; 10 int ave; 11 12 ave = Average(a, b); 13 14 printf("Average of %d and %d is %d.\n", 15 a, b, ave); 16 } 17 18 /* 19 函数定义 20 函数功能: 计算平均数 21 函数入口参数: 整型 x,存储第一个运算数 22 整型 y,存储第二个运算数 23 函数返回值: 平均数 24 */
25 int Average(int x, int y)26{27int result;28result = (x + y) / 2;29return result;301[程序输出]Averageof15and20is17[程序分析]函数使用一般有两种途径:第一是在主程序前进行函数原型声明,并在程序的任意位置(一般为主程序后)进行函数定义;第二种直接将函数定义放置在主程序前。源程序2-1属于第一种途径。其中第1行为预编译指令,由于主程序中(或称为main函数)使用了printf系统库函数,其在stdio.h中被定义,因此需要包含系统库函数stdio.h。第4行为函数原型声明,给出函数名称Average、函数返回值类型int和函数输入参数x和y(均为int类型),注意函数原型声明后需要有分号。第6行至第16行为主程序(或称为main函数),其中第8-10行进行变量的声明与初始化,第12行进行函数调用,并将函数的返回值赋给变量ave,这里需要注意ave变量类型与函数返回值类型的匹配,第14-15行进行结果的显示输出。第18-30行为函数定义,其中第18-24行为注释语句,对该函数的功能进行说明,良好的注释语句不仅可以帮助他人提高熟悉函数功能的目的,而且可以在代码编写者忘记代码功能时辅助其进行快速回忆,第25行规定函数的名称、返回值类型与输入参数列表,第27-29行为函数体,第26行和第30行为函数定界符。注意:1、第25行函数输入参数列表中定义的变量称为形式参数,它们规定了输入参数的数据类型,并且它们均可以在函数体内使用而不用额外定义,因此函数的形式参数也可称为函数的内部变量2、第29行函数体最后通过return语句进行返回,return后的表达式数据类型要与函数定义的返回值类型相匹配
25 int Average(int x, int y) 26 { 27 int result; 28 result = (x + y) / 2; 29 return result; 30 } [程序输出] Average of 15 and 20 is 17. [程序分析] 函数使用一般有两种途径:第一是在主程序前进行函数原型声明,并在程序 的任意位置(一般为主程序后)进行函数定义;第二种直接将函数定义放置在主 程序前。 源程序 2-1 属于第一种途径。 其中第 1 行为预编译指令,由于主程序中(或称为 main 函数)使用了 printf 系统库函数,其在 stdio.h 中被定义,因此需要包含系统库函数 stdio.h。 第 4 行为函数原型声明,给出函数名称 Average、函数返回值类型 int 和函数 输入参数 x 和 y(均为 int 类型),注意函数原型声明后需要有分号。 第 6 行至第 16 行为主程序(或称为 main 函数),其中第 8-10 行进行变量的 声明与初始化,第 12 行进行函数调用,并将函数的返回值赋给变量 ave,这里 需要注意 ave 变量类型与函数返回值类型的匹配,第 14-15 行进行结果的显示输 出。 第 18-30 行为函数定义,其中第 18-24 行为注释语句,对该函数的功能进行 说明,良好的注释语句不仅可以帮助他人提高熟悉函数功能的目的,而且可以在 代码编写者忘记代码功能时辅助其进行快速回忆,第 25 行规定函数的名称、返 回值类型与输入参数列表,第 27-29 行为函数体,第 26 行和第 30 行为函数定界 符。 注意: 1、 第 25 行函数输入参数列表中定义的变量称为形式参数,它们规定了输入参数 的数据类型,并且它们均可以在函数体内使用而不用额外定义,因此函数的 形式参数也可称为函数的内部变量; 2、 第 29 行函数体最后通过 return 语句进行返回,return 后的表达式数据类型要 与函数定义的返回值类型相匹配
[源程序2-2]函数变量作用范围。1#include<stdio.h>23intglobal;//全局变量定义4voidPlusPlus(void);//函数声明56int main()7{8intsample=O;//局部变量定义9global=1;//全局变量赋值1011printf("Before PlusPlus(), global is %d, sample is %d)n", global,sample);12PlusPlus();13printf("After PlusPlus(), global is %d, sample is %d)n", global, sample);1415return O;1611718/*19函数定义20函数功能:对全局变量global加1,并打印加1之前与之后的值21无函数入口参数:无22函数返回值:23 */24 void PlusPlus(void)25{26intsample=0;//局部变量定义27printf("in PlusPlus function, before++,global is %d, sample is %d)n",global, sample);28global++;29sample++;30printf("In PlusPlus function, after ++, global is %d, sample is %d)n", global, sample);31)
[源程序 2-2] 函数变量作用范围。 1 #include <stdio.h> 2 3 int global; // 全局变量定义 4 void PlusPlus(void); // 函数声明 5 6 int main() 7 { 8 int sample = 0;//局部变量定义 9 global = 1; //全局变量赋值 10 11 printf("Before PlusPlus(), global is %d, sample is %d\n", global, sample); 12 PlusPlus(); 13 printf("After PlusPlus(), global is %d, sample is %d\n", global, sample); 14 15 return 0; 16 } 17 18 /* 19 函数定义 20 函数功能: 对全局变量 global 加 1,并打印加 1 之前与之后的值 21 函数入口参数: 无 22 函数返回值: 无 23 */ 24 void PlusPlus(void) 25 { 26 int sample = 0;//局部变量定义 27 printf("In PlusPlus function, before ++, global is %d, sample is %d\n", global, sample); 28 global++; 29 sample++; 30 printf("In PlusPlus function, after ++, global is %d, sample is %d\n", global, sample); 31 }
[程序输出]Before PlusPlus(),global is1, sample is0InPlusPlusfunction, before++,globalis1,sampleis0InPlusPlusfunction,after++,globalis2,sampleis1AfterPlusPlus(),globalis2,sampleis0[程序分析]本程序演示函数变量作用范围。其中第1行为预编译指令,由于主程序中(或称为main函数)使用了printf系统库函数,其在stdio.h中被定义,因此需要包含系统库函数stdio.h。第3行进行全局变量global的定义,此全局变量的作用域为整个程序,包含主程序(main函数)和PlusPlus函数,在主程序执行结束时global的空间被回收。第4行为函数原型声明,给出函数名称PlusPlus、函数无返回值(即为void类型)且函数无输入参数(即为void类型),注意函数原型声明后需要有分号。第6行至第16行为主程序(或称为main函数),其中第8-9行进行变量的声明与初始化,其中第8行定义局部变量sample并初始化为0,第9行对全局变量进行赋值。第11行调用系统库函数printf在运行PlusPlus函数之前进行数据输出,打印全局变量global和主函数局部变量sample的数值。第12行调用函数PlusPlus。第13行调用系统库函数printf在运行PlusPlus函数之后进行数据输出,打印全局变量global和主函数局部变量sample的数值。由于主程序的返回值类型为int,因此第15行通过return返回0。第18-31行为函数定义,其中第18-23行为注释语句,对该函数的功能进行说明,第24行规定函数的名称、返回值类型与输入参数列表,第26-30行为函数体,第25行和第31行为函数定界符,第28-29行进行自增运算。注意:1、第26行定义PlusPlus函内部的局部变量sample,虽然与主程序中的局部变量sample同名,但注意这两个局部变量的作用空间不同;2、第27行调用系统库函数printf 在对全局变量global 和函数内部局部变量sample进行自增运算之前进行数据输出,打印全局变量global和PlusPlus函数内部局部变量sample的数值3、第30 行调用系统库函数printf在对全局变量global 和函数内部局部变量sample进行自增运算之后进行数据输出,打印全局变量global和PlusPlus函数内部局部变量sample的数值
[程序输出] Before PlusPlus(), global is 1, sample is 0 In PlusPlus function, before ++, global is 1, sample is 0 In PlusPlus function, after ++, global is 2, sample is 1 After PlusPlus(), global is 2, sample is 0 [程序分析] 本程序演示函数变量作用范围。 其中第 1 行为预编译指令,由于主程序中(或称为 main 函数)使用了 printf 系统库函数,其在 stdio.h 中被定义,因此需要包含系统库函数 stdio.h。 第 3 行进行全局变量 global 的定义,此全局变量的作用域为整个程序,包含 主程序(main 函数)和 PlusPlus 函数,在主程序执行结束时 global 的空间被回收。 第 4 行为函数原型声明,给出函数名称 PlusPlus、函数无返回值(即为 void 类型)且函数无输入参数(即为 void 类型),注意函数原型声明后需要有分号。 第 6 行至第 16 行为主程序(或称为 main 函数),其中第 8-9 行进行变量的 声明与初始化,其中第 8 行定义局部变量 sample 并初始化为 0,第 9 行对全局 变量进行赋值。 第 11 行调用系统库函数 printf 在运行 PlusPlus 函数之前进行数据输出,打印 全局变量 global 和主函数局部变量 sample 的数值。 第 12 行调用函数 PlusPlus。 第 13 行调用系统库函数 printf 在运行 PlusPlus 函数之后进行数据输出,打印 全局变量 global 和主函数局部变量 sample 的数值。 由于主程序的返回值类型为 int,因此第 15 行通过 return 返回 0。 第 18-31 行为函数定义,其中第 18-23 行为注释语句,对该函数的功能进行 说明,第 24 行规定函数的名称、返回值类型与输入参数列表,第 26-30 行为函 数体,第 25 行和第 31 行为函数定界符,第 28-29 行进行自增运算。 注意: 1、 第 26 行定义 PlusPlus 函数内部的局部变量 sample,虽然与主程序中的局部变 量 sample 同名,但注意这两个局部变量的作用空间不同; 2、 第 27 行调用系统库函数 printf 在对全局变量 global 和函数内部局部变量 sample 进行自增运算之前进行数据输出,打印全局变量 global 和 PlusPlus 函 数内部局部变量 sample 的数值; 3、 第 30 行调用系统库函数 printf 在对全局变量 global 和函数内部局部变量 sample 进行自增运算之后进行数据输出,打印全局变量 global 和 PlusPlus 函 数内部局部变量 sample 的数值;
[源程序2-3]采用递归的方法计算整数n的阶乘n!。1#include<stdio.h>2//函数原型声明3double fact(int x);45int main(void)617intn;//局部变量定义8double result;910dol11printf("lnput n(n>0):");12scanf("%d", &n);13)while(n<0);1415result = fact(n);1617printf("%d! = %f/n", n, result);1819return O;2012122/*23函数定义24函数功能:当x>2时递归计算x!的值,当x为0或1时,返回1;当×小于0时,返回025函数入口参数:整型x,存储阶乘运算数26函数返回值:阶乘结果27 */28 double fact(int x)2930if(x<0)31(32//如果x<0,则返回0return O;331
[源程序 2-3] 采用递归的方法计算整数 n 的阶乘 n!。 1 #include <stdio.h> 2 // 函数原型声明 3 double fact(int x); 4 5 int main(void) 6 { 7 int n;//局部变量定义 8 double result; 9 10 do{ 11 printf("Input n(n>0):"); 12 scanf("%d", &n); 13 }while(n<0); 14 15 result = fact(n); 16 17 printf("%d! = %f\n", n, result); 18 19 return 0; 20 } 21 22 /* 23 函数定义 24 函数功能: 当 x>2 时递归计算 x!的值,当 x 为 0 或 1 时,返回 1; 当 x 小于 0 时,返回 0 25 函数入口参数: 整型 x,存储阶乘运算数 26 函数返回值: 阶乘结果 27 */ 28 double fact(int x) 29 { 30 if(x<0) 31 { 32 return 0; // 如果 x<0,则返回 0 33 }