存储类型宏定义数组.ppt

上传人:牧羊曲112 文档编号:6268087 上传时间:2023-10-11 格式:PPT 页数:32 大小:328.99KB
返回 下载 相关 举报
存储类型宏定义数组.ppt_第1页
第1页 / 共32页
存储类型宏定义数组.ppt_第2页
第2页 / 共32页
存储类型宏定义数组.ppt_第3页
第3页 / 共32页
存储类型宏定义数组.ppt_第4页
第4页 / 共32页
存储类型宏定义数组.ppt_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《存储类型宏定义数组.ppt》由会员分享,可在线阅读,更多相关《存储类型宏定义数组.ppt(32页珍藏版)》请在三一办公上搜索。

1、第9讲变量的存储类型带参数的宏定义数组,请大家及时消化我课上讲的内容,并举一反三,模仿未讲过的例题多写程序。如果说学习C语言有捷径的话:那就是多读程序,多写程序,解析C程序设计第2章 简单程序设计,2,作业答案1,5.6double S(float x,int n)if(n=1)return x;else return S(x,n-1)+x*x;,将#include改为windows.h将clrscr();改为system(“CLS”);clrscr()是TC中的清屏函数,VC中没有,但VC中一般不需要。,解析C程序设计第2章 简单程序设计,3,习题5.12,问题的关键是如何将n的问题化解为n

2、-1的问题(即反方向求解问题)。根据分析,写出如下的数学函数:,double S(float x,int n)if(n=1)return x;else return S(x,n-1)+pow(x,n);,解析C程序设计第2章 简单程序设计,4,#include#includedouble S(float x,int n);void main()double x,s;int n;printf(“please input x,n:n”);scanf(“%lf,%d”,/*递归要通过函数的依次调用实现*/,习题5.12程序,#include#includedouble S(float x,int n

3、);void main()double x,s;int n;printf(“please input x,n:n”);scanf(“%lf,%d”,切忌:将递归函数的内容写至主函数中;将递归中的语句放至循环中;在递归函数中写s(x,n)=S(x,n-1)+pow(x,n);,解析C程序设计第2章 简单程序设计,5,另一个具有“记忆性”的变量类型:静态变量(static),一般的内部变量在函数退出后失效,再次进入函数,变量值重新初始化静态变量在变量类型前面用static修饰static int i;变量存在静态存储区,当函数结束时,内存空间不被释放,因此,变量的值可以保存到下次进入函数,即变量具

4、有记忆功能,解析C程序设计第2章 简单程序设计,6,涉及的语法-变量的存储类型,编译器为变量分配内存的方式它决定变量的生存期,动态存储根据需要临时分配存储空间,离开即释放静态存储在程序运行期间分配固定的存储空间不释放,内存分配,解析C程序设计第2章 简单程序设计,7,例-静态变量,#include void Func(void);main()int i;for(i=0;i10;i+)Func();/*函数功能:打印被调用的次数 函数入口参数:无 函数返回值:无*/void Func(void)static int times=1;/*静态局部变量 函数结束时times变量仍然占据静态存储区的存

5、储空间,不释放*/printf(Func()was called%d time(s).n,times+);,Func()was called 1 time(s).Func()was called 2 time(s).Func()was called 3 time(s).Func()was called 4 time(s).Func()was called 5 time(s).Func()was called 6 time(s).Func()was called 7 time(s).Func()was called 8 time(s).Func()was called 9 time(s).Fun

6、c()was called 10 time(s).,2,3,10,解析C程序设计第2章 简单程序设计,8,例-非静态变量,#include void Func(void);main()int i;for(i=0;i10;i+)Func();/*函数功能:打印被调用的次数 函数入口参数:无 函数返回值:无*/void Func(void)int times=1;printf(Func()was called%d time(s).n,times+);,Func()was called 1 time(s).Func()was called 1 time(s).Func()was called 1 t

7、ime(s).Func()was called 1 time(s).Func()was called 1 time(s).Func()was called 1 time(s).Func()was called 1 time(s).Func()was called 1 time(s).Func()was called 1 time(s).Func()was called 1 time(s).,2,2,解析C程序设计第2章 简单程序设计,9,根据存储类型可分为,自动变量(auto)静态变量(static)寄存器变量(register),解析C程序设计第2章 简单程序设计,10,自动变量(auto)

8、,我们以前定义的那些变量,都默认是这种类型“自动”体现在进入语句块时自动申请内存,退出时自动释放内存 标准定义格式 auto 类型名 变量名;特点:动态局部变量缺省的存储类型不初始化时,值是不确定的,解析C程序设计第2章 简单程序设计,11,寄存器变量(register),寄存器CPU的内部容量很有限、但速度极快的存储器使用频率比较高的变量声明为register,可以使程序更小、执行速度更快register 类型名 变量名;register int i;现代编译器有能力自动把普通变量优化为寄存器变量,并且可以忽略用户的指定,所以一般无需特别声明变量为register,解析C程序设计第2章 简单

9、程序设计,12,静态变量和全局变量,相同点:都是静态存储类型自动初始化为0都存储在静态存储区,整个程序运行期间一直占据内存不同点:作用域不同全局变量在所有的源程序文件中都可用静态变量又分为静态局部变量和静态全局变量,作用域分别是所在函数和所在源文件,解析C程序设计第2章 简单程序设计,13,#includeint square(int i);void main()int i=0;i=square(i);for(;i3;i+)static int i=1;i+=square(i);printf(“%d,”,i);printf(“%dn”,i);int square(int i)return i*

10、i;,习题5.1,2,1,6,2,42,3,输出结果:,2,6,3,42,解析C程序设计第2章 简单程序设计,14,带参数的宏定义,#define SQUARE(n)(n)*(n)main()int i=1;printf(%4d,SQUARE(+i);,main()int i=1;printf(%4d,(i)*(i);,解析C程序设计第2章 简单程序设计,15,涉及语法-带参数的宏定义,一般格式:#define 宏名(参数表)字符序列功能:将程序中出现的前者置换为后者。其中宏名后面的括号里是参数,类似函数中形参表,只是此处的形参无类型说明。字符序列中应包含括号中所指定的参数,否则参数设置无意义

11、。,解析C程序设计第2章 简单程序设计,16,应注意的问题,使用带参数的宏定义可以实现某些简单函数的功能(注意是某些,而不是全部)。定义时,宏名和参数表之间不能有空格。对带参数的宏定义,字符序列及其字符序列中各个形参都应该用圆括号括起来。例:#define SQUARE(n)(n)*(n),#define s(a,b,c)a*b*cmain()printf(“%d”,s(3+5,5/2,2+3);,3+5*5/2*2+3,#define f(x,y)(x)+(y)main()int a=4,b=3;printf(%d,f(a,b)*f(a,b);,(a)+(b)*(a)+(b),解析C程序设计

12、第2章 简单程序设计,17,区别,(i)*(i),当函数功能非常简单时,可以用带参数的宏定义来实现。,解析C程序设计第2章 简单程序设计,18,函数相关内容总结,为什么定义函数?模块化程序设计方法函数的定义、调用、声明参数传递变量的作用域和存储类型函数的嵌套定义和递归定义,解析C程序设计第2章 简单程序设计,19,新的问题:,例:输入全班60个学生的C语言成绩并统计不及格的人数。分析:输入60个成绩统计人数输出统计结果,如何定义变量?在数学中怎样解决这个问题?score1,score2,scorei,score60,解析C程序设计第2章 简单程序设计,20,1定义变量用于存储成绩,int sc

13、ore60;,数组名(这一组数的共同名字),数组长度,含义:向系统申请60*sizeof(int)个字节的连续空间,用于存储60个成绩,它们共同的名字score。将来数组中的每一个元素就分别是score0、score1、score2、score59,此时,方括号里的数字不再表示长度,而是下标。它们的名字score表示这一串内存的起始地址。,解析C程序设计第2章 简单程序设计,21,数组的内存分配,score,score0,score1,score59,score2,score3,注意下标从0开始,解析C程序设计第2章 简单程序设计,22,涉及的语法-数组定义及相关概念,数组:一组具有类型相同、

14、顺序存放的数据什么时候定义数组?定义格式:数据类型 数组名数组长度;注:数组长度必须是常量。例:int score60;含义:,解析C程序设计第2章 简单程序设计,23,2、输入60个成绩,循环60次输入 for(i=0;i60;i+)scanf(%d,使用数组的每一个元素也称数组元素的引用。,解析C程序设计第2章 简单程序设计,24,3、统计人数,从第一个学生起,判断每一个学生的成绩是否小于60,是的话计数器加1 for(i=0;i60;i+)if(scoreI60)counter+;4、输出:,解析C程序设计第2章 简单程序设计,25,完整程序,#define N 60main()int

15、scoreN;int i,counter=0;for(i=0;iN;i+)/*输入*/scanf(%d,有什么好处?,解析C程序设计第2章 简单程序设计,26,P162例63求Fibonacci数列前40项,算法:定义数组求每一项输出每一项,int fib40=1,1;/*为数组的第一、二个元素进行初始化,其它自动为0*/,for(i=2;i40;i+)fibi=fibi-2+fibi-1;/*循环求剩余的38项*/,for(i=0;i40;i+)if(i%4=0)/*每输出四个数,输出一个回车*/printf(n);printf(%12d,fibi);,解析C程序设计第2章 简单程序设计,2

16、7,P162例63:完整程序,#include void main()int i,fib40=1,1;for(i=2;i40;i+)fib i=fib i-2+fib i-1;for(i=0;i40;i+)if(i%4=0)printf(n);printf(%12d,fib i);,解析C程序设计第2章 简单程序设计,28,例65,查找字符在字符串中出现的位置算法定义字符数组用来存储字符串查找输出查找结果,解析C程序设计第2章 简单程序设计,29,#includevoid main()/*在一个固定的字符串中查找是否存在空格*/int i,counter=0;char a30=I am a t

17、eacher.;/*一般用字符串常量对字符数组初始化,也可以用char a30=I,a,m,a,t,e,a,c,h,e,r,.;系统会将未赋值的数组元素自动赋值为0.*/for(i=0;ai!=0;i+)/*查找*/if(ai=)printf(“在字符串%s 中的位置为空格。n,i+1);counter+;printf(“the string:%s has%d space!n,a,counter);,/*一般字符数组中存储的字符串长度不定,所以循环条件不能用I30这样的语句限定,而应用ai!=0作为循环结束条件*/,若想实现“在任意字符串中查找是否存在任意要找的字符”。,解析C程序设计第2章

18、简单程序设计,30,#includevoid main()/*在任意字符串中查找是否存在一个任意字符*/int i,p=-1;char a30,ch;gets(a);/*输入*/ch=getchar();for(i=0;ai!=0;i+)if(ai=ch)/*找到即结束*/p=i;break;if(p!=-1)/*根据p的值判断是否找到。*/printf(字符%c 在字符串%s 中的位置为:%d。n,ch,a,p+1);else printf(字符%c 在字符串%s 中没有找到。n,ch,a);,gets(a):gets()是C语言库函数,gets(a)的含义是:将从键盘上输入的一串字符存储在

19、数组a中。也可用scanf(“%s”,a);实现输入,注意a是数组名,表示数组的起始地址,因此不用再写二者的区别是前者可以接收空格,后者遇到空格默认输入结束输出可以用puts(a),也可以用printf(“%s”,a);两者的区别在于前者在输出字符串后还多输出一个回车。,解析C程序设计第2章 简单程序设计,31,字符数组与数值型数组的区别,字符型数组定义时长度要尽量大一些,至少要为0留出位置。字符型数组的输入输出一般不用循环实现对字符型数组进行循环操作时,一般循环条件为:遇到0结束。,解析C程序设计第2章 简单程序设计,32,本讲小结,变量的存储类型带参数的宏定义数组和数组元素的概念数组的定义、初始化、数组元素的引用与数组相关的程序设计,下节课继续讲数组,请一定提前预习例题61作业下节课一起留。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号