C语言程序设计教学课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《C语言程序设计教学课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 教学 课件
- 资源描述:
-
1、#include void main()()float average(float array10);/*函数声明函数声明*/float score10,aver;int;printf(input scores:););for(;(;scanf(,score););printf(););averaverage(score););printf(average score is.n,aver););float average(float array10)int;float aver,;,;for (;);return(aver););运行情况如下:运行情况如下:input scores:.5 .5
2、 average score is 83.40 例例 8.形参数组不定义长度形参数组不定义长度#include void main()()float average(float ,int)float score_15,.,;float score_210=67.5,89.5,99,6.5,77,89.5,76.5,54,60,99.5;printf(“the average of class A is%6.2fn”,average(score_1,5);printf(“the average of class B is%6.2fn”,average(score_2,10);float aver
3、age(float ,int)int;float aver,;,;for(;(;sumsumarray;aversum;return();();运行结果如下:运行结果如下:the average of class A is 80.40The average of class is 78.20例例 8.13 用选择法对数组中用选择法对数组中10个整数按由个整数按由小到大排序。所谓选择法就是先将小到大排序。所谓选择法就是先将10个个数中最小的数与数中最小的数与a0对换对换;再将再将a1到到a9中最小的数与中最小的数与a1对换对换每比较一轮每比较一轮,找出一个未经排序的数中最找出一个未经排序的数中最
4、小的一个。共比较小的一个。共比较9轮。轮。a0 a1 a2 a3 a4 3 6 1 9 4 未排序时的情况未排序时的情况 1 6 3 9 4 将将5个数中最小的数个数中最小的数1与与a0对换对换 1 3 6 9 4 将余下的将余下的4个数中最小的数个数中最小的数3与与a1对换对换 1 3 4 9 6 将余下的将余下的3个数中最小的数个数中最小的数4与与a2对换对换 1 3 4 6 9 将余下的将余下的2个数中最小的数个数中最小的数6与与a3对对 换,至此完成排序换,至此完成排序 程序实例程序实例#include void main()()void sort(int,int);int,;,;pr
5、intf(enter the array););for(;(;scanf(,);,);sort(,);(,);printf(the sorted array ););for(;(;printf(,);,);printf(););void sort(int,int)int,;,;for(;)(;);for(;)(;)if(array array=;=arrayk;arrayk=arrayi;arrayi=t 程序如下:程序如下:#include void main()()max_value(int 4);int 34=1,3,5,7,2,4,6,8,15,17,34,12;printf(max
6、value is,max_value(a)););max_value(int array 4)int,;,;=;(=;);)(;(;(array)=array;return();();运行结果如下:运行结果如下:Max value is 34在一个函数内部定义的变量是内部变量,它只在本函数范围内有效,也就是说只有在本函数内才能使用它们,在此函数以外是不能使用这些变量的。这称为“局部变量”。float f1(int a)/*函数函数f1*/int b,c;a、b、c有效有效 char f2(int x,int y)/*函数函数f2*/int i,j;x、y、i、j有效有效 void main()
7、/*主函数主函数*/int m,n;m、n有效有效(1)主函数中定义的变量(m,n)也只在主函数中有效,而不因为在主函数中定义而在整个文件或程序中有效。主函数也不能使用其他函数中定义的变量。(2)不同函数中可以使用相同名字的变量,它们代表不同的对象,互不干扰。例如,上面在f1函数中定义了变量b和c,倘若在f2函数中也定义变量b和c,它们在内存中占不同的单元,互不混淆。(3)形式参数也是局部变量。例如上面f1函数中的形参a,也只在f1函数中有效。其他函数可以调用f1函数,但不能引用f1函数的形参a。(4)在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效,这种复合语句也称为“
8、分程序”或“程序块”。说说明明void main()int a,b;int c;c=a+b;c在此范围内有效在此范围内有效 a,b在此范围内有效在此范围内有效 在函数内定义的变量是在函数内定义的变量是局部局部变量变量,而在函数之而在函数之外定义的变量称为外定义的变量称为外部变量外部变量,外部变量是全局变量(也称全程变量)。全局变量可以为本文件中其他函数所共用。它的有效范围为从定义变量的位置开始到本源文件结束。int p=1,q=5;/*外部变量外部变量*/float f1(int a)/*定义函数定义函数f1*/int b,c;char c1,c2;/*外部变量外部变量*/char f2(in
9、t x,int y)/*定义函数定义函数f2*/int i,j;全局变量全局变量p,q的作用范围的作用范围 全局变量全局变量c1,c2的作用范围的作用范围void main()/*主函数主函数*/int m,n;例例 8.15 有一个一维数组,内放个学生成绩,写有一个一维数组,内放个学生成绩,写一个函数,求出平均分、最高分和最低分。一个函数,求出平均分、最高分和最低分。#include float Max,Min;*全局变量全局变量*void main()()float average(float array,int n);float ave,score10;int;for(;)(;)scan
10、f(,);,);ave=average(,);(,);printf(“max=%6.2fnmin=%6.2fn average=%6.2fn“,Max,Min,ave);float average(float array,int n)*定义函数,形参为数组定义函数,形参为数组*/int;float aver,sum=array;Max=Min=array;for(=;);)if(arrayMax)Maxarray;else if(arrayMin)Min array;sum=sum+array;aver;return();();运行情况如下:运行情况如下:建议不在必要时不要使用全局变量,原因如
11、下:全局变量在程序的全部执行过程中都占用存储单元,而不是仅在需要时才开辟单元。使用全局变量过多,会降低程序的清晰性,人们往往难以清楚地判断出每个瞬时各个外部变量的值。在各个函数执行时都可能改变外部变量的值,程序容易出错。因此,要限制使用全局变量。它使函数的通用性降低了,因为函数在执行时要依赖于其所在的外部变量。如果将一个函数移到另一个文件中,还要将有关的外部变量及其值一起移过去。但若该外部变量与其他文件的变量同名时,就会出现问题,降低了程序的可靠性和通用性。一般要求把程序中的函数做成一个封闭体,除了可以通过“实参形参”的渠道与外界发生联系外,没有其他渠道。例例 8.8.6 6 外部变量与局部变
12、量同名外部变量与局部变量同名#include int a=3,b=5;/*a,b为外部变量为外部变量*/a,b作用范围作用范围void main()int a=8;/*a为局部变量为局部变量*/局部变量局部变量a作用范围作用范围 printf(%d,max(a,b);全局变量全局变量b的作用范围的作用范围 max(int a,int b)/*a,b为局部变量为局部变量*/int c;c=ab?a b;形参形参a、b作用范围作用范围 return(c);运行结果为运行结果为8 前面已介绍了从变量的作用域(即从空间)角度来分,可以分为全局变量全局变量和局部变量局部变量。那么从变量值存在的时间(即生
13、存期)角度来分,又可以分为静静态存储方式态存储方式和动态存储方式动态存储方式。所谓静态存储方式是指在程序运行期间由系统分配固定的存储空间的方式。而动态存储方式则是在程序运行期间根据需要进行动态的分配存储空间的方式。这个存储空间可以分为三部分:程序区程序区静态存储区静态存储区动态存储区动态存储区在语言中每一个变量和函数有两个属性:数数据类型据类型和数据的存储类别数据的存储类别。对数据类型,读者已熟悉(如整型、字符型等)。存储类别指的是数据在内存中存储的方式。存储方式分为两大类:静态存储类和动态存储类。具体包含四种:自动的自动的(),(),静态的静态的(),),寄存器的寄存器的(),(),外外部的
14、部的()()。根据变量的存储类别,可以知道变量的作用域和生存期。函数中的局部变量,如不专门声明为static存储类别,都是动态地分配存储空间的,数据存储在动态存储区中。函数中的形参和在函数中定义的变量(包括在复合语句中定义的变量),都属此类,在调用该函数时系统会给它们分配存储空间,在函数调用结束时就自动释放这些存储空间。因此这类局部变量称为自动变量。自动变量用关键字作存储类别的声明。例如:int(int)*定义f函数,为形参*auto int,;*定义、为自动变量*有时希望函数中的局部变量的值在函数调用结束后不消失而保留原值,即其占用的存储单元不释放,在下一次该函数调用时,该变量已有值,就是上
15、一次函数调用结束时的值。这时就应该指定该局部变量为“静态局部变量”,用关键字进行声明。通过下面简单的例子可以了解它的特点。例例87 考察静态局部变量的值。#include void main()int(int);,;(;(,();int(int)int;();对静态局部变量的说明:对静态局部变量的说明:(1)静态局部变量属于静态存储类别,在静态存储区内分配存储单元。在程序整个运行期间都不释放。而自动变量(即动态局部变量)属于动态存储类别,占动态存储区空间而不占静态存储区空间,函数调用结束后即释放。(2)对静态局部变量是在编译时赋初值的,即只赋初值一次,在程序运行时它已有初值。以后每次调用函数时
16、不再重新赋初值而只是保留上次函数调用结束时的值。而对自动变量赋初值,不是在编译时进行的,而是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。(3)如在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值(对数值型变量)或空字符(对字符变量)。而对自动变量来说,如果不赋初值则它的值是一个不确定的值。这是由于每次函数调用结束后存储单元已释放,下次调用时又重新另分配存储单元,而所分配的单元中的值是不确定的。(4)虽然静态局部变量在函数调用结束后仍然存在,但其他函数是不能引用它的。例例88 输出到的阶乘值。#include void main()int fac(i
17、nt);int;for(;)printf(%!=,fac();Int fac(int)static int;*;();8.9.4 register变量变量 一般情况下,变量(包括静态存储方式和动态存储方式)的值是存放在内存中的。当程序中用到哪一个变量的值时,由控制器发出指令将内存中该变量的值送到运算器中。经过运算器进行运算,如果需要存数,再从运算器将数据送到内存存放。如果有一些变量使用频繁(例如在一个函数中执行次循环,每次循环中都要引用某局部变量),则为存取变量的值要花费不少时间。为提高执行效率,语言允许将局部变量的值放在CPU中的寄存器中,需要用时直接从寄存器取出参加运算,不必再到内存中去存
18、取。由于对寄存器的存取速度远高于对内存的存取速度,因此这样做可以提高执行效率。这种变量叫做寄存器变量寄存器变量,用关键字作声明。例如,例819中的程序是输出到n的阶乘的值。例例819使用寄存器变量使用寄存器变量#include void main()long fac(long);long i,n;scanf(%ld,&n);for(i=1;i=n;i+)printf(%ld!=%ldn,i,fac(i);long fac(long n)register long i,f=1;/*定义寄存器变量*/for(i=1;i=n;i+)f=f*i;return(f);8.5用用extern声明外部变量声
19、明外部变量外部变量是在函数的外部定义的全局变量,它的作用域是从变量的定义处开始,到本程序文件的末尾。在此作用域内,全局变量可以为程序中各个函数所引用。编译时将外部变量分配在静态存储区。有时需要用extern来声明外部变量,以扩展外部变量的作用城。1.在一个文件内声明外部变量在一个文件内声明外部变量例例820 用用extern声明外部变量,扩展它在程声明外部变量,扩展它在程序文件中的作用域。序文件中的作用域。#include void main()int max(int,int);*外部变量声明*extern A,B;printf(%dn,max(A,B);int A=13,B=-8;*定义外部
20、变量*int max(int x,int y)*定义函数*int z;z=xy?x:y;return(z);2.在多文件的程序中声明外部变量在多文件的程序中声明外部变量例例8 用extern将外部变量的作用域扩展到其他文件。本程序的作用是给定的值,输入和,求和am的值。文件file中的内容为:#include int A;/*定义外部变量*/void main()int(int);/*函数声明*/int,;printf(enter the number a and its power m:n);scanf(,A,);A*;printf(*,A,);();printf(*n,A,);文件file
21、中的内容为:extern A;/*声明A为一个已定义的外部变量*/int(int);int,;for(;)*A;();8.9.6用用static声明外部变量声明外部变量有时在程序设计中希望某些外部变量只限于被本文件引用,而不能被其他文件引用。这时可以在定义外部变量时加一个声明。例如:file1.c file2.cstatic int A;extern int A;void main()void fun(int n)A=A*n;8.9.7关于变量的声明和定义关于变量的声明和定义对变量而言,声明与定义的关系稍微复杂一些。在声明部分出现的变量有两种情况:一种是需要建立存储空间的(如:int a;),
22、另一种是不需要建立存储空间的(如:extern a;)。前者称为“定义性声定义性声明明”(defining declaration),或简称定义定义(definition)。后者称为“引用性声明引用性声明”(referencing declaration)。广义地说,声明包括定义,但并非所有的声明都是定义。对“int a;”而言,它既是声明,又是定义。而对“extern a;”而言,它是声明而不是定义。一般为了叙述方便,把建立存储空间的声明称定建立存储空间的声明称定义义,而把不需要建立存储空间的声明称为声明把不需要建立存储空间的声明称为声明。显然这里指的声明是狭义的,即非定义性声明。例如:vo
23、id main()extern A;/*是声明不是定义。声明A是一 个已定义的外部变量*/int A;(1)从作用域作用域角度分,有局部变量和全局变量。它们采用的存储类别如下:局部变量|自动变量,即动态局部变量 (离开函数,值就消失)|静态局部变量(离开函数,值仍保留)|寄存器变量(离开函数,值就消失)|(形式参数可以定义为自动变量或寄存 器变量)全局变量|静态外部变量(只限本文件引用)|外部变量 (即非静态的外部变量,允许其他文件引用)(2)从变量存在的时间(生存期)来区分,有动态存储和静态存储两种类型。静态存储是程序整个运行时间都存在,而动态存储则是在调用函数时临时分配单元。动态存储动态存
24、储|自动变量自动变量(本函数内有效本函数内有效)|寄存器变量寄存器变量(本函数内有效本函数内有效)|形式参数形式参数(本函数内有效本函数内有效)静态存储|静态局部变量(函数内有效)|静态外部变量(本文件内有效)|外部变量(其他文件可引用)(3)从变量值存放的位置变量值存放的位置来区分,可分为:内存中静态存储区|静态局部变量|静态外部变量(函数外部静态变量)|外部变量(可为其他文件引用)内存中动态存储区:自动变量和形式参数CPU中的寄存器:寄存器变量()关于作用域作用域和生存期生存期的概念。从前面叙述可以知道,对一个变量的性质可以从两个方面分析,一是变量的作用域,一是变量值存在时间的长短,即生存
25、期。前者是从空间的角度,后者是从时间的角度。二者有联系但不是同一回事。(5)static对局部变量和全局变量的作用不同。对局部变量来说,它使变量由动态存储方式改变为静态存储方式。而对全局变量来说,它使变量局部化(局部于本文件),但仍为静态存储方式。从作用域角度看,凡有static声明的,其作用域都是局限的,或者是局限于本函数内(静态局部变量),或者局限于本文件内(静态外部变量)。8.10 内部函数和外部函数内部函数和外部函数 函数本质上是全局的,因为一个函数要被另外的函数调用,但是,也可以指定函数不能被其他文件调用。根据函数能否被其他源文件调用,将函数区分为内部函内部函数数和外部函数外部函数。
展开阅读全文