[学习笔记]c++基础-day01

这篇博客详细介绍了C++的基础知识,包括面向对象编程的概念、C++的基本语法、数据类型、运算符、程序流程结构如if和switch语句、循环结构以及数组的使用。内容涵盖对象、类、消息传递、方法、变量、常量、关键字、标识符命名规则、整型、浮点型、字符型、字符串型、布尔类型、数据输入、算术和逻辑运算符,以及如何使用break和continue控制流程。此外,还讨论了一维和二维数组的应用。

目录

1、面向对象程序设计

1.1概述:对象、类、消息传递、方法

1.2基本特征:

1.3语言:c#、java、c++

2、c++基本语法

2.1编写一个hello world程序

2.2单行注释和多行注释

2.3变量(c++中所有数据都存放在内存中)

2.4常量:用于记录程序中不可更改的数据

2.5关键字:

2.6标识符命名规则

3、数据类型

3.1整型:

3.2浮点型(表示小数)

3.3转义字符:

3.4字符型:单个字符 ’’,只占用一个字符

3.5字符串型:一串字符

3.6布尔类型bool:占1个字节

3.7数据的输入:用于从键盘获取数据

4、运算符

4.1算术运算符(只有整型才能进行取模运算)

4.2赋值运算符:=、 +=、-=、/=、%=

4.3比较运算符:==、!=、<、>、<=、>=

4.4逻辑运算符:!、&&、||

4.5三目运算符

5、程序流程结构

5.1选择结构

5.1.1 if语句

5.1.2 switch语句

5.1.3 if 和 switch区别?

5.2循环结构

5.2.1 while循环:while(循环条件){循环语句}

5.2.2 do...while循环语句

5.2.3 for循环(较常用)

5.2.4 嵌套循环例子:乘法口诀表

5.3跳转语句

5.3.1 break:跳出选择结构或循环结构

5.3.2 continue

5.3.3 goto语句:goto 标记;

6、数组:存放相同类型的数据元素的集合

6.1一维数组

6.2 二维数组

1、面向对象程序设计:

1.1概述:对象、类、消息传递、方法

1.2基本特征:

封装:为了将代码模块化

把数据和显示操作的代码集中放在对象内部,可通过访问修饰符修饰

继承:实现代码的复用性

对象类之间的关系

多态:实现接口的复用性

不同对象收到相同消息时产生的多种不同的行为方式

1.3语言:c#、java、c++

2、c++基本语法

2.1编写一个hello world程序

2.2单行注释和多行注释

2.3变量(c++中所有数据都存放在内存中)

作用:给一段指定的内存空间起名,方便操作这段内存

语法:数据类型 变量名 = 初值;

变量存在的意义,比如:假设某块内存数据是整数1,我们要访问它时,可以根据它的内存编号(每个内存都有一个对应的地址编号,是十六进制)找到;但若有100个数据?100个地址编号则相对较繁琐了;此时使用变量表示一段内存,a代表了整数1,根据变量即可访问查找。

2.4常量:用于记录程序中不可更改的数据

c++定义常量的两种方式:

  1. #define宏常量 :#define 常量名 常量值
  2. const修饰的变量 :const 数据类型 变量名 = 常量值

在定义变量前面加关键字const,修饰该变量名为常量,其值之后不可修改

 

2.5关键字:

在给变量或常量起名时,不要用关键字,否则会产生歧义

sizeof关键字可以统计数据类型所占内存大小:sizeof(数据类型/变量)

2.6标识符命名规则

  1. 标识符不能是关键字
  2. 标识符组成:字母、数字、下划线
  3. 第一个字符必须是字母或下划线
  4. 标识符字母区分大小写

3、数据类型

基本数据类型:

bool、char、int、float、double、void、wchar_t

类型修饰符:

signed、unsigned、short、long

C++规定在创建一个变量或常量时,需指明它的数据类型,给变量分配合适的内存空间;若数据库类型未知,可能会造成空间浪费;

3.1整型:

数据类型

占用空间

short

2字节

int

4字节

long

windows为4字节

Long long

8字节

3.2浮点型(表示小数)

数据类型

占用空间

有效数字范围

单精度float

4字节

7位有效数字

双精度double

8字节

15-16有效数字

3.3转义字符:

转义字符

含义

ASCII码值(十进制)

\a

警报

007

\b

退格,将当前位置移到前一列

008

\f

换页,将当前位置移到下页开头

012

\n

换行

010

\r

回车,将当前位置移到本行开头

013

\t

水平制表

009

\v

垂直制表

011

\\

代表一个反斜杠字符“\”

092

\’

代表一个单引号字符

039

\”

代表一个双引号字符

034

3.4字符型:单个字符 ’’,只占用一个字符

在显示字符型变量时,用单引号将字符串括起来,不要用双引号;单引号只能有一个字符,不可以是字符串;

字符型变量不是把字符本身放到内存中存储,而是将对应的ASCII编码放入到存储单元。

ASCII码大致由以下两部分组成:

ASCII非打印字符:ASCII表上的数字0-31分配给了控制字符,用于控制像打印机等一些外围设备;

ASCII打印字符:数字32-126分配给了能在键盘上找到的字符,当查看或打印文档时就会出现。

3.5字符串型:一串字符

String 变量名 = “字符串值”

3.6布尔类型bool:占1个字节

两个值:true--真(本质是1)、false--假(本质是0)

3.7数据的输入:用于从键盘获取数据

关键字:cin   cin>>变量

4、运算符

运算符类型

作用

算术运算符

用于处理四则运算

赋值运算符

用于将表达式的值赋给变量

比较运算符

用于表达式的比较,返回一个真值或假值

逻辑运算符

用于根据表达式的值返回真值或假值

4.1算术运算符(只有整型才能进行取模运算)

运算符

术语

示例

结果

++

前置递增

a=2;b=++a;

a=3;b=3;

++

后置递增

a=2;b=a++;

a=3;b=2;

--

前置递减

a=2;b=--a;

a=1;b=1;

--

后置递减

a=2;b=a--;

a=1;b=2;

前置递增:先让变量+1,然后进行表达式运算

后置递增:先进行表达式运算,后让变量+1

4.2赋值运算符:=、 +=、-=、/=、%=

4.3比较运算符:==、!=、<、>、<=、>=

4.4逻辑运算符:!、&&、||

4.5三目运算符

表达式1?表达式2:表达式3

如果表达式1为真,执行表达式2,返回表达式2的结果;

如果表达式1为假,执行表达式3,返回表达式3的结果

在c++中三目运算符返回的是变量,可以继续赋值;例如:

b?a:b = 100

5、程序流程结构

C++支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构

顺序结构:程序按顺序执行,不发生跳转、

选择结构:依据条件是否满足,有选择的相应功能

循环结构:依据条件是否满足,循环多次执行某段代码

5.1选择结构

5.1.1 if语句

单行格式if语句:if(条件){ 结果 }

多行格式if语句:if(条件){ 结果1 }  else{ 结果1 }

多条件的if语句:if(条件1){ 结果1 }  else if(条件2){ 结果2 }......else{结果3}

嵌套if语句:if(条件1){ 结果1 ; if(条件2){结果2}...} else{结果3}

#include <iostream>
#include <string>
using namespace std;

int main() {

    int A,B,C;
    cout << "请输入A:" << endl;
    cin >> A;
    cout << "请输入B:" << endl;
    cin >> B;
    cout << "请输入C:" << endl;
    cin >> C;

    cout << "A为" << A << endl;

    cout << "B为" << B << endl;

    cout << "C为" << C << endl;

    if (A > B) {

        if (A > C) {

            cout << "A、B、C中,A最大,其值为" << A << endl;
        }
        else
            cout << "A、B、C中,C最大,其值为" << C << endl;
    }
    else {
        if (B > C) {
            cout << "A、B、C中,B最大,其值为" << B << endl;
        }
        else
            cout << "A、B、C中,C最大,其值为" << C << endl;

    }
    system("pause");
    return 0;
}

5.1.2 switch语句

switch(表达式)

{

case 结果1:执行语句;break;

case 结果2:执行语句;break;

...

default:执行语句;break;

}

5.1.3 if 和 switch区别?

switch判断时只能是整型或字符型,不可以是一个区间

Switch 优点:结构清晰,执行效率高

5.2循环结构

5.2.1 while循环:while(循环条件){循环语句}

只要循环条件为真,就执行循环语句

猜数游戏:

#include <iostream>
#include <string>
#include <ctime>
using namespace std;

int main() {

    //猜数
    //添加随机数,作用利用当前系统事件生成随机数,防止每次随机数都一样
    srand((unsigned int)time(NULL));
    int num = rand() % 100 + 1;
    //玩家猜测
    int val = 0;
    while (1) {
        cin >> val;
        if (val > num) {
            cout << "太大啦!" << endl;
        }
        else if (val < num) {
            cout << "太小啦!" << endl;
        }
        else
        {
            cout << "恭喜你,猜对啦!" << endl;
            break;
        }
    }
    system("pause");
    return 0;
}

5.2.2 do...while循环语句

do{循环语句} while(循环条件);

与while的区别在于,do...while会先执行一次循环语句,再判断循环条件

例:水仙花数,一个3位数,它的每个位上的数字的3次幂之和等于它本身

#include <iostream>
#include <string>
#include <ctime>
using namespace std;

int main() {
    int num = 100;
    do
    {
        //获取数字的个位十位百位数
        int a = num / 100, b = (num/10)%10, c = num % 10;
        //判断是否是水仙花数,若是,则输出
        if (a*a*a + b * b*b + c * c*c == num) {
            cout << num << endl;
        }
        num++;
    } while (num<1000);

    system("pause");
    return 0;
}

5.2.3 for循环(较常用)

for(起始表达式;条件表达式;末尾循环体) {循环语句;}

例:敲桌子,从1开始到数字100,如果数字个位含有7,或者数字十位含有7,或者该数字是7的倍数,我们打印敲桌子,其余数字直接打印输出。

for (int i = 1; i <= 100; i++) {
    //如果该数字能整除7、个位数是7或者十位数是7,则输出敲桌子,否则输出此数字
    if (i % 7 == 0 || i / 10 == 7 || i % 10 == 7) {
        cout << "敲桌子" << endl;
    }
    else
        cout << i << endl;
}

5.2.4 嵌套循环
例子:乘法口诀表

//乘法表
for (int i = 1; i <= 9; i++) {
    for (int j = 1; j <= i; j++) {
        cout << j<< "*" << i << "=" << j * i<<"  ";
    }
    cout << endl;
}

5.3跳转语句

5.3.1 break:跳出选择结构或循环结构

   出现在switch条件语句中,终止case并跳出switch

   出现在循环语句中,跳出当前的循环语句

   出现在嵌套循环中,跳出最近的内层循环语句

5.3.2 continue

在循环语句中,跳过本次循环中余下尚未执行的语句,继续执行下一次循环

5.3.3 goto语句:goto 标记;

如果标记的名称存在,执行到goto语句时,会跳转到标记的位置

6、数组:存放相同类型的数据元素的集合

特点1:数组中的每个数据元素都是相同的数据类型

特点2:数组是由连续的内存位置组成的

6.1一维数组

定义的三种方式:

  数据类型 数组名[数组长度];

  数据类型 数组名[数组长度] = { 值1,值2...} ;

  数据类型 数组名[] =  { 值1,值2...} ;

一维数组数组名:

  可以统计整个数组在内存中的长度

  可以获取数组在内存中的首地址

例1:找出最重的(即最大的数)

int arr[5] = { 300, 350, 200, 400, 250 };
int temp = 0;
int index=0;
for (int i = 0; i < 5; i++) {
	if (arr[i] > temp) {
		index = i;
		temp = arr[i];
		continue;
	}
}
cout << "第" << index + 1 << "只小猪的体重最重,为" << temp << endl ;

例2:数组逆置

法1:定义一个新的空数组

//数组逆置
int arr[5] = { 1, 3, 2, 5, 4 };
int arr1[5];//定义一个空数组
for (int i = 0; i < 5; i++) {
	//元素组的末尾元素为新数组的第一个元素,以此类推
	arr1[i] = arr[5 - i - 1];
	cout << arr1[i] << " ";
}

法2:按平常的一般逻辑实现,前后交换

int arr[5] = { 1, 3, 2, 5, 4 };
int start = 0;//开始下标
int end = sizeof(arr) / sizeof(arr[0]) - 1;//末尾元素下标
while (start < end) {
	//数据元素互换
	int temp = arr[start];
	arr[start] = arr[end];
	arr[end] = temp;

	start++;
	end--;
}
cout << "数组逆置后:";
for (int i = 0; i < 5; i++) {//打印逆置后的数组
	cout << arr[i] << " ";
}

例3:冒泡排序

//冒泡排序
//比较相邻的元素,如果第一个比第二个大,就交换它们;
//对每一对相邻元素做同样的工作,执行完毕后,找到第一个最大值;
//重复以上步骤,直到不需要比较
//对数组{4,2,8,0,5,7,1,3,9}进行升序排序
int arr[9] = { 4,2,8,0,5,7,1,3,9 };
//第1个for循环,共有9-1轮
for (int i = 0; i < 9-1; i++) {
     //第2个for循环,单轮相邻元素的比较与交换
     for (int j = 0; j < 9-i-1; j++) {
         //前一个元素比后一个大时,则交换
         if (arr[j] > arr[j + 1]) {
            int temp = arr[j];
            arr[j] = arr[j + 1];
            arr[j + 1] = temp;
    }
}
//打印升序后的结果
cout << "升序后的数组元素为:";
for (int k = 0; k < 9; k++) 
{
    cout << arr[k] << " ";
}
cout << endl;

6.2 二维数组

定义的四种方式:

数据类型 数组名[行数][列数];

数据类型 数组名[行数][列数] = { { 数据1,数据2},{数据3...} };

数据类型 数组名[行数][列数] = {数据1,数据2,数据3...};

数据类型 数组名[ ][列数]={数据1,数据2,数据3...};

二维数组数组名:

  查看二维数组所占内存空间

  获取二维数组首地址

例:考试成绩统计

//考试成绩统计,输出三名同学的总成绩
//思路:输出每一行的总和即单个同学的总成绩
int scores[3][3] = 
{
	{100,100,100},
	{90,50,100},
	{60,70,80}
};
//存三位同学名字的数组
string names[3] = { "张三","李四","王五" };
for (int i = 0; i < 3; i++) {
	int sum = 0;
	for (int j = 0; j < 3; j++) {
		sum += scores[i][j];
	}
	//打印对应同学的对应总成绩
	cout << names[i]<< "的总成绩为" << sum << endl;
}

写在最后:一个c++小白,每天一笔记,每天一练习!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值