《C语言综合应用PPT课件》由会员分享,可在线阅读,更多相关《C语言综合应用PPT课件(21页珍藏版)》请在金锄头文库上搜索。
1、第第1010讲讲 综合应用综合应用上周平台编程训练情况练习完成情况:练习完成情况:70707070个同学都完成练习?只有个同学都完成练习?只有个同学都完成练习?只有个同学都完成练习?只有5 5 5 5个同学存在个同学存在个同学存在个同学存在没有完成情况。没有完成情况。没有完成情况。没有完成情况。问题汇总问题汇总问题汇总问题汇总QQQQ群:群:目前有目前有目前有目前有54545454人参与,占人参与,占人参与,占人参与,占70%70%70%70%。平台发帖区:平台发帖区:31313131个问题贴,其中我转帖个问题贴,其中我转帖个问题贴,其中我转帖个问题贴,其中我转帖qqqqqqqq问题的问题的问
2、题的问题的聊天记录聊天记录聊天记录聊天记录21212121个帖子,希望大家去浏览帖子。个帖子,希望大家去浏览帖子。个帖子,希望大家去浏览帖子。个帖子,希望大家去浏览帖子。分享解决程序问题过程和经验分享解决程序问题过程和经验数组名作参数数组名作参数数组名作参数数组名作参数和递归属于函和递归属于函和递归属于函和递归属于函数中的难点数中的难点数中的难点数中的难点问题1#includevoidmain()inti,a10,n,m,max;scanf(%d,&n);max=a0;/a0值不确定,给max赋值有意义吗?for(i=1;i=9;i+)ai=n;scanf(%d,&n);if(maxai)ma
3、x=ai;m=i;printf(最大数在第%d个位置n,m);用数组,建议输入和求最大用数组,建议输入和求最大用数组,建议输入和求最大用数组,建议输入和求最大值的处理分开值的处理分开值的处理分开值的处理分开问题2#includevoidmain()inti,n,t=1;floats=1;scanf(%d,&n);for(i=2;i=n;i+)s=s-t/i;t=-t;printf(%fn,s);为啥输出总是为啥输出总是为啥输出总是为啥输出总是1.000000?1.000000?问题3floatjsave(floata,intk)inti,s=0;floatave;for(i=0;ik;i+)s
4、=s+ai;ave=s/k;return(ave);为啥均值计算值有为啥均值计算值有为啥均值计算值有为啥均值计算值有出入出入出入出入? ?问题4#includevoidmain()intm,i;scanf(%d,&m);for(i=2;i=m;i+)if(m/i=0)printf(不是素数n);break;if(i=m)printf(素数n);为啥结果判断有错为啥结果判断有错为啥结果判断有错为啥结果判断有错? ?7变量的作用域根据作用域的不同,可将程序中的变量分为局部变量和全局变量局部局部变量是在函数或分程序中量是在函数或分程序中说明的明的变量,只能在本函量,只能在本函数或分程序的范数或分程序
5、的范围内使用。内使用。全局全局变量量说明于所有函数之外,可以明于所有函数之外,可以为本源程序文件中本源程序文件中位于位于该全局全局变量量说明之后的所有函数共同使用。明之后的所有函数共同使用。全局全局变量可以在各个函数之量可以在各个函数之间建立数据建立数据传输通道,但通道,但滥用会破坏程序的模用会破坏程序的模块化化结构。构。如出如出现同名同名变量,遵循量,遵循“地方保地方保护主主义”原原则。即从空间全局变量应用实例例例8.11 书书179页页有一个一维数组有一个一维数组score,内放,内放10个学生成绩,求平均成绩。个学生成绩,求平均成绩。如何得到多值(例如:最大、最小、平均值)如何得到多值(
6、例如:最大、最小、平均值)如何得到多值(例如:最大、最小、平均值)如何得到多值(例如:最大、最小、平均值)例8.15 有一个一维数组,内放个学生成绩,写一个函数,求出平均分、最高分和最低分。#include float Max,Min; *全局变量*void main() float average(float array ,int n); float ave,score10; int ; for(;) scanf(,); ave= average(,); printfnminnn“,Max,Min,ave); float average(float array ,int n) * 定义函数,
7、形参为数组 */ int ; float aver,sum=array; Max=Min=array; for(=;) if(arrayMax)Maxarray; else if(arrayMin)Min array; sum=sum+array; aver; return(); 运行情况如下:运行情况如下: 降低函数的通用性。因为函数在执行时要依赖于其所在的外部变量。如果将一个函数移到另一个文件中,还要将有关的外部变量及其值一起移过去。但若该外部变量与其他文件的变量同名时,就会出现问题,降低了程序的可靠性和通用性。建议:不必要时不要使用全局变量,原因如下: 全局变量在程序的全部执行过程中都占
8、用存储单元,而不是仅在需要时才开辟单元。 使用全局变量过多,会降低程序的清晰性。在各个函数执行时都可能改变外部变量的值,程序容易出错。因此,要限制使用全局变量。一般把程序中函数做成一个封闭体,除了通过一般把程序中函数做成一个封闭体,除了通过“实参实参形形参参”的渠道与外界发生联系外,没有其他渠道。的渠道与外界发生联系外,没有其他渠道。例例 8.8.6 6 外部变量与局部变量同名外部变量与局部变量同名#include int a=3,b=5; /* a,b为外部变量*/ a,b作用范围void main ( ) int a=8; /*a为局部变量 */ 局部变量a作用范围 printf (%d,
9、 max (a,b); 全局变量b的作用范围 max (int a, int b) /*a,b为局部变量 */ int c; c=ab?ab; 形参a、b作用范围 return (c); 运行结果为运行结果为 8 如出现同名变量,遵循“地方保护主义”原则。14变量的生存期根据生存期的不同,可将程序中的变量分为自动变量和静态变量自自动变量量(auto)的生存期是的生存期是说明了自明了自动变量的函数量的函数或分程序。它或分程序。它对存存储空空间的利用是的利用是动态的。其初的。其初值在每次在每次为自自动变量分配存量分配存储后都要重新后都要重新设置。置。静静态变量量(static)的生存期就是整个程序
10、的运行期。的生存期就是整个程序的运行期。在程序开始运行前就在程序开始运行前就为其分配相其分配相应的存的存储空空间,在,在程序的整个运行期程序的整个运行期间一直占用,直到一直占用,直到结束。束。即从时间8.9.2 auto8.9.2 auto变量变量自动变量auto:不专门声明为static存储类别的局部变量都是动态分配存储空间动态分配存储空间动态分配存储空间动态分配存储空间,在调用该函数时系统会给它们分配存储空间,在函数调用结束时就自动释放这些存储空间。因此这类局部变量称为自动变量。函数中的形参和在函数中定义的变量(包括在复合语句中定义的变量),都属此类。自动变量用关键字auto作存储类别的声
11、明。例如:例如:int (int ) *定义f函数,为形参 *auto int ,;/*定义、为自动变量 * 8.9.3 8.9.3 用用staticstatic声明局部变量声明局部变量 当函数中的局部变量的值在函数调用结束后不消失而保留原值时,该变量称为静态局部变量。用关键字static进行声明。例例87 考察静态局部变量的值#include void main()int (int); int ,; for(; printf( ,(); int (int )auto int ; static ; ; return(); 对静态局部变量的说明:对静态局部变量的说明:(1) 静态局部变量属于静态
12、存储类别,在静态存储区内分配存储单元。在程序整个运行期间都不释放。而自动变量(即动态局部变量)属于动态存储类别,占动态存储区空间而不占静态存储区空间,函数调用结束后即释放。(2)对静态局部变量是在编译时赋初值的,即只赋初值一次,在程序运行时它已有初值。以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。(3)如在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值(对数值型变量)或空字符(对字符变量)。而对自动变量来说,如果不赋初值则它的值是一个不确定的值。(4)虽然静态局部变量在函数调用结束后仍然存在,但其他函数不能引用它。例例88 输出到的阶乘值#include
13、 void main()int fac(int ); int ; for(;) printf(%!=,fac();Int fac(int )static int ; *; return(); 函数间的信息交换调用函数和被用函数和被调用函数之用函数之间的信息交的信息交换是通是通过参数的参数的结合合和和return语句来句来实现的。的。数据流程是:数据流程是:在在调用函数中,先用函数中,先给实参参赋值通通过函数函数调用,将数据从用,将数据从调用函数用函数带到被到被调用函数用函数形参形参带值后,被后,被调用函数即可用函数即可进行相行相应的数据的数据处理理如果有返回如果有返回值,通,通过return语
14、句句带回到回到调用函数用函数本周编程训练课堂课后练习:课堂课后练习:课堂课后练习:课堂课后练习: 10.1 10.1 统计字符个数统计字符个数统计字符个数统计字符个数- -局部变量局部变量局部变量局部变量 10.2 10.2 统计字符个数统计字符个数统计字符个数统计字符个数- -全局变量全局变量全局变量全局变量 10.3 10.3 统计小于均值的个数统计小于均值的个数统计小于均值的个数统计小于均值的个数- -嵌套调用嵌套调用嵌套调用嵌套调用 10.4 10.4 生肖表生肖表生肖表生肖表- -二维数组二维数组二维数组二维数组 10.5 10.5 输出字符金字塔输出字符金字塔输出字符金字塔输出字符
15、金字塔- -普通函数普通函数普通函数普通函数 10.6 10.6 爱因斯坦数学题爱因斯坦数学题爱因斯坦数学题爱因斯坦数学题 10.7 10.7 数的交换数的交换数的交换数的交换选做题:选做题:选做题:选做题: 10.8 10.8 数制转换数制转换数制转换数制转换*- -递归函数递归函数递归函数递归函数 10.9 10.9 杨辉三角杨辉三角杨辉三角杨辉三角*- -递归函数递归函数递归函数递归函数 10.10 10.10 最长词最长词最长词最长词*课后阅读课后阅读课后阅读课后阅读 统计字符个数统计字符个数统计字符个数统计字符个数- -数组数组数组数组 统计小于均值的个数统计小于均值的个数统计小于均值的个数统计小于均值的个数- -数组数组数组数组