C++简单程序设计

1、C语言同时具有高级语言和汇编语言的优点
(1)可以直接访问物理地址内存
(2)有良好的可读性和可移植性

2、C++是一个更好地C语言(他兼容C语言),他解决了C中存在的一些问题,另外引入了类机制,从而支持面向对象程序设计
3、C++支持面向对象编程(核心),但他也同时支持面向过程编程(因兼容C语言)
4、函数是C++程序中最小的功能单位
5、头文件:如#include中的iostream这种常常被嵌入到程序开始的地方,故称为头文件,其中#include是称为预处理命令,即指示编译器在队程序进行预处理时,将iostream文件中的内容放到该位置(即相当于复制进来)
6、变量存在的意义:给一段指定的内存起名,方便我们管理或者操作这段内存空间(自定义变量名)

7、常量:用于记录程序中不可修改的数据
(1)文件上方定义(宏常量):用#define定义
(2)用const修饰变量,一般写在函数体内部

8、关键字:c++中保留的单词
(1)即编译器已经用了,用户不能再用他来做变量名、常量名(标识符)

9、标识符:(一般给变量起名的时候要做到见名知意)
(1)不可以是关键字
(2)只能由数字、字母、下滑线组成(即非空格)
(3)第一个字母只能是字母或下划线(也即不能是数字)
(4)区分大小写

10、创建一个变量或常量的时候,必须指出其类型,否则无法分配内存
(1)即数据类型的作用:是给变量分配合适的内存空间

11、整型有:
(1)short(2字节):也即16位,表示的范围-215——215-1(其中有一位表示正负,减1是因为还有个0)
(2)int(4字节)<=long(4字节window)<long long(8字节)

12、Sizeof可统计数据类型所占的内存空间大小(单位为字节)
(1)用法:sizeof(数据类型/变量)
13、浮点型(默认情况下,输出一个小数,会显示6位有效数字,若要输出更多位,需特殊设置)
(1)单精度float(4字节)7位有效数字(不包括小数点)(一般直接赋值时,在后面加f,因为float f1=3.12;时会默认把小数看成double型,然后在赋值给float型,在3.12后面加上f后,则不需要这步转化
(2)双精度double(8字节)15-16位有效数字

#include<iostream>
#include<sstream>
#include<iomanip>
using namespace std;

int main1()
{
	double d = 3.152324232324223432;
	cout << d << endl; // 正常直接输出只有7位有效数字,和float类型一样(包小数点)
	string str = to_string(d); // 用to_string 方法只能输出7位有效数字(不包小数点)
	cout <<str << endl;

	stringstream ss; //定义输入输出流
	ss << setprecision(15) << d; //将double型数据转化为输出流,并将精度设置为15
	str = ss.str(); //将输出流转化为字符串
	cout << str << endl;
	system("pause");
	return 0;
}

14、科学计数法:
(1)float f2=3e2 后面是正数,则表示310^2
(2)float f2=3e-2 后面是负数,则表示3
(0.1)^2

15、字符型:字符型变量只占用一个字符
(1)存放的是字符对应的ASCII码,不是字符本身
(2)查字符‘a’对应的ASCII值:
①char ch=’a’; cout<<(int)ch<<endl; 即强制转化为整型
②记忆个别字符的ASCII码:a——97; A——65

16、转义字符:表示一些不能显示出来的ASCII字符,\表示要输出一个特殊的字符了
(1)常用的\n(换行符) ,
(2)\(输出一个反斜杠,用双引号),
(3) \t(水平制表符,和前面字母共占8位,多的用空格补充,可起到对齐的效果)

17、字符串
(1)c语言风格的:char 数组的类型(char 变量名[]=”dlskfdsk”)
(2)C++风格字符串:String (注:用之前要加头文件#include)

18、布尔类型bool:占一个字节大小,本质是1或0,输出也是1或0
(1)bool flag=true;cout<<flag<<endl; 输出的结果则是1的
(2)在显示框输入该类型的值时,是输入数字0或1(当然非0的数都可以,大于0的都表示true),而不是true和false,这个是在程序中写的
19、数据的输入:cin>>

20、运算符:
(1)加减乘除(注:整型除以整型,结果仍是整型,有一个数据是浮点型则结果微浮点型)
(2)取模运算%(求余数):两个小数不可以做取模运算(必须都是整数)
(3)前后置递增递减运算符
①前递增a=++b; b先加一再赋值给a
②后递增a=b++; b先赋值后再加1(也即先进行表达式运算再让变量加1)
(4)赋值运算符:= += -= …
(5)比较运算符 == >= … 结果是布尔值 也即0或1
(6)逻辑运算符:! && ||

21、程序流程结构:
(1)顺序结构
(2)选择结构:if条件后面上不要加分号,回导致if白写了,所有情况都会输出if下的内容
(3)循环结构

22、三目运算符:c = a>b? a:b
(1)在c++中三目运算符返回的是变量,可以继续赋值
①如(a<b?a:b)=100

23、Switch语句:
(1)和if语句相比的优缺点
①缺点:判断时候,只能是整型或者字符型,不可以是一个区间
②优点:结构清晰,执行效率高
(2)结构:switch(){case :…; break; }

24、While语句
(1)注意:写循环的时候要注意死循环(也即有退出循环的接口)
25、do{… }while()语句
(1)即先执行在判断

26、水仙花数:三位数,拆分为个位、十位、百位后,各位上的数的3次方的和仍等于该数

27、For循环语句
(1)For(起始表达式;条件表达式;末尾循环体){…}
(2)注意:括号里面的内容都可以不写,保留分号即可
28、两个for进行嵌套循环

29、跳转语句
(1)Break
①switch条件语句中,终止case,跳出switch
②循环语句中,跳出当前的循环语句
③出现在嵌套循环中,跳出最近一层的内循环语句
(2)Continue:在循环语句中,跳过本次还未执行的循环语句,进入下一次循环
(3)goto语句,无条件跳转到对应标记位置(跳转过于强大,不建议使用,跳来跳去不便阅读等)
①goto FLAG;
②FLAG:(标记,注意,和后面代码之间是有冒号的)

30、数组(放在连续的内存空间中,元素都是相同的数据类型,通过下标访问)
(1)定义的时候:(注意:数组名不可和变量名相同)
①可以直接写长度
②可写长度的时候赋值(若赋值的长度不等于所写的长度,剩余的部分则以0补充)
③可不写长度直接赋值(有系统直接计算出其长度)
(2)一维数组名的用途
①统计整个数组在内存中的长度(利用sizeof()语句)(注意,不是元素的个数)
②可以获取数组在内存中的首地址(int)arr 第二个元素的地址(int)&arr[1]
③若要求数组元素的个数,可以利用sizeof()语句,sizeof(a)/sizeof(a[0])

31、冒泡排序:
(1)第一层循环次数n-1(每一次循环,都是找出这一轮中涉及的元素中最大的元素)
①由于i从0开始,所以写i<n-1,而不是<=
(2)第二层循环的次数是n-i-1
①由于j也是从0开始,所以写i<n-1,而不是<=

32、二维数组
(1)定义的时候:
①可直接写行和列的长度
②可写行和列的长度时,直接赋值{{…},{…},{…}} (一般使用这种)
③可写行和列的长度时,直接赋值{a.b.c,…}把第一行填充完之后再填第二行,直到数据填完
④可不写行的长度,只写列的长度,直接赋值{a,b,c,…}
(2)名称用途:和一维数组的一样
①统计整个数组在内存中的长度(利用sizeof()语句)(注意,不是元素的个数)
②若要求数组元素的个数,可以利用sizeof()语句,sizeof(a)/sizeof(a[0][0])
③另外,还可输出一行元素所占的内存空间sizeof(a)/sizeof(a[0])
④可以获取数组在内存中的首地址(int)arr 第二个元素的地址(int)&arr[0][1]
第二行地址(int)a[1]
1)这里的int 表示见默认的十六进制转化为十进制

33、函数:(形参和实参区别)
(1)作用:将经常使用的代码封装起来,减少重复代码
①另外:一个较大的程序,一般分为若干个程序块,每个模块实现特定的功能
(2)调用,定义需在调用之前,如果函数定义在调用之后,则要进行函数声明
(3)值传递:实参传给形参(其实是复制过去的),在调用过程中,形参改变,但是实参不会改变
(4)函数声明:在函数定义之前,跟编译器说一声有这么个函数int hanshu(int i,int j);
①作用:一般函数的实现都在main()函数之前,若在main()之后(或调用之后),则需进行声明
②声明可以多次,定义只能一次

34、函数的分文件编写:
(1)作用:代码量大时,都在一文件,结构不清晰
(2)步骤:
①创建.h的头文件和.cpp的源文件
②在头文件中写函数的声明
③在源文件中写函数的定义

35、指针:
(1)作用:保存地址
(2)定义:int *p; p=&a;为十六进制数,也可强制转换为十进制
(3)解引用:cout<<*p<<endl; 表示找到指针所指向内存的数据
(4)指针本身所占的内存空间(任何类型存的都是地址):4个字节(32位操作系统X86),64位操作系统则是8字节:输出:cout<<sizeof(int *)<<endl;
(5)空指针:编号为0的空间,用于给指针初始化int *p=NULL;
①这块内存不可访问的(也即空指针不可访问,0-255之间的内存编号是系统占用的,因此不可访问)
(6)野指针:指针指向的是非法空间,也即这块空间你没有申请,不能访问
①如int *P=(int )0x1100; 把指针随意指向了一个没有空间的地址,则访问不了
(7)常量指针(const int p=&a)(修饰的是指针):指针的指向可以改,指针指向的值不可以改
(8)指针常量(int const p=&a):指针指向的值可以改,指针指向不可以改(如引用)
(9)Const既修饰指针又修饰常量(const int const p=&a):两个都不可以改
(10)指针可以和数组配合使用,p++;地址后移一位,
①注意:
(p++)访问的还是
p这个位置的值
(++p)访问的才是
p后面一位的值
(11)指针和函数:参数部分用地址传递void swap(int * a,int *b); 调用时swap(&a,&b);

36、总结:参数传递:
(1)值传递:不改变实参
(2)地址传递:形参改变是实参也改变

37、结构体:用户自主定义的数据类型,允许用户存储不同的数据类型
(1)也即把基本的数据类型进行一个集合
(2)定义:struct 结构体名称 {…}; {}中是成员列表
(3)创建具体对象 (创建具体对象的时候可以省略struct)
①struct student s1 s1.name=…;
②struct student s2={…}赋了值
③在定义结构体时顺便创建结构体变量 struct student{…}s3

38、结构体数组:将自定义的结构体放入数组中,方便管理
(1)创建:struct student[]={{…},{…}}
(2)可创建结构体数组的时候直接赋值,也可后续修改对应的值
①不同于普通数组的是,若一开始不赋值,则会有警告提示

39、结构体指针:通过结构体指针访问结构体中的成员(利用->可访问结构体属性)
(1)直接用结构体名称的话,是通过 . 符号进行访问成员属性的
40、结构体的嵌套:即结构体中的属性也是一个结构体(从而解决一些实际问题)
41、结构体做函数的参数(值传递和地址传递)
(1)和普通类型的传递一样,只是结构体访问元素不同于普通类型

42、结构体中const使用场景:防止误操作
(1)一般值传递是直接拷贝过去,会占用内存空间,故通过地址传递的方式解决这个问题,但地址传递的问题有可能误操作修改了内容,故可在地址传递的形参前面加const,使他在调用函数中不能修改void print(const student *s){…}
43、同结构体类型一个变量的值赋给另一个同一结构类型变量时,像其他基本类型一样,直接用等号赋值就可以了

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值