C++.docx
- 文档编号:7922644
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:65
- 大小:48.75KB
C++.docx
《C++.docx》由会员分享,可在线阅读,更多相关《C++.docx(65页珍藏版)》请在冰豆网上搜索。
C++
C++笔记 2007-3-22
1、程序——可执行文件,人发送给计算机的一组指令。
硬件指令是二进制,方便与数字电路和指令集转换。
2、我们学的是符合ANSI规范的标准C++,有可移植性
3、进制:
十进制->二进制:
除2取余88->01011000
二进制->十进制:
各个位与权重的乘机,之后的总和
01011000->8+16+64->88
十进制->十六进制:
除16取余88->0x58
4、1byte=8bit
1kb=1024byte
1M=1024kb
5、开发周期
源程序-->可执行代码-->可执行程序-->调试-->运行
(1)
(2)
(1)编译:
生成自己的可执行代码(缺少库函数代码)
(2)连接:
与系统的可执行代码合到一起
源文件后缀:
”.cc”,”.cp”,”.cpp”
6、第一个C++程序
#include < iostream > ----“#”表示预编译选项,<>为一个头文件,其中有常用函数
usingnamespacestd; ----命名空间,用到的全局变量都是个空间的
intmain(){ ----主函数,每个C++程序都必须要有的函数,是程序执行的入口,main函数结束则程序结束
cout<<"HelloWorld"< return0; } % g++ -c hello.cc ----编译生成目标文件hello.o % g++ hello.o ----连接生成可执行文件 % g++ -o hello hello.o ----连接生成可执行文件并指定可执行文件名字及生成目录(可执行文件默认为a.out) % a.out ----执行可执行文件 % g++ hello.cc ----直接生成可执行文件(目标文件hello.o在内存中生成) * 运行可执行文件要在.bash_profile文件中配制PATH环境变量,加上当前路径“.”,用“: ”分隔 7、注释 多行注释/*...*/ 单行注释// 8、头文件 #include<>系统头文件 #include""自定义的头文件 9、变量 用于存储数据,每个变量都要有类型和名字 使用变量: (1)声明: 确定变量类型及名字; (2)赋值,第一次的赋值称为初始化 用双引号保存的是字符串,用单引号保存的是字符 计算机保存字符,是保存的字符对应的ASCII码。 对字符的声明 charc; c='a'; 对字符数组的声明 charname[]="Mary"; ---字符数组用“=”赋值,必须在初始化时候 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 对于数组中的元素个数,比声明时的多,则会报错,这样的越界访问,对整个程序来说会有很
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+
![提示](https://static.bdocx.com/images/bang_tan.gif)