大一学习C++记录的笔记(1)

转义字符

c++中的转义字符

换行符\n

想要输出'\'必须输入\\

水平制表符\t占用八个字符,可以整齐的输出数据,相当于TAB

\a警报

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

\f换页,将当前位置起到下页开头

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

字符串类型

c语言风格字符串

char 变量名[] = "字符串值"

c++风格字符串,使用需要头文件string

string 变量名 = "字符串值"

注意字符串类型和字符类型不一样,字符使用单引号包裹,字符串用双引号


 

bool类型

true本质是1

false本质是0

占据1个字节大小

数据的输入与输出

输入

cin可以实现从键盘上输入数据为变量赋值

语法:cin>>变量

输出

cout可以实现把数据展示到显示屏上

语法:cout << 变量 << ... << endl

运算符

算术运算符,赋值运算符,比较运算符,逻辑运算符

算术运算符:+加 -减 *乘 /除 %取余

++ -- 递增递减加一减一


 

赋值运算符: =赋值 +=加等于 -=减等于 *=乘等于 /=除等于 %=模等于


 

比较运算符:== 相等于 !=不等于 < 小于 > 大于 <= 小于等于 >= 大于等于


 

逻辑运算符:!非  &&于  ||或  相当于not,and,or

选择结构

if语句,执行满足条件的语句
单行if语句语法:if(条件){条件满足执行的语句}
注意if条件后面不要加;

多行if语句语法:if(条件){条件满足执行的语句}else{条件不满足执行的语句}

多条件if语句语法:if(条件1){条件1满足执行的语句}else if(条件2){条件2满足执行的语句}...else{都不满足执行的语句}

嵌套if语句:if语句中嵌套使用if语句

三目运算符
语法:表达式1 ? 表达式2 : 表达式3
如果表达式1的值为真,执行表达式2,并返回表达式3的结果
如果表达式1的值为假,执行表达式3,并返回表达式3的结果
案例:比较大小

int main()
{
    int a=10,b=20,c=0;
    c = (a>b ? a:b);   // 如果a>b成立,c=a,否则c=b
    cout<< "c=" << endl;
    return 0;
}

在三目运算中返回的变量可以继续赋值

switch语句,执行多条件分支语句,缺点是在判断的时候只能是整型或是字符型,不能是区间,优点是代码清晰执行效率高
语法:

switch(表达式)
{
    case 结果1:执行语句;break;
    case 结果2:执行语句;break;
    ...
    default:执行语句;break;
}

案例

//switch的简单应用
#include<iostream>
using namespace std;
int main()
{
    int score=0;
    cout<<"输入分数:"<<endl;
    cin>>score;
    switch(score)
    {
        case 10:
            cout<<"very good"<<endl;
        break;
        case 9:
            cout<<"very good"<<endl;
        break;
        case 8:
            cout<<"good"<<endl;
        break;
        case 7:
            cout<<"good"<<endl;
        break;
        case 6:
            cout<<"一般"<<endl;
        break;
        case 5:
            cout<<"一般"<<endl;
        break;
        case 4:
            cout<<"bad"<<endl;
        break;
        case 3:
            cout<<"bad"<<endl;
        break;
        case 2:
            cout<<"bad"<<endl;
        break;
        case 1:
            cout<<"bad"<<endl;
        break;
        case 0:
            cout<<"very bad"<<endl;
        break;
        default:
            cout<<"有毛病"<<endl;
    }
    return 0;
}

循环结构 

while循环

语法:while(循环条件){循环语句}只要执行条件为真就会执行循环语句
例子1:打印从1到9

#include<iostream>
using namespace std;
int main()
{
    int nums=0;
    while(nums<10)
    {
        cout<<nums<<endl;
        nums++;
    }
    return 0;
}

例子2:猜数字

//while循环猜数字
#include<iostream>
using namespace std;
int main()
{
    //生成随机数
    int nums = rand()%100 + 1;  //生成0~100的数
    //进行猜测
    int val = 0;
    while(1)
    {
        cin>>val;
        //判断猜测结果
        if(val > nums)
        {
            cout<<"猜大了"<<endl;
        }
        else if(val < nums)
        {
            cout<<"猜小了"<<endl;
        }
        else
        {
            cout<<"猜对了"<<endl;
            break;  //退出循环
        }

    }    
}

do...while循环语句

语法:do{循环语句}while(循环条件);
与while循环的区别是do...while会先执行一次循环语句然后再判断循环条件
例子:水仙花数(一个三位数,它每个位上的数字的三次幂之和等于它本身)
对数字取模于10可以获取个位数字
取模于100可以获取百位数字

#include<iostream>
using namespace std;
int main()
{
    int nums = 100;
    do
    {
        int a= 0,b= 0,c= 0;
        a = nums % 10;
        b = nums / 10 % 10;
        c = nums / 100;
        if(a*a*a + b*b*b + c*c*c == nums)
        {
            cout<<nums<<endl;
        }
        nums++;
    }
    while(nums<1000);
    return 0;      
}

for循环

语法:for(起始表达式;条件表达式;末尾循环体){循环语句}满足循环条件,执行循环语句
末尾循环体是执行完代码后多执行的代码,然后再判断是否符合条件然后接着循环

#include<iostream>
using namespace std;
int main()
{
    for (int a=10;a<100;a++)
    {
        cout<<a<<endl;
    }
    return 0;
}

跳转语句

break语句

作用是跳出循环结构或者选择结构
break使用的时机:
1、出现在switch条件语句中,作用是终止case并跳出switch
2、出现在循环语句中,作用是跳出当前的循环语句
3、出现在嵌套循环中,跳出最近的内层循环语句

选择结构中

#include<iostream>
using namespace std;
int main()
{
    cout<<"1"<<endl;
    cout<<"2"<<endl;
    int select=0;
    cin>>select;
    switch(select)
    {
        case 1:
            cout<<"1"<<endl;
            break;
        case 2:
            cout<<"2"<<endl;
            break;
        default:
            break;
    }
    return 0;
}

循环结构中

#include<iostream>
using namespace std;
int main()
{
    for(int i=0;i<10;i++)
    {
        if(i==5)
        {
            break;
        }
        cout<<i<<endl;
    }
    return 0;
}

continue语句

作用是再循环语句中,跳出本次循环中余下的尚未执行的语句(不继续执行),继续执行下一次循环

#include<iostream>
using namespace std;
int main()
{
    for(int i;i<100;i++)
    {
        if(i%2==0)
        {
            continue; // 当是偶数的时候跳出循环不继续执行下面代码,进入下次循环
        }
        cout<<i<<endl;
    }
    return 0;
}

break和continue两者的区别

continue不会退出循环
break会退出循环

goto语句

作用是可以无条件跳转语句
语法:goto 标记;
如果标记的名称存在,执行到goto语句时会跳转到标记的位置
标记:代表了标记的存在

#include<iostream>
using namespace std;
int main()
{
    cout<<"1"<<endl;
    cout<<"2"<<endl;
    cout<<"3"<<endl;
    goto FLAG;
    cout<<"4"<<endl;
    cout<<"5"<<endl;
    FLAG:
    cout<<"6"<<endl;
    return 0;
}

一维数组

概述

数组就是一个集合,里面存放了相同类型的数据元素

特点

1、数组中的每个数据元素都是相同的数据类型
2、数组是由连续的内存位置组成的

数组的定义方法

1、数据类型 数组名[ 数组长度 ];
2、数据类型 数组名[ 数组长度 ]={ 值1,值2……};
3、数据类型 数组名[ ]={ 值1,值2……};
例如第一种方法

#include<iostream>
using namespace std;
int main()
{
    int lst[5];
    lst[0]=10;  // 为数组中的元素进行赋值,下标,类似于python中的索引
    lst[1]=20;
    lst[2]=30;
    lst[3]=40;
    lst[4]=50;
    cout<<lst[0]<<endl;
    return 0;
}

第二种方法

#include<iostream>
using namespace std;
int main()
{
    int lst[5]={10,20,30,40,50};
    for(int i=0;i<5;i++)
    {
        cout<<lst[i]<<endl;
    }
    return 0;
}

第三种方法

#include<iostream>
using namespace std;
int main()
{
    int lst[]={10,20,30,40,50,60,70,80,90};
    for(int i=0;i<9;i++)
    {
        cout<<lst[i]<<endl;
    }
    return 0;
}

如果在初始化数据的时候没有全部填写,会用0来填充其余位置
定义数组的时候必须要有初始长度

名称用途

1、可以统计整个数组在内存中的长度
2、可以获取数组在内存中的首地址
sizeof可以获取数据类型的内存,可以计算数组的长度sizeof(lst)/sizeof(lst[ 0 ])
用途1

#include<iostream>
using namespace std;
int main()
{
    int lst[5]={1,2,3,4,5};
    cout<<sizeof(lst)<<endl;
    cout<<"数组长度:  "<<sizeof(lst)/sizeof(lst[0])<<endl;
    return 0;
}

用途2

#include<iostream>
using namespace std;
int main()
{
    int lst[5]={1,2,3,4,5};
    cout<<"数组首地址:"<<lst<<endl;
    cout<<"数组中第一个元素的地址:"<<&lst[0]<<endl;
    cout<<"数组中第二个元素的地址:"<<&lst[1]<<endl;
    return 0;
}

相关算法

1、求数组中最大值
先初始化最大值为0,访问数组中的每个元素并与初始化的最大值比较,如果数组中的元素大,则更新最大值

#include<iostream>
using namespace std;
int main()
{
    int lst[5]={1,2,3,4,5};
    int max=0;
    for(int i=0;i<5;i++)
    {
        if(lst[i]>max)
        {
            max=lst[i];
        }
    }
    cout<<max<<endl;
    return 0;
}

2、数组元素逆置

#include<iostream>
using namespace std;
int main()
{
    int lst[5]={1,2,3,4,5};
    cout<<"逆置前"<<endl;
    for(int i=0;i<5;i++)
    {
        cout<<lst[i]<<endl;
    }
    int start=0;  // 起始元素下标
    int end=sizeof(lst)/sizeof(lst[0]) - 1;  // 数组的末尾元素下标
    // 实现元素互换
    while(start<end)
    {
        int temp = lst[start];
        lst[start]=lst[end];
        lst[end]=temp;
        // 下标更新
        end--;
        start++;
    }
    cout<<"逆置后:"<<endl;
    for(int i=0;i<5;i++)
    {
        cout<<lst[i]<<endl;
    }
    return 0;
}

3、冒泡排序
作用:最常用的排序算法,对数组内元素进行排序
1、比较相邻的元素。如果第一个比第二个大,就交换他们两个
2、对每一对相邻的元素做同样的工作,执行完毕后,找到第一个最大值。
3、重复以上的步骤,每次比较次数减一,直到不需要比较。

#include<iostream>
using namespace std;
int main()
{
    int lst[9]={8,5,6,4,3,7,9,1,2};
    cout<<"排序前:"<<endl;
    for(int i=0;i<sizeof(lst)/sizeof(lst[0]);i++)
    {
        cout<<lst[i]<<" ";
    }
    cout<<endl;
    // 总共排序的轮数
    for(int i;i<sizeof(lst)/sizeof(lst[0]);i++)
    {
        //内层循环对比,等于元素个数-当前排序轮数-1
        for(int j=0;j<sizeof(lst)/sizeof(lst[0])-i-1;j++)
        {
            //如果第一个元素比第二个元素大,实现交换元素
            if(lst[j]>lst[j+1])
            {
                // 交换元素的代码
                int temp = lst[j];
                lst[j] = lst[j+1];
                lst[j+1] = temp;
            }
        }
    }
    cout<<"排序后:"<<endl;
    for(int i=0;i<sizeof(lst)/sizeof(lst[0]);i++)
    {
        cout<<lst[i]<<" ";
    }
    cout<<endl;
    return 0;
}

二维数组

二维数组就是在一维数组的基础上,多加一个维度

就是一维数组只有行的属性,二维数组比一维数组增加了一个列的属性,通常是以矩阵的形式呈现

二维数组的定义方式

1、数据类型 数组名[ 行数 ] [ 列数 ];
2、数据类型 数组名[ 行数 ] [ 列数 ] = { {1,2}, {3,4} };
3、数据类型 数组名[ 行数 ] [ 列数 ] = { 1,2,3,4 };
4、数据类型 数组名[][ 列数 ] = { 1,2,3,4 };
例如第一种方法

#include<iostream>
using namespace std;
int main()
{
	int arr[3][3];
    arr[0][0]=1;  // 为数组元素赋值,第一个下标表示行,第二个下标表示列
    arr[0][1]=2;
    arr[0][2]=3;
    arr[1][0]=4;
    arr[1][1]=5;
    arr[1][2]=6;
    arr[2][0]=7;
    arr[2][1]=8;
    arr[2][2]=9;
    cout<<arr[0][0]<<endl; // 访问数组元素,适合元素数量较少的情况
    cout<<arr[0][1]<<endl; // 当元素数量过多时,可以使用嵌套for循环
    cout<<arr[0][2]<<endl;
    return 0;
}

第二种方法(代码可读性更强)

#include<iostream>
using namespace std;
int main()
{
	int arr[3][3] =          // 创建二维数组
    {
        {1,2,3},
        {4,5,6},
        {7,8,9}
    };
    for(int i=0;i<3;i++)     // 遍历数组元素
    {
        for(int j=0;j<3;j++)
        {
            cout<<arr[i][j]<<endl;
        }
    }
    return 0;
}

第三种方法

#include<iostream>
using namespace std;
int main()
{
	int arr[3][3] = {1,2,3,4,5,6,7,8,9};
    for(int i=0;i<3;i++)
    {
        for(int j=0;j<3;j++)
        {
            cout<<arr[i][j]<<" ";
        }
        cout<<endl;
    }
    return 0;
}

第四种方法

#include<iostream>
using namespace std;
int main()
{
    int arr[][3] = {1,2,3,4,5,6,7,8,9};  // 计算机能自动识别出行数
    for(int i=0;i<3;i++)
    {
        for(int j=0;j<3;j++)
        {
            cout<<arr[i][j]<<" ";
        }
        cout<<endl;
    }
    return 0;
}

名称用途

1、查看二维数组所占内存空间
2、获取二维数组的首地址
用途1

#include<iostream>
using namespace std;
int main()
{
    int arr[3][3]=
    {
        {1,2,3},
        {4,5,6},
        {7,8,9}
    };
    cout<<"二维数组占用的内存空间:"<<sizeof(arr)<<endl;
    cout<<"二维数组第一行占用的内存:"<<sizeof(arr[0])<<endl;
    cout<<"二维数组第一个元素占用的内存:"<<sizeof(arr[0][0])<<endl;
    cout<<"二维数组的行数:"<<sizeof(arr)/sizeof(arr[0])<<endl;
    cout<<"二维数组的列数:"<<sizeof(arr[0])/sizeof(arr[0][0])<<endl;
    return 0;
}

用途2

#include<iostream>
using namespace std;
int main()
{
    int arr[3][3]=
    {
        {1,2,3},
        {4,5,6},
        {7,8,9}
    };
    cout<<"二维数组的首地址为:"<<arr<<endl;
    cout<<"二维数组第一行的首地址为:"<<arr[0]<<endl;
    cout<<"二维数组第一个数据的首地址为:"<<&arr[0][0]<<endl;
    return 0;
}

案例

输出这三名学生的成绩

语文数学英语
李明1008090
李华9010080
小明8090100
#include<iostream>
#include<string>
using namespace std;
int main()
{
    int scores[3][3]=   //创建二维数组
    {
        {100,80,90},
        {90,100,80},
        {80,90,100}
    };
    string name[3] = {"李明","李华","小明"};  //创建名字数组
    for(int i=0;i<sizeof(scores)/sizeof(scores[0]);i++)
    {
        int sum=0; // 初始化总分变量
        for(int j=0;j<sizeof(scores)/sizeof(scores[0]);j++)
        {
            sum+=scores[i][j];
        }
        cout<<name[i]<<"的总分为:"<<sum<<endl;
    }
    return 0;
}

 函数

概述

作用:将一段经常使用的代码封装起来,减少重复代码,提高代码可读性

定义

函数定义一般有五个步骤:
1、函数返回值的类型
2、函数名称
3、参数列表
4、函数体语句
5、return表达式
具体到语法中为(伪代码):

返回值类型 函数名( 参数列表 )
{
    函数体语句;

    return表达式;
}

例子(传入两个整形数据,返回相加的结果)

#include<iostream>
using namespace std;
int add(int num1,int num2)
{
    int sum=num1+num2;
    return sum;
}

函数的调用

使用已经定义好的函数

#include<iostream>
using namespace std;
int add(int num1,int num2)   // 形参
{
    int sum=num1+num2;
    return sum;
}
int main()
{
    int a=10,b=20;
    int c=add(a,b);    // 实参
    cout<<c<<endl;
    return 0;
}

函数定义中小括号里面的参数是形参,函数调用时传入的参数是实参

函数的值传递

值传递就是函数在调用时实参将数值传入给形参
值传递的过程中形参改变也不会影响实参
void是空类型,当函数不需要返回值的时候可以使用

#include<iostream>
using namespace std;
void swap(int num1,int num2)
{
    cout<<"交换前:"<<endl;
    cout<<"num1="<<num1<<endl;
    cout<<"num2="<<num2<<endl;
    int temp = num1;
    num1 = num2;
    num2 = temp;
    cout<<"交换后:"<<endl;
    cout<<"num1="<<num1<<endl;
    cout<<"num2="<<num2<<endl;
}
int main()
{
    int a=1,b=2;
    cout<<"a="<<a<<endl;
    cout<<"b="<<b<<endl;
    swap(a,b);
    cout<<"a="<<a<<endl;
    cout<<"b="<<b<<endl;
    return 0;
}
/*
运行结果如下所示,可知值传递的过程中,并没有改变a,b本身的值
a=1
b=2
交换前:
num1=1
num2=2
交换后:
num1=2
num2=1
a=1
b=2
*/

函数的声明

在函数定义之前,声明其存在
即把main()函数写到程序的最前方时,需要用到后续未写的函数时使编译器不报错

#include<iostream>
using namespace std;
int main()
{
    int max(int a,int b);   // 函数的声明,不写声明就调用的话会报错
    int a=100,b=200;
    cout<<"max="<<max(a,b)<<endl;
    return 0;
}
int max(int a,int b)
{
    if(a>b)
    return a;
    else
    return b;
    // 或者使用三目运算符 return a>b?a:b;
}

函数的声明可以写很多次(但是写一次就足够了),但是定义只能定义一次

函数的分文件编写

作用:当代码量很大时,让代码结构更清晰
步骤:
1、创建后缀名为.h的头文件
2、创建后缀名为.cpp的源文件
3、在头文件中写函数声明
4、在源文件中写函数定义

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值