c语言简答教程ppt课件.ppt_第1页
c语言简答教程ppt课件.ppt_第2页
c语言简答教程ppt课件.ppt_第3页
c语言简答教程ppt课件.ppt_第4页
c语言简答教程ppt课件.ppt_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

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

文档简介

main(),printf(maxis%dn,c);,intz;,z=xy?x:y;,return(z);,inta,b,c;,scanf(%d%d,c=max(a,b);,max(intx,inty),printf(maxis%dn,c);,int,1,1.一个C程序由一个或多个源程序文件组成;2.一个源程序文件是一个编译单位;3.一个源程序文件可由一个或多个函数组成。4.从main()开始,调用其它函数后,回到main()结束;5.函数不能嵌套定义,但可以互相调用。6.分类:1)标准函数和用户自定义函数;2)无参函数和有参函数。,说明:,2,第6章函数,3,main()inti,m;scanf(“%d”,for(i=10;i=50;i+=2),引例:验证歌德巴赫猜想:一个大的偶数可以表示成两个素数的和。,引例:用1050之间的偶数验证歌德巴赫猜想:一个大的偶数可以表示成两个素数的和。,intsushu(intm)inti;if(my)return(1);if(x=y)return(0);return(-1);main()inta,b;scanf(%d%d,例3intsa(intx,inty)if(xy)return(1.6);if(x=y)return(0.7);return(-1.9);main()inta,b;scanf(%d%d,11,1.单向值传递。,注意:,2.形参为变量,实参可以是表达式。,实参形参,3.函数的值通过返回主调函数,,类型相同或赋值兼容的,函数的类型,return语句,return语句可以有0n个。返回值的类型取决于。,12,四、对被调用函数的声明,例3main()inta,b;scanf(%d%d,例3main()inta,b;voidswap(intx,inty);scanf(%d%d,例3main()inta,b;voidswap(int,int);scanf(%d%d,voidswap();,13,1.被调函数的定义出现在主调函数之前。2.在所有函数定义之前,在函数的外部已做了函数声明。,floatf(float,float);main()floatf(floatx,floaty),3.被调函数类型为整型。,可以省略对被调函数声明的几种情形:,14,main()inta,w3=2,6,3;floatx;printf(%.0fn,fac(5);scanf(%d,main()inti;doubles;s=0;for(i=3;i=9;i+=2)s=s+fac(i);printf(%en,s);,floatfac(intn)floatt=1;inti;for(i=2;i=n;i+)t=t*i;returnt;,例4编写求阶乘的函数。,求3!+5!+7!+9!,15,intprime(inta)inti;if(a2)return(0);for(i=2;ia;i+)if(a%i=0)return(0);return(1);,例5编写判断一个整数是否素数的函数。,main()inta;scanf(%d,intprime(inta)inti,k;k=1;if(a2)k=0;for(i=2;ia;i+)if(a%i=0)k=0;returnk;,求一组数中素数的个数?,main()inta10,i,num=0;for(i=0;i10;i+)scanf(%d,求一组数中素数之和?,16,例6编写函数,判定某数字是否在某正整数中,若在打印TRUE,否则打印FALSE,输出结果在主函数中完成。,intamong(intn,intm)intk,z=0;dok=m%10;if(n=k)z=1;break;m=m/10;while(m!=0);return(z);,main()intm,n;scanf(%d%d,17,main()inti,k=0;for(i=400;i=499;i+)k=k+num(i);printf(number=%dn,k);,例7统计400499这些数中4这个数字出现的次数,判断一个数有几位4数字用函数实现。,intnum(intx)inty,k=0;while(x!=0)y=x%10;if(y=4)k+;x=x/10;return(k);,18,intwan(intx)inti,s=0;for(i=1;i=x/2;i+)if(x%i=0)s=s+i;if(s=x)return(1);elsereturn(0);,例8找出1000之内的所有“完数”,判一个数是否为完数用函数实现。,main()inti;for(i=1;i1000;i+)if(wan(i)printf(%5d,i);printf(n);,19,intgy(inta,intb)intr,t;if(a1),main()intn;floaty;scanf(%d,floatfac(intn)floatf;if(n=1|n=0)f=1;elsef=fac(n-1)*n;return(f);,23,以n=4为例,执行过程如下:,main().y=fac(4);.,fac(n).f=fac(3)*4;return(f);,fac(n).f=fac(2)*3;return(f);,fac(n).f=fac(1)*2;return(f);,fac(n).f=1;return(f);,1,2,6,24,24,2.编写子函数求费波纳契数列第n项的值,在主函数中打印前20项,intfib(intn)inti,f1=1,f2=1,f;if(n=2)f=1;for(i=3;i=n;i+)f=f1+f2;f1=f2;f2=f1;returnf;,递归法:intfib(intn)inti,f1=1,f2=1,f;if(n=2)f=1;elsef=fib(n-1)+fib(n-2);returnf;,main()inti;for(i=1;i=20;i+)printf(%8d,fib(i);,25,例2求xn(n0),main()intx,n;floatf(intx,intn);scanf(%d%d,floatf(intx,intn)floatz;if(n=0)z=1;elsez=x*f(x,n-1);returnz;,26,floatf(x,n)intx,n;floatz;if(n=0)z=1;elsez=x*f(x,n-1);returnz;,floatf(x,n)intx,n;floatz;if(n=0)z=1;elsez=x*f(x,n-1);returnz;,floatf(x,n)intx,n;floatz;if(n=0)z=1;elsez=x*f(x,n-1);returnz;,floatf(x,n)intx,n;floatz;if(n=0)z=1;elsez=x*f(x,n-1);returnz;,f(5,4),5,3,5,2,5,1,5,0,27,一、数组元素作函数实参,二、数组名作函数参数,8.7数组作为函数参数,三、多维数组作函数参数,28,例1:求10个正整数中的素数并打印出来,要求判断素数用子函数实现。,main()inti,x;for(i=0;i10;i+)scanf(%d,intsushu(intx)inti;if(x=1)return(0);for(i=2;ix;i+)if(x%i=0)return(0);return(1);,ai,ai,ai,一、数组元素作实参(对应的形参为简单变量)。,a10;,29,main()inta3=2,3,4,x;floatsum=0;scanf(%d,floatfun(intn)inti;floats=1;for(i=1;i=n;i+)s=s*i;return(s);,例2:读程序。,30,例3:读程序。,voidswap1(intx,inty)intz;z=x;x=y;y=z;main()inta2=1,2;swap1(a0,a1);printf(a0=%dna1=%dn,a0,a1);,值传递,例1:voidswap2(intx2)intz;z=x0;x0=x1;x1=z;main()inta2=1,2;swap2(a);printf(a0=%dna1=%dn,a0,a1);,地址传递,二、数组名作函数参数,floataverage(floatarray10)inti;floataver,sum=0;for(i=0;i10;i+)sum=sum+arrayi;aver=sum/10;return(aver);,main()floataverage(floatarray10);floatscore10,aver;inti;for(i=0;i10;i+)scanf(%f,例2:求数组score中存放的10个学生成绩的平均成绩。要求求平均成绩用子函数实现。,score,(score,10);,array,n,n,(floatarray),(floatarray);,(floatarray,intn);,(floatarray,intn),33,例3:用冒泡法对数组中的10个整数按升序排序。,冒泡法的思路是:将相邻两个数比较,将小的调到前面.,第0轮:,比较4次,1,8,2,7,3,7,3,7,8,2,1,第1轮:,8,7,3,1,7,2,比较3次,第2轮:,2,1,3,3,2,比较2次,第3轮:,2,1,比较1次,算法分析:n个数排序,需要比较n-1(i)轮,每轮比较n-i-1(j)次,34,voidsort(inta,intn)inti,j,t;for(i=0;iaj+1)t=aj;aj=aj+1;aj+1=t;,main()voidsort(inta,intn);intarray10,i;for(i=0;i10;i+)scanf(%d,a,array,35,数组名作函数参数小结,1.数组名作函数参数,应在主调函数和被调函数中分别定义数组;2.实参数组与形参数组类型应一致;3.实参数组与形参数组大小可以一致也可以不一致。形参数组可以不指定大小。4.数组名作函数参数时,是“地址传送”。,36,三、用多维数组作函数参数,1用多维数组元素作函数实参,这点与一维数组元素做函数实参相同。,用多维数组名作函数实参和形参,在被调函数中对形参数组定义时可以指定每一维的大小,也可以省略第一维的大小说明。如:intmax_value(intarray34)intmax_value(intarray4)二者都合法且完全等价。但是不能把第二维以及其它高维的大小说明省略。,37,例6有一个34的矩阵,求其中的最大元素。,main()inta34=1,3,5,7,2,4,6,8,15,17,34,12;printf(max=%dn,max_value(a);,max_value(intarray12)inti,max;max=array0;for(i=0;imax)max=arrayi;return(max);,max_value(intarray4)inti,j,max;max=array00;for(i=0;imax)max=arrayij;return(max);,38,例7:求33矩阵转置,交换aij与aji的值,39,voidturn(intarray33)inti,j,k;for(i=0;i3;i+)for(j=0;ji;j+)k=arrayij;arrayij=arrayji;arrayji=k;,main()inta33=1,3,5,2,4,6,15,17,34;inti,j;turn(a);for(i=0;iy?x:y;return(z);main()externa,b;/*外部变量说明*/printf(%dn,max(a,b);inta=13,b=-8;/*外部变量定义*/,例2:,5.用extern实现先引用,后定义。,47,例1:在一维数组中存放10个学生的成绩,写一个函数,求出平均分,最高分和最低分。,分析:1.平均分由函数值带回2.设max,min为全局变量,average(),48,floatmax,min;floataverage(floatarray,intn)inti;floataver,sum=array0;max=min=array0;for(i=1;imax)max=arrayi;elseif(arrayimin)min=arrayi;sum=sum+arrayi;aver=sum/n;return(aver);,49,main()floatave,score10;inti;for(i=0;i10;i+)scanf(%f,50,voidaverage(floatarray,floatb,intn)inti;b0=b1=b2=array0;for(i=1;ib0)b0=arrayi;elseif(arrayib1)b1=arrayi;b2=b2+arrayi;b2=b2/n;,不用全局变量,利用数组名作参数,从而达到双向传送数值的目的.,51,main()floatx3,score10;inti;for(i=0;i10;i+)scanf(%f,52,一、动态存储变量与静态存储变量1.静态存储变量:包括:全局变量或静态局部变量特点:在程序运行期间占有固定的存储空间。2.动态存储变量:包括:函数形参变量和局部变量(未加static说明的)特点:根据需要动态分配存储空间。,6.9变量的存储类别,动态局部变量:(auto)函数调用后,值不保留,即释放存储空间。再次调用时,原值不能引用。2.静态局部变量:(static)函数调用后,保留原值,即不释放所占存储空间;再次调用时,原值仍可使用。,二、局部变量的存储方式,53,intf(inta)intb=0;staticintc=3;/*c静态局部变量*/b=b+1;c=c+1return(a+b+c);,例1:,main()inta=2,i;for(i=0;i3;i+)printf(%d,f(a);,54,main()inti;for(i=1;i=5;i+)printf(%d!=%5.1fn,i,fac(i);,floatfac(intn)staticfloatf=1;f=f*n;return(f);,例2:,1!=1.02!=2.03!=6.04!=24.05!=120.0,55,1.静态局部变量在静态存储区内分配存储单元,程序整个运行期间不释放;2.静态局部变量编译时赋初值一次,以后每次调用不再重新赋初值,而是保留上次函数调用结束时的值;3.静态局部变量定义时不赋初值,编译时自动赋初值0;4.静态局部变量只在定义它的函数内有效,不能被其它函数引用。,说明:,静态局部变量特点,56,三.全局变量的存储方式(静态存储)1.外部变量1)在函数外部定义2)允许其他文件中的函数引用,需要用extern作说明,file1.cinta;main()intm,k;k=power(m);printf(%d,k);,file2.cexterninta;power(intn)inti,y=1;for(i=1;i=n;i+)y=y*a;return(y);,57,2.静态外部变量1)在函数外部用static定义2)只能被本文件中的函数引用,file1.cstaticinta;main().k=power(m);.,file2.cexterninta;power(intn)inti,y=1;for(i=1;i=n;i+)y=y*a;return(y);,这样引用是错误的,58,1.按作用域分为局部变量和全局变量存储类别:动态局部变量(离开参数,值就消失)局部变量静态局部变量(离开参数,值仍保留)寄存器变量(离开参数,值就消失)(形式参数可以定义为自动变量或寄存器变量)全局变量静态外部变量(只限本文件引用)外部变量(即非静态外部变量,允许其它文件引用),四.存储类别小结,59,2.按存在时间分为动态存储和静态存储两种类型,60,61,4.关于作用域和生存期的概念1)自动变量和寄存器变量的作用域和存在性一致,离开函数后,值不存在,不能被引用。2)静态外部变量和外部变量的作用域和存在性也一致,离开函数后,变量值仍存在,可被引用。3)静态局部变量的作用域和存在性不一致,离开函数后,变量值存在,但不能被引用。,5.static对局部变量和全局变量的作用不同1)对局部变量:使动态存储方式改变为静态存储;2)对全局变量:使变量局部化,但仍为静态存储;3)凡有static说明的,其作用域都是局限的。,62,根据函数能否被其它源文件调用,将函数分为内部函数和外部函数。1内部函数:如果一个函数只能被本文件其它函数所调用,它称为内部函数。static类型标识符函数名(形参表)2外部函数:extern类型标识符函数名(形参表),6.10内部函数和外部函数,63,例:有一个字符串,内有若干个字符,今输入一个字符,程序将字符串中该字符删去。用外部函数实现。,main()externenter_string(),delete_string(),print_string();charc;staticcharstr80;enter_string(str);scanf(%c,说明本文件用到其它文件中的函数,file1.c(文件1),64,#includestring.hvoidenter_string(str)charstr80;gets(str);,voiddelete_string(str,ch)charstr,ch;inti,j;for(i=j=0;stri!=0;i+)if(stri!=ch)strj+=stri;strj=0;,voidprint_string(str)charstr;printf(%s,str

温馨提示

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

评论

0/150

提交评论