第5章 作用域与存储类型

合集下载

C语言全国计算机二级等级考试教程第一二章(章节带习题)

C语言全国计算机二级等级考试教程第一二章(章节带习题)
10
2.2 标识符、常量和变量
2.2.3 符号常量
在C语言中,可以用一个符号名来代表一个常量,称为符号常
量。但是这个符号名必须在程序中用(#define)进行特别的“
指定"。 例2.2 计算圆面积和周长,此程序中将如何教大家使用符号常量。
#include “stdio.h” /*包含头文件*/
#define PI 3.14159 /*定义符号常量,符号常量名为PI,用PI来代表3.14159*/
main()
/*主函数,程序的入口*/
{double r,s,l;
/*声明部分,定义了3实型个变量*/
r
r=5.0;
/*给变量r赋值*/
函 s=PI*r*r;
数 体
l=2*PI*r;
/*计算圆的面积*/ /*计算圆的周长*/
s
printf(“s=%f,l=%f\n”,s,l/)*;分别圆的面积和周长*/
/*给变量b赋值*/
数 体
area=a*b;
/*将a*b的结果赋值给变量area*/
printf(“a=%f,b=%f,area=%f\n”,a,b,area/)*;分别输出矩形的两条边长和面积*/
1.2
}
3.6
a=1.200000,b=3.600000,area=4.320000
4.32
注意:
1. C程序由函数组成,一个程序必须有一个且只能有一个主函数(main),C程
a
b
1.5000002.500000 2.5000003.500000
a b
内存空间
2.在程序中,声明变量就是在计算机内存中申请了某个内存单元。对变量 进行赋值,实质上就是把数据存入该变量所代表的存储单元中。

C语言 函数

C语言 函数

1. 函数声明的一般形式:
类型说明符 函数名([类型1 形参1,类型2 形参2,…]);
▪ 编译系统只检查函数类型、函数名、形参 类型和形参个数,不检查形参名。
➢ 因此,函数声明可省略形参名:
类型说明符 函数名([类型1,类型2…]);
➢ 以下两个函数声明语句 等价:
int min(float x,float y); int min(float,float);
}
}
5.2.4 函数原型
▪ 当被调函数位于主调函#in数clud后e 面<st时dio,.h>需要在 主调函数中对被调函数v{ oid进m行ain声() 明。
int min(float x,float y); int m; float a,b; scanf("%f,%f",&a,&b); m=min(a,b); printf("Min is %d\n",m); } int min(float x,float y) { return x<y?x:y; }
与函数的类型不一致,{前者将被自动转换为后
者的类型。
int m; float a,b;
scanf("%f,%f",&a,&b);
m=min(a,b);
printf("Min is %d\n",m);
}
3.函数调用的一般形式 函数名(实参表列);
A.说明: (1)如调用无参函数,()也不能省略。 (2)如实参表列含多个实参,参数间用逗号
第5章 函数
▪ 函数是C程序的基本组成单位。
▪ 使用函数能够实现模块化程序设计:
➢ 程序设计时往往把一个大的问题分解成若干小 的且易解决的问题

数据结构函数.

数据结构函数.
举例
int max(int x, int y)/*函数定义*/ { return x>y?x:y; }
max(a, 3); /*函数调用*/
C语言程序设计 - 第5章 函数 7
参数传递
值传递
实参对形参的数据传递是“值传递”
单向传递
只能把实参的值传递给形参 不能把形参的值传递给实参 对形参的值所作的改变不能带回给实参
main函数结束 函数之间可以相互调用,或调用自身 不能调用main函数 函数之间相互独立,不存在从属关系
C语言程序设计 - 第5章 函数 2
函数定义的一般形式
函数定义形式
返回类型 函数名(参数声明) { 声明部分 语句 }
返回类型、参数、函数体内容都可没有
dummy(){}
/* does ing & returns nothing */
C语言程序设计 - 第5章 函数 16
函数声明举例 (2)
int max(int x, int y); /* 函数声明 */ void main() { /* 不需要再次声明int max(int, int) */
int a, b, c; c = max(a, b); } int max(int x, int y) { return x>y?x:y; }
函数定义举例
int max(int x, int y) {
int z; z = x>y?x:y; return z; } int min(int x, int y) { return x<y?x:y; }
C语言程序设计 - 第5章 函数 5
函数的调用、参数和返回值
函数的参数
形参和实参 参数传递
xy

第5章 函数

第5章 函数

第5章函数及其应用5.1 函数种类5.1.1 命令函数,例如:getchar(),putchar()等。

5.1.2标准C++库函数,fabs(), pow(), rand(),sin(x), sqrt(), fexp()等,要使用头文件。

5.1.3自定义函数5.2 自定义函数的概念及使用方法例1:求两个数中的最大数#include <iostream.h>int imax (int a, int b){return (a>b ? a:b); }void main(){int a=6,b=9;cout<<"max="<<imax(a,b)<<endl;}例2:求x的n次方#include "iostream.h"main(){ float mpow(float a,int n);cout<<"pow="<<mpow(3.,3)<<endl;}float mpow(float a,int n){int i;float k=1;for(i=1;i<=n;i++)k=k*a;return (k); }5.3 自定义函数的三种形式5.3.1 无参函数,例如main(),getchar()等。

主函数与子函数之间不传输数据例:输出字符四方形************************************************void print(){int i;for(i=1;i<5;i++)cout<<(“************\n”;}5.3.2. 空函数例:null(){ }5.3.3. 有参函数如例1,例2说明:1.C++语言程序由一个主函数和若干个子函数(模块)组成。

1.子函数也有类型和函数值。

2.子函数程序体可以作为单独的文件存放,如果单独存放,应在主函数中作为头文件进行说明。

VC 复习提要和重点

VC  复习提要和重点
二维数组常用算法:求最大、最小值;常用于矩阵运算,如判断二维数组的是否对 称,求矩阵的转置、求外围元素之和、对角线之和等。(要注意找规律) 3、字符数组与字符串。字符数组可整体输入和输出。 1)注意下列两种初始化的差别: char s1[ ]=“abc”; char s2[ ]={ ‘a’, ‘b’, ‘c’ }; 2)为字符数组赋值时,不能大于所定义的数组大小 字符数组常用算法:大小写字母转换;将字符串按逆序存放;统计单词个数等。 4、字符串处理函数的功能。 #include <string.h> strcpy strlen strcat strcmp
2、根据变量所占用内存的方式,变量分为 4 种类型:自动类型(auto)、静态类型(static)、
寄存器类型(register)以及外部类型(extern)。
例: #include <iostream.h>
void f (void)
{ static i“i=“<<i<<‘\n’;
#define 符号常量 表达式 如:#define PI 3.1415926
方法二:常量说明符 const 如:const int buf=512;
(三)变量的作用域和存储类型
1、作用域有 5 类:块作用域、文件作用域、函数作用域、函数原型作用域以及类的作用域。
注意:作用域运算符“::”仅用于全局标识符。
C++中编译预处理包括:宏定义、文件包含和条件编译。 特点:以#开头标识;每一条预处理指令各占一行,不是以分号结束
1、 文件包含
格式:# include “文件名” 或 # include <文件名>
2、宏定义。(只作简单替换)

第5章 函数

第5章 函数

oop技术:封装性、继承性、多态性。
多态性 :一个名字,多个人口”,或称“同一接口, 多种方法 。
例5.6 重载绝对值函数
int abs(int x)
{ { { return x>0?x:-x;} return x>0?x:-x;} return x>0?x:-x;} double abs(double x) 1ong abs(1ong x) void main()
形参带值后,即可进行相应的数据处理
如果有结果值,通过return语句带回到主函数
5.2 函数的调用


函数要先定义,后调用。
调用函数时要考虑到函数本身的参数;

调用标准库函数时,要包含相应的头文件 输入/输出函数 iostream.h 字符串函数 string.h 常用数学函数 math.h 调用自定义函数时,要定义相应的实参,并给 这些实参赋值。
main()
{ int a = 1,b = 2; cout << "Before exchange:a= " << a << ",b= " << b << endl;
swap(a,b);
cout << "After exchange:a= " << a << ",b= " << b << endl; }
例5.8 定义一个求两数最大值的模板函数。
template <class T> T Max(T a, T b) { return a>b?a:b; }
void main()

第5章 2-域和属性

第5章 2-域和属性

静态类
静态类的几个注意点: 1.静态类不能有构造函数 2.静态类不能有任何实例成员。
3.静态类的成员不能有protected或protected internal访
问保护修饰符。 静态类不能使用abstract或sealed修饰符。
静态类不能指定任何接口实现。
静态变量和非静态变量
数据成员包括:静态变量和非静态变量两种 静态变量:带有static 修饰符的变量称为静态变量。 非静态变量:不带有static修饰符声明的变量称为非静态变 量,又叫实例变量。 类中的成员变量要么是静态,要么是非静态的。 静态成员变量是属于类所有的,非静态成员则属于类的实 例——对象。
使用方法存取字段
如果还需要单独设置当前时间的小时数,可以再增加一个 SetHour( )方法。
使用方法存取字段
优点:很多很多。。。 缺点:
这样的设计对于使用者来说,不方便了。因为他要分别记住2个方 法,哪个方法是设置值的,哪个方法是获取值的。
有没有一种途径,它可以让使用者像使用公共的字段一样 方便,又能让设计者能够进行安全地检查?
3 属性
问:数据成员为类所私有(private),外界怎么访问这些数 据呢?
使用方法存取字段
当前述MyTime类的字段hour, minute, second的访问属 性使用private后,使用者便无法访问它们,也就是说, 无法直接了解当前时间的小时数。 可以通过在MyTime类中增加一个GetHour( )方法来实现。
注意:
书写的位置—直接在类class中,不在某些方法中。在方法中的是 局部变量。 类中的普通方法可以访问它。 初始化
直接赋初值
– 错误用法
构造方法
2 类成员的访问限制

C语言程序设计-第5章--函数

C语言程序设计-第5章--函数

实参可以是常量、变量或表达式,但要求 它们必须要有确定的值,在调用时将实参 的值赋给形参。另外,实参和形参的类型 应相同或兼容。
— 31 —
5.2 函数的参数传递和返回值
➢ 5.2.2 函数的返回值
一般情况下,主调函数调用完被调函数后,都希望能够得到一 个确定的值,这就是函数的返回值。在C语言中,函数返回值 是通过return语句来实现的。return语句的一般形式有3种:
/*函数声明*/
/*调用逆序函数,将a的逆序值赋给b*/ /*调用逆序函数,将b的逆序值赋给c */
— 23 —
5.2 函数的参数传递和返回值
➢ 5.2.1 函数的形参与实参
{
int y=0,sign=1;
/*定义sign表示x的符号,定义变量y代表逆序数据*/
if(x<0)
/*当x小于0时取符号及取反*/
— 18 —
5.1 函数的定义和调用
➢ 5.1.2 函数的调用
另外,按函数在语句中的作用来分,可以有以下3种函数调用方式:
函数表达式
函数语句
函数作为实参
函数作为表达式中的一项出 现,以函数返回值参与表达 式的运算。
函数调用的一般形式加上分 号即构成函数语句。
函数作为另一个函数调用的 实际参数出现,即把该函数 的返回值作为实参进行传送。
#include<stdio.h> int main() {
int x=0,y; y=trans(x); printf("y=%d\n",y); printf("x=%d\n",x); return 0; } trans(int a) { a++; printf("a=%d\n", a); return a; }

C语言程序设计习题集及解答

C语言程序设计习题集及解答

目录第一章C语言基础知识 (1)第二章C语言程序设计的初步知识 (2)第二章答案 (25)第三章顺序结构程序设计 (3)第四章选择结构程序设计 (4)第五章循环结构程序设计 (6)第六章数组 (7)第六章答案 (26)第七章函数 (9)第七章答案 (27)第八章指针 (12)第八章答案 (28)第九章结构体与共用体 (14)第九章答案 (28)第十章文件 (16)第十章答案 (29)模拟试题 (17)模拟试题答案 (25)第一章C语言基础知识考点:1.C语言的特点。

2.C语言的基本结构、字符集、标识符、关键字。

3.算法的概念和描述方法。

一、选择题1. A 是C程序的基本构成单位。

A)函数B) 函数和过程C) 超文本过程D) 子程序2.下列说法正确的是 C 。

A)一个函数的函数体必须要有变量定义和执行部分,二者缺一不可B)一个函数的函数体必须要有执行部分,可以没有变量定义C)一个函数的函数体可以没有变量定义和执行部分,函数可以是空函数D)以上都不对3.下列说法正确的是C。

A)在执行C程序时不是从mian函数开始的B)C程序书写格式严格限制,一行内必须写一个语句C)C程序书写格式自由,一个语句可以分写在多行上D)C程序书写格式严格限制,一行内必须写一个语句,并要有行号4.下列标识符正确的是C。

A)x+y123 B)4_student C)a456 D)U.S5.以下说法正确的是C。

A)C语言程序总是从第一个定义的函数开始执行B)在C语言程序中,要调用的函数必须在main()函数中定义C)C语言程序总是从main()函数开始执行D)C语言程序中的main()函数必须放在程序的开始部分6.B不是C语言提供的合法关键字。

A)char B)scanf C)case D)default7.C语言提供的合法关键字是C。

A)ELSE B)INT C)case D)printf8. 一个C语言程序是由B。

A)一个主程序和若干个子程序组成;B)函数组成, 并且每一个C程序必须且只能由一个主函数;C)若干过程组成;D)若干子程序组成.9. 以下叙述中错误的是(C )A.C语言是一种结构化程序设计语言。

C++语言程序设计课后答案

C++语言程序设计课后答案

C++语言程序设计课后答案(郑莉第版)(总48页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--第一章概述1-1 简述计算机程序设计语言的发展历程。

解:迄今为止计算机程序设计语言的发展经历了机器语言、汇编语言、高级语言等阶段,C++语言是一种面向对象的编程语言,也属于高级语言。

1-2 面向对象的编程语言有哪些特点解:面向对象的编程语言与以往各种编程语言有根本的不同,它设计的出发点就是为了能更直接的描述客观世界中存在的事物以及它们之间的关系。

面向对象的编程语言将客观事物看作具有属性和行为的对象,通过抽象找出同一类对象的共同属性(静态特征)和行为(动态特征),形成类。

通过类的继承与多态可以很方便地实现代码重用,大大缩短了软件开发周期,并使得软件风格统一。

因此,面向对象的编程语言使程序能够比较直接地反问题域的本来面目,软件开发人员能够利用人类认识事物所采用的一般思维方法来进行软件开发。

C++语言是目前应用最广的面向对象的编程语言。

1-3 什么是结构化程序设计方法这种方法有哪些优点和缺点解:结构化程序设计的思路是:自顶向下、逐步求精;其程序结构是按功能划分为若干个基本模块;各模块之间的关系尽可能简单,在功能上相对独立;每一模块内部均是由顺序、选择和循环三种基本结构组成;其模块化实现的具体方法是使用子程序。

结构化程序设计由于采用了模块分解与功能抽象,自顶向下、分而治之的方法,从而有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护。

虽然结构化程序设计方法具有很多的优点,但它仍是一种面向过程的程序设计方法,它把数据和处理数据的过程分离为相互独立的实体。

当数据结构改变时,所有相关的处理过程都要进行相应的修改,每一种相对于老问题的新方法都要带来额外的开销,程序的可重用性差。

由于图形用户界面的应用,程序运行由顺序运行演变为事件驱动,使得软件使用起来越来越方便,但开发起来却越来越困难,对这种软件的功能很难用过程来描述和实现,使用面向过程的方法来开发和维护都将非常困难。

C++语言程序设计(清华大学出版社)课后习题及答案 第 五 章 程序的结构

C++语言程序设计(清华大学出版社)课后习题及答案    第 五 章   程序的结构

void TelepathicFunction(); int main() { const int MaxCats = 5; Cat *CatHouse[MaxCats]; int i; for (i = 0; i<MaxCats; i++) { CatHouse[i] = new Cat(i); TelepathicFunction(); } for ( i = 0; i<MaxCats; i++) { delete CatHouse[i]; TelepathicFunction(); } return 0; } void TelepathicFunction() { cout << "There are " << Cat::GetHowMany() << " cats alive!\n"; } 程序运行输出: There are 1 cats alive! There are 2 cats alive! There are 3 cats alive! There are 4 cats alive! There are 5 cats alive! There are 4 cats alive! There are 3 cats alive! There are 2 cats alive! There are 1 cats alive! There are 0 cats alive!
5-8 什么叫做友元函数?什么叫做友元类?
解: 友元函数是使用 friend 关键字声明的函数,它可以访问相应类的保护成员和私有成员。友元 类是使用 friend 关键字声明的类,它的所有成员函数都是相应类的友元函数。
本页已使用福昕阅读器进行编辑。 福昕软件(C)2005-2009,版权所有, 仅供试用。

四川大学《c语言程序设计》课件-第5章 函数

四川大学《c语言程序设计》课件-第5章 函数

用void定义参数 ,表示没有参数
void 函数名(void)
{ 声明语句序列 可执行语句序列 return ;
}
return语句后无需 任何表达式
【例】 计算整数n的阶乘n!
/* 函数功能: 用迭代法计算n!
返回值函数类入型口参数:函整数型名变量说n明表示阶乘的形阶参数表,函
函数返回值: 函返数回的n!功的能值
函数定义(Function definition)
返回值 类型
函数名标识符, 说明运算规则
参数表相当于 运算的操作数
类型 函数名(类型 参数1, 类型 参数2, ……)
{ 声明语句序列
可执行语句序列 return 表达式;
}
函数出口
返回运算的结果
函数定义(Function definition)
因变量
函数名
自变量
程序设计中的函数
程序设计中的函数不局限于计算 –计算类,如打印阶乘表的程序…… –判断推理类,如排序、查找……
问题的提出
读多少行的程序能让你不头疼? 假如系统提供的函数printf()由10行代码替换,那么你编过的程 序会成什么样子?
–实际上一个printf()有上千行代码 main()中能放多少行代码? 如果所有代码都在main()中,怎么团队合作? 如果代码都在一个文件中,怎么团队合作?
C程序的存储类别 – auto型(自动变量) – static型(静态变量) – extern型(外部变量) – register型(寄存器变量)
变量的存储类型( Storage Class)
变量的生存期(Lifetime )
The lifetime of a variable is the period of time during which memory is allocated to the variable

C++课后习题答案1--5

C++课后习题答案1--5

C++课后习题答案1--5习题答案1--5第一章 C++概述习题答案//P13一、选择题答案:1 A 2 A 3 B 4B二、简答题1、C与C++语言的关系是什么?答案: C++包含了整个C,C是建立C++的基础。

C++包括C的全部特征、属性和优点,同时添加了对面向对象编程(OOP)的完全支持。

2、结构化程序设计与面向对象程序设计有什么异同点?答案:结构化的程序设计的主要思想是功能分解并逐步求精。

面向对象程序设计的本质是把数据和处理数据的过程当成一个整体——对象。

3、C++程序开发步骤:答案:建立一个工程;编辑或者导入源文件;编译源文件,产生目标代码;目标代码和其他库文件连接为可执行文件。

运行可执行文件。

第二章数据类型和表达式习题答案//P32一、选择题(1)B (2)C (3)B (4)B (5)BD二、简答题1、下列变量名不合法的有哪些?为什么?A12-3、 123、 m123、 _ 123、 While答案: A12-3:变量名中不能有‘-‘符号123:变量名不能一数字开始_ 123、、 While变量名合法。

2、下列表达式不正确的有哪些?为什么?int a=’a’; char c=102; char c="abc"; char c=’\n’;答案: char c="abc";是不正确的,因为"abc"是字符串不能赋值给字符变量。

3、分析常量和变量的异同点?答案:常量是常数或代表固定不变值的名字,常量的内容初始化以后一直保持不变。

变量的内容可以在运行过程中随时改变。

变量要占用固定的内存地址,常量一般不占用内存,但是用const定义的常量也要占用内存。

4、字符串"ab\\\n"在机器中占多少字节?答案: 5个字节。

分别是’a’;’b’;’\\’;’\n’;’\0’这五个字符。

5、运算结果2.5。

第三章 C++流程控制习题答案//P63一、选择题(1)C (2)A (3)D (4)C (5)C二、简答题1、C++语言中while和do-while循环的主要区别是_________。

919090-C++程序设计教程-第5章 类和对象

919090-C++程序设计教程-第5章 类和对象

5.1
对象与外部对象的每一个交互都称为对象 的行为。对象的行为包括该对象向别的对象
发送消息以及该对象接受别的对象的消息。
消息是对象之间相互请求或相互协作的途
径,是要求某个对象执行其中某个功能操作 的规格的说明。
对象的行为可分为内部行为和外部行为, 相应于消息可分为私有消息和公有消息。
所有公有消息的结合称为该对象的协议,
面向对象方法学将对象定义为:对象是一个逻辑
实体,它是对一组信息以及作用于这些信息的操作 的描述。也就是说,对象是将其自身所固有的状态 特征或属性与可以对这些状态施加的操作结合在一 起所构成的独立实体。
5.1
对象的特性: (1)有一个名字作为该对象在系统中的标识 (2)有一组描述它的特征的状态。 (3)有一组操作。 根据开发过程的不同,可将对象分为三种 不同类型的对象: 现实生活中存在的实体:是我们所模拟系 统的原始构成; 问题对象:对象在问题中的抽象,它是现 实对象在计算机解空间中的直接映射; 计算机对象:问题对象在计算机中的表示 ,即问题对象的计算机实现。
对于用户自定义的函数,要先完成函数的定义, 然后才可以调用它。根据函数定义和使用时参数的 不同,可将函数分为两类:无参函数和有参函数。
无参函数就是没有任何参数的函数,而有参函数 就是带有一个或一个以上参数的函数。
5.3
1、无参函数
定义无参函数的一般格式为:
《<类型>》<函数名>(《void》)
{ …}
5.3
函数调用swap(&a, &b)示意图(a, b为一般变 量):
在调用参数为引用类型的函数时,引用类 型的形参所对应的实参必须为变量。
5.3
在调用引用类型参数的函数时,对引用类 型的参数的操作实际上就是对传递给它的实 参的操作,而不需要将实参拷贝一个副本给 形参。因为从程序的执行效率上看,引用作 为参数,在运行过程中可以节省资源。通常 将占用存储空间较大的类型的形参设置为引 用类型。

第05章 函数

第05章 函数
17
函 数
高 级 语 言 程 序 设 计 与 应 用 教 程
第11次课结束
函数调用
实 参可 以是常 量 、 变量、 表达式、函数等
函数名( 实参1,实参2,……,实参n ); 注意事项: (1) 实参列表中的实参必须与函数定义时的形参数量 相同、类型相符。 (2) 赋值对应关系: 实参1 -> 形参1 实参2 -> 形参2 …… 实参n -> 形参n (3)实参表求值顺序(即实参赋值给形参的顺序) TC、BC、VC均是自右向左,也就是说最右边的实参最 先赋值给最右边的形参, 最左边的实参最后赋值给最左边 的形参。
第 五 章 返回
void main ( ) { int a; 注意:对函数调用之前,必须要先声明或先 scanf ("%d", &a); while (a < 0) 定义,否则编译错! { showerror( ); scanf ("%d", &a); } 调用showerror printf ("sqrt(a) = %.2f\n", sqrt(a)); 函数 } void showerror( ) //函数的定义,无参数无返回值 { printf("input error!\n"); //函数体,没有声明变量 }
小写字符转换成大写字符
函 数
14
高 级 语 言 程 序 设 计 与 应 用 教 程
函数的调用 函数名( void ); 或 变量 = 函数名( ); 实例 【例5-2】反复计算幂函数,直到接受到一个回车符为止。
第 五 章
函 数
15
高 级 语 言 程 序 设 计 与 应 用 教 程
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

局部优先
C有效 有效
5.1.2 局部变量与全局变量
二、全局变量 在函数之外定义的变量( 在函数之外定义的变量(外 部变量) 部变量)是全局变量
全局变量的有效范围是:从 从 定义变量的位置开始到源文 件结束
7.7 局部变量与全局变量
二、全局变量
例:编写一个函数实现同时返回10个数的最大和 编写一个函数实现同时返回 个数的最大和 最小值 分析:用一个函数返回两个数据,除了用函数值外, 分析:用一个函数返回两个数据,除了用函数值外, 可以借助于全局变量 可见, 可见,全局变量可以减少函数的参数
5.1.1 作用域
4.函数作用域 函数中定义的变量, 函数中定义的变量,包括形参和函数体中定 义的局部变量,作用域都在该函数内, 义的局部变量,作用域都在该函数内,也称作函 数域。 数域。 5.类作用域 在介绍类和对象时, 在介绍类和对象时,可知类作用域是指类定 义范围( 义范围(包括类的声明部分和相应成员函数实现 整个范围)。在该范围内, )。在该范围内 整个范围)。在该范围内,类的成员函数对数据 成员有无限访问权限。 成员有无限访问权限。
5.2 变量的存储类别
1、自动类型: 、自动类型 【例5.5】使用自动变量的示例。 】使用自动变量的示例。 #include <stdio.h> void main() { int x=5,y=10; //自动变量x,y for (int k=1;k<=2;k++) //自动变量m,n { auto int m=0,n=0; m=m+1; n=n+x+y; printf("m=%d\tn=%d\n“,m,n); } }
5.1.2 局部变量与全局变量
main() float f1(int a) {{ int b,c; int a,b,c; 下列变量是局部变量: 下列变量是局部变量: …… 1、在一个函数内部定义的变 } …… { int d; 量; Void d=a+b; main() 2、函数的形式参数 ; { int…… m,n; 3、在某个复合语句中定义的 } …… 变量; 变量; }}
5.2 变量的存储类别
(2)静态全局变量 )
在定义全局变量时也加说明符 static。 static。 程序由一个源程序文件实 现,一个全局变量和一个静态全局 变量是没区别的。 变量是没区别的。 在多文件组成的程序中,一个 在多文件组成的程序中, 全局变量和一个静态全局变量在使 用上是不同的, 用上是不同的,其他文件通过外部 变量声明可以使用一个全局变量, 变量声明可以使用一个全局变量, 但却无法使用静态全局变量, 但却无法使用静态全局变量,静态 全局变量只能被定义它的文件所独 享。
1.块作用域
{ } 复合语句是一个块。 复合语句是一个块。 复合语句中定义的变量, 复合语句中定义的变量,作用域仅在该复合语句 中。
5.1.1 作用域
【例5.1】 输入两数,按从大到小的顺序保存,并输出结果。 】 输入两数,按从大到小的顺序保存,并输出结果。 #include<stdio.h> void main() { int a,b; //a、b具有函数作用域 、 具有函数作用域 cout<<"输入两整数:"<<endl; 输入两整数: 输入两整数 cin>>a>>b; cout<<“a="<<a<<'\t'<<"b="<<b<<endl; if(b>=a) { int t; // t具有块作用域 具有块作用域 t=a; a=b; b=t; //交换 的值 交换a,b的值 交换 } cout<<"a="<<a<<'\t'<<"b="<<b<<endl; // t已经无效 已经无效 }
5.1.2 局部变量与全局变量
#include <stdio.h> #include <math.h> #include <stdlib.h> int min; //全局变量 全局变量min 全局变量 int find( ) { int max,x; x=rand( )%101+100; //产生一个 产生一个[100, 200]之间的随机数 产生一个 之间的随机数 x printf(“ %d”,x); max = x; min =x; // 设定最大数和最小数 for(int i=1;i<10;i++) { x=rand( )%101+100; //再产生一个 再产生一个[100, 200]之间 再产生一个 之间 的随机数x 的随机数 printf(“ %d”,x); if(x > max) max = x; // 若新产生的随机数大于最大数, 若新产生的随机数大于最大数, 则进行替换 if(x < min)min = x; // 若新产生的随机数小于最小数, 若新产生的随机数小于最小数, 则进行替换 } return max; }
一、局部变量
a有效 有效 b,c有效 有效
d有效 有效 m,n有效 有效
5.1.2 局部变量与全局变量
一、局部变量
说明: 说明: main() { int a,b,c; …… { int c; c=a+b; …… } }
1、局部变量只在自己 范围内有效; 范围内有效; 2、如果局部变量的有效 范围有重叠, 范围有重叠,则有效范 围小的优先; 围小的优先;
5.2 变量的存储类别
2、寄存器类型(register) 、寄存器类型( ) ①计算机中的寄存器的个数是有限的 计算机中的寄存器的个数是有限的 ②寄存器变量对寄存器的占用是动态的 寄存器变量对寄存器的占用是动态的 ③有的系统将寄存器变量转化为自动变 有的系统将寄存器变量转化为自动变 量处理, 量处理,而有的系统会自动设置寄存器 变量
内存中供用户使用的存储 空间包括: 空间包括:
①程序区 静态存储区: ②静态存储区:编译时分配空 间 动态存储区: ③动态存储区:执行时分配空 间
作业: 作业:
P90:四、3、4 : 、 P108:一、2 :
5.2 变量的存储类别
自动类型、寄存器类型的变量属于动态变量; 自动类型、寄存器类型的变量属于动态变量; 动态变量 静态变量。 静态类型、外部类型的变量属于静态变量 静态类型、外部类型的变量属于静态变量。 1、自动类型:存储在动态存储区,用auto说明 、自动类型:存储在动态存储区, 说明 如: int func1(int a) { auto int b,c=3; …… } 通常auto可以省略 可以省略 通常 形参a,变量 、 都是自动变量调 形参 ,变量b、c都是自动变量调 用该函数时, 用该函数时,系统给它们分配存储 空间, 空间,函数调用结束时自动释放存 储空间。 储空间。
5.2 变量的存储类别
【例5.7】用自动变量与静态局部变量求三个整数的和。 5.7】用自动变量与静态局部变量求三个整数的和。 #include <stdio.h> void f(int x,int y) { int m=0; //自动变量 static int n=0; //静态局部变量,此处也可static int n; m=m+x+y; n=n+x+y; printf("m=%d\tn=%d\n“,m,n); } void main( ) { int i=5,j=10,k; for (k=1;k<=3;k++) f(i,j); }
第5章 作用域和存储类型
5.1 作用域 5.2 变量的存储类型 5.3 编译预处理
5.1.1 作用域
作用域是变量在程序中可引用的区域。 作用域是变量在程序中可引用的区域。 作用域共分成块作用域 文件作用域、 块作用域、 作用域共分成块作用域、文件作用域、函数声明 原型)作用域、函数作用域、类作用域五种 五种。 (原型)作用域、函数作用域、类作用域五种。
5.2 变量的存储类别
3、静态类型(static) 、静态类型 打印1到 的阶乘 打印 到5的阶乘 (1)静态局部变量 ) 静态局部变量属于静态存储类别, ①静态局部变量属于静态存储类别, 在程序整个运行期间都不释放存储 空间。 空间。 ②静态局部变量在编译时赋初值 仅赋一次值) (仅赋一次值) ③如果定义静态局部变量时没有赋 初值, 初值,编译时会自动赋初值 ④静态局部变量只能在定义它的函 数内被引用( 数内被引用(它存在但不能被其它 函数使用) 函数使用)
5.2 变量的存储类别
【例5.6】自动变量与静态局部变量的区别。 】自动变量与静态局部变量的区别。 #include <stdio.h> void f( ) { int x=0; //初始化多次,栈中分配、相当于 初始化多次, 初始化多次 栈中分配、相当于auto int x=0; static int y=3; //静态局部变量,仅初始化一次,静态区分配 静态局部变量, 静态局部变量 仅初始化一次, x=x+1; y=y+1; printf(“%d\t%d\n”,x,y); } void main( ) { int i; for(i=0;i<3;i++) f ( ); }
5.1.1 作用域
2.文件作用域 文件作用域也称全局作用域。 文件作用域也称全局作用域。定义在所有函 数之外的变量,具有文件作用域, 数之外的变量,具有文件作用域,作用域为从定 义处到整个源文件结束。 义处到整个源文件结束。文件中定义的全局变量 和函数都具有文件作用域。 和函数都具有文件作用域。 3.函数声明作用域 函数声明不是定义函数,在作函数声明时, 函数声明不是定义函数,在作函数声明时, 其中的形参作用域只在声明中, 其中的形参作用域只在声明中,即作用域结束于 右括号。 右括号。正是由于形参不能被程序的其他地方引 所以通常只要声明形参个数和类型, 用,所以通常只要声明形参个数和类型,形参名 可省略。 可省略。5.Fra bibliotek 变量的存储类别
相关文档
最新文档