C++笔记完美版适合初学者.docx

上传人:b****8 文档编号:10865731 上传时间:2023-02-23 格式:DOCX 页数:102 大小:58.56KB
下载 相关 举报
C++笔记完美版适合初学者.docx_第1页
第1页 / 共102页
C++笔记完美版适合初学者.docx_第2页
第2页 / 共102页
C++笔记完美版适合初学者.docx_第3页
第3页 / 共102页
C++笔记完美版适合初学者.docx_第4页
第4页 / 共102页
C++笔记完美版适合初学者.docx_第5页
第5页 / 共102页
点击查看更多>>
下载资源
资源描述

C++笔记完美版适合初学者.docx

《C++笔记完美版适合初学者.docx》由会员分享,可在线阅读,更多相关《C++笔记完美版适合初学者.docx(102页珍藏版)》请在冰豆网上搜索。

C++笔记完美版适合初学者.docx

C++笔记完美版适合初学者

C++笔记(day02)2007-3-23

1、%ldd可行文件的名字;---可查看连接库

2、C++严格区分大小写,变量命名只能使用字母,数字,或下划线,第一个字母必须使用字母或下划线

3、float单精度,double双精度

sizeof(int)---返回int在内存中占的大小

size(bool)=1

size(char)=1

size(short)=2

size(int)=4

size(long)=4

size(float)=4

size(double)=8

无符号的数据一旦溢出,将成为0。

有符号的int最大值2147483647,益处变为最小值,负数

4、不同数据间赋值:

有兼容性的,占空间小的数据类型,可以给占空间大的数据类型赋值

不兼容的,可能会造成数据丢失。

int->float可以转换;float->int小数部分丢失

5、运算符要求数据类型要相同

i++先用后加++i先加后用布尔运算符号:

结果真或假

逻辑运算符:

做bool运算!

(1)“与”运算&&,两条件要同时成立

(2)“或”运算||,只要有一个条件是真,就成立

6、按位与“&”有0则与的结果为0

按位或“|”有1则或的结果为1

按位异或“^”两位不同则为1,相同为0

7、左移“<<"左移1相当于乘以2

右移“>>"右移1相当于除以2

8、三目运算符条件?

真:

9、返回变量---表达式可以再次赋值,赋值语句返回变量本身eg:

(a=10)=20

返回变量的值---不可再次赋值eg:

(a+5)=10

左值:

变量、赋值表达式,++i的返回值是左值

右值:

不能放在“=”左边的是右值,i++的返回值是右值

常量要在声明时就赋值,并且不能修改

10、流程控制

while(条件){循环体}条件成立,则进入循环,知道条件为假时,退出循环

(1)声明循环变量

(2)while()确定循环条件

(3)循环变量要有所变化,避免形成死循环

for(变量初始化;条件;变量的变化){循环体代码}

开始时判断循环条件是否成立,循环结束后,到第三个条件,使用变量改变

do{循环体}while(条件);

先执行一次,再判断条件,选择是否继续执行循环

break;跳出循环,执行循环之外的下一条语句

continue;从次处开始,结束本次循环,进行下一次循环

11、课堂练习---求1到100之间的所有素数

C++笔记(day03)2007-03-26

1、cin输入流一旦破坏,就不能恢复

2、函数:

一段相关代码组成的集合,以便完成一个特定的目的。

(1)可以通过名字来使用,曾强了代码的可重用性。

(2)提高可维护性。

3、函数定义=声明+函数体:

<返回类型>函数名(<参数表>...){

return...}

函数返回值:

只有在调用函数的同时才能保存返回值

函数定义时,小括号里的参数称为形参,在函数被调用的时候才有意义。

函数调用时,小括号里的被传入的参数称为实参。

4、函数在调用之前只有声明就可以,因为在编译阶段,参照声明可以完成语法上的检测。

函数声明<返回类型>函数名(<参数表>...);

声明与定义的分离,实现并行开发!

5、全局变量,局部变量

局部变量:

函数内部声明的变量,只能在它声明的函数内部使用。

如果没有对其初始化就使用,则其值为垃圾数字。

全局变量:

能被所有的函数共同使用,要声明在所有函数(包括main函数)之外。

尽量少使用,影响太大。

如果没有对其初始化就使用,系统默认为其初始化为0。

6、数据区:

只存放全局数据,数据区的数据是稳定的,程序启动时,即创建,程序结束时,才消失

堆区

代码区

栈区:

存储局部变量。

插入数据从栈顶插入,先进后出结构。

如果函数不调用的话,局部变量是不存在的

在main函数与其他函数之间有个标记,一旦函数返回,栈顶下落到标记处

栈中的数据是变化频繁的

函数调用时创建,函数返回即消失

7、值传递

函数调用并不是传递实参本身,而是创建一个临时变量传到函数中

(1)为形参创建一个临时变量,临时变量的值是拷贝实参的值

(2)对形参的使用,实际上是对临时变量的使用,不会改变实参的大小

8、默认参数

(1)area(floata,floatb=10);当只传递一个参数时,形参b的位置默认为10

(2)有默认值的形参靠右摆放

9、内联函数

声明时加“inline”,运行效率高,不支持结构控制语句,必须先定义,不支持函数原形。

10、递归函数

在函数内部自己调用自己。

必须有明确的返回条件----递归的出口

11、函数重载

(1)函数名相同。

(2)参数表不同(参数个数不同,参数类型不同,参数顺序不同)。

(3)与参数名和返回类型不关

调用时会根据参数表匹配自动调用相应的函数

编译之后,函数的名字都会发生改变,后面会加上形参缩写作为后缀,没有任何函数的名字是一样的

不会做自动类型提升

对重载的函数最好不使用参数默认值

12、const

在函数内部不允许修改此形参

13、需求分析、设计、代码实现

多文件示例:

=========================================

chang.h

=========================================

charchange(char);

=========================================

chang_impl.cc

=========================================

charchange(charc){

if(c>=97&&c<=122){

returnc-32;

}elseif(c>=65&&c<=90){

returnc+32;

}else{

returnc;

}

}

=========================================

main.cc

=========================================

#include

#include"change.h"

usingnamespacestd;

intmain(){

charc='0';

while

(1){

cout<<"enterachar[0exit]>";

cin>>c;

if(c=='0'){

break;

}

cout<<"====>"<

}

return0;

}

===========================================

14、外部变量和内部变量

外部变量:

externintg;----声明外部变量,引入一个变量,在别的源程序中声明

内部变量:

在源文件中声明的变量

外部变量肯定是一个全局变量!

作用域生命周期存储位置

全局变量(外部变量)所有函数程序启动->程序结束数据区Data

局部变量函数内部函数开始调用->函数返回栈Stack

静态局部函数中第一次调用函数时(只被初始化一次)->程序结束数据区---只需要一份数据,并且不希望别的函数访问他

静态全局本源文件中程序开始->程序结束数据区

作业:

实现银行业务=========a.cc==================

longid;

intpassword;

doublebalance;

long(id)create(balance,password);//创建账户

voidsave(sum);

int(staus0,-1)withdraw(sum,password);

floatquery();

===================================

generatorId();//得到唯一的ID号

intshowMenu();//现实主菜单

saveMenu();//收集开户信息,然后调用创建账户

createMenu();

withdrawMenu();

queryMenu();

===================================

***今日重点:

(1)形参和实参的区别

(2)递归

(3)函数重载

练习:

观察费波拉切数列1,1,2,3,5,8,13,21,34......第一项和第二项都是1,后面的每一项是前面相邻两项的和。

使用递归方法计算第n项的费波拉切数列结果。

C++笔记2007-03-27

1、程序由函数组成,函数只完成自己特定的功能即可

把函数声明写在头文件里(想使用函数时,可直接导入头文件,调用函数),把函数实现写在".cc"文件中

把多个".cc"文件编译成可执行文件->分别编译成".o"文件,再连接到一起

2、值传递

函数中的参数传递是值传递,形参只是实参的一份拷贝数据,在函数中改变形参的值,对实参无影响

3、作业分析:

显示层(与用户的交互)

操作数据(完成业务逻辑)biz层

数据(id,password,balance)

Bank实现代码

================================================================

biz.cc

================================================================

//operation

/*p:

Passwordofaccount.

*b:

balanceofaccount.

*return:

idofaccount.

*/

longcreate(intp,doubleb);

voidsave(doublesum);

/*

*return:

0success,otherwise-1returned.

*/

intwithdraw(intp,doublesum);

doublequery(intp);

longgenerateId();

================================================================

biz.cc

================================================================

staticlongid;

staticintpasswd;

staticdoublebalance;

#include

usingnamespacestd;

longgenerateId(){

staticintid=1;

returnid++;

}

longcreate(intp,doubleb){

id=generateId();

passwd=p;

balance=b;

returnid;

}

voidsave(doublesum){

balance+=sum;

}

intwithdraw(intp,doublesum){

if(p!

=passwd){

cout<<"invalidpassword."<

return-1;

}

if(balance<(sum+10)){

cout<<"noenoughmoney."<

return-1;

}

balance-=sum;

return0;

}

doublequery(intp){

if(p!

=passwd){

cout<<"invalidpassword"<

return-1;

}else{

returnbalance;

}

}

================================================================

menu.h

================================================================

intshowMenu();

voidcreateMenu();

voidsaveMenu();

voidwithdrawMenu();

voidqueryMenu();

================================================================

menu.cc

================================================================

#include"biz.h"

#include

usingnamespacestd;

intshowMenu(){

cout<<"create------>1"<

cout<<"save------>2"<

cout<<"withdraw---->3"<

cout<<"query------->4"<

cout<<"exit-------->0"<

cout<<"enteryourchoice>";

intc;

cin>>c;

if(!

cin){

return-1;

}else{

returnc;

}

}

voidcreateMenu(){

intpasswd;

doublebalance;

cout<<"\tenterpassword>";

cin>>passwd;

cout<<"\tenterbalance>";

cin>>balance;

longid=create(passwd,balance);

cout<<"======================"<

cout<<"createaccountok,id="<

cout<<"======================"<

}

voidsaveMenu(){

doublesum;

cout<<"\tentersum>";

cin>>sum;

save(sum);

cout<<"======================"<

cout<<"savemoneyok"<

cout<<"======================"<

}

voidwithdrawMenu(){

intpasswd;

doublesum;

cout<<"\tenterpassword>";

cin>>passwd;

cout<<"\tentersum>";

cin>>sum;

intret=withdraw(passwd,sum);

if(ret==0){

cout<<"========================"<

cout<<"withdrawsuccessful."<

cout<<"========================"<

}

}

voidqueryMenu(){

intpasswd;

cout<<"\tenterpassword>";

cin>>passwd;

doubleret=query(passwd);

if(ret!

=-1){

cout<<"============================"<

cout<<"BLANCE:

$"<

cout<<"============================"<

}else{

cout<<"============================"<

cout<<"invalidpassword"<

cout<<"============================"<

}

}

================================================================

main.cc

================================================================

#include

#include"menu.h"

usingnamespacestd;

intmain(){

intc=0;

do{

c=showMenu();

if(c==-1){break;}

switch(c){

case1:

createMenu();

break;

case2:

saveMenu();

break;

case3:

withdrawMenu();

break;

case4:

queryMenu();

break;

case0:

cout<<"===================="<

cout<<"GoodBye"<

cout<<"===================="<

break;

default:

cout<<"===================="<

cout<<"invalidoption,tryagain.";

cout<

cout<<"===================="<

break;

}

}while(c!

=0);

return0;

}

================================================================

4、数组

(1)声明数组<元素类型>数组名[元素个数]intintArray[100];-->intArray是个集合,有100个元素,每个元素都是int类型的

(2)初始化数组

(3)使用通过数组的下标来访问数组中的元素,下标从0开始intArray[0]=100;-->intArray数组中的第一个元素赋值为100

数组声明时,元素个数必须是常量表达式

数组声明带有初始化,则可直接为数组赋值

在数组声明时,必须指明数组长度,若在声明时候初始化,数组长度可省

inta1[2]={100,200};长度2

inta2[]={5,6,7};长度3

对于数组中的元素个数,比声明时的多,则会报错,这样的越界访问,对整个程序来说会有很严重的后果!

比声明少,系统会把余下的没有定义数据的元素初始化为0

不初始化的数组,其中的元素数据为随机数

下标工作的原理:

表示编号,还表示当前元素相对于数组起始位置的偏移量

计算机通过偏移量找到元素在内存中的位置

5、数组的排序

选择排序:

找出最小的放在第一个位置

数组元素有n个,需要找n-1次,需要比较n-i次(i为开始元素的位置)

6、多维数组

二维数组;一个数组中的每个元素是个数组

声明:

intiA[5][10];-->“5”代表数组有5行,“10”代表数组有10列

声明时,第一维可以省略!

确定一个元素需要2个下标

7、结构

用户自己定义的一组数据类型

声明结构时,编译器不会分配空间,在声明一个结构的变量的时候才会为其分配空间

结构中的成员是多个简单类型组成的

用“结构名.成员名”来操作其中的成员变量

strcpy(p.name,"huxz");为char数组赋值

结构类型的变量间也可以相互赋值

结构的大小就是所有成员的大小之和(每个成员的大小必须是int类型的整倍数,当不够时,会自动补齐)

Unix上还要求,结构的大小是结构的最大的成员的整倍数

size(of)计算结构大小

作业:

把银行系统用结构改写,要求可以开多个账户(定义一个account类型的数组保存)

structaccount{

longid;

intpassword;

doublebalance;

}

create(intpassword,doublebalance);

voidsave(intid,doublesum);

intwithdraw(intid,intpassword,doublesun);

doublequery(intid,intpassword);

C++笔记2007年3月28日

1、变量的存储

(1)内存是一块空间,把其中的每个字节做了编号,为了以后计算机能通过编号找到数据

(2)编址方式:

绝对编址(在整个程序中使用),相对编址(字节相对于逻辑0偏移量,在进程中使用)

2、取变量地址

(1)"&"&i表示取内存中i的地址

地址的编址用十六进制表示

(2)逻辑0在代码区

全局变量在数据区,地址的编址是大于0的

局部变量在栈区,地址的编址是小于0的

3、数组、结构的地址

(1)数组中的数据在内存中是连续存储的。

数组中每个元素的地址相差的值应为数组元素类型的大小。

(2)结构的地址:

结构的空间是连续的。

结构的起始地址与第一个成员变量的地址是一样的。

4、存储地址—

指针:

存储变量的地址

指针的类型由将要保存的地址的变量类型决定

int*只能保存int变量的地址

指针赋值一定要是同类型的指针才能相互赋值!

5、指针的运算

(1)指针和指针之间的运算

“+”,“*”,“/”指

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 经济学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1