【C++ 程序设计】实战:C++ 实践练习题(1~10)

news2024/11/18 19:27:30

目录

01. 二维数组

02. 奇偶性 

03. 指针与变量

04. 员工薪资 

05. 整型值(%4d 进行格式化)

06. 求三个数中的最大值和最小值

07. 同一字母次数统计

08. 字符串回文判断

09. 闰年判断

10. 交换两个双精度数



01. 二维数组

#include <stdio.h>

int main() {
    int a[3][3] = {   // 定义一个3x3的二维数组a,并初始化
        {1, 4, 17},
        {3, 6, 19},
        {2, 5, 18}
    };
    int i, s = 0;  // 定义变量i和s,并将s初始化为0

    // 使用for循环计算对角线元素的和
    for (i = 0; i <= 2; i++) {
        s = s + a[i][2 - i];  // 累加对角线元素的值到变量s
    }

    printf("s=%d\n", s);  // 输出变量s的值
    return 0;
}

【代码详解】

  • 首先,定义了一个 3x3 的二维数组 a,并对其进行初始化。
  • 接着,声明了变量 i 和 s 并将 s 初始化为 0。
  • 进入 for 循环,从 i=0 开始,迭代到 i<=2 为止。在每次迭代中,计算 a[i][2 - i] 的对角线元素,并将其累加到变量 s 上。
  • 循环结束后,使用 printf 输出变量 s 的值。
  • 最后,程序返回 0,表示正常执行完毕。

【执行结果】

  • 在给定的数组a中,对角线元素包括 1,6 和 18。
  • 因此,这些元素的和是 1 + 6 + 18 = 25。
  • 所以,输出的结果为 s=25。
s=25


02. 奇偶性 

#include <stdio.h>

int main() {
    int i;

    for(i = 0; i < 5; i++) {
        switch(i % 2) {   // 对i取模2的结果进行switch判断
            case 0:   // 如果结果为0
                printf("1");   // 输出1
                break;   // 跳出switch语句
            case 1:   // 如果结果为1
                printf("0");   // 输出0
        }
    }
}

【代码详解】

  • 首先,声明了一个变量 i。
  • 进入 for 循环,从 i=0 开始,迭代到 i<5 为止。每次迭代,i 自增 1。
  • 在每次循环迭代中,使用 switch 语句对 i 取模 2 的结果进行判断。
  • 当 i 被 2 整除时(i % 2 的结果为 0),执行 case 0 的代码块,即输出 1。
  • 当 i 除以 2 有余数时(i % 2 的结果为 1),执行 case 1 的代码块,即输出 0。
  • 最后,循环结束,程序执行完毕。
  • 根据上述逻辑,当循环迭代 5 次时,输出结果为 10101。

【循环逻辑】

  • 在第一次循环迭代时,i 的值为 0,0 对 2 取模的结果为 0,因此执行 case 0 的代码块,输出 “1”。
  • 在第二次循环迭代时,i 的值为 1,1 对 2 取模的结果为 1,因此执行 case 1 的代码块,输出 “0”。
  • 在第三次循环迭代时,i 的值为 2,2 对 2 取模的结果为 0,因此执行 case 0 的代码块,输出 “1”。
  • 在第四次循环迭代时,i 的值为 3,3 对 2 取模的结果为 1,因此执行 case 1 的代码块,输出 “0”。
  • 在第五次循环迭代时,i 的值为 4,4 对 2 取模的结果为 0,因此执行 case 0 的代码块,输出 “1”。

【数学逻辑】

  • 对于循环迭代变量 i 的取值范围为 0 到 4(i < 5)。
  • 在每次迭代中,计算 i 除以 2 的余数(i % 2)。
  • 如果余数为 0,表示 i 可以被 2 整除,即 i 是偶数。
  • 如果余数为 1,表示 i 除以 2 有余数,即 i 是奇数。
  • 根据 i 的奇偶性,输出相应的数字:当 i 为偶数时输出 “1”,当 i 为奇数时输出 “0”。
  • 根据循环迭代次数为 5 次,依次检查:0,1,2,3,4。
  • 根据上述数学公式,依次输出:1,0,1,0,1。
  • 因此,输出结果为:“10101”。

【执行结果】 

10101


03. 指针与变量

#include <stdio.h>

int main() {
    int x = 20, y = 40, *p;   // 声明整型变量x和y,并定义指针变量p

    p = &x;   // 将指针p指向变量x
    printf("%d,", *p);   // 输出p所指向的变量的值,即x的值

    *p = x + 10;   // 修改p所指向的变量的值为x+10

    p = &y;   // 将指针p指向变量y
    printf("%d\n", *p);   // 输出p所指向的变量的值,即y的值

    *p = y + 20;   // 修改p所指向的变量的值为y+20

    printf("%d,%d\n", x, y);   // 输出变量x和y的值
    return 0;
}

【代码详解】

  • 首先,声明了整型变量x和y,并将x初始化为20,y初始化为40。
  • 声明了指针变量p,用于存储变量的内存地址。
  • 将指针p指向变量x,即将p赋值为x的地址。此后,p指向了x变量。
  • 使用printf输出*p的值,即指针p所指向的变量的值,这里输出20。
  • 修改指针p所指向的变量的值为x+10,即将指针p指向的变量(即x)的值修改为30。
  • 将指针p指向变量y,即将p赋值为y的地址。此后,p指向了y变量。
  • 使用printf输出*p的值,即指针p所指向的变量的值,这里输出40。
  • 修改指针p所指向的变量的值为y+20,即将指针p指向的变量(即y)的值修改为60。
  • 使用printf输出变量x和y的值,这里分别输出了x的值60和y的值60。
  • 在代码执行过程中,指针p的值发生了变化,但它一直指向的是x和y这两个变量。对p的修改实际上是修改了p所指向的变量的值。

【执行结果】

20,40
30,60


04. 员工薪资 

#include <stdio.h>
#include <string.h>

#define _CRT_SECURE_NO_WARNINGS  // 禁止显示 C4996 错误

struct worker {
    char name[15];
    int age;
    float pay;
};

int main() {
    struct worker x;               // 声明 worker 结构体类型的变量 x
    const char* t = "Lilei";       // 使用 const char * 来接收字符串常量 "Lilei"
    int d = 20;                    // 声明整型变量 d,赋值为 20
    float f = 100;                 // 声明浮点型变量 f,赋值为 100

    strcpy_s(x.name, sizeof(x.name), t);   // 将字符串 t 复制给结构体变量 x 的 name 成员
    x.age = d * 2;                 // 将 d 的两倍赋值给结构体变量 x 的 age 成员
    x.pay = f * d;                 // 将 f 乘以 d 的结果赋值给结构体变量 x 的 pay 成员

    printf("%s\t%d\t%.0f\n", x.name, x.age, x.pay);
    // 输出结构体变量 x 的 name、age 和 pay 成员的值,并分别用制表符分隔

    return 0;
}

【代码详解】

  • 首先,包含了 <stdio.h> 和 <string.h> 头文件,分别用于输入输出和字符串处理。
  • 定义了一个结构体 worker,含有三个成员:name (字符数组类型,用于存储工人姓名),age (整型,用于存储工人年龄) 和 pay (浮点型,用于存储工人薪水)。
  • 在 main 函数中声明了一个 worker 类型的变量 x。
  • 声明了一个指针变量 t,指向字符串 “Lilei”。
  • 声明了整型变量 d,赋值为 20。
  • 声明了浮点型变量 f,赋值为 100。
  • 使用 strcpy 函数将字符串 t 复制到结构体变量 x 的 name 成员中。
  • 将 d 的两倍赋值给结构体变量 x 的 age 成员。
  • 将 f 乘以 d 的结果赋值给结构体变量 x 的 pay 成员。
  • 使用 printf 函数输出结构体变量 x 的 name、age 和 pay 成员的值。“\t” 是制表符,用于分隔输出。

【特别注意】

  • 此代码使用 strcpy_s 函数将字符串常量 "Lilei" 复制给了结构体变量 x 的 name 成员。strcpy_s 是一种更安全的字符串复制函数,可以防止缓冲区溢出的问题。在使用 strcpy_s 时,需要指定目标字符串的大小,这里使用了 sizeof(x.name) 来获取 name 字符数组的大小。
  • 需要注意的是,使用 #define _CRT_SECURE_NO_WARNINGS 宏来禁止 C4996 错误的显示,这样可以避免 strcpy_s 报出错误。但请注意,这只适用于某些编译器,具体取决于您使用的编译器。
  • C4996 错误:C4996 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
  • C4996 错误:它指示 strcpy 函数被视为不安全。这是因为 strcpy 函数可能导致缓冲区溢出问题。为了解决这个问题,建议使用更安全的函数 strcpy_s

【执行结果】

  • 输出结果为 “Lilei 40 2000”,其中 name 成员输出为 “Lilei”,age 成员输出为 40,pay 成员输出为 2000。
Lilei   40      2000


05. 整型值%4d 进行格式化)

#include <stdio.h>

int f(int a) {
    int b = 4;              // 声明整型变量 b,赋值为 4
    static int c = 4;       // 声明静态整型变量 c,赋值为 4
    b++;                    // b 自增 1
    c++;                    // c 自增 1
    return (a + b + c);     // 返回 a、b、c 三个变量的和
}

int main() {
    int a = 4;              // 声明整型变量 a,赋值为 4
    int i;

    for (i = 0; i < 3; i++) {
        printf("%4d", f(a));  // 输出函数 f 的返回值,并按照 %4d 进行格式化
    }

    return 0;
}

【代码详解】

  • 这段代码的功能是定义了一个返回整型值的函数 f 和一个主函数 main
  • 首先,包含了 <stdio.h> 头文件,用于输入输出。
  • 定义了一个返回整型值的函数 f,接受一个整型参数 a
  • 在函数 f 中,声明了一个整型变量 b,赋值为 4,表示局部变量。还声明了一个静态整型变量 c,也赋值为 4,表示静态变量。注意,静态变量会在每次函数调用后保持其值不变。静态变量的生命周期会持续到程序的结束。
  • b++ 表示将 b 自增 1,相当于 b = b + 1
  • c++ 表示将 c 自增 1,相当于 c = c + 1
  • 最后,函数 f 返回 a + b + c 的值。
  • 在 main 函数中,声明了一个整型变量 a,赋值为 4。另外声明了一个整型变量 i
  • 使用 for 循环,将 i 从 0 递增到 2(共执行 3 次循环)。
  • 在循环内部,通过 printf 函数输出调用函数 f 的返回值,并按照 %4d 进行格式化,保证输出结果占据 4 个字符的宽度。%4d 是格式化字符串,表示输出一个整数占据 4 个字符的宽度,不足的地方用空格填充。

【执行结果】

  • 在运行程序时,输出结果为:14 15 16。这是因为循环执行了 3 次,每次调用函数 f(a) 的返回值都不同。具体地:

  • 第一次调用时,函数 f(a) 返回结果为 14。
  • 第二次调用时,函数 f(a) 返回结果为 15。
  • 第三次调用时,函数 f(a) 返回结果为 16。
  • 由于使用了 %4d 的格式化字符串,输出结果被限制在 4 个字符的宽度内,所以结果只显示了后两位数字。

   14  15  16


06. 求三个数中的最大值和最小值

#include <stdio.h>

void maxmin(int a, int b, int c, int* m, int* n)
{
    int t;     // 用于交换变量值的临时变量

    // 比较 a 和 b 的大小,进行交换
    if (a < b)
    {
        t = a;  // 保存 a 的值
        a = b;  // 将 b 的值赋给 a
        b = t;  // 将之前保存的 a 的值赋给 b
    }

    // 比较 a 和 c 的大小,进行交换
    if (a < c)
    {
        t = a;  // 保存 a 的值
        a = c;  // 将 c 的值赋给 a
        c = t;  // 将之前保存的 a 的值赋给 c
    }

    // 比较 b 和 c 的大小,进行交换
    if (b < c)
    {
        t = b;  // 保存 b 的值
        b = c;  // 将 c 的值赋给 b
        c = t;  // 将之前保存的 b 的值赋给 c
    }

    *m = a;  // 将最大值赋给 m
    *n = c;  // 将最小值赋给 n
}

int main()
{
    int a, b, c, max, min;

    printf("Please input a b c:\n");
    scanf_s("%d %d %d", &a, &b, &c);

    maxmin(a, b, c, &max, &min);  // 将 max 和 min 作为指针传入函数

    printf("a = %d, b = %d, c = %d\n", a, b, c);
    printf("max = %d, min = %d\n", max, min);

    return 0;
}

【代码详解】

  • 这段代码用于求给定三个数中的最大值和最小值。

  • 标准输入输出的头文件:
    #include <stdio.h>
    
  • 这是一个函数定义,函数名为 maxmin。它接受四个参数:abc 是要比较的三个数,m 和 n 是指向存储最大值和最小值的变量的指针:
    void maxmin(int a, int b, int c, int* m, int* n)
    
  • 定义了一个整型变量 t,用于辅助交换变量的值:
    int t; // 用于交换变量值的临时变量
    
  • 这是一个条件语句,用于比较 a 和 b 的值。如果 a 小于 b,则交换它们的值,即将 ​​​​​​​a 的值赋给 ​​​​​​​t,将 ​​​​​​​b 的值赋给 ​​​​​​​a,将 ​​​​​​​t 的值赋给 b
    if (a < b)
    {
        t = a;
        a = b;
        b = t;
    }
    
  • 同样的逻辑被应用在下面两个条件语句中,分别对 ​​​​​​​​​​​​​​ac ​​​​​​​和 ​​​​​​​​​​​​​​bc ​​​​​​​进行比较和交换,这两行将最大值赋给指针 m 所指向的变量,将最小值赋给指针 ​​​​​​​n 所指向的变量:
    *m = a; // 将最大值赋给m
    *n = c; // 将最小值赋给n
    
  • 这是程序的主函数,程序从这里开始执行:
    int main()
    
  • 定义了变量 abcmax 和 min,用于存储用户输入的数以及最大值和最小值;这两行代码用于向用户输出提示信息,并使用 scanf_s 函数从用户输入中获取三个整数值,分别存储在 ​​​​​​​ab 和 ​​​​​​​c 中:
    printf("Please input a b c:\n");
    scanf_s("%d %d %d", &a, &b, &c);
    
  • 调用了 maxmin 函数,并传递了 ​​​​​​​abc 以及 ​​​​​​​max 和 ​​​​​​​min 的地址作为参数。这样,在 ​​​​​​​maxmin 函数内部对 ​​​​​​​max 和 ​​​​​​​min 的修改将反映在主函数中
    maxmin(a, b, c, &max, &min); // 将max和min作为指针传入函数
    
  • 用于输出结果,分别显示用户输入的三个数以及其中的最大值和最小值:
    printf("a = %d, b = %d, c = %d\n", a, b, c);
    printf("max = %d, min = %d\n", max, min);
    
  • 表示程序正常结束,返回值为 0:
    return 0;
    

【执行结果】 

  • 示例键盘输入任意 3 个整数:88 50 100
Please input a b c:
88 50 100
a =88, b = 50, c = 100
max=100, min = 50


07. 同一字母次数统计

【题目】统计从键盘输入的字符($ 作为结束)中每个小写英文字母出现的个数,

n[0]、n[1]、···、n[25] 分别存放小写字母 a、b、···、z

#include "stdio.h"

int main()
{
    int n[26] = {0}, k;
    char c;

    while ((c = getchar()) != '$') // 使用 getchar() 函数从键盘读取字符,将其赋给变量 c。当读取到字符'$'时,循环结束
    {
        if (c >= 'a' && c <= 'z') // 判断输入字符是否为小写字母
        {
            n[c - 'a'] += 1; // 根据字符c减去字符'a'的 ASCII 码值,作为索引更新对应的 n[] 元素值
        }
    }

    for (k = 0; k < 26; k++) // 循环遍历 n[] 数组,输出统计结果
    {
        printf("%c: %d\n", k + 'a', n[k]);
    }

    return 0;
}

【代码详解】

  • 这段代码的功能是统计从键盘输入的字符(以 ​​​​​​​$ 作为结束标志)中每个小写英文字母的出现次数,并输出统计结果。

  • 首先,在 main 函数中,我们声明了一个整型数组 ​​​​​​​n[26] 用于存储每个小写英文字母出现的个数。初始值都被设置为 0。

  • 然后,使用 ​​​​​​​while 循环来读取字符,每次从键盘读取一个字符并将其赋值给变量 ​​​​​​​c。在循环中,判断当前读取的字符 ​​​​​​​c 是否为 $,如果是则循环结束。

  • 对于每个读取到的字符 ​​​​​​​c,我们检查它是否是小写字母。如果是,就通过将字符 ​​​​​​​c 减去字符 ​​​​​​​'a' 的 ASCII 码值,得到一个索引值,然后将对应的 ​​​​​​​n 数组元素加 1,以统计出现次数。

  • 最后,使用 ​​​​​​​for 循环遍历数组 ​​​​​​​n[],并使用 ​​​​​​​printf 函数输出统计结果,格式为每个小写字母及其出现次数。

【执行结果】

  •  示例键盘输入任意大小写字母,不限输入字数,支持换行,以 $ 作为结束符,回车:
    GKghuhGihibjgviy
    giuiuEYUGhgjjj$
  • 执行结果:
    GKghuhGihibjgviy
    giuiuEYUGhgjjj$
    a: 0
    b: 1
    c: 0
    d: 0
    e: 0
    f: 0
    g: 4
    h: 4
    i: 5
    j: 4
    k: 0
    l: 0
    m: 0
    n: 0
    o: 0
    p: 0
    q: 0
    r: 0
    s: 0
    t: 0
    u: 3
    v: 1
    w: 0
    x: 0
    y: 1
    z: 0


08. 字符串回文判断

【题目】 从键盘输入一个字符串,判断其是否是回文。

  • 若是输出 “Yes”,否则输出 “No”。
  • 回文是指正向、反向的拼写都一样。

【示例】

  • ABCBA、aaaa 等是回文
  • china、ABC 等不是回文
#include "stdio.h"
#include "string.h"

int main()
{
    char string[80];
    int i, j, n;

    fgets(string, sizeof(string), stdin); // 从标准输入stdin读取一行字符串

    n = strlen(string) - 1; // 统计字符串的长度,减去换行符'\n'
    j = n - 1; // j指向字符串末尾(最后一个字符的位置)

    for (i = 0; i < j; i++, j--)
    {
        if (string[i] != string[j]) // 判断当前字符和对称位置的字符是否相等
        {
            break;
        }
    }

    if (i >= j) // 如果i大于等于j,则说明整个字符串都符合回文的特性
    {
        printf("Yes\n"); // 输出"Yes"
    }
    else
    {
        printf("No\n"); // 输出"No"
    }

    return 0;
}

【代码详解】

  • 这段代码的功能是判断从标准输入中读取的一行字符串是否是回文。
  • 首先,我们声明了一个大小为 80 的字符数组 string,用于存储输入的字符串。
  • 接下来,使用 fgets 函数从标准输入 stdin 读取一行字符串,并将其存储在 string 数组中。sizeof(string) 表示 string 数组的大小,保证输入的字符串不会溢出。fgets ​​​​​​​函数会读取一行字符串,包括换行符 ’\n’,并将其存储在 ​​​​​​​string 中。
  • 然后,我们使用 ​​​​​​​strlen 函数计算 string 字符串的长度,需要注意的是要减去末尾的换行符 ’\n’,因此实际的字符串长度是 strlen(string) - 1。我们将其赋值给变量 n
  • 接下来,我们将 j 初始化为 n - 1,即指向字符串末尾的位置(最后一个字符的位置)。
  • 然后,我们使用 for 循环和两个索引变量 i 和 j,从字符串的首尾开始同时向中间移动。在循环中,我们比较当前索引位置 i 和对称位置 j 上的字符是否相等。如果发现不相等的情况,说明字符串不是回文,我们就退出循环。
  • 最后,我们使用条件语句进行判断。如果 i 大于等于 j,表示我们已经遍历了整个字符串并且没有发现不相等的字符,即该字符串是回文。在这种情况下,我们输出 "Yes";否则,我们输出 "No"。
  • 通过这个程序,我们可以判断从标准输入读取的一行字符串是否是回文。它遍历字符串并比较对称位置上的字符,只要有一个字符不相等,就可以确定字符串不是回文。如果所有字符都相等,则字符串是回文。

【执行结果】

  • [ 示例 1 ]
  • 示例键盘输入任意字符串,回车:
    ABCBA
  • 执行结果:
    Yes
  • [ 示例 2 ]
  • 示例键盘输入任意字符串,回车:
    china
  • 执行结果:
    No


09. 闰年判断

【题目】输入年份 year,如果是闰年,则输出 “ Yes!”,否则输出“ No!”。

【说明】每 400 年有 97 个闰年,即在 4 的倍数年份中除去第 100、200、300 三个年份

#include <stdio.h>

int main() {
    int year;

    printf("请输入年份: ");
    scanf_s("%d", &year); // 使用 scanf_s 函数代替 scanf,输入年份

    if (year % 400 == 0) {
        printf("Yes!");   // 能被 400 整除的年份是闰年
    } else if (year % 100 == 0) {
        printf("No!");    // 能被 100 整除但不能被 400 整除的年份不是闰年
    } else if (year % 4 == 0) {
        printf("Yes!");   // 能被4整除但不能被 100 整除的年份是闰年
    } else {
        printf("No!");    // 其他年份不是闰年
    }

    return 0;
}

【代码详解】

  • 这段代码用于判断输入的年份是否为闰年。

  • #include <stdio.h>:包含了标准输入/输出库的头文件。

  • int main() { ... }main 函数是程序的入口点。

  • int year;:声明一个整型变量 year,用于存储用户输入的年份。

  • printf("请输入年份: ");:打印提示信息,要求用户输入年份。

  • scanf_s("%d", &year);:使用 scanf_s 函数读取用户输入的年份,并将其存储在变量 year 中。

  • if (year % 400 == 0) { ... }:如果年份能够被 400 整除,即 year % 400 的结果为0,执行下面的代码块。打印"Yes!"表示是闰年。

  • else if (year % 100 == 0) { ... }:如果年份不能被 400 整除,但能被 100 整除,即 year % 100 的结果为0,执行下面的代码块。打印"No!"表示不是闰年。

  • else if (year % 4 == 0) { ... }:如果年份不能被 400 和 100 整除,但能被 4 整除,即 year % 4 的结果为0,执行下面的代码块。打印"Yes!"表示是闰年。

  • else { ... }:如果年份不能被 400、100 和 4 整除,执行下面的代码块。打印"No!"表示不是闰年。

  • return 0;:返回 0,表示程序正常结束。

【执行结果】

  • 示例键盘输入任意年份,整数,回车
请输入年份: 2024
Yes!


10. 交换两个双精度数

【题目】在主函数中定义两个双精度变量 x,y,并输入。利用函数交换两个双精度数 x,y,并且要求函数的参数是指针类型。

#include <stdio.h>

// 函数声明:交换两个双精度数的值
void swap(double* num1, double* num2);

int main() {
    double x, y;

    // 输入两个双精度数
    printf("请输入两个双精度数:\n");
    scanf_s("%lf %lf", &x, &y); // 输入两个双精度数的值

    printf("交换前的值:x = %.2lf, y = %.2lf\n", x, y); // 输出交换前的值

    // 调用交换函数,传入指针参数
    swap(&x, &y); // 传入两个双精度数的地址

    printf("交换后的值:x = %.2lf, y = %.2lf\n", x, y); // 输出交换后的值

    return 0;
}

// 函数定义:交换两个双精度数的值
void swap(double* num1, double* num2) {
    double temp;

    // 使用临时变量交换两个双精度数的值
    temp = *num1;
    *num1 = *num2;
    *num2 = temp;
}

【代码详解】

  • 上述代码通过指针参数来交换两个双精度数的值。

  • swap 函数的定义使用指针 num1 和 num2 作为参数,通过临时变量实现了交换的功能。

  • 在 main 函数中,首先输入两个双精度数 x 和 y,然后调用 swap 函数来交换它们的值,最后打印交换前后的结果。

  • 上述的代码利用函数交换了两个双精度数 x 和 y,并且函数的参数类型是指针。这是通过将双精度数的地址传递给 swap 函数来实现的。函数声明和定义中的参数类型 double* 表示指向双精度数的指针。

  • 在 swap 函数中,通过使用临时变量和指针操作,交换了两个双精度数的值。通过传递 x 和 y 的地址(即指针)给 swap 函数的参数 num1 和 num2,我们可以在函数内部通过指针来修改这些变量的值。

  • 这种通过指针参数来实现值交换的方式可以有效地修改变量的值,而不需要返回任何值。这在需要修改传入变量的值时非常有用。

【执行结果】

示例键盘输入任意 2 个双精度数字,空格隔开,回车

5.67 9.13
交换前的值:x = 5.67, y = 9.13
交换后的值:x = 9.13, y = 5.67

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/813679.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

系统学习Linux-MySQL主从复制及读写分离(五)

部署MySQL主从异步复制 在MySQL Master上的配置NTP时间同步服务器 [rootlocalhost ~]# rpm -q ntpntp-4.2.6p5-28.el7.centos.x86_64[rootlocalhost ~]# vim /etc/ntp.conf #添加两行server 127.127.1.0fudge 127.127.1.0 stratum 8 启动NTP服务 [rootlocalhost ~]# system…

pytorch(续周报(1))

文章目录 2.1 张量2.1.1 简介2.1.2 创建tensor2.1.3 张量的操作2.1.4 广播机制 2.2 自动求导Autograd简介2.2.1 梯度 2.3 并行计算简介2.3.1 为什么要做并行计算2.3.2 为什么需要CUDA2.3.3 常见的并行的方法&#xff1a;网络结构分布到不同的设备中(Network partitioning)同一层…

C++入门篇2---类和对象(上)

看前须知:何为面向对象&#xff1f; 面向对象&#xff08;Object-oriented&#xff09;是一种计算机编程的方法论和编程范式。面向对象的核心思想是将数据&#xff08;对象&#xff09;和操作&#xff08;方法&#xff09;封装在一起&#xff0c;形成一个相互关联和相互作用的…

Diffusion mdoel: Denoising Diffusion Probabilistic Models论据解读及实现(一)

论文地址&#xff1a;https://arxiv.org/pdf/2006.11239.pdf 1 正向加噪推导 **核心公式1 ** x t α ˉ t ∗ x 0 1 − α ˉ t z t x_t\sqrt{\bar \alpha_t}*x_{0}\sqrt{1-\bar \alpha_t}z_t xt​αˉt​ ​∗x0​1−αˉt​ ​zt​ 证明如下&#xff1a; α t 1 − β…

芯片制造详解.刻蚀原理.学习笔记(五)

本篇笔记是看完原视频后的整理和补充&#xff0c;建议各位观看原视频&#xff0c;这里附上地址。 如何雕刻芯片&#xff1a;刻蚀原理&#xff5c;芯片制造详解05 芯片制造详解.刻蚀原理.学习笔记 五 一、刻蚀技术的分类二、刻蚀中三个关键指标2.1 刻蚀速率2.2 选择比2.3 方向性…

linux配置固定ip

为什么要固定ip&#xff1f; 虚拟机是利用DHCP&#xff08;动态获取ip&#xff09;&#xff0c;ip地址会频繁变化&#xff0c;不利于远程连接linux&#xff0c;同时会改变映射关系。 VMware 第一步&#xff1a;在workstation中配置IP地址网关和网段 1.点击虚拟网络编辑器 …

RISCV - 4 ISA 扩展名命名约定

RISCV - 4 ISA 扩展名命名约定 1 Case Sensitivity2 Base Integer ISA3 Instruction-Set Extension Names4 Version Numbers5 Underscores6 Additional Standard Extension Names7 Supervisor-level Instruction-Set Extensions8 Hypervisor-level Instruction-Set Extensions9…

28_计算机网络(Computer Networks)基础

本篇介绍计算机网络的基础知识。 文章目录 1. 计算机网络历史2. 以太网" (Ethernet)2.1 以太网" (Ethernet)的简单形式及概念2.2 指数退避解决冲突问题2.3 利用交换机减少同一载体中设备2.4 互联网&#xff08;The Internet&#xff09;2.5 路由(routing)2.6 数据包…

【Spring AOP + 自定义注解 + 动态数据源 实现主从库切换读写分离】—— 案例实战

&#x1f4a7; S p r i n g A O P 主从数据源切换 读写分离 自定义注解案例实战&#xff01; \color{#FF1493}{Spring AOP 主从数据源切换 读写分离 自定义注解 案例实战&#xff01;} SpringAOP主从数据源切换读写分离自定义注解案例实战&#xff01;&#x1f4a7; …

第三课:运算符

1.算数运算符 int a 20; int b 10; System.out.println(a b); // 30 System.out.println(a - b); // 10 System.out.println(a * b); // 200 System.out.println(a / b); // 2 System.out.println(a % b); // 0 --->模运算相当于数学中除法的余数 ⚠关于/除法 public s…

QEMU源码全解析19 —— QOM介绍(8)

接前一篇文章&#xff1a;QEMU源码全解析18 —— QOM介绍&#xff08;7&#xff09; 本文内容参考&#xff1a; 《趣谈Linux操作系统》 —— 刘超&#xff0c;极客时间 《QEMU/KVM》源码解析与应用 —— 李强&#xff0c;机械工业出版社 特此致谢&#xff01; 上一回讲到了Q…

2023 云原生编程挑战赛火热报名中!导师解析 Serverless 冷启动赛题

大赛介绍 第四届云原生编程挑战赛&#xff0c;是由阿里云主办&#xff0c;云原生应用平台、天池联合承办的云原生著名品牌赛事。 自 2015 年开始&#xff0c;大赛已经成功举办了八届&#xff0c;并从 2020 年开始升级为首届云原生编程挑战赛&#xff0c;共吸引了超过 53000 支…

python爬虫基本功(三)--爬虫所需网络协议知识超详细总结(下)

前言 大家好&#xff0c;这里是Kaiser&#x1f44f;。本文内容是衔接 &#x1f449;python爬虫基本功(二)—爬虫所需网络协议知识超详细总结&#xff08;上&#xff09;&#x1f448; 一文&#xff0c;为达更好的阅读效果&#xff0c;以及防止知识点出现“断层”&#xff0c;使…

Java方法的使用(重点:形参和实参的关系、方法重载、递归)

目录 一、Java方法 * 有返回类型&#xff0c;在方法体里就一定要返回相应类型的数据。没有返回类型&#xff08;void&#xff09;&#xff0c;就不要返回&#xff01;&#xff01; * 方法没有声明一说。与C语言不同&#xff08;C语言是自顶向下读取代码&#xff09;&#…

数电基础知识学习笔记

文章目录&#xff1a; 一&#xff1a;逻辑门 1.逻辑门电路的分类 1.1 按逻辑&#xff08;逻辑门&#xff09; 1.1.1 逻辑定义 1.1.2 常见数字电路相关符号 1.1.3 电路图表示 1.1.4 逻辑门电路图像符号 1.2 按电路结构 1.3 按功能特点 2.高低电平的含义 3.常见的门…

给定长度值length,把列表切分成每段长度为length的N段列表,Kotlin

给定长度值length&#xff0c;把列表切分成每段长度为length的N段列表&#xff0c;Kotlin import kotlin.random.Randomfun main(args: Array<String>) {var source mutableListOf<String>()val end Random.nextInt(30) 1for (i in 0 until end) {source.add(i.…

[SV] 文件操作

Verilog 提供了很多对文件进行操作的系统任务。经常使用的系统任务主要包括&#xff1a; 文件开、闭&#xff1a;​$fopen​, ​$fclose​, ​$ferror​文件写入&#xff1a;​$fdisplay​, ​$fwrite​, ​$fstrobe​, ​$fmonitor​字符串写入&#xff1a;​$sformat​, ​$…

python结合tesseract-ocr识别汉字的训练库过程

一、安装python 例如&#xff0c;安装路径为&#xff1a;C:\rtkapp\python-3.8.0 二、安装opencv 三、安装tesseract-ocr 安装完成后&#xff0c;在系统环境变量path中&#xff0c;添加安装路径C:\rtkapp\Tesseract-OCR 四、打开python安装pytesseract 五、安装java运行环境…

TenserRT(四)在 PYTORCH 中支持更多 ONNX 算子

第四章&#xff1a;在 PyTorch 中支持更多 ONNX 算子 — mmdeploy 0.12.0 文档 PyTorch扩充。 PyTorch转换成ONNX&#xff1a; PyTorch有实现。PyTorch可以转化成一个或者多个ONNX算子。ONNX有相应算子。 如果即没有PyTorch实现&#xff0c;且缺少PyTorch与ONNX的映射关系&…

太猛了,靠“吹牛”过顺丰一面,月薪30K

说在前面 在40岁老架构师尼恩的&#xff08;50&#xff09;读者社群中&#xff0c;经常有小伙伴&#xff0c;需要面试美团、京东、阿里、 百度、头条等大厂。 下面是一个5年小伙伴成功拿到通过了顺丰面试&#xff0c;拿到offer&#xff0c;月薪30K。 现在把面试真题和参考答…