CPP基本语法笔记(中)

简介: CPP基本语法笔记

4.跳转语句


①break


可以提前从循环中退出,一般与if语句搭配。


例题:判断一个大于1的数是否是质数:


#include <iostream>
using namespace std;
int main()
{
    int n;
    cin >> n;
    bool is_prime = true;
    for (int i = 2; i < n; i ++ )
        if (n % i == 0)
        {
            is_prime = false;
            break;
        }
    if (is_prime) cout << "yes" << endl;
    else cout << "no" << endl;
    return 0;
}


②continue


可以直接跳到当前循环体的结尾。作用与if语句类似。


例题:求1~100中所有偶数的和。


#include <iostream>
using namespace std;
int main()
{
    int sum = 0;
    for (int i = 1; i <= 100; i ++ )
    {
        if (i % 2 == 1) continue;
        sum += i;
    }
    cout << sum << endl;
    return 0;
}


5.多层循环


#include <iostream>
using namespace std;
int main()
{
    for (int i = 0, k = 1; i < 10; i ++ )
    {
        for (int j = 0; j < 10; j ++, k ++ )
        {
            cout << k << ' ';
        }
        cout << endl;
    }
    return 0;
}


练习:输入一个n,打印n阶菱形。n是奇数。


n = 9时的结果:


*    
***
*****
*******


*******
*****
***
   * 


#include <iostream>
using namespace std;
int main()
{
   int n;
   cin >> n;
   int cx = n / 2, cy = n / 2;
   for (int i = 0; i < n; i ++ )
   {
       for (int j = 0; j < n; j ++ )
           if (abs(i - cx) + abs(j - cy) <= n / 2)
               cout << '*';
           else cout << ' ';
       cout << endl;
   }
   return 0;
}


曼哈顿距离计算公式算法


四、数组


1.一维数组


1.1数组的定义


#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    int a[10], b[10];
    float f[33];
    double d[123];
    char c[21];
    return 0;
}


1.2数组的初始化


#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    int a[3] = {0, 1, 2};           // 含有3个元素的数组,元素分别是0, 1, 2
    int b[] = {0, 1, 1};            // 长度是3的数组
    int c[5] = {0, 1, 2};           // 等价于c[] = {0, 1, 2, 0, 0},没有给出的值默认为0
    char d[3] = {'a', 'b', 'c'};    // 字符数组的初始化
    int f[10] = 0; // 将数组全部初始化的常用方式
    return 0;
}


1.3数组元素的访问(下标访问)


#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    int a[3] = {0, 1, 2};  // 数组下标从0开始
    cout << a[0] << ' ' << a[1] << ' ' << a[2] << endl;
    a[0] = 5;
    cout << a[0] << endl;
    return 0;
}


数组旋转


#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    int n, k;
    int a[100];
    cin >> n >> k;
    for (int i = 0; i < n; i ++ ) cin >> a[i];
    reverse(a, a + k);
    reverse(a + k, a + n);
    reverse(a, a + n);
    for (int i = 0; i < n; i ++ ) cout << a[i] << ' ';
    cout << endl;
    return 0;
}


2.多维数组


int a[3][4]; // 大小为3的数组,每个元素是含有4个整数的数组。


int arr[10][20][30] = {0}; // 将所有元素初始化为0


// 大小为10的数组,它的每个元素是含有20个数组的数组


// 这些数组的元素是含有30个整数的数组


#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    int b[3][4] = {         // 三个元素,每个元素都是大小为4的数组
        {0, 1, 2, 3},       // 第1行的初始值
        {4, 5, 6, 7},       // 第2行的初始值
        {8, 9, 10, 11}      // 第3行的初始值
    };
    return 0;
}


五、字符串


1.ASCII码


每个常用字符都对应一个-128 ~ 127的数字,二者之间可以相互转化。注意:目前负数没有与之对应的字符。


#include<iostream>
using namespace std;
int main()
{
    char a;
    printf("%d", 'a' + 3);
    return 0;
}


常用ASCII值:‘A’- 'Z’是65 ~ 90,‘a’ - 'z’是97 - 122,0 - 9是 48 - 57。

字符可以参与运算,运算时会将其当做整数


2.字符数组


字符串就是字符数组加上结束符’\0’。


可以使用字符串来初始化字符数组,但此时要注意,每个字符串结尾会暗含一个’\0’字符,因此字符数组的长度至少要比字符串的长度多 11 !


2.1输入输出


#include <iostream>
using namespace std;
int main()
{
    char str[100];
    cin >> str;             // 输入字符串时,遇到空格或者回车就会停止
    cout << str << endl;    // 输出字符串时,遇到空格或者回车不会停止,遇到'\0'时停止
    printf("%s\n", str);
    return 0;
}


读入一行字符串,包括空格


#include <iostream>
using namespace std;
int main()
{
    char str[100];
    fgets(str, 100, stdin);  // gets函数在新版C++中被移除了,因为不安全。
                             // 可以用fgets代替,但注意fgets不会删除行末的回车字符
    string s;
    getline(cin, s);    //读入字符串
    cout << str << endl;
    return 0;
}


2.2常用操作


下面函数需要引入头文件


#include<string.h>


(1) strlen(str),求字符串的长度


(2) strcmp(a, b),比较两个字符串的大小,a < b返回-1,a == b返回0,a > b返回1。这里的比较方式是字典序!


(3) strcpy(a, b),将字符串b复制给从a开始的字符数组。


3.标准库类型string


引入头文件


#include<string>


3.1定义和初始化


#include <iostream>
#include <string>
using namespace std;
int main()
{
    string s1;              // 默认初始化,s1是一个空字符串
    string s2 = s1;         // s2是s1的副本,注意s2只是与s1的值相同,并不指向同一段地址
    string s3 = "hiya";     // s3是该字符串字面值的副本
    string s4(10, 'c');     // s4的内容是 "cccccccccc"
    return 0;
}
//scanf无法读入string,但printf可以输出


3.2string操作


(1)读写


#include <iostream>
#include <string>
using namespace std;
int main()
{
    string s1, s2;
    cin >> s1 >> s2;
    cout << s1 << s2 << endl;
    return 0;
}


注意:不能用printf直接输出string,需要写成:


printf(“%s”, s.c_str());


(2)getline


#include <iostream>
#include <string>
using namespace std;
int main()
{
    string s;
    getline(cin, s);
    cout << s << endl;
    return 0;
}


(3)string的empty和size操作(注意size是无符号整数,因此 s.size() <= -1一定成立)


#include <iostream>
#include <string>
using namespace std;
int main()
{
    string s1, s2 = "abc";
    cout << s1.empty() << endl; //empty,如果是空返回0,不是空返回1
    cout << s2.empty() << endl;
    cout << s2.size() << endl;//求长度,时间复杂度O(1)
    return 0;
}


(4)string的比较


支持 >, <, >=, <=, ==, !=等所有比较操作,按字典序进行比较。


(5)为string对象赋值


string s1(10, 'c'), s2;     // s1的内容是 cccccccccc;s2是一个空字符串
s1 = s2;                    // 赋值:用s2的副本替换s1的副本
                            // 此时s1和s2都是空字符串


(6)两个string对象相加


string s1 = "hello,  "", s2 = "world\n";
string s3 = s1 + s2;                    // s3的内容是 hello, world\n
s1 += s2;                               // s1 = s1 + s2


(7)字面值和string对象相加


做加法运算时,字面值和字符都会被转化成string对象,因此直接相加就是将这些字面值串联起来


当把string对象和字符字面值及字符串字面值混在一条语句中使用时,必须确保每个加法运算符的两侧的运算对象至少有一个是string


string s4 = s1 + ", ";  // 正确:把一个string对象和有一个字面值相加
string s5 = "hello" + ", "; // 错误:两个运算对象都不是string
string s6 = s1 + ", " + "world";  // 正确,每个加法运算都有一个运算符是string
string s7 = "hello" + ", " + s2;  // 错误:不能把字面值直接相加,运算是从左到右进行的
相关文章
|
6月前
|
编译器 Go
Go 语言基础:包、函数、语句和注释解析
一个 Go 文件包含以下几个部分: 包声明 导入包 函数 语句和表达式 看下面的代码,更好地理解它:
66 0
|
5月前
|
存储 Java Go
|
5月前
|
Java Go Scala
|
5月前
|
存储 Java Unix
|
6月前
|
编译器 程序员 C语言
C语言进阶教程(include只能包含.h文件吗?)
C语言进阶教程(include只能包含.h文件吗?)
115 0
|
6月前
|
存储 Go 索引
Go 语言中 For 循环:语法、使用方法和实例教程
for循环用于多次执行特定的代码块,每次都可以使用不同的值。每次循环执行都称为一次迭代。for循环可以包含最多三个语句: 语法
114 0
|
数据安全/隐私保护 C++ 容器
|
Python
python的文件内注释 help注释写法
python的文件内注释 help注释写法
103 0
|
存储 Kubernetes 安全