课件数组定义、声明初始化_第1页
课件数组定义、声明初始化_第2页
课件数组定义、声明初始化_第3页
课件数组定义、声明初始化_第4页
课件数组定义、声明初始化_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

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

文档简介

上一章知识 通过下 本讲教学理解“函数”与“面向过程的编程”的关系。 深入理解参数传递,尤其是“传递地址”的情况。 本章授课C程序基本 C程序结构#include<stdio.h>#includestdlib.h>

一个C一个源文一个源文两个头文{一个主函一个主函return0;} 一个C一个C若干头文 若干源文头文件头文件头文件

源文件

源文件1 2 函数 函数12函数函数 函 本章授课C程序基本 函数的 函数返回值类 areaofCircle(doubler{复constdoublePI= double 句构areaPI*r* 函体return 体} 动手 intadd(intx,int{return}

函数 o(char{printf("大家好 printf(“我是}voidvoid{printf(“printf(“} 函数定义 void 函数#include#include 形{constdoublePI=returnPI*r*}

intmain{double//toarea=//toreturn}

实 形式参数与实际#include<stdio.h>{constdoublePI=returnPI*r}intint{//todoreturn0;//todoreturn0;doubler,//toarea=areaofCircle}} 动手intAverage(intx,{doubleresult=(x+y)/return}

形参和printf(“%dprintf(“%d #include<stdio.h>#include<stdio.h>{constdoublePI=3.14159;returnPI*r*r;}int{doubler,//toarea=areaofCircle//todoreturn0;}returnreturn(表达式voidfoo(int int*{intreturn} 本章授课C程序基本 函数 函数自定义函数必须 后调主调函#includeint{doubler,//toarea=//toreturn

被调函{constdoublePI=returnPI*r}}} 函数表函数表函数c=10*printf(“%g”,主调程序保护现函数语 给形式参数(如果有)权交给被调函保存返回值(如果有)并将保存返回值(如果有)并将程序控制权交给 函数调用 ③ ③constdoublePI= returnPI*r #include int{doubler,//to area=//todoreturn0;}

可以这样调用函数吗 #include<stdio.h>int{doubler,//toarea=areaofCircle//toreturn}{constdoublePI=returnPI*r}

函数返回值类型函数名(参数类型参数1,…,参数类型参数{}返回值类型函数名(参数类型参数1,…,参数类型参数调用是否正确说明函数的类型和参数的情况,以保证程序编译时能调用是否正确函数原 标示了函数的返回值类型、函数名、参数个数和类,是函数的“名片函数原 和函数原型定义在返回类型、函数名、参数个数和类必须完全一函数原 不必包含参数的名字,而只要包含参数的类 #include<stdio.h>

函数原型#include<stdio.h>{constdoublePI=returnPI*r}int{doubler,//toarea=areaofCircle//toreturn}

int{doubler,//toarea=areaofCircle//toreturn}{constdoublePI=returnPI*r}当函数原型定义出现在函数调用前,则原型定义既是原 ,否则必须在函数调用前 该函数 函提倡

,先优点函数列表一目了然,方便彼此调用 ,避免错误 函函 优点函数列表更加一目了然,方便使便于多人合作共同开可以用于商业,保护知 练用所定义的阶乘函数。 combination(intn,intk);。(提示:首用所定义的阶乘函数。 参数“地址”传递 voidexchangeData(inta,int{

内存变4int 4c=a=b= } int{inta=3,b=printf交换前printf("a=%db=%d\n",exchangeData(a,printf交换后printf("a=%db=%d\n",return}

4b4交换前:a=3交换后:a=3 地址传voidexchangeData(int*a,int{

内存

内存变intc;c=*a;*a=*b=}

b 3int{intint{intx=3,y=printf交换前printf("xdy%d\nx,y);exchangeData(&x,&y);printf("交换后:");printf("x=%dby=%d\n",return}3 3交换前:x=3交换后:x=4 参数值传递是将实际参数中存放的“值”传递给形式参数,实际参数与形式参数完成“传递接力”后,两者再无干系。在exchangeData函数内部无法改变实际参数中的值或通过实际参数的值改变其他单元的值。地址传递是将实际参数中存放的“地址”传递给了形式参exchangeData,但可以对该“地址”所代表的单元进行赋值或取值的 #include#include#includevoidgetMaxMin(int*max,intint{intprintf =%dmin=return}voidgetMaxMin(int*max,int{int*max=*min=num;for(i=0;i<4;i++){scanf if(num>{*max=}if(num<{*min=}}} 数组做 一维数组做函数voidinvert1(intx[],int{intt,i,m=

6 {

0 x[i]=x[n-1-x[n-1-}}

int{intinvert1(a,10);return0;} voidinvert2(int*xint{int{}}int{inta10 =ainvert2(a,10);return0;

a3px 3px9511066951106607594723a } #include<stdio.h>#include<stdlib.h>#defineMAX_SIZE

练intsearchInArray(constint*p,constintlen,constintx){inti0;/*数组下标intsearchInArray(constint*p,constintlen,constintint{inta[MAX_SIZE]={1,34,345,3,934,59,35,intlen8*测试数组的元素个数intx3*待查找的元素intindex=searchInArray(&a[0],len,if(NOT_FOUND==printf("%d在数组中的下标是:%d\nxreturn}

if(len<=0||len>MAX_SIZE)returnNOT_FOUND;for(i=0;i<len;{if(x==*(p+return}return} 思若将searchInArray的原 intsearchInArray(int(*p)[MAX_SIZE],intlen,int若原若原 intsearchInArray(intp[],intlen,int与int与intsearchInArray(int*p,intlen,intx);比较 一维数组做形参 intsearchInArray(constint*pconstintlenconstintx)intsearchInArray(constintp[],constintlen,constint编译 动手已知数组inta[101234578};请完成下面的函数,该函数完成在一维数intfindMaxInArray(intp[],intsize,int 一维数组二分intfindMaxInArray(intp[],intn,int{intlow,high,low=0;high=n-1;while(low<={mid=(high+low)/2;if(x>a[mid]){low=mid+}elseif(x<{}{}}

high=mid-returnreturn-} 一维数组的添加有一个按从大到小已经排好序的数组{1,8,intinsertInArray(int*p,intn,int 二维数组做函数使用二维数组保存使用函数完成 #includevoidaverage(float*p,intn);voidsearch(float(*p)[4],intn);intmain()

voidaverage(float*p,int{floatpend=p+n-float 行首指floatscore[3][4] {78,28

return0;}

行指

voidsearch(float(*p)[4]int{intprintf("thescoreofNo.%dprintf .2f",* -} 针voidsearch(floatp[][4],int;针voidsearch(floatp[][4],int;int{floatscore[3][4]{80,8790,81},return}voidvoidsearch(floatp[][4],in{inti,j,flag;{ {}}}二维数组做形参voidaverage(float*p,intvoidfind(floatp[][4],intvoidsearch(float(*p)[4],int编译 练有一个二维数组inta[4][3]={{316,87}{654321110810},{2527,12}};voidfindMax1(int*p,intn,intvoidfindMax2(int(*p)[3],intvoidfindMax3(intp[][3],int 本章授课C程序基本 {③{……{③{……①{②………④⑥fA的定义中,出现对fB的调用、fB的定义中出现对fC的调用,称这样的调用形式为嵌套调用fA fB fC 思考:函数可以自己调用 函数的n!

n0时n1n(n(n Factorial调用过Factorial(n)=n*(n- Factorial(n-1)=(n-

(n-Factorial(2)=Factorial(1)Factorial(1)Factorial(0)= 计算阶乘的递归unsined factorialconstunsinedint{unsignedlongtemp=if(0 return1*返回0!为1,结束递归调用temp=factorial(n-1);/*计算n-1的阶乘*/returnn*temp; /*返回* } 递归函数和非递归函数的不 voidfoo(参数voidfoo(参数{{

key1//foo(参数

//////}}}} 画出函数的递归调用过 #include#includevoidreverse(intintmain return}voidreverse(int{if(0==} intfun(intt[],int{intm;if(n==1)returnif(n>={m=fun(t,n-

#include#includeintfun(intt[],intint{inta[10]={11,4,8,2,3,9,return}}

printf"return0;}

动手f(n)

1)

nn

递归 本章授课C程序基本 结构化

问题 问题2 问题

函数

函数

函数问题解决分解图见:模块化

函 结构化 四则2)计算完成之择“0”,才退出1)对2)计算完成之择“0”,才退出3

温馨提示

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

评论

0/150

提交评论