作用域和选择结构程序设计.ppt

上传人:w****2 文档编号:18679959 上传时间:2021-01-02 格式:PPT 页数:27 大小:256.55KB
收藏 版权申诉 举报 下载
作用域和选择结构程序设计.ppt_第1页
第1页 / 共27页
作用域和选择结构程序设计.ppt_第2页
第2页 / 共27页
作用域和选择结构程序设计.ppt_第3页
第3页 / 共27页
资源描述:

《作用域和选择结构程序设计.ppt》由会员分享,可在线阅读,更多相关《作用域和选择结构程序设计.ppt(27页珍藏版)》请在装配图网上搜索。

1、1 #include #define PI 3.14 float l(float); /*函数 声明 */ float s(float); /*函数 声明 */ float l(float r) /*函数 定义 :求周长 */ return PI*r*2; float s(float r) /*函数 定义 :求面积 */ return PI*r*r; void main() float r, cir, area; printf(please input r:); scanf(%f, cir =l(r); /*函数 调用 */ area =s(r); /*函数 调用 */ printf(circ

2、umference=%7.2fn,area=%7.2fn, cir, area); 作业及 问题 习惯用符号常量,并 注意语法格式 函数声明后有分号 一般都写在前面 return只能返回一个值 暂时还不能用一个函数 求两个值。 printf(circumference=%7.2fn,area=%7.2fn,l(r),s(r); /*第二种调用方式: l(r),s(r) 作为 printf()的参数 */ 第 4讲 多函数程序设计变量的作用域 选择结构程序设计 3 #include #define PI 3.14 float l(float); /*函数声明 */ float s(float);

3、 /*函数声明 */ float l(float r) /*函数定义:求周长 */ return PI*r*2; float s(float r) /*函数定义:求面积 */ return PI*r*r; void main() float r, l, s; printf(please input r:); scanf(%f, l=l(r); /*函数调用 */ s=s(r); /*函数调用 */ printf(circumference=%7.2fn,area=%7.2fn, l, s); 问题 若这样起名会 怎样? 会有错误提示, 因为相同的名字 造成了冲突。 4 #include #de

4、fine PI 3.14 float l(float); /*函数声明 */ float s(float); /*函数声明 */ float l(float r) /*函数定义:求周长 */ return PI*r*2; float s(float r) /*函数定义:求面积 */ return PI*r*r; void main() float r, cir, area; printf(please input r:); scanf(%f, cir =l(r); /*函数调用 */ area =s(r); /*函数调用 */ printf(circumference=%7.2fn,area=

5、%7.2fn, cir, area); 问题 若这样起名又 会怎样?会冲 突吗? 不会,它们虽然 是不同的 r,但 因为它们的 作用 域 不同,所以不 会产生冲突。 5 涉及的语法 -作用域 作用域:即作用范围 可分为: 局部变量 全局变量 6 局部变量 局部变量 在语句块内 (即 内 )定义的变量 形式参数也是局部变量 特点 定义时不会自动初始化,除非程序员指定初值 进入语句块时获得内存,仅能由语句块内语句 访问,退出语句块时释放内存,不再有效 并列语句块各自定义的同名变量互不干扰 7 main() int i=1,j=2; printf(i=%d,j=%dn,i,j); int i=3,a

6、=4; printf(i=%d,a=%dn, i,a); j+; int i=5; printf(i=%dn,i); j+; printf(i=%d,j=%dn,i,j); 运行结果为: i=1,j=2 i=3,a=4 i=5 i=1,j=4 例 ,运行结果? +是一个 运算符 , j+表示 将 j变量的值加 1 8 例 3-7,运行结果 ? #include void swap(int x,int y); /* 函数声明 */ void main( ) int a=3,b=5; printf(11a=%d, b=%dn,a,b);/* 调用交换函数之前 */ swap(a,b); /* 调用

7、交换函数 swap */ printf(12a=%d, b=%dn,a,b);/* 调用交换函数之后 */ /* 函数定义:交换两个变量的值的函数 */ void swap(int a,int b) int temp; printf(21 a=%d, b=%dn,a,b); /* 交换变量值之前 */ temp=a; a=b; b=temp; /* 交换器:交换变量 x,y的值 */ printf(22 a=%d, b=%dn,a,b); /* 交换变量值之后 */ 3 5 a b 3 5 a b temp 3 5 3 实参 a,b的值 没发生变化 ! 单向值传递 ! 即由实参向形参的方向传递

8、 数值 !而不会朝相反的方向 ! 9 全局变量 全局变量 在所有函数之外定义的变量 特点 默认 作用范围:在源程序 .c中,从定义它的位置以 后都有效 在定义点之前或在其他 .c文件中引用,应该进行如 下声明: extern 类型名 变量名 ; 从程序运行起即占据内存,程序运行过程中可随时 访问,程序退出时释放内存 使函数之间的数据交换更容易,也更高效 但是尽量少用 ,因为谁都可以改写全局变量,所以很难确 定是谁改写了它 破坏了函数的独立性 (封装性 ) 10 #include int global; /*定义全局变量 */ void GlobalPlusPlus(void); main()

9、global = 1; printf(Before GlobalPlusPlus(), it is %dn, global); GlobalPlusPlus(); printf(After GlobalPlusPlus(), it is %dn, global); /* 函数功能: 对 全局变量 global加 1,并打印加 1之前与之后的值 函数入口参数: 无 函数返回值: 无 */ void GlobalPlusPlus(void) printf(Before +, it is %dn, global); global+; printf(After +, it is %dn, global

10、); 例 Before GlobalPlusPlus(), it is 1 Before +, it is 1 After +, it is 2 After GlobalPlusPlus(), it is 2 注意:全局变 量具有 “ 记忆 性 ” 。 11 #include void GlobalPlusPlus(void); main() int global = 1; printf(Before GlobalPlusPlus(), it is %dn, global); GlobalPlusPlus(); printf(After GlobalPlusPlus(), it is %dn,

11、 global); /* 函数功能: 对 局部变量 global加 1,并打印加 1之前与之后的值 函数入口参数: 无 函数返回值: 无 */ void GlobalPlusPlus(void) int global = 1; printf(Before +, it is %dn, global); global+; printf(After +, it is %dn, global); 例 Before GlobalPlusPlus(), it is 1 Before +, it is 1 After +, it is 2 After GlobalPlusPlus(), it is 1 12

12、 如何用全局变量解决例 3-7 #include int a=3,b=5; void swap(void); /* 函数声明 */ void main( ) printf(11 a=%d, b=%dn,a,b);/* 调用交换函数之前 */ swap(); /* 调用交换函数 swap */ printf(12 a=%d, b=%dn,a,b);/* 调用交换函数之后 */ void swap(void ) /* 函数定义 ,没有参数 */ int temp; printf(21 a=%d, b=%dn,a,b); /* 交换变量值之前 */ temp=a; a=b; b=temp; /* 交

13、换变量 a,b的值 */ printf(22 a=%d, b=%dn,a,b); /* 交换变量值之后 */ 虽然得以解决,但并不是一个好办法 ! 为什么? 因为它破坏了函数的封闭性 ! 学指针的时候我们会学另外一种方法 ! 即便要用全局变量,一般也是在只读不写的时候才 用 ! 13 例:使用全局变量解决 #include #define PI 3.14 float r; float l( void ); /*函数声明 */ float s(void); /*函数声明 */ float l(void) /*函数定义:求周长 */ return PI*r*2; float s(void) /*函

14、数定义:求面积 */ return PI*r*r; void main() float cir, area; printf(please input r:); scanf(%f, cir =l( ); /*函数调用 */ area =s( ); /*函数调用 */ printf(circumference=%7.2fn,area=%7.2fn, cir, area); r一旦被赋值,其值不 再发生变化,只是拿 来用。 14 小结: 分清楚同名变量的作用域。一般情况下 用局部变量,极少情况下考虑到数据的 一致性时可以用全局变量。 变量的存储类型待第 5章以后再讲。 15 编写函数,求两个整数的最

15、小值、最大值 分析结果(算法) 主函数: 输入 a,b 计算最小值和最大值 (通过函数调用实现 ) 输出最小值和最大值 求最大值函数 求最小值函数 新的问题:例 3-2: #include int min(int,int);/*函数声明 */ int max(int,int); int min(int a,int b)/*函数功能:求 a,b的最小值 */ int temp; if(ab) temp=b; else temp=a; return temp; int max(int a,int b) /*函数功能:求 a,b的最大值 */ int temp; if(ab) temp=b; els

16、e temp=a; return temp; void main() int a,b; printf( please input two integers: ); scanf(%d%d, printf( min=%dnmax=%dn, min(a,b),max(a,b); 运行过程? 16 例 3-2:编写函数,求两个 整数的最小值、最大值 另一种写法: #include int min(int,int);/*函数声明 */ int max(int,int); int min(int a,int b) /*函数功能:求 a,b的最小值 */ return (ab)?b:a; int max(i

17、nt a,int b) /*函数功能:求 a,b的最大值 */ return (ab)?a:b; void main() int a,b; printf( please input two integers: ); scanf(%d%d, printf( min=%dnmax=%dn, min(a,b),max(a,b); 条件运算符?: C语言中唯一的 三目运算符 含义: 若?前边的表达式成立, 则结果为:前边的表达式或数据, 若不成立,结果为:后边的表达 式或数据。 简单的 if-else语句可以用条件运 算符来替代。 结合性:自右向左 计算: y=x0?1:(x0?-1:0) 函数定义的

18、另一种写法请参考书 中 48页的解法一 17 例 4 9 从键盘上输入一个年份,然后判断这个 年份是否为闰年。 分析结果(算法) 输入 year 判断 year是否为闰年 输出 yes或 no 如果 year能被 4整除且不能被 100整除,或者 year能被 400整除 , year是闰年, 否则 year不是闰年。 18 分析 year能被 4整除 且 不能被 100整除, 或者 year 能被 400整除 (?)或者 (?) (?且 ?)或者 (?) (? else printf(“%d is not a leap year!”,year); 19 结果 #include void ma

19、in() int year; printf(“please input year:”); scanf(“%d”, if(year%4=0/*一般要缩进 */ else printf(“%d is not a leap year!”,year); /*缩进与上边一致 */ 20 写成多函数程序 #include void leap(int year);/*函数声明 */ void leap(int year)/*判断 year是否为闰年并输出 */ if(year%4=0 else printf(“%d is not a leap year!”,year); void main() int ye

20、ar; printf(“please input year:”); scanf(“%d”, leap(year); /*调用 leap函数判断 year是否为闰年并输出 */ 21 涉及的语法 选择结构 语句格式 if(条件表达式 ) else else分支可以省 略,此时为单分 支结构 22 涉及的语法 关系运算符 = b printf(“please input a character:”); c=getchar();/*从键盘上输入一个字符并存储到变量 C中 */ if( (c=a printf(“please input an lowercase:”); lower=getchar()

21、; /*从键盘上输入一个字符 , 并赋值给 lower */ upper=lower-32; putchar(upper); /*将 upper输出 */ 一般用法:字符型变量 =getchar( ); 含义是从键盘上敲入一个字符,然后把 它赋给字符型变量。 另一种用法: getchar();功能相当于 “ 按任意健继续 ” ,一般用于程序最后, 以便查看前边的结果。 格式: putchar( 字符 ); 功能 :向终端输出一个字符。 参数可以是字符型常 (变 )量或整型常 (变 )量。例如: putchar(c ); putchar(a); putchar( n ); putchar(97); 26 本讲小结 要求 理解函数的 单向值传递 理解变量的 作用域 的概念 能够根据需要设置局部变量或全局变量 选择结构的程序设计 关系运算符 和 逻辑运算符 的相关语法 字符输入输出函数的使用 27 作业 请大家回去复习大学计算机基础关于 程 序、算法、结构化程序设计思想 的内容。 P125写出习题 4.1中程序的功能。 编程实现:从键盘上输入一个整数,判 断它的奇偶性和正负性。

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!