资源描述:
《存储类型宏定义数组.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第9讲变量的存储类型带参数的宏定义数组请大家及时消化我课上讲的内容,并举一反三,模仿未讲过的例题多写程序。如果说学习C语言有捷径的话:那就是多读程序,多写程序作业答案-15.6doubleS(floatx,intn){if(n==1)returnx;elsereturnS(x,n-1)+x*x;}将#include改为windows.h将clrscr();改为system(“CLS”);clrscr()是TC中的清屏函数,VC中没有,但VC中一般不需要。2习题5.12问题的关键是如何将n的问题化解为n-1的问题(即反方向求解问题)。根据分析,写出如下的
2、数学函数:doubleS(floatx,intn){if(n==1)returnx;elsereturnS(x,n-1)+pow(x,n);}3#include#includedoubleS(floatx,intn);voidmain(){doublex,s;intn;printf(“pleaseinputx,n:”);scanf(“%lf,%d”,&x,&n);s=S(x,n);printf(“S(%lf,%d)=%lf”,x,n,s);}doubleS(doublex,intn){if(n==1)returnx;elseret
3、urnS(x,n-1)+pow(x,n);/*递归要通过函数的依次调用实现*/}习题5.12程序#include#includedoubleS(floatx,intn);voidmain(){doublex,s;intn;printf(“pleaseinputx,n:”);scanf(“%lf,%d”,&x,&n);s=S(x,n);printf(“S(%lf,%d)=%lf”,x,n,s);}doubleS(doublex,intn)/*用递推求解*/{doublesum=0;inti;for(i=1;i<=n;i++)/*递推
4、要用循环语句实现*/sum+=pow(x,i);returnsum;}切忌:将递归函数的内容写至主函数中;将递归中的语句放至循环中;在递归函数中写s(x,n)=S(x,n-1)+pow(x,n);4另一个具有“记忆性”的变量类型:静态变量(static)一般的内部变量在函数退出后失效,再次进入函数,变量值重新初始化静态变量在变量类型前面用static修饰staticinti;变量存在静态存储区,当函数结束时,内存空间不被释放,因此,变量的值可以保存到下次进入函数,即变量具有记忆功能5涉及的语法-变量的存储类型编译器为变量分配内存的方式它决定变量的生存期程序存储区静态存储区动态
5、存储区形参、自动变量、函数调用的现场等全局变量、静态变量动态存储根据需要临时分配存储空间,离开即释放静态存储在程序运行期间分配固定的存储空间不释放内存分配6例-静态变量#includevoidFunc(void);main(){inti;for(i=0;i<10;i++){Func();}}/*函数功能:打印被调用的次数函数入口参数:无函数返回值:无*/voidFunc(void){staticinttimes=1;/*静态局部变量函数结束时times变量仍然占据静态存储区的存储空间,不释放*/printf("Func()wascalled%dtime(s)
6、.",times++);}Func()wascalled1time(s).Func()wascalled2time(s).Func()wascalled3time(s).Func()wascalled4time(s).Func()wascalled5time(s).Func()wascalled6time(s).Func()wascalled7time(s).Func()wascalled8time(s).Func()wascalled9time(s).Func()wascalled10time(s).1times23107例-非静态变量#include
7、voidFunc(void);main(){inti;for(i=0;i<10;i++){Func();}}/*函数功能:打印被调用的次数函数入口参数:无函数返回值:无*/voidFunc(void){inttimes=1;printf("Func()wascalled%dtime(s).",times++);}Func()wascalled1time(s).Func()wascalled1time(s).Func()wascalled1time(s).Func()wascalled1time(s)