函数-2(n)省名师优质课赛课获奖课件市赛课一等奖课件_第1页
函数-2(n)省名师优质课赛课获奖课件市赛课一等奖课件_第2页
函数-2(n)省名师优质课赛课获奖课件市赛课一等奖课件_第3页
函数-2(n)省名师优质课赛课获奖课件市赛课一等奖课件_第4页
函数-2(n)省名师优质课赛课获奖课件市赛课一等奖课件_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

编写程序输出3到10000内可逆素数。可逆素数是指:一个素数将其各位数字次序倒过来组成反序数也是素数。如157和751均为素数,它们是可逆素数。要求:使用函数实现,最少两个函数。

1/42设计main()主函数:在3~10000内经过调用函数,找出可逆素数。intprime(inta)函数:用于判定素数,返回“1”为素数。intinvert(inta)函数:用于倒序一个数,如a=123,则invert函数返回值为321。

2/42voidmain(){inti;

intprime(inta);//函数申明intinvert(inta);for(i=3;i<10000;i++)if(prime(i))if(prime(invert(i)))printf("%5d",i);printf("\n");}

#include<stdio.h>#include<stdlib.h>#include<math.h>3/42intinvert(inta){ints=0;while(a>0){

s=10*s+a%10;a/=10;

}returns;}intprime(inta){inti;for(i=2;i<=(int)sqrt(a);i++)if(a%i==0) return0;return1;}4/42向函数传递信息值传递方式数组作函数参数?……向函数传递信息,是经过参数列表完成。第7章函数(续)5/42简单变量作函数参数

实参

实参实参

主调函数

被调函数

形参

形参

形参

调用时

执行被调函数

从被调函数返回

变量值

变量值

变量值

变量值

变量值

变量值

修改

未改变

6/42

除了变量能够作为函数参数外,数组元素、数组名也能够是函数参数。1.数组元素作为参数:与变量作参数一样,单向、值传送方式。

数组作为函数参数7/42数组作为函数参数数组元素作函数实参——值传递例1.两个数组大小比较(教材:P193)输入10个数,输出其中值最大元素和该数是第几个数。432105a562312107688……i=1~9;max(m,a[i])m=a[0]m=a[1]8/42数组名作函数参数地址传递2.数组名作函数参数:数组名代表数组问:?首地址9/42数组名作函数参数

10/42

此时形参从实参取得了数组起始地址,不是把数组元素值传递给形参,这么形参和实参就共指内存同一段空间。当形参数组中数据发生改变时,实参数组元素值同时发生改变。了解:11/42数组名作函数参数实参和形参在主调函数与被调函数分别定义数组,且类型一致形参数组大小可不指定如:array[]2.数组名作函数参数:12/42例求学生平均成绩#include<stdio.h>

floataverage(intstu[10]);voidmain(){intscore[10],i;floatav;printf("Input10scores:\n");for(i=0;i<10;i++)scanf("%d",&score[i]);av=average(score);printf("Averageis:%.2f",av);}floataverage(int

stu[10]){inti;floatav1,total=0;for(i=0;i<10;i++)total+=stu[i];av1=total/n;returnav1;}实参用数组名形参用数组定义,

intstu[]..2109score562312….….88stu13/42修改实现两个整数交换函数原:voidswap(intx,inty)修改后:voidswap(intxy[])?14/42#include<stdio.h>

voidmain()

{voidswap(intab[2]);

intxy[2]={7,11};

printf("x=%d,\ty=%d\n",xy[0],xy[1]);

printf("swapped:\n");

swap(xy);

printf("x=%d,\ty=%d\n",xy[0],xy[1]);

}

voidswap(intab[2])

{inttemp;

temp=ab[0];ab[0]=ab[1];ab[1]=temp;

}

15/42例数组排序----选择法排序voidsort(intarray[],intn){inti,j,k,t;for(i=0;i<n-1;i++){k=i; for(j=i+1;j<n;j++) if(array[j]<array[k])k=j; if(k!=i) {t=array[i]; array[i]=array[k]; array[k]=t; }}}voidmain(){inta[10],i;for(i=0;i<10;i++) scanf("%d",&a[i]);

sort(a,10);for(i=0;i<10;i++)printf("%d",a[i]);printf("\n");}0123456789a4968573299927137688arraykjjjkjkjjjjj949i=016/42voidsort(intarray[],intn){inti,j,k,t;for(i=0;i<n-1;i++){k=i; for(j=i+1;j<n;j++) if(array[j]<array[k])k=j; if(k!=i) {t=array[i]; array[i]=array[k]; array[k]=t; }}}kjjkjkjjjjj0123456789a4968573299927137688array949kk1368i=1例数组排序----选择法排序17/420123456789a9132732495768768899arrayi=8voidsort(intarray[],intn){inti,j,k,t;for(i=0;i<n-1;i++){k=i; for(j=i+1;j<n;j++) if(array[j]<array[k])k=j; if(k!=i) {t=array[i]; array[i]=array[k]; array[k]=t; }}}例数组排序----选择法排序18/42请两位同学将冒泡法排序程序改写成函数调用方式(用数组名调用)。一位同学完成主程序;一位同学完成函数定义;注意:协商好函数名称参数个数、类型P2185,6练习19/42变量的生存空间和变量的生存期20/42voidmain(){inta,b;scanf(“%d,”%d”,&a,&b);swap(a,b);printf(“%d,”%d”,&a,&b);}函数swap(x,y),实现两个整型数值交换。voidswap(intx,inty){intt;t=x;x=y;y=t;}21/42局部变量:

在一个函数内部说明变量是局部变量,它只在该函数范围内有效。全局变量:

在函数外部定义变量称为全局变量。全局变量不属于任何一个函数,其作用域是:从定义位置开始,到本文件结束为止。生存空间22/42局部变量特点局部变量---内部变量特点:main中定义变量只在有效不一样函数中同名变量,占内存单元形参属于变量在复合语句中可定义有效局部变量main中不一样局部23/42floatf1(inta){intb,c;…….}charf2(intx,inty){inti,j;……}main(){intm,n;…….}a,b,c有效x,y,i,j有效m,n有效例不一样函数中同名变量main(){inta,b;a=3;b=4;printf("main:a=%d,b=%d\n",a,b);sub();printf("main:a=%d,b=%d\n",a,b);}sub(){inta,b;a=6;b=7;printf("sub:a=%d,b=%d\n",a,b);}例复合语句中变量#defineN5voidmain(){inti;inta[N]={1,2,3,4,5};for(i=0;i<N/2;i++)

{

inttemp; temp=a[i]; a[i]=a[N-i-1]; a[N-i-1]=temp;

}for(i=0;i<N;i++)printf("%d",a[i]);}运行结果:54321运行结果:main:a=3,b=4sub:a=6,b=7main:a=3,b=424/42全局变量---外部变量有效范围:从定义变量位置开始到根源文件结束

应尽可能少使用全局变量,因为:全局变量在程序全部执行过程中占用存放单元降低了函数通用性、可靠性,可移植性降低程序清楚性,轻易犯错优点缺点增加了函数间数据联络渠道。利用全局变量能够降低函数实参加形参个数25/42floatmax,min;floataverage(floatarray[],intn){inti;floatsum=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+=array[i];}return(sum/n);}main(){inti;floatave,score[10];/*Input……*/ave=average(score,10);printf("max=%6.2f\nmin=%6.2f\naverage=%6.2f\n",max,min,ave);}作用域maxmin26/42

改写函数swap(),用全局变量实现两个整型数值交换。27/42变量的生存空间和变量的生存期变量两大属性:·数据类型·存放类别一个完整变量说明格式以下:存放类别数据类型变量名如staticintx,y;28/42存放类别:

存放类别数据类型变量名如staticintx,y;C程序存放类别有:

■register型(存放器型)■auto型(自动变量型)■static型(静态变量型)■extern型(外部变量型)29/42C程序变量存放位置变量生存期静态存放区中变量:与程序“共存亡”动态存放区中变量:与函数“共存亡”

存放器中变量:同动态存放区30/42C程序变量存放类别变量生存期静态存放区中变量与程序“共存亡”动态存放区中变量与函数“共存亡”

存放器中变量同动态存放区■register型(存放器型)变量值存放在运算器存放器中——存取速度快,普通只允许2~3个,且限于char型和int型,通惯用于循环变量■auto型(自动变量型)变量值存放在主存放器动态存放区;优点——同一内存区可被不一样变量重复使用。以上两种变量均属于“动态存放型”,即调用函数时才为这些变量分配单元,函数调用结束其值自动消失。31/42C程序变量存放类别■static型(静态变量型)变量值存放在主存放器静态存放区程序执行开始至结束,一直占用该存放空间■extern型(外部变量型)同上,其值可供其它源文件使用以上两种均属于“静态存放”性质,即从变量定义处开始,在整个程序执行期间其值都存在。变量生存期静态存放区中变量与程序“共存亡”动态存放区中变量与函数“共存亡”

存放器中变量同动态存放区32/421.auto变量作用域voidmain(){intx=1;voidprt(void);//函数申明

{

intx=3;prt();printf(“2ndx=%d\n”,x);

}printf(“1stx=%d\n”,x);}voidprt(void){intx=5;printf(“3thx=%d\n”,x);}运行结果:3thx=52ndx=31stx=1x=1作用域x=1作用域x=3作用域x=5作用域局部变量存放类别33/422.用static申明局部变量:静态变量型:变量值存放在主存放器静态存放区程序执行开始至结束,一直占用该存放空间。

函数中局部变量在函数调用结束后不释放其占有存放空间,在下一次调用该函数时,该变量保留上次函数调用结束时值。这种局部变量称为静态局部变量。34/42

f(inta){autointb=0;staticc=3;b=b+1;c=c+1;return(a+b+c);}voidmain(){inta=2;for(i=0;i<3;i++)printf(“%d”,f(a));}例考查静态局部变量值i=0:a=2b=1c=3+1=4i=1:a=2b=1c=4+1=5i=2:a=2b=1c=5+1=6运行结果:78935/42教材:P205

温馨提示

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

评论

0/150

提交评论