120 likes | 248 Views
项目十八. 计算 1 k +2 k +3 k + …… +N k. 杨凌职业技术学院电子信息工程系. 计算 s=1k+2k+3k+ …… +Nk. 项目内容. 项目分析. 定义函数 f1 ,求计算 n 的 k 次方;自定义函数 f2 ,计算 1 到 n 的 k 次方的累加和 ;再通过函数之间的嵌套调用来完成。. 杨凌职业技术学院电子信息工程系. 过程与源代码. /* 计算 s=1k+2k+3k+……+Nk*/ #define K 4 /* 宏定义* / #define N 5 /* 宏定义* /
E N D
项目十八 计算1k+2k+3k+……+Nk 杨凌职业技术学院电子信息工程系
计算s=1k+2k+3k+……+Nk 项目内容
项目分析 • 定义函数f1,求计算n的k次方;自定义函数f2,计算1到n的k次方的累加和;再通过函数之间的嵌套调用来完成。 杨凌职业技术学院电子信息工程系
过程与源代码 /*计算s=1k+2k+3k+……+Nk*/ #define K 4 /*宏定义*/ #define N 5 /*宏定义*/ long f1(int n,int k) /*自定义函数f1,求计算n的k次方的函数*/ { long power = 1; /*定义1个长整型变量power并赋给初值1*/ int i; /*定义1个循环控制变量i*/ for(i = 1;i<=k;i++) /*循环控制语句*/ power *= n; /* return power; /*返回power的值到主调函数*/ } long f2 (int n,int k) /*自定义函数f2,计算1到n的k次方的累加和*/ { long sum = 0; /*定义1个局部长整型变量sum并赋给初值0*/ int i; /*定义1个整型变量i*/ for(i =1;i<=n;i++) sum += f1(i, k); /*循环控制语句*/ return sum; /*返回sum的值到主调函数*/ } main( ) { printf("Sum of %d powers of integers from 1 to %d = ",K,N); /*输出K,N的值*/ printf("%d\n",f2(N,K)); /*输出结果*/ } 杨凌职业技术学院电子信息工程系
学生评价 教师评价 项目过程实施与评价
1.了解函数嵌套调用过程; 2.了解递归函数的设计思想: 知识点 杨凌职业技术学院电子信息工程系
上图的执行过程是: (1)执行main函数的开头部分; (2)遇函数调用f1的操作语句,流程转去f1函数; (3)执行f1函数的开头部分; (4)遇调用f2函数的操作语句,流程转去f2函数; (5)执行f2函数,如果无其他嵌套的函数,完成f2函数的全部操作; (6)返回调用f2函数处,即返回f1函数; (7)继续执行f1函数中尚未执行的部分,知道f1函数结束; (8)返回main函数中的调用f1函数处; (9)继续执行main函数的剩余部分直到结束。 杨凌职业技术学院电子信息工程系
3.掌握编译预处理的基本方法 预处理指令 预处理发生在编译之前,其可能的动作包括文件包含(即将其他文件包含到要编译的文件之中),定义符号常量和宏,对程序代码的条件编译和预处理指令的条件执行等。 与文件包含相关的预处理指令有#include。 预处理指令的前面不能有其它的字符。 杨凌职业技术学院电子信息工程系
1.有如下程序 long fib(int n) { if(n>2) return(fib(n-1)+fib(n-2)); else return(2); } main( ) { printf(“%ld\n”,fib(3)); } 该程序的输出结果是__________。 A.2 B.4 C.6 D.8 习题
2.有以下函数定义: void fun(int n, double x) { …… } 若以下选项中的变量都已正确定义并赋值,则对函数fun的正确掉用语句是________。 A.fun(int y,double m) B.k=fun(10,12.5) C.fun(x,n) D.void fun(n,x) 3.若以数组名作为函数调用的实参,传递给形参的是( ) A.数组的首地址 B.数组第一个元素的值 C.数组中的全部元素的值 D.数组元素的个数
4.填空题 (1)函数的调用方式有___﹑___和___。 (2)函数可以嵌套调用,但不可以嵌套______。 (3)函数类型是指____,而函数的返回值是通过_____带回到主调函数的。 5.编程题 编制函数,在主调函数的一维数组中查找最大值及该元素小标﹑最小值及该元素小标。请适当选择参数,使所求结果能传递到主调函数。