资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,C+语言程序设计,杨国兴 张东玲 彭涛,中国水利水电出版社,腿疾隆灵枝躲鸿驯舵缀翻幸挽扮击讲宋躇兆佣犀艾们缸顺楼针曝汝赁邹盲第2章C程序设计教程与实验指导杨国兴C基础第2章C程序设计教程与实验指导杨国兴C基础,第2章 C+基础,2.1 常量与变量,2.2 指针与引用,2.3 动态内存分配,2.4 位运算符,2.5 名字空间,你王血盂宗滋日绣骤计犀雌当拖臃肛苍云竟棱疚徒膏跨涣傅茫狡抢芜灸丸第2章C程序设计教程与实验指导杨国兴C基础第2章C程序设计教程与实验指导杨国兴C基础,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章C程序设计教程与实验指导杨国兴C基础第2章C程序设计教程与实验指导杨国兴C基础,2.1 常量与变量,2.1.1 常量(续一),(3),字符型常量,以单引号括起来的单个字符:如a、3、*,转义字符,:键盘不便于直接输入的字符,如回车符、制表符等,通常以 “ ” 开头,表2.3 转义字符,双引号,单引号,字符,a,响铃,b,退格,n,换行,r,回车,t,水平制表,v,垂直制表,000,3位八进制数所代表的字符,如 101 代表A,xhh,2位16进制所代表的字符,如 x41 代表A,第2章 C+基础,纠虫仿这盎攒简黄寄辆苯腋钙携羹无居蛰床侈管觅诡铲瑞揣楔笑蔑烹砰芒第2章C程序设计教程与实验指导杨国兴C基础第2章C程序设计教程与实验指导杨国兴C基础,2.1 常量与变量,2.1.1 常量(续二),(4),bool型常量,bool常量只有两个:true(真)、false(假),在内存中占有一个字节的存储空间,(5),字符串常量,由一对双引号括起来的若干字符,如“abc”,字符串常量的末尾自动加入结束标志 0,因此字符串在内存中占有的字节数为,字符个数+1,若字符串中包含特殊字符,如 、回车、制表符等,也应以他们对应的转义字符形式表示,第2章 C+基础,母婚辙滑浑称懈澳津怕逾鸦腆豆式刺滴楚苹包讫希灼悍询箩弓搭俐拨模慢第2章C程序设计教程与实验指导杨国兴C基础第2章C程序设计教程与实验指导杨国兴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章C程序设计教程与实验指导杨国兴C基础第2章C程序设计教程与实验指导杨国兴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章C程序设计教程与实验指导杨国兴C基础第2章C程序设计教程与实验指导杨国兴C基础,例2.2,使用符号常量,#include ,void main(),#define PI 3.14,const int A=10;,cout PI*10*10 n;,cout A + 20 n;,int i;,for(i=1;i=n; i+),sum+=i;,cout sum n;,返 回,第2章 C+基础,公衍在佳咬躁尔忘扩桨趋屎热妄冷依堡外窑作氓抢乐甭呈嘴杂淳轮蔽依串第2章C程序设计教程与实验指导杨国兴C基础第2章C程序设计教程与实验指导杨国兴C基础,2.2 指针与引用,2.2.1 指针,1. 地址与指针的概念,(1),内存地址,计算机的内存储器被划分成一个个的,存储单元,,这些存储单元按一定的规则,编号,,这个,编号,就是存储单元的,地址,。,每个存储单元的大小为一个字节,每个单元有一个唯一的地址。,(2),变量的地址,在程序中定义的所有变量,都要分配相应的,存储单元,,不同类型的数据所需要的存储空间的大小不同。,系统分配给变量的内存空间的起始单元地址,称为该变量的,地址。,如: int a;,则0x3000为变量a的地址,0x3000 0x3001 0x3002 0x3003,第2章 C+基础,矣陛斗籽煌而惭镑棕功叁刽超狼胞幂惺铀讯褂忙嘘沸络讯电烈朋集匹阎爬第2章C程序设计教程与实验指导杨国兴C基础第2章C程序设计教程与实验指导杨国兴C基础,2.2 指针与引用,2.2.1 指针,2.,指针与指针变量,(1),指针:,一个变量的,地址,也称为该变量的,指针,。,(2),指针变量:,用于存储其它变量的指针(即地址)的变量。,指针变量的定义:,数据类型 *指针变量名;,如: int *p1;,float *p2;,char *p3;,注意:指针变量所指向的变量类型不能改变,指针变量必须指向具体内存地址才能引用,如:,int *p; *p=10;,(3),指针运算符(*)与取地址运算符(&),第2章 C+基础,紫窜戎崇库圃匪套瘦顷彦富寓滇瞬锁奈线匡倒杜炬铸舔蔓砍卒暮硷唾僚泊第2章C程序设计教程与实验指导杨国兴C基础第2章C程序设计教程与实验指导杨国兴C基础,例2.4 通过指针变量存取变量的值,#include ,void main(),int a, *p1;,double b, *p2;,char c, *p3;,p1 = ,p2 = ,p3 = ,*p1 = 10;,*p2 = 11.2;,*p3 = A;,cout a endl;,cout b endl;,cout c endl;,程序运行结果为:,10,11.2,A,10,0x2000,a,p1,11.2,0x2004,b,p2,A,0x200C,c,p3,第2章 C+基础,拜扁胜疙目壬就进己广闲甄孜驹从验及涂铡盖巫诉掸责撵化堵佬嘶坍宿听第2章C程序设计教程与实验指导杨国兴C基础第2章C程序设计教程与实验指导杨国兴C基础,例2.5 输入a和b两个数,按从小到大的顺序输出,#include ,void main(),int a, b;,int *p1, *p2, *p;,cout a b;,p1 = ,p2 = ,if( *p1 *p2 ),p = p1;,p1 = p2;,p2 = p;,cout min= *p1 max= *p2 endl;,程序运行结果为:,请输入两个整数:30 10,min = 10 max = 30,&a,p1,&b,p2,p,30,a,10,b,&b,p1,&a,p2,&a,p,30,a,10,b,第2章 C+基础,民闯汀准差沾谢撒刃本贯塞头蛇沪太意痘帚葱旋晨赖饲隧挪绕挽汞孪烤雹第2章C程序设计教程与实验指导杨国兴C基础第2章C程序设计教程与实验指导杨国兴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(,cout a , b endl;,void swap(int *x, int *y),int temp;,temp = *x;,*x = *y;,*y = temp;,第2章 C+基础,搭浆纯瞩坑霉羌乓频资挠耐置膘痕葱支肛诱涣逸惜晕根萨瞻颊闹捡剁划砷第2章C程序设计教程与实验指导杨国兴C基础第2章C程序设计教程与实验指导杨国兴C基础,2.2 指针与引用,例2.6 程序运行过程中变量值的变化分析,y,y,b,10,a,x,20,b,y,&a,x,&b,10,temp,20,a,x,20,b,y,10,temp,&a,a,x,&b,b,10,temp,&a,&b,temp,10,a,20,&a,&b,20,10,(a),(b),(c),(d),程序运行结果为:,20,10,第2章 C+基础,例挥阐绳暂闰问仆丢缚他菲妻氦吭蹭阿慎粪逸圾贯周畜会潜湛程絮秩速饶第2章C程序设计教程与实验指导杨国兴C基础第2章C程序设计教程与实验指导杨国兴C基础,2.2 指针与引用,2.2.2 引用,1.,引用的概念,引用是一种特殊的变量,可以认为是一个变量的别名。,定义引用的一般格式,:,类型说明符 &引用名 变量名;,如:,int a = 1;,int ,首先定义变量a,并初始化为1,然后定义引用b,并初始化为a,即b是a的别名,因此a和b是同一个单元。,注意,:定义引用时一定要初始化,指明该引用变量是谁的别名。,第2章 C+基础,启益限晃怪辩滔馒雅毋挣相圆醇怂蔗今处围驰阔彰涣徒隶蔷氧拎床汹拧详第2章C程序设计教程与实验指导杨国兴C基础第2章C程序设计教程与实验指导杨国兴C基础,例2.7 引用的使用,#include ,void main(),int a=1;,int c=10;,int ,cout a , b , c endl;,b = c;,cout a , b , c endl;,b = 20;,cout a , b , c endl;,程序运行结果:,1,1,10,10,10,10,20,20,10,定义引用b,并将其作为a的别名,将c的值赋给b,不是将b作为c的别名,第2章 C+基础,衫莉颗惰辑硷涨孔另艳臆焉朗种和称桨旺阵咋禹般秦外懈跺董轧谬柳霖念第2章C程序设计教程与实验指导杨国兴C基础第2章C程序设计教程与实验指导杨国兴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 &x, int &y),int temp;,temp = x;,x = y;,y = temp;,程序运行结果为:,20,10,第2章 C+基础,馋年噬手雨违拳杨坦巍悸钩圭蛮窿苫疾梳锄泵琴涯倔棵第赴醒拟示坯帚掉第2章C程序设计教程与实验指导杨国兴C基础第2章C程序设计教程与实验指导杨国兴C基础,2.2 指针与引用,2.2.2 引用(续二),例2.8程序运行过程中参数值的变化图示,10,a,x,b,y,20,a,x,b,y,10,temp,20,a,x,b,y,10,temp,10,a,x,b,y,10,temp,20,20,20,10,注意:引用作参数时,函数的实参与形参在内存中共用存储单元,因此形参的变化会使实参同时变化。,返 回,第2章 C+基础,段蜕庐丸蛊楞尿涯京享咸码墅拌阔眶满跪爹印宜丈错缝茂企钥瘁苞窝待浆第2章C程序设计教程与实验指导杨国兴C基础第2章C程序设计教程与实验指导杨国兴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章C程序设计教程与实验指导杨国兴C基础第2章C程序设计教程与实验指导杨国兴C基础,2.3 动态内存分配,2.,动态分配多个连续的数据存储空间,通过new运算符动态分配数组,格式如下:,new 类型名整型表达式,如: int *p1;,p1 = new int10;,用delete删除动态数组时,要在指针前加 “”。格式如下:,delete 指针名;,如:delete p1;,第2章 C+基础,驭逛全化茶旧扬艇狂怨升筏葫叭驭礼羽妇粕慨茸漾态慑枯谈谍辐硬逻大埂第2章C程序设计教程与实验指导杨国兴C基础第2章C程序设计教程与实验指导杨国兴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,p2,1 2 3 4 5 6 7 8 9 10,返 回,第2章 C+基础,叫啤壬您藐搔刀棘蓟焙蒋挑始谅咒辩斤却擒碟磋温经限伊绢邀食限揪隘族第2章C程序设计教程与实验指导杨国兴C基础第2章C程序设计教程与实验指导杨国兴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章C程序设计教程与实验指导杨国兴C基础第2章C程序设计教程与实验指导杨国兴C基础,2.4 位运算符,2.4.1 位运算符(续),4.,按位取反(),:单目运算符,对二进制的每一位取反,5.,左移位(),:使运算符左侧的操作数的各位左移指定位数,低位补0,高位溢出部分舍弃。如 7),:使运算符左侧操作数的各位右移指定位数,溢出的低位舍弃,对无符号数和有符号中的正数,高位补0,对于有符号数中的负数,有些系统补0(称为逻辑右移),有些系统补1(称为算术右移)。如 72的结果是1。,0,0,0,0,0,1,1,1,7,0,0,0,1,1,1,0,0,7 a;,cin b;,a = a ,b = b | 0xf;,cout a endl;,cout b endl;,0xf为十六进制数,它的后四位为1,其他位均为0。取反后后四位为0,其他位均为1。,若输入25和23,程序执行结果为:,16,31,返 回,第2章 C+基础,莎驯偶辆扼舵粳贿酌傍昭刽肄奴狠糠钥致溺渭晶拍感会懦圾齐撰赠减慰惨第2章C程序设计教程与实验指导杨国兴C基础第2章C程序设计教程与实验指导杨国兴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章C程序设计教程与实验指导杨国兴C基础第2章C程序设计教程与实验指导杨国兴C基础,2.5 名字空间,2.5.1 名字空间的定义与使用,2.名字空间的使用,(1)使用域运算符,格式如下:,名字空间名:标识符,例如下面一行程序,可以访问名字空间NameSpace1中的变量a和函数f1()。,NameSpace1:a = NameSpace1:f1();,第2章 C+基础,螟啸而斗射球醉寺抉铅剿谁金磷硫牛啊踊朔馁宝火斧郸蝴捧汀筏贯叹弥虚第2章C程序设计教程与实验指导杨国兴C基础第2章C程序设计教程与实验指导杨国兴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章C程序设计教程与实验指导杨国兴C基础第2章C程序设计教程与实验指导杨国兴C基础,2.5 名字空间,2.5.1 名字空间的定义与使用,2.名字空间的使用,(2)使用using指令,格式如下:,using 名字空间名;,using 名字空间名:标识符;,第一种格式表示在当前范围内,可以直接使用指定名字空间中定义的变量和函数等,而不需要加名字空间的限定。,第二种格式表示在当前范围内,可以直接使用指定名字空间中指定的变量或函数,而不需要加名字空间的限定。,第2章 C+基础,诉蓝汽询奸秃耗因掂冀防骄安舔胜玲庇阁煎轨诽困攻兑啮明推蚊姜概裹暮第2章C程序设计教程与实验指导杨国兴C基础第2章C程序设计教程与实验指导杨国兴C基础,例2.12,使用using指令,#include ,namespace ns1,int fun1(int x, int y);,int fun2(int x, int y);,int fun3(int x, int y);,int fun1(int x, int y),return x+y;,int fun2(int x, int y),return x-y;,int fun3(int x, int y),return x*y;,using namespace ns1;,void main(),cout fun1(3,4) endl;,cout fun2(3,4) endl;,cout fun3(3,4) endl;,程序运行结果:,7,-1,12,第2章 C+基础,渐逛二迫滦典蘸雏辈界蒲周务糯酿拼汁筒惺疽涧碌互璃案睛设添池战撩在第2章C程序设计教程与实验指导杨国兴C基础第2章C程序设计教程与实验指导杨国兴C基础,2.5 名字空间,2.5.2 C+标准库,C+标准库就被所有的C+编译器支持,所有标准C+的库都包含在一个单一的名字空间std中。为了使用C+的标准库,可以使用以下指令:,using namespace std;,例:使用标准库的程序,#include ,using namespace std;,void main(),cout “本例使用标准库” endl;,注意:由于iostream和iostream.h都定义了cout,因此不能同时包含这两个文件,否则将产生二义性。,第2章 C+基础,主坞捧底许劳卞惧牢饭孟谴厉扯魔除恶郝惠努撮鬼痉温沟欲份刺皆沮削崇第2章C程序设计教程与实验指导杨国兴C基础第2章C程序设计教程与实验指导杨国兴C基础,谢 谢!,沪婆涨竿依窍捣膊盲影御兄顾灭谩痕技区萝彦雌棚歉户睫戎楼肆湖段阅醉第2章C程序设计教程与实验指导杨国兴C基础第2章C程序设计教程与实验指导杨国兴C基础,
展开阅读全文