1、掌握c++语言程序结构。 2、赋值语句。 3、格式化输入输出。 4、掌握基本数学函数运算。 5、数据类型的种类及其互换。

登录以参加训练计划

1、从A+B问题认识C++代码结构


#include<iostream> 
using namespace std;
int main() {
  int a,b;//定义两个整数变量
  cin>>a>>b;//输入两个整数
  cout<<a+b;//计算两个数的和并输出
  return 0;
  /*
这里是段落注释,对开发人员可见,对编译器不可见。
  */
}

详细解释上面每一行代码的含义:

(1)、#include<iostream> C++是一种需要编译的高级语言。这句话是告诉编译器在编译之前将标准头文件的内容插入到当前的源文件中。这样我们就可以在当前文件中使用cin,cout这些功能。不同的系统函数会分布在不同的库,这就像我们外出旅游,需要携带不回的工具包。对于初学者如果需要记忆的较多。我们也可以用万能头#include<bits/stdc++.h>代替一个个include。

(2)、using namespace std;它的作用是将命名空间中的所有标识符引入到当前作用域。这意味者你可以直接使用std命名空间中的函数,和变量。而不会每次都加上std::前缀。比如你有两个函数都叫jump,一个是在动物命名空间内的,一个是在游戏命名空间内的。如果你想让一个动物跳,你会说“动物 jump”,如果你想在游戏中让角色跳,你会说“游戏角色 jump”。

(3)、int main() {...} 这是主函数。一个程序文件可以有多个函数组成,但一个程序必须有且只有一个主函数,主函数的名字为int main(),int 是返回值,main是函数名,()表示里面的参数为空。无论main()函数在程序的哪个位置,程序都是从main()函数开始执行,main()函数执行完毕,程序也就结束了。因此,我们遇到程序阅读题时,也是要先从main()函数开始看。

(4)注释 行注释(“//”)和段注释(“/* */”),主要是使程序更易于理解,程序编译时,注释部分自动忽略。

(5)关于符号。“#include”,"",";",","(同一行声名多个变量时用逗号分开,后面章节还会遇到很多使用逗号的情况),每一行语句都要用";"号结束,但函数头和“{“、”}”后面不用加分号(struct结构体例外)。

代码从上到下,一行行执行。


2、输入输出


输入:

scanf("%d",&a)

cin>>a

输出:

cout << a

printf("%d",a)

scanf()printf()

  • int -> %d 整型 4字节
  • long long -> %lld 长整型 8字节
  • double -> %lf 双精度浮点数 8字节 精确计算到小数点后 15
  • float -> %f 单精度浮点 4字节 精确计算到小数点后 6
  • char -> %c 字符 跟 ASCII码值有关系。需了解 ASCII当中关键的几个字符值。
    • a -> 97
    • z -> 122
    • A->65
    • Z -> 90
    • -> 32
    • 0 -> 48
    • \n -> 10
    • 9 -> 57
  • bool 只有 truefalse 1字节

3、格式化输出


带小数点的输出:

  • c语言输出
    • printf("%.2lf",a); // 代表保留小数点后2位数。adouble类型
    • printf("%4d",a); // 代表向右对齐4个空间位置。如果不满足4个空间左边填充空格。
    • printf("%-4d",a); // 代表向左对齐4个空间位置。如果不满足4个空间右边填充空格。
  • c++语言输出
    • 需要加头文件:#include<iomanip>
    • cout<<fixed<<setprecision(3)<<a<<endl;//代表保留小数点后3位数。
    • cout << left << setw(6) << a << endl;//向左对齐6个空间
    • cout << setw(6) << a << endl;//向右对齐6个空间

4、数学函数


需要头文件 #include <cmath>或#include<algorithm>两者侧重点不同//如果用万能头#include<bits/stdc++.h>可以不用区分。

  • b = sqrt(a)对a数字进行开根号,结果存在 b当中
  • b = pow(c,a) 计算 ca次方,赋值给 b
  • b = fabs(a)a的绝对值赋值给 b
  • b = max(a,c)ac当中的最大值赋值到 b当中。a c一定要同样的数值类型
  • b = min(a,c)ac当中的最小值赋值到 b当中。a c一定要同样的数值类型
  • b = ceil(a) 对于 a进行向上取整。
  • b = floor(a) 对于 a进行向下取整。
  • b = round(a)a进行四舍五入操作,遵循‘向远离零的方向舍入’。
  • swap(a,b) 交换a和b

5、数据类型及其转换规则

在C++中,常见的数据类型包括基本类型复合类型。基本类型如整型、浮点型、字符型等,复合类型如数组、结构体、类等。这里主要讨论基本数据类型及其转换规则。

(1) 基本数据类型

1,整型 (Integer Types)
  • char: 单个字符,通常占用 1 字节。
  • short: 短整型,通常占用 2 字节。
  • int: 标准整型,通常占用 4 字节。
  • long: 长整型,至少占用 4 字节,但通常也是 4 字节。
  • long long: 长长整型,至少占用 8 字节。
2,无符号整型 (Unsigned Integer Types)
  • unsigned char, unsigned short, unsigned int, unsigned long, unsigned long long: 与对应的整型相同,但是只能表示非负数。
3. 浮点型 (Floating Point Types)
  • float: 单精度浮点型,通常占用 4 字节。
  • double: 双精度浮点型,通常占用 8 字节。
  • long double: 扩展精度浮点型,至少占用 8 字节,但实际大小取决于编译器。
4. 字符类型 (Character Types)
  • char: 字符类型,通常占用 1 字节。
  • wchar_t: 宽字符类型,用于表示宽字符,占用字节数根据实现而定。
5. 布尔类型 (Boolean Type)
  • bool: 布尔类型,只能表示 truefalse,通常占用 1 字节。
6. 空类型 (Void Type)
  • void: 表示没有类型或类型未知。
7. 指针类型 (Pointer Types)
  • 指针类型用于存储其他变量的地址。

(2)数据类型转换规则

1. 隐式类型转换 (Implicit Conversion)
  • 当不同类型的数据混合使用时,编译器自动将较小的数据类型转换为较大的数据类型。
    • 例如,int + float 会自动将 int 转换为 float,然后进行运算。
2. 显式类型转换 (Explicit Conversion)
  • 显式类型转换也称为类型强制转换 (Type Casting),需要程序员明确指定。
    • 例如,(double) xstatic_cast<double>(x)x 强制转换为 double 类型。
3. 窄化转换 (Narrowing Conversion)
  • 当从较大的数据类型转换到较小的数据类型时,可能发生信息丢失。
    • 例如,将 double 转换为 int 时,小数部分将被截断。
    • 这种转换通常需要显式进行,以避免编译警告或错误。
4. 复合赋值运算符 (Compound Assignment Operators)
  • 在使用复合赋值运算符(如 +=-= 等)时,编译器会对操作数进行适当的类型转换。
    • 例如,int i = 1; i += 2.5; 会先将 i 转换为 double,执行加法后,再将结果转换回 int
5. 用户定义的类型转换 (User-Defined Conversions)
  • 通过构造函数、转换运算符等可以定义自己的类型转换逻辑。

举个栗子:

下面是一个简单的示例,展示了不同类型之间的转换:

#include <iostream>

int main() {
    int i = 10;
    double d = 20.5;
    char c = 'a';

    // 隐式类型转换
    double sum = i + d; // i 会自动转换为 double

    // 显式类型转换
    int result = static_cast<int>(d); // 截断小数部分

    // 用户定义的类型转换
    class MyClass {
    public:
        MyClass(int val) : value(val) {}
        operator double() const { return static_cast<double>(value); }
    private:
        int value;
    };

    MyClass obj(5);
    double converted = obj; // obj 被转换为 double

    std::cout << "Sum: " << sum << std::endl;
    std::cout << "Result: " << result << std::endl;
    std::cout << "Converted: " << converted << std::endl;

    return 0;
}

这段代码演示了不同类型之间的转换,包括隐式转换、显式转换以及用户定义的转换。


6、变量的命名规则

变量只能由 大小写字母,数字,下划线,组成。

  • 不能以数字开头。
  • 不能使用关键字定义变量

7、运算简写

a = a + b 同等于 a+=b

a = a - b 同等于 a-=b

a = a * b 同等于 a*=b

a = a / b 同等于 a/=b

a = a % b 同等于 a%=b ,(C++的取余数与数学领域的取余数不同。)

章节 1. 新手

开放

题目 尝试 AC 难度
P1  【例2.1】Hello World 367 94 1
P3  练2.1 春节快乐 213 96 1
P6  【例3.2】 打印长方形 125 49 5
P10  【例4.1】 交换两个数的位置 123 47 5
P11  【例4.2】 天安门广场的面积 85 50 2

章节 2. 师傅

开放

题目 尝试 AC 难度
P16  【例5.1】量身高 93 40 4
P17  【例5.2】输出第二个整数 70 46 2
P18  练5.1 复读机 66 38 3
P20  练5.3 电影票 67 40 2
P21  【例6.1】 比赛成绩 62 41 1
P22  【例6.2】捡石头 50 37 1
P23  【例6.3】 套盒子 99 38 5
P25  练6.2 兴趣小组 56 33 2

章节 3. 大神

开放

题目 尝试 AC 难度
P27  【例7.1】保留3位小数 64 34 1
P31  练7.3买图书 70 29 5
P33  【例8.1】人民币支付 74 24 6
P35  【例8.3】计算球的体积 68 20 6
P39  练8.4带余除法 32 22 2
P40  练8.5 幸运数 113 14 2
P41  【例9.1】输出字符三角形 44 18 5
P43  【例9.3】小写字母转大写字母 60 23 5
P52  【例11.1】鸡兔同笼 34 12 6
P68  【例13.3】时间差 15 7 8
 
参加人数
41
创建人