C语言综合应用_第1页
C语言综合应用_第2页
C语言综合应用_第3页
C语言综合应用_第4页
C语言综合应用_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第10讲综合应用上周平台编程训练情况练习完成情况:70个同学都完成练习?只有5个同学存在没有完成情况。问题汇总QQ群:目前有54人参与,占70%。平台发帖区:31个问题贴,其中我转帖qq问题的聊天记录21个帖子,希望大家去浏览帖子。分享解决程序问题过程和经验数组名作参数和递归属于函数中的难点问题1#include<stdio.h>voidmain(){inti,a[10],n,m,max;scanf("%d",&n);

max=a[0];//a[0]值不确定,给max赋值有意义吗?

for(i=1;i<=9;i++){a[i]=n;scanf("%d",&n);if(max<a[i]){max=a[i];m=i;}}printf("最大数在第%d个位置\n",m);}用数组,建议输入和求最大值的处理分开问题2#include<stdio.h>

voidmain()

{

inti,n,t=1;

floats=1;

scanf("%d",&n);

for(i=2;i<=n;i++)

{

s=s-t/i;

t=-t;

}

printf("%f\n",s);

}为啥输出总是1.000000?问题3floatjsave(floata[],intk)

{

inti,s=0;

floatave;

for(i=0;i<k;i++)

s=s+a[i];

ave=s/k;

return(ave);

}

为啥均值计算值有出入?问题4#include<stdio.h>

voidmain()

{

intm,i;

scanf("%d",&m);

for(i=2;i<=m;i++)

{

if(m/i==0)

printf("不是素数\n");break;

}

if(i==m)

printf("素数\n");}

为啥结果判断有错?例8.15有一个一维数组,内放10个学生成绩,写一个函数,求出平均分、最高分和最低分。#include<stdio.h>floatMax=0,Min=0;/*全局变量*/voidmain(){floataverage(floatarray[],intn);floatave,score[10];

inti;

for(i=0;i<10;i++)

scanf(″%f″,&score[i]);

ave=average(score,10);

printf(“max=%6.2f\nmin=%6.2f\naverage=%6.2f\n“,Max,Min,ave);

}floataverage(floatarray[],intn)

/*定义函数,形参为数组*/{inti;

floataver,sum=array[0];

Max=Min=array[0];

for(i=1;i<n;i++){if(array[i]>Max)Max=array[i];

elseif(array[i]<Min)Min=array[i];

sum=sum+array[i];}

aver=sum/n;

return(aver);}运行情况如下:9945789710067.589926643↙max=100.00min=43.00average=77.65

③降低函数的通用性。因为函数在执行时要依赖于其所在的外部变量。如果将一个函数移到另一个文件中,还要将有关的外部变量及其值一起移过去。但若该外部变量与其他文件的变量同名时,就会出现问题,降低了程序的可靠性和通用性。建议:不必要时不要使用全局变量,原因如下:①全局变量在程序的全部执行过程中都占用存储单元,而不是仅在需要时才开辟单元。②使用全局变量过多,会降低程序的清晰性。在各个函数执行时都可能改变外部变量的值,程序容易出错。因此,要限制使用全局变量。一般把C程序中函数做成一个封闭体,除了通过“实参——形参”的渠道与外界发生联系外,没有其他渠道。例8.16外部变量与局部变量同名#include<stdio.h>inta=3,b=5;/*a,b为外部变量*/a,b作用范围voidmain(){inta=8;/*a为局部变量*/局部变量a作用范围

printf(″%d″,max(a,b));全局变量b的作用范围

}max(inta,intb)/*a,b为局部变量*/

{intc;c=a>b?a∶b;形参a、b作用范围

return(c);

}运行结果为

8

如出现同名变量,遵循“地方保护主义”原则。14变量的生存期根据生存期的不同,可将程序中的变量分为自动变量和静态变量自动变量(auto)的生存期是说明了自动变量的函数或分程序。它对存储空间的利用是动态的。其初值在每次为自动变量分配存储后都要重新设置。静态变量(static)的生存期就是整个程序的运行期。在程序开始运行前就为其分配相应的存储空间,在程序的整个运行期间一直占用,直到结束。即从时间8.9.2auto变量自动变量auto:不专门声明为static存储类别的局部变量都是动态分配存储空间,在调用该函数时系统会给它们分配存储空间,在函数调用结束时就自动释放这些存储空间。因此这类局部变量称为自动变量。函数中的形参和在函数中定义的变量(包括在复合语句中定义的变量),都属此类。自动变量用关键字auto作存储类别的声明。例如:intf(inta)/*定义f函数,a为形参*/{autointb,c=3;/*定义b、c为自动变量*/

…}8.9.3用static声明局部变量当函数中的局部变量的值在函数调用结束后不消失而保留原值时,该变量称为静态局部变量。用关键字static进行声明。例8.17

考察静态局部变量的值#include<stdio.h>voidmain(){intf(int);inta=2,i;

for(i=0;i<3;i++=

printf(″%d″,f(a));}intf(inta){autointb=0;

staticc=3;b=b+1;c=c+1;

return(a+b+c);}对静态局部变量的说明:(1)静态局部变量属于静态存储类别,在静态存储区内分配存储单元。在程序整个运行期间都不释放。而自动变量(即动态局部变量)属于动态存储类别,占动态存储区空间而不占静态存储区空间,函数调用结束后即释放。(2)对静态局部变量是在编译时赋初值的,即只赋初值一次,在程序运行时它已有初值。以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。(3)如在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符变量)。而对自动变量来说,如果不赋初值则它的值是一个不确定的值。(4)虽然静态局部变量在函数调用结束后仍然存在,但其他函数不能引用它。例8.18

输出1到5的阶乘值#include<stdio.h>voidmain(){intfac(intn);inti;

for(i=1;i<=5;i++)

printf(″%d!=%d\n″,i,fac(i));}Intfac(intn){staticintf=1;f=f*n;

return(f);}函数间的信息交换调用函数和被调用函数之间的信息交换是通过参数的结合和return语句来实现的。数据流程是:在调用函数中,先给实参赋值通过函数调用,将数据从调用函数带到被调用函数形参带值后,被调用函数即可进行相应的数据处理如果有返回值,通过return语句带回到调用函数本周编程训练课堂课后练习:10.1统计字符个数-局部变量

10.2统计

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论