c++基础

变量

变量存在的意义:方便我们管理内存空间

## 声明变量 数据类型 变量名=变量值; ```c++

include

using namespace std;

int main(){ int a=10; cout<<"Hello,C++"<< a <

宏常量

#define 常量名 常量值; 通常在文件的上方定义

const

const 数据类型 常量名=常量值;

```cpp

include

using namespace std;

define Day 7

int main(){ int a=10; const int hours=24; cout<<"一周总共有"<< Day << "天" <

数据类型

c++规定在创建变量或者常量时,要指出相应的数据类型,以便于给变量分配内存。

数据类型存在的意义就是给变量分配合适的内存空间。 ## 整型

short 2字节 
    int   4字节
    long  win(4字节) ,linux32(4字节),linux64(8字节)
    long long 8字节

sizeof 关键字

可以利用sizeof关键字统计数据类型的大小 sizeof(类型/变量)

```cpp

include

using namespace std;

define Day 7

int main(){ int a=10; const int hours=24; cout << "变量a占用的内存大小是" << sizeof(a)<< endl; cout << "整型int占用的内存大小是" << sizeof(int)<< endl; cout << "短整型short占用的内存大小是" << sizeof(short)<< endl; system("pause"); return 0; } ```

字符型

字符型变量用于显示单个字符

在显示单字符型变量时,用单引号括起来且只能有一个字符。 字符型只占用一个字节。 字符型变量并不是把字符本身放到内存中存储,而是将对应的ASCLL编码放入到内存。 ```cpp

include

using namespace std;

define Day 7

int main(){ char a='a'; cout << a << endl; cout << "字符型占用的内存空间是" << sizeof(char) << endl; cout << "变量a占用的内存空间为" << sizeof(a) <

转义字符

转义字符用于表示一些不能显示出来的ASCLL字符

常见的转义字符

        \a 警报 
        \b 退格
        \f 换页
        \n 换行
        \r 回车
        \t 跳转到下一个Tab位置
        \v 垂直制表
        \\ 表示'\'
        \' 表示一个单引号
        \" 表示一个双引号
        \? 表示一个?号

浮点型

float 单精度 4字节 7位有效数字 double 双精度 8字节 15-16位数字

```cpp

include

using namespace std;

include

define Day 7

int main(){ float fa=3.14f; double da=3.1415966; cout << fa <

字符串

### c语言风格的字符串 char 变量名[] ="字符串";

c++风格的字符串

string 变量名="字符串";

使用c++风格的字符串string 的时候需要包含头文件 include < string > ```cpp

include

using namespace std;

include

define Day 7

int main(){ char a[]="你好,世界"; string b="你好,c++"; cout << a <

布尔类型bool

布尔类型只有两个值,true/false。布尔类型占一个字节,true的本质是1,false的本质是0

```cpp

include

using namespace std;

include

define Day 7

int main(){ bool boolean=true; bool flaseBoolean=false; cout << boolean <

数据的输入

用于从键盘获取数据 关键字 cin

cin >> 变量

运算符

## 算术运算符

+ 正号  +1 = 1
- 负号  -1 = -1
+ 加号  10+1=11
- 减号  11-1=10
* 乘号  10*1=10
/ 除号  10/10=1
% 取余  10/3 =1
++ 前置(先加1再让表达式运算)/后置(先运算再加1) 递增
-- 前置/后置 递减

```cpp using namespace std;

include

define Day 7

int main(){ int a=10; int b=1; cout << a+b << endl; cout << a-b << endl; cout << a*b << endl; cout << a/b << endl; system("pause"); return 0;
} ```

赋值运算符

= 赋值
 += 加等
 -= 减等
 *= 乘等
 /= 除等
 %= 余等

```cpp

include

using namespace std;

include

define Day 7

int main(){ int a=10; a-=1; cout << "a-=1\t\t=\t\t" << a << endl; a+=1; cout << "a+=1\t\t=\t\t" << a << endl; a/=1; cout << "a-=1\t\t=\t\t" << a << endl; a=1; cout << "a=1\t\t=\t\t" << a << endl; a %=3 ; a/=1; cout << "a%=1\t\t=\t\t" << a << endl; system("pause"); return 0;
} ```

比较运算符

== 相等
  != 不等
  < 小于
  > 大于
  <= 小于等于
  >= 大于等于

```cpp using namespace std;

include

define Day 7

int main(){ int a=10; int b=5; cout << "a>b" << (a > b) << endl; cout << "a <=b " << (a <= b) << endl; system("pause"); return 0;
} ```

逻辑运算符

! 非
&& 且
|| 或

流程结构

选择结构

if判断

```cpp //demo1

include

using namespace std;

include

define Day 7

int main(){ int a=0; cout << "请输入你的分数" << endl; cin >> a; cout << "用户输入的分数是" << a << endl; if(a > 600){ cout << "恭喜你,考上了一本" << endl; }else if(a > 500){ cout << "恭喜你,考上了二本" < } // demo2 int main(){ int a=0; int b=0; int c=0; cout << " 请输入小猪a的重量" << endl; cin>>a; cout << "请输入小猪b的重量" << endl; cin >> b; cout << "请输入小猪c的重量" << endl; cin >> c; if(a > b && a > c){ cout << "最重的小猪是a" << endl; }else if(b > a && b >c){ cout <<"最重的小猪是b" << endl; }else if(c > a && c>b){ cout << "最重的小猪是c" << endl; } system("pause"); return 0;
} ```

三元运算符

表达式1?表达式2:表达式3 cpp int main(){ int a=20; int b=10; int c=0; c=(a>b?a:b); cout << "变量c的值是" << c << endl; system("pause"); return 0; }

switch判断

switch(表达式) { case 结果1 : break; default : break; }

cpp int main(){ int source=0; cout << "请输入分数" << endl; cin >> source; switch(source){ case 10: cout << "您认为电影非常好" << endl; break; case 6 : cout << "您认为电影一般" <<endl; break; default: cout <<"您认为这是烂片" << endl; break; } system("pause"); return 0; }

循环结构

### while 循环 cpp int main(){ int num=0; while(num < 10){ cout << num << endl; num++; } system("pause"); return 0; }

do while 循环

do while 循环会先执行一次循环体之后,再去执行语句 cpp // dowhile demo // 得到 1000以内的水仙花数 int main(){ int num=100; do { int a=0,b=0,c=0; int res=0; a = num %10 ;//得到个位数 b = (num /10) % 10; // 得到十位数 c = num /100; // 得到百位数 res = (a*a*a)+(b*b*b)+(c*c*c);//得到结果 if(res == num){ cout <<"水仙花数" <<num << endl; } num++; }while(num <1000); system("pause"); return 0; }

for循环

for(起始表达式;结束表达式;末尾表达式){循环体;}

```cpp int main(){ 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; }

}

system("pause"); return 0;
} cpp //嵌套循环九九乘法表 int main() { for (int i = 1; i < 10; i++) { for (int j = 1; j <= i; j++) { cout << j << "x" << i << "=" << (i*j) << "\t"; } cout <

```

跳出结构

#### break 用于循环结构中 break在循环体中是跳出循环 用于switch判断 break在switch中是跳出判断,不再向下执行 #### continue continue用于循环中, continue 是跳出当前循环继续下一次循环 #### goto 可以无条件跳转语句 如果标记的名称在执行到goto语句时会直接跳转到标记的位置。

建议避免使用goto标记 cpp //建议尽量不使用goto标记 int main() { cout << "1" << endl; goto FLAG; cout << "2" << endl; FLAG: cout << "3" << endl; system("pause"); return 0; }

数组

在c++里所谓数组就是一个集合,里面存放了相同的数据元素。数组中的每个元素都是相同的数据类型,数组是由连续的内u才能位置组成的。

一维数组

定义数组的三种方式

 数据类型 数组名 [length];

 数据类型 数组名 [length] ={item1,item2}

 数组类型 数组名 [] ={item1,item2};



求数组的length
  sizeof(arr) / sizeof(arr[0]) = length

  通过数组名拿到数组内存中的位置/ 数组首个元素的位置 得到数组的长度

```cpp //访问数组元素

int main() { int arr [] ={1,2,3,4,5}; for (int i=0;i<5;i++){ cout << arr[i] < cpp // 实战数组demo1 int main() { int arr [5] ={300,350,400,200,250}; int max=0; for(int i=0;i<5;i++){ if(arr[i] > max){ max=arr[i]; } } cout << "最重的小猪是" << max << endl; return 0; } ```

```cpp //实战数组demo2 数组倒置

int main() { int arr [5] ={1,2,3,4,5}; 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--; } for(int i=0;i<5;i++){ cout << arr[i] << "\t" ; } cout << endl; return 0; } ```

```cpp //冒泡排序

int main() { int arr [5] ={1,6,3,9,5}; int length=sizeof(arr) /sizeof(arr[0]); cout << "数组排序前" << endl; for(int i=0;i

二维数组

二维数组其实就是一维数组 嵌套一维数组

```cpp int arr[][] ={ {1,2,3}, {4,5,6} }

cout << sizeof(arr) << endl; // 查看数组的内存空间 cout << sizeof(arr[0]) <

//demo

int main() { int arr[3][3]={ {100,100,100}, {90,50,100}, {60,70,80} }; string students [3] ={"张三","李四","王五"}; int length=sizeof(arr)/sizeof(arr[0]); //得到数组的查高度 for(int i=0;i

函数

## 定义 返回值类型 函数名 (参数列表) { 函数体; return 表达式}

目前函数定义时要在头文件的前边,否则会调用失败(看函数的声明)。 ## 调用 cpp int add(int num1,int num2) { return num1+num2; } int main() { int a=10; int b=20; int c=add(a,b); cout << c << endl; system("pause"); return 0; }

值传递

参数的传递,形参和实参不是一个东西。当值传递的时候,形参发生任何改变,都不会影响实参

函数的样式

无参无返
  有参无返
  无参有返
  有参有返

cpp //有参有返 int add(int num1,num2){ return (num1+num); } //无参无返 void test(){cout << "无参无返" << endl;} // 有参无返 void test01(int a){cout << a << endl;} //无参有饭 int test02(){cout <<"this is test03" <<endl; return 0; }

函数的声明

int max(int a,int b); 函数要先声明,提前告诉编译器函数是存在的,然后在mian函数之后去定义函数。

声明可以写多次,但是定义只能有一次

## 函数的分文件编写

1.创件后缀名为.h的头文件
  2.创建后缀名为.cpp的源文件
  3.在头文件中写函数的声明
  4.在源文件中写函数的定义

```cpp // 头文件

include

using namespace std; void swap(int num1,int num2);

// 头文件对应的源文件

include "../includes/swap.h"

void swap(int num1,int num2){ int temp=num1; num1=num2; num2=temp; cout << num1 <

// main函数里调用

include

using namespace std;

include "../includes/swap.h"

int main() { int a=10,b=20; swap(a,b); cout << "11" << endl; system("pause"); return 0; } /** 因为这一段代码是在vsCode 写的, 环境配置对于小白特别困难,可以去环境配置.md查看写这段代码时的vscode配置 */ ```

指针

可以通过指针简介访问内存。

内存编号一般是从0开始的,内存编号是十六进制的。 指针就是用指针变量保存内存编号

定义一个指针

&变量,用来获取变量的内存编号。

数据类型 * 指针名=&变量; cpp int main() { int a=1000; // 定义一个指针 int * p; // 将a的内存编号赋值到p上 p=&a; cout << "a的内存地址为" << &a << endl; cout << "p的内存地址为" << p << endl; cout << "a的值是" << a << endl; cout << "*p的值是" << *p <<endl; system("pause"); return 0; }

指针的内存空间

在32位内存下占4个字节,在64位下占8个字节

空指针

指针变量指向内存中编号为0的空间叫做野指针。 用于初始化指针变量。 空指针指向的内存是不可访问的

cpp int main() { // 空指针 int * p=NULL; cout << p << endl; system("pause"); return 0; }

野指针

指针变量指向非法的内存空间,

const修饰指针

const 修饰指针  指针常量

   const int * p=&a;

     指针的指向可以改,但是指针指向的值不可以改。


 指针常量 
int * const p =&a;

  指针的指向不可以改,但是指针指向的值可以改

const 既修饰指针,又修饰常量

   const int * const p =&a;

    指针的指向和指针指向的值都不可以改

```cpp int main() { int a=10; // 常量指针 const int * p=&a; // 指针常量 int * const p=&a; // 既修饰指针又修饰常量

const int * const p=&a;

system("pause");
return 0;

} ```

指针和数组

利用指针访问数组元素

cpp int main() { int arr [10] ={1,2,3,4,5,6,7,8,9,10}; // 变量需要用& 但是数组,数组名就相当于内存编号了 int * p =arr; int length=sizeof(arr)/sizeof(arr[0]); for(int i=0;i<length;i++){ cout << *p << endl; p++; /* p 就是在内存中的地址,因为数组是int类型的, 所以p 每+1 相当于移动了4个字节,就是到了下一个元素 */ } system("pause"); return 0; }

指针和函数

利用指针做函数参数,可以改变实参的值

```cpp void swap(int p1,int *p2){ int temp=p1; p1=p2; *p2=temp;

} int main() {
int a=10; int b=20; swap(&a,&b); cout << "a ==" << a << "b ==" << b << endl; system("pause"); return 0; }

// 如果需要改变实参就传递指针,不需要改变实参就传递参数 cpp // 指针,数组,函数 // 函数封装冒泡排序

//主函数

int main() {
int arr [10]={6,7,2,3,4,5,1,9,8,10}; int length=sizeof(arr)/sizeof(arr[0]); bubleSort(arr,length); printArr(arr,length); system("pause"); return 0; }

//排序函数和输出函数 void bubleSort(int * arr,int length){ for(int i=0;i

结构体

结构体属于用户自定义的数据类型,允许用户存储不同的数据类型 ## 定义和使用

struct 结构体名 {结构体成员列表}

```cpp // 定义结构体 struct Student { /* data */ string name; int age; int scorce;

};

int main() { //创建结构体变量 // 方法1 Student s1; s1.name="张三"; s1.age=18; s1.scorce=80; //方法2 Student s2 = {"李四",19,90}; cout << "名称:\t" << s1.name << "\t年龄:\t" << s1.age << "\t分数:\t" << s1.scorce << endl; cout << "名称:\t" << s2.name << "\t年龄:\t" << s2.age << "\t分数:\t" << s2.scorce << endl; system("pause"); return 0; } ``` ## 结构体数组 将自定义的结构体放入到数组中,方便维护

结构体名 数组名[] = { { }, { } }

```cpp struct Student { /* data */ string name; int age; int scorce;

};

int main() { //定义结构体数组 Student stuArr [] ={ {"刘能",18,90}, {"王老七",20,86}, {"谢广坤",26,66} }; //修改结构体数组的值 stuArr[0].scorce=56; //遍历输出 int length=sizeof(stuArr)/sizeof(stuArr[0]); for(int i=0;i } system("pause"); return 0; } ```

结构体指针

通过指针访问结构体属性

利用操作符-> 可以通过结构体指针访问结构体属性

cpp int main() { //创建结构体变量 Student s1={"王五",28,60}; //创建结构体指针 Student * s1p=&s1; //通过结构体指针访问内容 cout << s1p->name << endl; system("pause"); return 0; }

结构体嵌套结构体

结构体中的成员可以是另外一个结构体 ```cpp struct Student { /* data */ string name; int age; int scorce;

}; struct Teacher{ /data/ string name; int age; Student student; }; int main() {
//创建学生的结构体 Student s1={"刘能",20,36}; // 创建老师的结构体 Teacher t1={"王老师",56,s1}; cout << "教师名称\t" << t1.name << "教师年龄" << t1.age<

结构体做函数参数

将结构体作为参数向函数中传递

```cpp //值传递的输出函数 void print(Student s){ cout << s.name< name< age< scorce< //创建学生的结构体 Student s1={"刘能",20,36}; // 值传递 print(s1); //地址传递 prints(&s1); system("pause"); return 0; }

/* * 如果需要修改源数据则用地址传递,不需要则用值传递
*/ ```

结构体中const使用场景

用const来防止误操作 cpp void print(const Student * p){ //但是我们仅仅希望,函数只访问结构体,而不改变数据,所以就用到了const p->age=56;// 使用了const 再去修改数据的话就会报错 cout << p->name << p->age << p->scorce <<endl; } int main() { //创建结构体变量 Student s={"刘能",28,36}; // 因为现在结构体的数据小,但是一旦结构体的数据大了,我们传递形参就大了,所以建议用地址传递 print(&s); cout << s.age <<endl; system("pause"); return 0; } ```cpp // 结构体实战demo

include

using namespace std;

include

include "../includes/swap.h"

//学生结构体 struct Student { /* data */ string name; int age; int scorce;

}; struct Teachers { string tName; Student stuArr[5]; }; void SetArr(Teachers p[],int len){ string names="ABCDE"; for(int i=0;i

p[i].tName="Teacher_";
    p[i].tName+=names[i];
    for(int j=0;j<childSize;j++){
        p[i].stuArr[j].age=60;
        p[i].stuArr[j].name="a_";
        p[i].stuArr[j].name+=names[j];
        p[i].stuArr[j].scorce=60;
    }  
}

} //遍历输出 void print(Teachers p [] ,int len){ for(int i=0;i //创建三名老师的数组 Teachers TeacherArr[3]; //批量赋值 int len=sizeof(TeacherArr)/sizeof(TeacherArr[0]); SetArr(TeacherArr,len); //遍历输出 print(TeacherArr,len); system("pause"); return 0; } ```

本章节实战demo

实现通讯录管理系统

添加联系人,(姓名,性别,年龄,联系电话,家庭住址) 最多记录1000人。
显示联系人, 显示所有的联系人信息。
删除联系人,根据姓名删除指定联系人
修改联系人,通过姓名修改联系人
清空联系人,清空全部的联系人
退出通讯录

```cpp

include

using namespace std;

include

include "../includes/swap.h"

define MAX 1000

//联系人结构体 struct Person { string name; int Sex; int age; string phone; string address; }; //通讯录结构体 struct UserSystem { int size; Person Users[MAX]; }; //显示菜单的函数 void showMenu(){ cout << "*Welcome to Dj User System" < size >= MAX) { cout << "No Add" << endl; } else { //输入姓名 string name; cout << "Place input Name" << endl; cin >> name; users->Users[users->size].name = name; //输入年龄 int age; cout << "Place input Age" << endl; cin >> age; users->Users[users->size].age = age; //输入电话 string phone; cout << "Place input Phone" << endl; cin >> phone; users->Users[users->size].phone = phone; //输入地址 string Address; cout << "Place input Address" << endl; cin >> Address; users->Users[users->size].address = Address; //请输入性别 int sex = 0; cout << "1---Man" << endl; cout << "2----woMan" << endl; while (true) { cin >> sex; if (sex == 1 || sex == 2) { users->Users[users->size].Sex = sex; break; } } users->size++; cout << "Add Success" << endl; system("pause"); system("cls"); } } //显示所有联系人 void showPerson(UserSystem *users) { cout << users->size << endl; if (users->size == 0) { cout << "There is no record" << endl; } else { for (int i = 0; i < users->size; i++) { cout << "Name : " << users->Users[i].name << "\t"; cout << "Age : " << users->Users[i].age << "\t"; cout << "Phone : " << users->Users[i].phone << "\t"; cout << "Sex : " << (users->Users[i].Sex == 1 ? "Max" : "WoMan") << "\t"; cout << "Address : " << users->Users[i].address << endl; } } system("pause"); system("cls"); } // 判断联系人是否存在 int isPerson(UserSystem *users, string name) { //存在返回下标,不存在返回-1 for (int i = 0; i < users->size; i++) { if (users->Users[i].name == name) { return i; } } return -1; } //删除联系人 void delUser(UserSystem *users) { cout << "place will delete users" << endl; string name; cin >> name; int index = isPerson(users, name); if (index != -1) { / 因为目前没有删除数组元素的方法, 所以删除数组元素的方法就是,找到要删除元素的下标 让要删除元素之后的所有元素进行往前移动1位 */ for (int i = index; i < users->size; i++) { users->Users[i] = users->Users[i + 1]; } users->size--; cout << "Delete" << name << "Success" << endl; } else { cout << "No such person was found!!!!!!" << endl; } system("pause"); system("cls"); } //查找联系人 void Search(UserSystem *users) { cout << "place will Search users" << endl; string name; cin >> name; int index = isPerson(users, name); if (index != -1) { cout << "name : \t" << users->Users[index].name; cout << "Age : \t" << users->Users[index].age; cout << "Address : \t" << users->Users[index].address; cout << "Phone : \t" << users->Users[index].phone; cout << "Sex : \t" << (users->Users[index].Sex == 1 ? "Man" : "WoMan")< Users[index].name = name; //输入年龄 int age; cout << "Place input Age" << endl; cin >> age; users->Users[index].age = age; //输入电话 string phone; cout << "Place input Phone" << endl; cin >> phone; users->Users[index].phone = phone; //输入地址 string Address; cout << "Place input Address" << endl; cin >> Address; users->Users[index].address = Address; //请输入性别 int sex = 0; cout << "1---Man" << endl; cout << "2----woMan" << endl; while (true) { cin >> sex; if (sex == 1 || sex == 2) { users->Users[users->size].Sex = sex; break; } } } else { cout << "No such person was found!!!!!!" << endl; } system("pause"); system("cls"); } // 清空联系人 void Del(UserSystem *users){ cout << "Whether you want to empty or not !!!"< >state; if(state == "yes"){ users->size=0; } system("pause"); system("cls"); } int main() { int select = 0; //创建一个通讯录 UserSystem userSystem; userSystem.size = 0; while (true) { //显示菜单功能 showMenu(); cin >> select; switch (select)

{
  case /*添加联系人*/ 1:
     /* code */
     addPerson(&userSystem);
     break;
  case /*显示联系人*/ 2:
     showPerson(&userSystem);
     /* code */
     break;
  case /*修改联系人*/ 3:
     /* code */
     updateUser(&userSystem);
     break;
  case /*删除联系人*/ 4:
     /* code */
     delUser(&userSystem);
     break;
  case /*清空联系人*/ 5:
     /* code */
     Del(&userSystem);
     break;
  case /*搜索联系人*/ 6:
     /* code */
     Search(&userSystem);
     break;
  case /*退出*/ 0:
     cout << "Thank You" << endl;
     system("pause");
     return 0;
     /* code */
     break;
  default:
     break;
  }

}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值