• C++ | 12天学好C++(代码加通俗理解)


    看了这篇博客,将会学到C++的基本操作!(如果不敲代码,可能会一知半解)

    12天学好C++ 系列(Day1)


     第一天 - 220927

    目录

     第一天 - 220927

    1.基础

    2.C++的基本要素

    2.1.C++输出

     2.2.名字命名和std::

    2.3.cin输入

    2.4.定义输入类型

    2.5.#include和预处理器

    练习:


    1.基础

    练习环境IDE:Visual Studio 2022

    .cpp文件是c++的默认文件格式

    .exe文件是启动文件

    c++中创建文件时,自动生成.h文件和.cpp文件

    #include

    *每行代码要注意

    *一个项目里面只能有一个main,要不然出错

    *每个solution建立不同的项目

    1. #include
    2. int main() {
    3. int a = 10;
    4. int b = 20;
    5. int sum;
    6. sum = a + b;
    7. std::cout << sum;
    8. std::cout << "My name is mike.\n";
    9. return 0;
    10. }

    2.C++的基本要素

    2.1.C++输出

    1. #include
    2. int main() {
    3. std::cout << "Hi\n";
    4. std::cout << "第二章第一节";
    5. return 0;
    6. }

     数据类型:bool布尔类型(true/FALSE),char字符(“mike”),short,int,long,float,double

    1. #include
    2. double area(int r);
    3. double area(int r) {
    4. return 3.14 * r * r;
    5. }
    6. int main() {
    7. int n = 3;
    8. char c = '#';
    9. std::cout << c << 5.5 << '-' << "Hi" << true << std::endl;
    10. std::cout << "n+5=" << n + 5 << '\n';
    11. std::cout << "面积是" << area(n);
    12. }

     总结2.1:

    - cout是输出

     2.2.名字命名和std::

    C++中引入命名空间的主要是为了处理程序中常见的命名冲突,它是由ANSI C++引入的可以由用户命名的作用域。所谓命名空间,实际上就是一个由程序设计者命名的内存区域 ,程序设计者可以根据需要指定一些有名字的空间域,把一些全局实体分别放在各个命名空间中,从而与其它全局实体分隔开来。

    不同的命名空间可以有相同的类名被定义 。

    using namespace std;就是指明下面的程序使用std,如果不用这句指明的话就要用std:string(string是std空间中定义的,也可以在全局空间中定义,只要名字空间不一样即可)。否则可以默认名字空间中有std.便不用std:来修饰。

    2.3.cin输入

    1. #include
    2. using namespace std;
    3. int main() {
    4. cout << "Input width,please\n" << endl;
    5. int width;
    6. cin >> width;
    7. cout << "Please input height\n";
    8. int height;
    9. cin >> height;
    10. /*方法一
    11. cout << "长乘宽为:" << width * height ;*/
    12. /*方法二*/
    13. int area = width * height;
    14. cout << "Area is :" << area << "\n";
    15. }

     结果:

     2.4.定义输入类型

    2.4.1.字符定义的长度设置

    1. #include
    2. using namespace std;
    3. int main() {
    4. cout << "please input your name\n" ;
    5. char name[11];
    6. cin >> name;
    7. cout << "Name is \n" << name<<"\n";
    8. }

    结果: 

     

    2.4.2.引用里的strcmp()

    1. #include
    2. #include
    3. using namespace std;
    4. int main() {
    5. char password[11];
    6. cout << "please input your password\n"<
    7. while (true) {
    8. cout << "password >>";
    9. cin >> password;
    10. if (strcmp(password, "C++") == 0) {
    11. cout << "That is End" << endl;
    12. break;
    13. }
    14. else {
    15. cout << "Password is wrong" << endl;
    16. }
    17. }
    18. }

     结果:

    - strcmp():strcmp函数是string compare(字符串比较)的缩写,用于比较两个字符串并根据比较结果返回整数。基本形式为strcmp(str1,str2),若str1=str2,则返回零;若str1str2,则返回正数。

     - #include :在C++标准化过程中,C++为了向前兼容C语言,标准化组织将所有C语言的头文件都进行了新的定义,加入到了标准库中,加入后的文件名就新增了一个"c"前缀并且去掉了.h的后缀名,所以头文件成了头文件,其实现是相同的或是兼容以前的。要注意,此时的依然不是对应着string数据类型,仍然是字符数组char[]

    - while语法结构:

      while (表达式)

            循环语句;

    详细内容请参考

    2.4.3.利用cin.getline()的文字输入

    1. #include
    2. using namespace std;
    3. int main() {
    4. cout << "Please input your Address:\n"<
    5. char address[100];
    6. cin.getline(address, 100, '\n');
    7. cout << "Address is :" << address << endl;
    8. }

    输出结果: 

     

    - cin.getline():会从输入获取一串指定范围内的字符赋值给 字符数组 或者 字符串变量,该函数语法为:

    cin.getline( 字符指针 ( char * ),字符个数 ( int ),结束符 ( char ) );

    2.4.4.利用string()的文字输入

    1. #include
    2. #include
    3. using namespace std;
    4. int main() {
    5. string song("Falling in love with you 。");
    6. string elvis("Elvis presley");
    7. string singer;
    8. cout << song+ "singer\n" ;
    9. cout << "Tips:First letter is "<0]<<")?";
    10. getline(cin,singer);
    11. if (singer == elvis)
    12. cout << "Right!";
    13. else
    14. cout << "That's False." + elvis << endl;
    15. }

    结果为:

    总结 2.4

    - 数据类型的占内存问题

    - ASCII编码

    2.5.#include和预处理器

    想要了解为什么调用这句命令就要了解C++的编译原理。

     图1来自【1】:C++编译器系统。编译器实际上由三个单独的程序组成:

    1. 预处理器Preprocessor
    2. 代码转换器,通常也称为“编译器”。为了避免混淆,我们将中间程序称为编译器组件
    3. 链接器(在某些操作系统上也称为加载程序)

     现在的集成开发环境 (IDE)(如 Visual Studio)将预处理器、编译器和链接器捆绑在一起,因此它们作为单个单元工作,并通过单个通用接口进行操作。

    图1中预处理器:#define和#include。预处理器处理以 # 字符开头的指令,并创建一个临时文件来存储其输出。编译器组件(中间的“气泡”)读取临时文件并继续编译过程。图也说明了预处理器如何扩展宏:#define NAME_SIZE 25

    1. 程序员在C++源代码中编写“NAME_SIZE”
    2. 预处理器将字符替换为字符NAME_SIZE25
    3. 编译器组件“看到”并编译“25”而不是NAME_SIZE

    下图为 编译器的操作:

      图2完整的C++编译过程。程序员在多个文件中编写大型、复杂的C++程序,包括源代码 (.cpp) 和头文件 (.h)。前两个编译器组件独立处理源代码文件(即,一次处理一个)。链接器(或加载器)是将程序作为完整实体进行处理的唯一组件。

    1. 预处理器执行由指令指定的文本替换,并复制用指令命名的文件的内容,将结果存储在临时文件中。#define#include
    2. 编译器组件将预处理的源代码文件的内容转换为机器代码,并将机器代码存储在对象文件中。对象文件名在 Windows 系统上以“.obj”扩展名结尾,在 Linux 和 macOS 系统上以“.o”扩展名结尾。对象文件主要由机器代码组成,但也有一个字典,列出文件中定义的函数和变量。链接器/加载器使用字典来联接对象文件。
    3. 链接器/加载器组合或链接所有对象文件、任何需要的库代码和一个小的运行时文件,以形成一个可执行程序。可执行文件名在Windows计算机上以“.exe”扩展名结尾;其他操作系统遵循不同的命名约定。

    了解了c++整体编译,那么我们再看看头文件。

    2.5.1.头文件

    在申明头文件时,文件是没有扩展名的文本文件。它存在于安装编译器的文件夹下的include文件夹中。换句话说,类似于开头引用了封装好的文件。

    它的路径是:

    C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.30.30705\include

    可查看iostream文件

     2.5.2.#include<头文件>和#include"头文件"的区别

    #include<头文件>是在安装编译器的文件夹中搜索的指令

    例如:#include指在安装编译器的文件夹中查找iostream文件。

    #include"头文件"是指在开发者的项目文件夹或编译选项中开发者指定的include文件夹中查找。(可查找那些.h文件)

    练习:

    练习:1:结果是什么?

    1. #include
    2. using namespace std;
    3. int main() {
    4. int a = 100;
    5. int b,c,d,e,f;
    6. b = a++;
    7. c = ++a;
    8. d = a + c;
    9. e = +a;
    10. f = c + e;
    11. cout << b <<'\n' << c << '\n' << d <<'\n' << e<<'\n' << f<
    12. }

     练习2:比大小

    1. #include
    2. using namespace std;
    3. int main() {
    4. cout << "比大小:Input two numbers:"<< endl;
    5. int a,b ;
    6. cin >> a>>b;
    7. if (a > b)
    8. cout << a << "大于" << b;
    9. else if (b > a)
    10. cout << b << "大于" << a;
    11. else
    12. cout << b << "=" << a;
    13. }

    练习3:打印100个数

    练习4:打印99乘法表

  • 相关阅读:
    力扣--动态规划1027.最长等差数列
    基础知识-网络与服务器
    【ACL2023】Event Extraction as Question Generation and Answering
    【区块链 | Compound】5.剖析DeFi借贷产品之Compound:延伸篇
    sharding-jdbc分库分表(一)
    L1-035 情人节 c++解法
    ip大小比较的方法
    iOS SwiftUI ☞ 生命周期
    量子力学与哲学的交叉:现实性,自由意志和意识
    代码随想录刷题记录 day32无重叠区间 划分字母区间 合并区间
  • 原文地址:https://blog.csdn.net/weixin_44649780/article/details/127075563