程序的组织结构函数调用_第1页
程序的组织结构函数调用_第2页
程序的组织结构函数调用_第3页
程序的组织结构函数调用_第4页
程序的组织结构函数调用_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

Lesson 13 程序的组织结构,学习目标:,1,学会使用结构化程序设计方法编写程序,函数调用的一般形式:,函数名( 实参列表 ) ;,实参与形参的个数应相等,类型一致,顺序一一对应 各个实参之间用逗号分隔 调用无参函数时格式为:函数名( );,注意( )不能省略,函数调用的一般形式:,函数名(实参列表) ;,形式参数(形参):定义函数时写在函数名后括号内的变量,形参前必须有数据类型 int fun(int n) 实际参数(实参):调用函数时写在函数名后括号内的变量,实参仅写变量名 sum+=fun(i),参数的传递 当函数没有执行时,参数此时并不存在,只是用来说明在调用这个函数时需要在这个位置向函数提供的数据类型。 在调用函数之后,参数传递需要经历两个基本步骤:首先,根据形式参数的声明格式,为每一个形式参数分配存储空间;然后再将实在参数的值赋给对应的形式参数。,int max(int x,int y); int main() int a,b,c; scanf(“%d,%d“, ,例1:函数执行过程,lesson13_01.c,例2:参数传递,分析程序结果,#include int main() int x=7,y=11; printf(“x=%d,y=%dn“,x,y); printf(“swapped:n“); swap(x,y); printf(“x=%d,y=%dn“,x,y); swap(int a,int b) int temp; temp=a; a=b; b=temp; ,实参和形参是单向值传递! 一般地在函数体中修改形参的值是不会影响实参的!,lesson13_02.c,例3:输出乘法口诀表。,例3:输出乘法口诀表。 分析: 它是一个9行9列的二维表格,加上一个行标题和一个列标题,显示出来应该是10行10列。,问题分析 行与行之间采用若干个“=”或“-”字符表示表格之间的线段,为此,可以定义一个函数,专门用来连续地显示若干个字符,以避免在每次需要显示线段的时候,都重复地书写相应的语句序列。,#include void drawLine(int n,char ch); /* 连续显示n个ch字符 */ int main() int i,j; printf(“n 9.9 tablen“); /* 显示表名 */ drawLine(30, =); /* 显示每列的标题 */ printf(“n 1 2 3 4 5 6 7 8 9“); drawLine(30, =); for (i=1; i=9; i+) /* 显示每行的内容 */ printf(“n%3d“, i); for (j=1; j=9; j+) printf(“%3d“, i*j); if (i9) drawLine(30, -); else drawLine(30, =); return 0; ,lesson13_03.c,void drawLine(int n, char ch) /*连续显示n个ch字符*/ int i; putchar(n); /*换行*/ for (i=1; i=n; i+) putchar(ch); /*连续显示n个字符ch*/ return 0; ,例4:计算 要求精确度达到10-6。,问题分析 在这个公式中,第i项的分子是xi;分母是i!。为了便于计算每一项的数值,设计了两个函数power( )和factorial( ) 分别用来完成计算xi和i!的任务。另外,为了更好地体现模块化的设计思路,再设计一个函数e( ) 用于计算ex。,算法描述,#include long power(int x, int y); long factorial(int n); double e(int x); int main( ) int x; printf(“nEnter x:“); scanf(“%d“, ,long factorial(int n) /* 计算n! */ int i; long f = 1; for (i=2; i= 1E-6 ); /* 精度的检查 */ return result; ,!,n,m,*,!,!,(n-m),计算下式,n和m从键盘输入,例5:从键盘输入一组文本行,求出最长行并且输出。,问题分析 从问题的求解要求可知,没有必要保存输入的所有文本行。只需保存已经输入各行中的最长行,以及刚输入的当前行。 设计一个专门用于计算最长文本行的函数void readline(char maxline )。 其实现过程为:一边输入文本行保存于数组line、一边与当前最长的文本行长度进行比较。如果新输入的文本行更长,则更新记录最长文本行的信息,最后得到的最长文本行将通过参数带出去。,算法描述,#include #include void readline(char maxline ); int main() char maxline80=“; readline(maxline); /* 输入并计算最长行 */ printf(“nThe longest line is:n“); puts(maxline); /* 输出最长行 */ return 0; ,lesson13_05.c,void readline(char maxline ) /* 输入并计算最长文本行 */ char line80; int maxlength,n; maxlength=0; /*初始化*/ line0=0; printf(“nEnter text lines:n“); do gets(line); /*输入文本行*/ n = strlen(line); if (nstrlen(maxline) /*与记录的最长文本行进行比较*/ maxlength = n; /*更新记录最长文本行的信息*/ strcpy(maxline, line); while (n0); return ; ,编写程序从键盘输入10个数保存在数组中,将数组中的10个数逆序后,然后输出。 要求:使用3个函数,第1个函数从键盘输入10个保存在数组中,第二个函数将数组中的元素逆序,第三个函数将数组中的元素输出,main函数调用这些函数完成程序要求,变量的作用域,指在源程序中定义变量的位置及其能被读写访问的范围,位置是指在函数内还是函数外,读写是指可以使用变量,局部变量 全局变量,局部变量,float f1(int a) int b,c; . char f2(int x,int y) int i,j; main() int m,n; . ,在语句块内(函数)定义的变量,在语句块内(函数)内有效,说明: 形参也是局部变量 定义时不会自动初始化,除非程序员指定初值 并列语句块各自定义的同名变量互不干扰 main函数中定义的变量也是局部变量,全局变量,在函数之外定义的变量,从定义变量的位置开始到文件结束有效。,int a=13,b=-8; int max(int x, int y) int z; z=xy?x:y; return(z); main() printf(“max=%d“,max(a,b); ,全局变量,例1:,lesson14_01.c,存储类型:数据在内存中存储的方式,它决定变量的生存期,动态变量:在栈区,标准定义格式 auto 类型名 变量名;,函数执行时,动态地创建,函数执行结束后被收回,在次进入后,重新初始化,auto可以省略,静态变量:全局数据区,标准定义格式 static 类型名 变量名;,程序执行过程当中一直存在,例2分析程序结果:,#include int f(int a) static int s=0; s+; return s+a; ,int main( ) int i,s=0; for(i=0;i3;i+) s+=f(i); printf(“s=%d”,s); return 0; ,lesson14_02.c,编译预处理:程序在编译之前做的一些处理 编译预处理命令:以#打头,#define命令,#define 宏名字 替换文本,例如:#define PI 3.14,在#define之后,所有独立出现“宏名字”的地方(除了字符串外)都被“替换文本”替换,#include #define PI 3.14 int main() float l,s,r; scanf(“%f”, ,编译时: main() float l,s,r; scanf(“%f”, ,例3,使用 3.14 替换 PI,lesson14_03.c,宏可以有参数,例如: #define ADD2( ),a,b,a*a+b*b,宏名中间不要有空格,参数没类型,注意替换发生后产生的非预想结果,#include “stdio.h” #define ADD2(a,b) a*a+b*b int main() int sum,x,y,z; scanf(“%d%d”, ,sum=a*a+b*b,sum=x+y*x+y+x-y*x-y,预防方法: 在宏体的参数中加(),替换过程,lesson14.04_1.c,#include “stdio.h” #define ADD2(a,b) (a)*(a)+(b)*(b) int main() int sum,x,y,z; scanf(“%d%d”, ,sum=(a)*(a)+(b)*(b),sum=(x+y)*(x+y)+(x-y)*(x-y),替换过程,lesson14.04_2.c,与#define配套命令,#undef,从现在开始取消#define的定义 #undef MAXLINE #if, #else,#elif,#endif #ifdef,#ifndef 这些预编译指令通常用来处理多文件工程和程序多版本的问题。(程序多版本一般是不同平台的版本,不同用户等级的版本,不同开发阶段的版本等),#include,用#incl

温馨提示

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

评论

0/150

提交评论