C程序设计教程与实验指导杨国兴C基础.ppt_第1页
C程序设计教程与实验指导杨国兴C基础.ppt_第2页
C程序设计教程与实验指导杨国兴C基础.ppt_第3页
C程序设计教程与实验指导杨国兴C基础.ppt_第4页
C程序设计教程与实验指导杨国兴C基础.ppt_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

C+语言程序设计,杨国兴 张东玲 彭涛,中国水利水电出版社,第2章 C+基础,2.1 常量与变量 2.2 指针与引用 2.3 动态内存分配 2.4 位运算符 2.5 名字空间,2.1 常量与变量,2.1.1 常量 常量:在程序运行中,其值不能被改变的量称为常量。常量又分为直接常量和符号常量两种。 1. 直接常量:直接使用数值或文字表示的值 (1)整型常量 如:10、-20、0 还可以八进制或十六进制表示:如034、0x23 不带后缀的整型常量为 int 型,带后缀 L 或 l 可表示长整型常量,带后缀 U 或 u 表示无符号整型常量 (2)实型常量 如:2.18、-5.6、2.3E+2、-3.12E-2 不带后缀的实型常量为 double 型,带后缀 F 或 f 可表示单精度实型常量,第2章 C+基础,2.1 常量与变量,2.1.1 常量(续一) (3)字符型常量 以单引号括起来的单个字符:如a、3、* 转义字符:键盘不便于直接输入的字符,如回车符、制表符等,通常以 “ ” 开头 表2.3 转义字符,第2章 C+基础,2.1 常量与变量,2.1.1 常量(续二) (4)bool型常量 bool常量只有两个:true(真)、false(假) 在内存中占有一个字节的存储空间 (5)字符串常量 由一对双引号括起来的若干字符,如“abc” 字符串常量的末尾自动加入结束标志 0,因此字符串在内存中占有的字节数为 字符个数+1 若字符串中包含特殊字符,如 、回车、制表符等,也应以他们对应的转义字符形式表示,第2章 C+基础,例2.1 检测基本数据类型所占的字节数,#include void main() cout “int: “ sizeof(int) endl; cout “short: “ sizeof(short) endl; cout “long: “ sizeof(long) endl; cout “float: “ sizeof(float) endl; cout “double: “ sizeof(double) endl; cout “long double: “ sizeof(long double) endl; cout “char: “ sizeof(char) endl; cout “bool: “ sizeof(bool) endl; ,第2章 C+基础,2.1 常量与变量,2.1.1 常量(续三) 2. 符号常量:直接使用符号表示的常量值,包括宏定义和const定义的符号常量。 (1)宏定义 语法形式:#define 宏名 字符串 如: #define PI 3.14 程序编译前会自动用字符串取代程序中出现的宏名 (2)const定义 语法形式:const 类型说明符 常量名=常量值; 如: const float pi = 3.14 ; 宏定义在预编译时,只进行简单的替换,不做语法检查 宏定义没有数据类型,而const定义的符号常量是有数据类型的。,第2章 C+基础,例2.2 使用符号常量,#include void main() #define PI 3.14 const int A=10; cout PI*10*10 n; cout A + 20 n; ,第2章 C+基础,2.1 常量与变量,2.1.2 变量 1. 变量的定义:程序运行中值可以被改变的量。变量必须先定义再使用。 变量定义的一般形式 语法形式:数据类型 变量名1, 变量名2, , 变量名n; 如: int a, b, c; 2. 变量的初始化 含义:定义变量的同时为其赋初值 两种形式:用赋值号(“=”) 或用括号 如: float a = 3.14 ; 或 float a(3.14);,第2章 C+基础,例2.3 从键盘输入n的值,计算从1到n的累加和。,#include void main() int n, sum=0; cin n; int i; for(i=1;i=n; i+) sum+=i; cout sum n; ,第2章 C+基础,2.2 指针与引用,2.2.1 指针 1. 地址与指针的概念 (1)内存地址 计算机的内存储器被划分成一个个的存储单元,这些存储单元按一定的规则编号,这个编号就是存储单元的地址。 每个存储单元的大小为一个字节,每个单元有一个唯一的地址。 (2)变量的地址 在程序中定义的所有变量,都要分配相应的存储单元,不同类型的数据所需要的存储空间的大小不同。 系统分配给变量的内存空间的起始单元地址称为该变量的地址。 如: int a; 则0x3000为变量a的地址,第2章 C+基础,2.2 指针与引用,2.2.1 指针 2. 指针与指针变量 (1)指针:一个变量的地址也称为该变量的指针。 (2)指针变量:用于存储其它变量的指针(即地址)的变量。 指针变量的定义: 数据类型 *指针变量名; 如: int *p1; float *p2; char *p3; 注意:指针变量所指向的变量类型不能改变 指针变量必须指向具体内存地址才能引用,如: int *p; *p=10; (3)指针运算符(*)与取地址运算符(&),第2章 C+基础,例2.4 通过指针变量存取变量的值,#include void main() int a, *p1; double b, *p2; char c, *p3; p1 = ,程序运行结果为: 10 11.2 A,第2章 C+基础,例2.5 输入a和b两个数,按从小到大的顺序输出,#include void main() int a, b; int *p1, *p2, *p; cout a b; p1 = ,程序运行结果为: 请输入两个整数:30 10 min = 10 max = 30,第2章 C+基础,2.2 指针与引用,2.2.1 指针 3. 指针作为函数的参数 指针作为函数的参数,实际上传递的是变量的地址,进行的是地址传递。 例2.6 指针作为函数参数,被调函数中交换参数值,#include void swap(int *x, int *y); void main() int a, b; a = 10; b = 20; swap( ,void swap(int *x, int *y) int temp; temp = *x; *x = *y; *y = temp; ,第2章 C+基础,2.2 指针与引用,例2.6 程序运行过程中变量值的变化分析,(a),(b),(c),(d),程序运行结果为: 20,10,第2章 C+基础,2.2 指针与引用,2.2.2 引用 1. 引用的概念 引用是一种特殊的变量,可以认为是一个变量的别名。 定义引用的一般格式: 类型说明符 首先定义变量a,并初始化为1,然后定义引用b,并初始化为a,即b是a的别名,因此a和b是同一个单元。 注意:定义引用时一定要初始化,指明该引用变量是谁的别名。,第2章 C+基础,例2.7 引用的使用,#include void main() int a=1; int c=10; int ,程序运行结果: 1,1,10 10,10,10 20,20,10,定义引用b,并将其作为a的别名,将c的值赋给b,不是将b作为c的别名,第2章 C+基础,2.2 指针与引用,2.2.2 引用(续一) 2. 引用作为函数的参数 例2.8 写一个函数,用引用作为参数,交换函数中两个变量的值。,#include void swap(int x, int y); void main() int a, b; a = 10; b = 20; swap(a, b); cout a “, “ b endl; ,void swap(int ,程序运行结果为: 20,10,第2章 C+基础,2.2 指针与引用,2.2.2 引用(续二) 例2.8程序运行过程中参数值的变化图示,注意:引用作参数时,函数的实参与形参在内存中共用存储单元,因此形参的变化会使实参同时变化。,第2章 C+基础,2.3 动态内存分配,在程序运行过程中根据需要动态分配存储空间,不需要时还可以将空间释放,通过new和delete运算符实现。 1. 动态分配一个数据的存储空间 通过new运算符实现动态分配内存,格式如下: new 类型名(初值) 如: int *p1, *p2; p1 = new int(10); p2 = new int; 运算符delete用来释放由运算符new动态分配的存储空间。使用格式如下: delete 指针名; 如:delete p1;,第2章 C+基础,2.3 动态内存分配,2. 动态分配多个连续的数据存储空间 通过new运算符动态分配数组,格式如下: new 类型名整型表达式 如: int *p1; p1 = new int10; 用delete删除动态数组时,要在指针前加 “”。格式如下: delete 指针名; 如:delete p1;,第2章 C+基础,例2.9 动态内存分配的使用,#include void main() int *p1, *p2; p1 = new int(10); p2 = new int10; int i; for(i=0; i10; i+) *(p2+i) = i; cout *p1 endl; for(i=0; i10; i+) cout *(p2+i) “ “; cout endl; for(i=0; i10; i+) cout p2i “ ”; / p2i 与 *(p2+i)所访问的数据相同 cout endl; delete p1; delete p2; ,程序运行结果为: 10 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9,第2章 C+基础,2.4 位运算符,2.4.1 位运算符 C+使用位运算符可以对数据按二进制位进行操作。 1. 按位与(&):将两个操作数对应的每一位分别进行逻辑与 如:9&7 9: 00001001 7: 00000111 9&7: 00000001 9&7结果为1 2. 按位或(|) :将两个操作数对应的每一位分别进行逻辑或 3. 按位异或() :将两个操作数对应的每一位分别进行异或,第2章 C+基础,2.4 位运算符,2.4.1 位运算符(续) 4. 按位取反():单目运算符,对二进制的每一位取反 5. 左移位() :使运算符左侧操作数的各位右移指定位数,溢出的低位舍弃,对无符号数和有符号中的正数,高位补0,对于有符号数中的负数,有些系统补0(称为逻辑右移),有些系统补1(称为算术右移)。如 72的结果是1。,7,72,第2章 C+基础,2.4 位运算符,2.4.2 位运算符应用举例 例2.10 输入变量a,b的值,并将变量a的低4位置为0,将变量b的低4位置为1。 #include void main() int a,b; cin a; cin b; a = a ,0xf为十六进制数,它的后四位为1,其他位均为0。取反后后四位为0,其他位均为1。,若输入25和23,程序执行结果为: 16 31,第2章 C+基础,2.5 名字空间,2.5.1 名字空间的定义与使用 1.名字空间的定义 namespace 名字空间名 例 : namespace NameSpace1 int a; int f1() float f2() ,(1)名字空间只能在全局范围那定义,但名字空间是可以嵌套的。 (2)一个名字空间可以用另一个名字作为它的别名。例如使用ns1作为上述名字空间NameSpace1的别名,可以用下面的语法: namespace ns1 = NameSpace1;,第2章 C+基础,2.5 名字空间,2.5.1 名字空间的定义与使用 2.名字空间的使用 (1)使用域运算符 格式如下: 名字空间名:标识符 例如下面一行程序,可以访问名字空间NameSpace1中的变量a和函数f1()。 NameSpace1:a = NameSpace1:f1();,第2章 C+基础,例2.11 名字空间的定义与使用,#include namespace ns1 int fun(int x, int y); namespace ns2 int fun(int x, int y); namespace ns3 int fun(int x, int y); int ns1:fun(int x, int y) return x+y; ,int ns2:fun(int x, int y) return x*y; int ns2:ns3:fun(int x, int y) return x-y; void main() cout ns1:fun(3,4) endl; cout ns2:fun(3,4) endl; cout ns2:ns3:fun(3,4) endl; ,程序运行结果: 7 12 -1,第2章 C+基础,2.5 名字空间,2.5.1 名字空间的定义与使用 2.名字空间的使用 (2)使用using指令 格式如下: using 名字空间名; using 名字空间名:标识符; 第一种格式表示在当前范围内,可以直接使用指定名字空间中定义的变量和函数等,而不需要加名字空间的限定。 第二种格式表示在当前范围内,可以直接使用指定名字空间中指定的变量或函数

温馨提示

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

评论

0/150

提交评论