作用域和选择结构程序设计.ppt_第1页
作用域和选择结构程序设计.ppt_第2页
作用域和选择结构程序设计.ppt_第3页
作用域和选择结构程序设计.ppt_第4页
作用域和选择结构程序设计.ppt_第5页
已阅读5页,还剩22页未读, 继续免费阅读

下载本文档

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

文档简介

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, ,作业及问题,习惯用符号常量,并注意语法格式,函数声明后有分号 一般都写在前面,return只能返回一个值 暂时还不能用一个函数求两

2、个值。,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); /*函数声明*/ float l(float r) /*函数定义:求周长*/ return PI*r*2; float s(float r) /*函数定义:求面积*/ return PI*r*r; void main() fl

3、oat r, l, s; printf(please input r:); scanf(%f, ,问题,若这样起名会怎样?,会有错误提示,因为相同的名字造成了冲突。,4,#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 inpu

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

5、,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); /* 调用交换函数swap */ printf(12a=

6、%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,3,实参a,b的值没发生变化! 单向值传递! 即由实参向形参的方向传递数值!而不会朝相反的方向!,9,全局变量,全局变量 在所有函数之外定义的变量 特点 默认作用范围:

7、在源程序.c中,从定义它的位置以后都有效 在定义点之前或在其他.c文件中引用,应该进行如下声明: extern 类型名 变量名; 从程序运行起即占据内存,程序运行过程中可随时访问,程序退出时释放内存 使函数之间的数据交换更容易,也更高效 但是尽量少用,因为谁都可以改写全局变量,所以很难确定是谁改写了它 破坏了函数的独立性(封装性),10,#include int global;/*定义全局变量*/ void GlobalPlusPlus(void); main() global = 1; printf(Before GlobalPlusPlus(), it is %dn, global); G

8、lobalPlusPlus(); 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); ,例,Before GlobalPlusPlus(), it is 1 Before +, it is 1 After +, it

9、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, global); /* 函数功能: 对局部变量global加1,并打印加1之前与之后的值 函数入口参数: 无 函数返回值: 无 */ void

10、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,如何用全局变量解决例3-7,#include int a=3,b=5; void swap(void); /* 函数声明 */ void main(

11、) 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; /* 交换变量a,b的值 */ printf(22 a=%d, b=%dn,a,b); /* 交换变量值之后 */ ,虽然得以解决,但并不是一个好办法! 为什么? 因

12、为它破坏了函数的封闭性! 学指针的时候我们会学另外一种方法! 即便要用全局变量,一般也是在只读不写的时候才用!,13,例:使用全局变量解决,#include #define PI 3.14 float r; float l( void ); /*函数声明*/ float s(void); /*函数声明*/ float l(void) /*函数定义:求周长*/ return PI*r*2; float s(void) /*函数定义:求面积*/ return PI*r*r; void main() float cir, area; printf(please input r:); scanf(%f

13、, ,r一旦被赋值,其值不再发生变化,只是拿来用。,14,小结:,分清楚同名变量的作用域。一般情况下用局部变量,极少情况下考虑到数据的一致性时可以用全局变量。 变量的存储类型待第5章以后再讲。,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

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

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

16、函数定义的另一种写法请参考书中48页的解法一,17,例49,从键盘上输入一个年份,然后判断这个年份是否为闰年。 分析结果(算法) 输入year 判断year是否为闰年 输出yes或no,如果year能被4整除且不能被100整除,或者year能被400整除, year是闰年, 否则 year不是闰年。,18,分析,year能被4整除且不能被100整除,或者year能被400整除 (?)或者(?) (?且?)或者(?) (? printf(“please input year:”); scanf(“%d”, /*缩进与上边一致*/ ,20,写成多函数程序,#include void leap(in

17、t year);/*函数声明*/ void leap(int year)/*判断year是否为闰年并输出*/ if(year%4=0 /*调用leap函数判断year是否为闰年并输出*/ ,21,涉及的语法,选择结构语句格式 if(条件表达式) else ,else分支可以省略,此时为单分支结构,22,涉及的语法关系运算符, = = = != 大于,小于,大于等于,小于等于,等于,不等于 运算结果只有两个值:0和非0,0表示假,即该关系不成立;非0,表示真,即该关系成立 例如:2006%4=0的结果是? 0,表示假(关系不成立),优先级:在算术运算符和赋值运算符之间。 结合性:自左向右,23,

18、涉及的语法逻辑运算符,逻辑运算也被称为布尔(Boolean)运算,即参与运算的数据和运算结果都只有两个值:0和非0,0表示假(条件不成立);非0表示真(条件成立) 与运算 printf(“please input a character:”); c=getchar();/*从键盘上输入一个字符并存储到变量C中*/ if(c=a ,(letter=97 printf(“please input an lowercase:”); lower=getchar(); /*从键盘上输入一个字符,并赋值给lower */ upper=lower-32; putchar(upper); /*将upper输出 */ ,一般用法:字符型变量=getchar();含义是从键盘上敲入一个字符,然后把它赋给字符型变量。 另一种用法:getchar();功能相当于“按任意健继续”,一般用于程序最后,以便查看前边的结果。,格

温馨提示

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

评论

0/150

提交评论