C程序设计教程与实验指导杨国兴C基础_第1页
C程序设计教程与实验指导杨国兴C基础_第2页
C程序设计教程与实验指导杨国兴C基础_第3页
C程序设计教程与实验指导杨国兴C基础_第4页
C程序设计教程与实验指导杨国兴C基础_第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转义字符

\"双引号\'单引号\\字符‘\’\a响铃\b退格\n换行

\r回车

\t水平制表\v垂直制表\0003位八进制数所代表的字符,如‘\101’代表‘A’\xhh2位16进制所代表的字符,如‘\x41’代表‘A’第2章C++基础2.1常量与变量2.1.1常量(续二)

(4)bool型常量

bool常量只有两个:true(真)、false(假)在内存中占有一个字节的存储空间

(5)字符串常量由一对双引号括起来的若干字符,如“abc”

字符串常量的末尾自动加入结束标志‘\0’,因此字符串在内存中占有的字节数为字符个数+1若字符串中包含特殊字符,如‘\’、回车、制表符等,也应以他们对应的转义字符形式表示第2章C++基础例2.1

检测基本数据类型所占的字节数#include<iostream.h>voidmain(){ 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<<"longdouble:"<<sizeof(longdouble)<<endl; cout<<"char:"<<sizeof(char)<<endl; cout<<"bool:"<<sizeof(bool)<<endl;}

返回第2章C++基础2.1常量与变量2.1.1常量(续三)

2.

符号常量:直接使用符号表示的常量值,包括宏定义和const定义的符号常量。

(1)宏定义语法形式:#define宏名字符串如:#definePI3.14

程序编译前会自动用字符串取代程序中出现的宏名(2)const定义语法形式:const类型说明符常量名=常量值;

如:constfloatpi=3.14;宏定义在预编译时,只进行简单的替换,不做语法检查宏定义没有数据类型,而const定义的符号常量是有数据类型的。第2章C++基础例2.2

使用符号常量#include<iostream.h>voidmain(){ #definePI3.14 constintA=10; cout<<PI*10*10<<'\n'; cout<<A+20<<'\n';}

返回第2章C++基础2.1常量与变量2.1.2变量

1.

变量的定义:程序运行中值可以被改变的量。变量必须先定义再使用。

变量定义的一般形式语法形式:数据类型变量名1,变量名2,…,变量名n;如:inta,b,c;

2.变量的初始化含义:定义变量的同时为其赋初值

两种形式:用赋值号(“=”)或用括号如:floata=3.14;或floata(3.14);第2章C++基础例2.3

从键盘输入n的值,计算从1到n的累加和。#include<iostream.h>voidmain(){ intn,sum=0; cin>>n; inti; for(i=1;i<=n;i++) sum+=i; cout<<sum<<'\n';}

返回第2章C++基础2.2指针与引用2.2.1指针1.地址与指针的概念

(1)内存地址计算机的内存储器被划分成一个个的存储单元,这些存储单元按一定的规则编号,这个编号就是存储单元的地址。每个存储单元的大小为一个字节,每个单元有一个唯一的地址。

(2)变量的地址在程序中定义的所有变量,都要分配相应的存储单元,不同类型的数据所需要的存储空间的大小不同。

系统分配给变量的内存空间的起始单元地址称为该变量的地址。

如:inta;

则0x3000为变量a的地址0x30000x30010x30020x3003第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<iostream.h>voidmain(){ inta,*p1; doubleb,*p2; charc,*p3; p1=&a; p2=&b; p3=&c; *p1=10; *p2=11.2; *p3='A'; cout<<a<<endl; cout<<b<<endl; cout<<c<<endl;}

程序运行结果为:1011.2A100x2000ap111.20x2004bp2A0x200Ccp3第2章C++基础例2.5输入a和b两个数,按从小到大的顺序输出#include<iostream.h>voidmain(){ inta,b; int*p1,*p2,*p; cout<<"请输入两个整数:"; cin>>a>>b; p1=&a; p2=&b; if(*p1>*p2) { p=p1; p1=p2; p2=p; } cout<<"min="<<*p1<<"max="<<*p2<<endl;}

程序运行结果为:请输入两个整数:3010min=10max=30&ap1&bp2p30a10b&bp1&ap2&ap30a10b第2章C++基础2.2指针与引用2.2.1指针3.指针作为函数的参数指针作为函数的参数,实际上传递的是变量的地址,进行的是地址传递。例2.6指针作为函数参数,被调函数中交换参数值#include<iostream.h>voidswap(int*x,int*y);voidmain(){inta,b;a=10;b=20;swap(&a,&b);cout<<a<<","<<b<<endl;}voidswap(int*x,int*y){inttemp;temp=*x;*x=*y;*y=temp;}第2章C++基础2.2指针与引用例2.6程序运行过程中变量值的变化分析yyb10ax20by&ax&b10temp20ax20by10temp&aax&bb10temp&a&btemp10a20&a&b2010(a)(b)(c)(d)程序运行结果为:20,10第2章C++基础2.2指针与引用2.2.2引用1.

引用的概念引用是一种特殊的变量,可以认为是一个变量的别名。

定义引用的一般格式:

类型说明符

&引用名=变量名;

如:inta=1;int&b=a;首先定义变量a,并初始化为1,然后定义引用b,并初始化为a,即b是a的别名,因此a和b是同一个单元。

注意:定义引用时一定要初始化,指明该引用变量是谁的别名。第2章C++基础例2.7引用的使用#include<iostream.h>voidmain(){inta=1;intc=10;int&b=a;cout<<a<<","<<b<<","<<c<<endl;b=c;cout<<a<<","<<b<<","<<c<<endl;b=20;cout<<a<<","<<b<<","<<c<<endl;}程序运行结果:1,1,1010,10,1020,20,10定义引用b,并将其作为a的别名将c的值赋给b,不是将b作为c的别名第2章C++基础2.2指针与引用2.2.2引用(续一)2.

引用作为函数的参数

例2.8写一个函数,用引用作为参数,交换函数中两个变量的值。

#include<iostream.h>voidswap(intx,inty);voidmain(){inta,b;a=10;b=20;swap(a,b);cout<<a<<","<<b<<endl;}voidswap(int&x,int&y){inttemp;temp=x;x=y;y=temp;}程序运行结果为:20,10第2章C++基础2.2指针与引用2.2.2引用(续二)例2.8程序运行过程中参数值的变化图示10axby20axby10temp20axby10temp10axby10temp20202010注意:引用作参数时,函数的实参与形参在内存中共用存储单元,因此形参的变化会使实参同时变化。

返回第2章C++基础2.3动态内存分配在程序运行过程中根据需要动态分配存储空间,不需要时还可以将空间释放,通过new和delete运算符实现。

1.动态分配一个数据的存储空间通过new运算符实现动态分配内存,格式如下:

new类型名(初值)

如:int*p1,*p2;p1=newint(10);p2=newint;运算符delete用来释放由运算符new动态分配的存储空间。使用格式如下:

delete指针名;

如:deletep1;第2章C++基础2.3动态内存分配2.动态分配多个连续的数据存储空间通过new运算符动态分配数组,格式如下:

new类型名[整型表达式]

如:int*p1;p1=newint[10];用delete删除动态数组时,要在指针前加“[]”。格式如下:

delete[]指针名;

如:delete[]p1;第2章C++基础例2.9动态内存分配的使用#include<iostream.h>voidmain(){ int*p1,*p2; p1=newint(10); p2=newint[10]; inti; for(i=0;i<10;i++) *(p2+i)=i; cout<<*p1<<endl; for(i=0;i<10;i++) cout<<*(p2+i)<<""; cout<<endl; for(i=0;i<10;i++) cout<<p2[i]<<“”;//p2[i]与*(p2+i)所访问的数据相同 cout<<endl;deletep1; delete[]p2;}

程序运行结果为:1001234567890123456789

p212345678910

返回第2章C++基础2.4位运算符2.4.1位运算符

C++使用位运算符可以对数据按二进制位进行操作。

1.

按位与(&):将两个操作数对应的每一位分别进行逻辑与如:9&79:000010017:000001119&7:00000001

9&7结果为12.

按位或(|):将两个操作数对应的每一位分别进行逻辑或3.

按位异或(^):将两个操作数对应的每一位分别进行异或第2章C++基础2.4位运算符2.4.1位运算符(续)

4.

按位取反(~):单目运算符,对二进制的每一位取反5.

左移位(<<):使运算符左侧的操作数的各位左移指定位数,低位补0,高位溢出部分舍弃。如7<<2结果为28。6.

右移位(>>):使运算符左侧操作数的各位右移指定位数,溢出的低位舍弃,对无符号数和有符号中的正数,高位补0,对于有符号数中的负数,有些系统补0(称为逻辑右移),有些系统补1(称为算术右移)。如7>>2的结果是1。000001117000111007<<2第2章C++基础2.4位运算符2.4.2位运算符应用举例

例2.10输入变量a,b的值,并将变量a的低4位置为0,将变量b的低4位置为1。#include<iostream.h>voidmain(){ inta,b; cin>>a; cin>>b; a=a&(~0xf); b=b|0xf; cout<<a<<endl; cout<<b<<endl;}0xf为十六进制数,它的后四位为1,其他位均为0。取反后后四位为0,其他位均为1。若输入25和23,程序执行结果为:1631

返回第2章C++基础2.5名字空间2.5.1名字空间的定义与使用

1.名字空间的定义

namespace名字空间名{…………}

例:

namespaceNameSpace1{inta;intf1(){……}floatf2(){……}}(1)名字空间只能在全局范围那定义,但名字空间是可以嵌套的。(2)一个名字空间可以用另一个名字作为它的别名。例如使用ns1作为上述名字空间NameSpace1的别名,可以用下面的语法:namespacens1=NameSpace1;第2章C++基础2.5名字空间2.5.1名字空间的定义与使用2.名字空间的使用(1)使用域运算符格式如下:名字空间名::标识符例如下面一行程序,可以访问名字空间NameSpace1中的变量a和函数f1()。NameSpace1::a=NameSpace1::f1();

第2章C++基础例2.11名字空间的定义与使用#include<iostream.h>namespacens1{intfun(intx,inty);}namespacens2{intfun(intx,inty);namespacens3{ intfun(intx,inty);}}intns1::fun(intx,inty){returnx+y;}intns2::fun(intx,inty){returnx*y;}intns2::ns3::fun(intx,inty){returnx-y;}voidmain(){cout<<ns1::fun(3,4)<<endl;cout<<ns2::fun(3,4)<<endl;cout<<ns2::ns3::fun(3,4)<<endl;}程序运行结果:712-1第2章C++基础2.5名字空间2.5.1名字空间的定义与使用2.名字空间的使用(2)使用using指令格式如下:

using名字空间名;using名字空间名::标识符;第一种格式表示在当前范围内,可以直接使用指定名字空间中定义的变量和函数等,而不需要加名字空间的限定。第二种格式表示在当前范围内,可以直接使用指定名字空间中指定的变量或函数,而不需要加名字空间的限定。第2章C++基础例2.12

使用using指令#include<iostream.h>namespacens1{ intfun1(intx,inty); intfun2(intx,inty); intfun3(intx,inty); intfun1(intx,inty) { returnx+y; } intfun2(intx,inty) { returnx-y; } intfun3(intx,inty) { returnx*y; }}usingnamespacens1;voidmain(){ cout<<fun1(3,4)<<endl; cout<<fun2(3,4)<<endl; cout<<fun3(3,4)<<endl;}程序运行结果:7-112第2章C++基础2.5名字空间2.5.2C++标准库C++标准库就被所有的C++编译器支持,所有标准C++的库都包含在一个单一的名字空间std中。为了使用C++的标准库,可以使用以下指令:

usingnamespacestd;例:使用标准库的程序#include<iostream>usingnamespacestd;voidmain(){cout<<“本例使用标准库”<<endl;}注意:由于iostream和iostream.h都定义了cout,因此不能同时包含这两个文件,否则将产生二义性。第2章C++基础谢谢!2.1常量与变量2.1.1常量(续一)

(3)字符型常量以单引号括起来的单个字符:如‘a’、‘3’、‘*’

转义字符:键盘不便于直接输入的字符,如回车符、制表符等,通常以“\”开头表2.3转义字符

\"双引号\'单引号\\字符‘\’\a响铃\b退格\n换行

\r回车

\t水平制表\v垂直制表\0003位八进制数所代表的字符,如‘\101’代表‘A’\xhh2位16进制所代表的字符,如‘\x41’代表‘A’第2章C++基础例2.1

检测基本数据类型所占的字节数#include<iostream.h>voidmain(){ 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<<"longdouble:"<<sizeof(longdouble)<<endl; cout<<"char:"<<sizeof(char)<<endl; cout<<"bool:"<<sizeof(bool)<<endl;}

返回第2章C++基础例2.5输入a和b两个数,按从小到大的顺序输出#include<iostream.h>voidmain(){ inta,b; int*p1,*p2,*p; cout<<"请输入两个整数:"; cin>>a>>b; p1=&a; p2=&b; if(*p1>*p2) { p=p1; p1=p2; p2=p; } cout<<"min="<<*p1<<"max="<<*p2<<endl;}

程序运行结果为:请输入两个整数:3010min=10max=30&ap1&bp2p30a10b&bp1&ap2&ap30a10b第2章C++基础例2.9动态内存分配的使用#include<iostream.h>voidmain(){ int*p1,*p2; p1=newint(10); p2=newint[10]; inti; for(i=0;i<10;i++) *(p2+i)=i; cout<<*p1<<endl; for(i=0;i<10;i++) cout<<*(p2+i)<<""; cout<<endl; for(i=0;i<10;i++) cout<<p2[i]<<“”;//p2[i]与*(p2+i)所访问的数据相同 cout<<endl;deletep1; delete[]p2;}

程序运行结果为:1001234567890123456789

p212345678910

返回第2章C++基础2.4位运算符2.4.1位运算符

C++使用位运算符可以对数据按二进制位进行操作。

1.

按位与(&):将两个操作数对应的每一位分别进行逻辑与如:9&79:000010017:000001119&7:00000001

9&7结果为12.

按位或(|):将两个操作数对应的每一位分别进行逻辑或3.

按位异或(^):将两个操作数对应的每一位分别进行异或第2章C++基础2.4位运算符2.4.1位运算符(续)

4.

按位取反(~):单目运算符,对二进制的每一位取反5.

左移位(<<):使运算符左侧的操作数的各位左移指定位数,低位补0,高位溢出部分舍弃。如7<<2结果为28。6.

右移位(>>):使运算符左侧操作数的各位右移指定位数,溢出的低位舍弃,对无符号数和有符号中的正数,高位补0,对于有符号数中的负数,有些系统补0(称为逻辑右移),有些系统补1(称为算术右移)。如7>>2的结果是1。000001117000111007<<2第2章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

温馨提示

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

评论

0/150

提交评论