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

2023-08-06 23:46:50

目录

21. 计算并输出 1 到 9 之间奇数之和

22. 多层嵌套计算

23. 循环结构:打印变量 a、b、c

24. 函数调用:全局变量、局部变量

25. 找到数组中不等于最大值和最小值的元素

26. 计算:平方根、平方、立方根、立方

27. 找出三个整型数中的最大值

28. 初始化一个 5x5 的二维数组 a,根据表达式 (i + 1) * (j + 1) 将数组元素设置为 i * j,然后按矩阵形式输出这个二维数组

29. 统计字符的个数并保存进文件中

30. 递归方法:计算从 0 到 10 的阶乘



21. 计算并输出 1 到 9 之间奇数之和

#include <iostream>

int main()
{
    int i, s = 0;

    // 循环从1到9,每次增加2
    for (i = 1; i < 10; i += 2)
    {
        // 将 i+1 的值加到变量 s 上
        s += i + 1;
    }

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

    return 0;
}

【代码详解】

  • 这段代码的作用是计算并输出 1 到 9 之间(包括 1 和 9)的奇数之和。、
  1. 包含头文件 <iostream>,这是用于输入输出流的标准 C++ 头文件。在这个代码里没有直接使用,可以省略。

  2. main() 函数是 C++ 程序的入口函数。

  3. 声明了两个整型变量 i 和 s,并将 s 初始化为 0。

  4. for 循环语句初始化 i = 1,设置循环条件 i < 10,每次迭代增加 2

  5. 循环体内的语句 s += i + 1 将迭代变量 i 加 1 的结果加到 s 上,相当于将奇数加到 s 中。

  6. printf("%d\n", s); 使用 printf 函数输出 s 的值,并换行。

  7. 返回 0,表示程序正常运行结束。

【计算过程】

  1. 代码执行结果为 30
  2. 原因是在循环中,变量 i 从 1 开始,每次增加 2,所以循环的迭代包括了 1, 3, 5, 7, 9 这五个奇数。
  3. 在循环体内部,将 i+1 的值加到变量 s 上,即 s += i + 1
  4. 所以循环体执行过程如下:
  • 第一次迭代,i=1,将 1+1=2 加到 s 上,s 变为 2
  • 第二次迭代,i=3,将 3+1=4 加到 s 上,s 变为 6
  • 第三次迭代,i=5,将 5+1=6 加到 s 上,s 变为 12
  • 第四次迭代,i=7,将 7+1=8 加到 s 上,s 变为 20
  • 第五次迭代,i=9,将 9+1=10 加到 s 上,s 变为 30

【执行结果】

30


22. 多层嵌套计算

#include <iostream>

int main()
{
    int x = 15, y = 21, z = 0;

    // 根据 x 对 3 取余数进行判断
    switch (x % 3)
    {
        case 0: 
            z++; // 如果余数为 0,z 的值加 1
            break;
        case 1: 
            z++; // 如果余数为 1,z 的值加 1

            // 根据 y 对 2 取余数进行判断
            switch (y % 2)
            {
                default: 
                    z++; // 如果余数不是 0,z 的值加 1
                case 0: 
                    z++; // 如果余数为 0,z 的值加 1
                    break;
            }
    }
    printf("%d\n", z); // 输出变量 z 的值

    return 0;
}

【代码详解】

  • 这段代码的功能是根据给定的 x 和 y 的值,通过多层嵌套的 switch 语句来计算变量 z 的值,并将其输出。
  1. 包含头文件 <iostream>,这是用于输入输出流的标准 C++ 头文件。在这个代码里没有直接使用,可以省略。

  2. main() 函数是 C++ 程序的入口函数。

  3. 声明了三个整型变量 xy 和 z,并将分别赋值为 1521 和 0

  4. 第一个 switch 语句根据 x 对 3 取余数进行判断。

  5. 在第一个 switch 语句中,使用 case 语句根据余数的不同执行相应的操作。

  6. 如果余数为 0,执行 case 0,将 z 的值加 1

  7. 如果余数为 1,执行 case 1,将 z 的值加 1,然后进入另一个嵌套的 switch 语句。

  8. 第二个 switch 语句根据 y 对 2 取余数进行判断。

  9. 在第二个 switch 语句中,使用 case 语句根据余数的不同执行相应的操作。

  10. 如果余数不是 0,执行 default(默认),将 z 的值加 1

  11. 如果余数为 0,执行 case 0,将 z 的值加 1

  12. 最后,使用 printf 函数输出变量 z 的值。

【执行结果】

  • 执行结果为 1
  • 假设 x = 15,对 x 取余数得到 0。因此不执行 case 1 的代码。执行 case 0 的代码,将 z 的值加 1,此时 z = 1
  • 然后打印 z 的值,输出为 1
  • 因此,最终输出的结果是 1
1


23. 循环结构:打印变量 a、b、c

#include <iostream>

int main()
{
    int a = 0, b = 5, c = 3;
    
    while (c > 0 && a < 5)
    {
        b = b - 1;  // 将 b 的值减 1
        ++a;        // 将 a 的值加 1
        c--;        // 将 c 的值减 1
    }
    
    printf("%d, %d, %d\n", a, b, c);  // 输出变量 a、b、c 的值
    
    return 0;
}

【代码详解】

  • 这段代码的功能是根据给定的初始值,依次执行循环内的操作,并将最终的变量 a、b、c 的值打印出来。
  1. 包含头文件 <iostream>,这是用于输入输出流的标准 C++ 头文件。在这个代码里没有直接使用,可以省略。

  2. main() 函数是 C++ 程序的入口函数。

  3. 声明了三个整型变量 abc,并分别赋值为 053

  4. while 循环语句的循环条件是 c > 0 && a < 5,只要 c 大于 0 并且 a 小于 5,就会执行循环体内的操作。

  5. 在循环体内,b 的值减 1,相当于将 b 减 1

  6. ++a 表示将 a 的值加 1

  7. c-- 表示将 c 的值减 1

  8. 当循环条件不再满足时,跳出循环。

  9. 使用 printf 函数打印输出变量 abc 的值。

【执行结果】

  1. 执行结果根据初始值的不同而有所变化,具体结果取决于 ab 和 c 的最终值。

  2. 例如,如果循环体被执行了 3 次,那么输出结果可能是 3, 2, 0

3, 2, 0


24. 函数调用:全局变量、局部变量

#include <iostream>

int z = 5;  // 全局变量 z

void f()
{
    static int x = 2;  // 静态局部变量 x,只会初始化一次
    int y = 5;         // 局部变量 y

    x = x + 2;    // x 的值加 2
    z = z + 5;    // z 的值加 5
    y = y + z;    // y 的值加上 z 的值

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

int main()
{
    static int x = 10;  // 静态局部变量 x,只会初始化一次
    int y;

    y = z;  // 将全局变量 z 的值赋给局部变量 y

    printf("%5d%5d\n", x, z);  // 输出变量 x 和 z 的值
    f();  // 调用函数 f()
    printf("%5d%5d\n", x, z);  // 输出变量 x 和 z 的值
    f();  // 再次调用函数 f()

    return 0;
}

【代码详解】

  • 这段代码使用了全局变量和局部变量,并展示了函数的调用。
  1. 声明了一个全局变量 z,初始值为 5

  2. 定义了函数 f()

  3. 在 f() 函数内部,声明了一个静态局部变量 x,初始值为 2,静态局部变量只会初始化一次。

  4. 在 f() 函数内部,声明了一个局部变量 y,初始值为 5

  5. 在 f() 函数内部,对静态局部变量 x 进行操作,将其值加 2

  6. 在 f() 函数内部,对全局变量 z 进行操作,将其值加 5

  7. 在 f() 函数内部,对局部变量 y 进行操作,将其值加上全局变量 z 的值。

  8. 使用 printf 函数打印输出变量 x 和 z 的值。

  9. 定义了 main() 函数。

  10. 在 main() 函数内部,定义了一个静态局部变量 x,初始值为 10,静态局部变量只会初始化一次。

  11. 在 main() 函数内部,声明了一个局部变量 y

  12. 将全局变量 z 的值赋给局部变量 y

  13. 使用 printf 函数打印输出变量 x 和 z 的值。

  14. 调用函数 f()

  15. 使用 printf 函数打印输出变量 x 和 z 的值。

  16. 再次调用函数 f()

【执行结果

   10    5
    4   10
   10   10
    6   15


25. 找到数组中不等于最大值和最小值的元素

#include <iostream>

struct prob
{
    const char* a;  // 字符串类型改为 const char* 类型
    int b;
} x[] = {{"Zhang San", 19}, 
         {"Li Si", 21}, 
         {"Wang Wu", 20}};

int main()
{
    int i, m1, m2;
    m1 = m2 = x[0].b;  // 初始化 m1 和 m2 为数组第一个元素的 b 值
    
    for (i = 1; i < 3; i++)
    {
        if (x[i].b > m1)
            m1 = x[i].b;  // 更新 m1 为更大的 b 值
        else if (x[i].b < m2)
            m2 = x[i].b;  // 更新 m2 为更小的 b 值
    }
    
    for (i = 0; i < 3; i++)
    {
        if (x[i].b != m1 && x[i].b != m2)
        {
            printf("%s:%d\n", x[i].a, x[i].b);  // 输出不等于 m1 和 m2 的元素的 a 和 b 值
            break;
        }
    }
    
    return 0;
}

【代码详解】

  • 代码的功能是找到数组中不等于最大值和最小值的元素,并将其输出。
  • 请注意,为了使用 printf 函数,需要包含适当的头文件 <stdio.h> 或 <cstdio>
  1. 定义了一个名为 prob 的结构体,其中包括一个 const char* 类型的字符串指针 a 和一个整型变量 b

  2. 创建一个 prob 结构体类型的数组 x,并对其进行初始化,数组中的每个元素包括一个字符串和一个整数。

  3. 在 main 函数中,声明了一些整型变量 im1 和 m2

  4. 将数组第一个元素的 b 值分别赋给 m1 和 m2,即初始化 m1 和 m2

  5. 使用 for 循环遍历数组,从索引为 1 的元素开始,依次判断每个元素的 b 值是否比 m1 大,如果是,则更新 m1 为该值;如果不是,则判断是否比 m2 小,如果是,则更新 m2 为该值。

  6. 使用另外一个 for 循环遍历数组,与之前的循环类似,但这次是用来查找不等于 m1 和 m2 的元素。当找到符合条件的元素时,使用 printf 函数将其对应的 a 和 b 值打印输出,并使用 break 终止循环。

  7. 最后,返回整数值 0 表示程序执行成功结束。

【执行结果】

  • 执行结果将输出不等于最大值 m1 和最小值 m2 的元素的 a 和 b 值。
  • 由于数组 x 中的元素顺序是固定的,可以确定 m1 和 m2 的值,然后在循环中找到不等于这两个值的元素进行输出。
  • 根据数组的初始化,m1 的初始值为 21m2 的初始值为 19。根据代码逻辑,应该输出 Wang Wu:20,这是因为它是唯一一个既不等于 m1 也不等于 m2 的元素。
Wang Wu:20


26. 计算:平方根、平方、立方根、立方

【题目】 为实型变量 x 输入一个值后,输出 x 的值、x 的平方根、x 的平方、x 的立方根和 x的立方。

#include <iostream> // 输入输出流头文件
#include <cmath>    // 数学函数头文件

int main() {
    double x;
    std::cout << "请输入实数 x 的值:"; // 提示用户输入实数 x 的值
    std::cin >> x; // 从用户输入读取实数 x 的值

    double squareRoot = std::sqrt(x); // 计算 x 的平方根
    double square = std::pow(x, 2);   // 计算 x 的平方
    double cubeRoot = std::cbrt(x);   // 计算 x 的立方根
    double cube = std::pow(x, 3);     // 计算 x 的立方

    std::cout << "x 的值:" << x << std::endl;                      // 输出 x 的值
    std::cout << "x 的平方根:" << squareRoot << std::endl;         // 输出 x 的平方根
    std::cout << "x 的平方:" << square << std::endl;               // 输出 x 的平方
    std::cout << "x 的立方根:" << cubeRoot << std::endl;           // 输出 x 的立方根
    std::cout << "x 的立方:" << cube << std::endl;                 // 输出 x 的立方

    return 0; // 程序执行完毕,返回 0 表示成功
}

【代码详解】

  • 代码的功能是:用户输入一个实数 x 的值,然后计算并输出 x 的值、平方根、平方、立方根和立方。
  • 代码中使用了 cmath 头文件中的函数 sqrt()pow() 和 cbrt() 来计算平方根、幂和立方根。
  • 请注意,为了使用输入输出流和数学函数,需要包含适当的头文件 <iostream> 和 <cmath>
  1. 包含了 <iostream> 和 <cmath> 两个头文件,分别用于输入输出流和数学函数的声明。

  2. 在 main 函数中声明了一个 double 类型的变量 x,用于存储用户输入的实数值。

  3. 使用 std::cout 输出提示信息,要求用户输入实数 x 的值。

  4. 使用 std::cin 从用户输入读取实数 x 的值,并将其存储到变量 x 中。

  5. 声明了四个 double 类型的变量 squareRootsquarecubeRoot 和 cube,用于保存计算结果。

  6. 使用 std::sqrt(x) 计算 x 的平方根,并将结果赋给 squareRoot

  7. 使用 std::pow(x, 2) 计算 x 的平方,并将结果赋给 square

  8. 使用 std::cbrt(x) 计算 x 的立方根,并将结果赋给 cubeRoot

  9. 使用 std::pow(x, 3) 计算 x 的立方,并将结果赋给 cube

  10. 使用 std::cout 输出 x 的值、平方根、平方、立方根和立方,分别带有相应的提示信息。

  11. 返回整数值 0 表示程序执行成功结束。

【执行结果】

  • 键盘输入示例:
    请输入实数 x 的值:5.7
  • 执行结果输出示例:
    x 的值:5.7
    x 的平方根:2.38747
    x 的平方:32.49
    x 的立方根:1.78632
    x 的立方:185.193


27. 找出三个整型数中的最大值

【题目】输入三个整型数,找出其中数值最大者并输出。

#include <iostream>

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

    std::cout << "请输入三个整数: ";  // 提示用户输入三个整数
    std::cin >> a >> b >> c;        // 从用户输入读取三个整数

    int max = a;  // 假设第一个整数 a 是最大值

    if (b > max) {
        max = b;  // 如果第二个整数 b 大于当前最大值,则更新最大值为 b
    }

    if (c > max) {
        max = c;  // 如果第三个整数 c 大于当前最大值,则更新最大值为 c
    }

    std::cout << "最大值是: " << max << std::endl;  // 输出最大值

    return 0;  // 程序执行完毕,返回 0 表示成功
}

【代码详解】

  • 代码的功能是:用户输入三个整数,通过比较找出其中的最大值,并将其输出。
  • 请注意,代码中使用了三个变量 abc 分别表示输入的三个整数,并使用 if 条件语句和比较操作符 > 来判断最大值。
  1. 包含了 <iostream> 头文件,用于输入输出流的声明。

  2. 在 main 函数中声明了三个整数变量 abc,用于存储用户输入的三个整数值。

  3. 使用 std::cout 输出提示信息,要求用户输入三个整数。

  4. 使用 std::cin 从用户输入读取三个整数,并分别将它们存储到变量 abc 中。

  5. 声明了一个整数变量 max,并将其初始值设为 a,即假设第一个整数 a 是最大值。

  6. 使用 if 条件语句和比较操作符 > 对变量 max 进行更新:

    • 如果第二个整数 b 大于当前最大值 max,则将 max 更新为 b
    • 如果第三个整数 c 大于当前最大值 max,则将 max 更新为 c
  7. 使用 std::cout 输出最大值,并附带相应的提示信息。

  8. 返回整数值 0 表示程序执行成功结束。

【执行结果】

  • 键盘输入示例:
请输入三个整数: 55 329 2
  • 执行结果输出示例:
最大值是: 329


28. 初始化一个 5x5 的二维数组 a,根据表达式 (i + 1) * (j + 1) 将数组元素设置为 i * j,然后按矩阵形式输出这个二维数组

【题目】使用二维数组形成并按下列形式输出数据

#include <stdio.h>

int main()
{
    int i, j, a[5][5];

    // 使用两层循环初始化二维数组 a
    for (i = 0; i < 5; i++)
        // 在两层循环中,使用表达式 (i + 1) * (j + 1) 将数组元素的值进行初始化,即将数组中的每个元素设置为 i * j。
        for (j = 0; j < 5; j++) a[i][j] = (i + 1) * (j + 1);  

    // 输出二维数组 a 的元素
    for (i = 0; i < 5; i++)
    {
        // 使用 printf("%2d ", a[i][j]) 来输出二维数组 a 中的元素,其中 %2d 表示输出一个两位数的整数,并用空格进行对齐。
        for (j = 0; j < 5; j++) printf("%2d ", a[i][j]); 
        // 在每一行输出结束之后,使用 printf("\n") 来换行,使输出结果呈现矩阵的形式。
        printf("\n"); 
    }

    return 0;
}

【代码详解】

  • 代码的功能是:初始化一个 5x5 的二维数组 a,根据表达式 (i + 1) * (j + 1) 将数组元素设置为 i * j,然后按矩阵形式输出这个二维数组。
  1. 包含了 <stdio.h> 头文件,用于标准输入输出函数的声明。

  2. 在 main 函数中声明了三个整数变量 ija[5][5]

  3. 使用两个嵌套的循环,对二维数组 a 进行初始化:

    • 外层循环控制行数,变量 i 的初始值为 0,每次循环增加 1,循环条件为 i < 5
    • 内层循环控制列数,变量 j 的初始值为 0,每次循环增加 1,循环条件为 j < 5
    • 在内层循环中,使用表达式 (i + 1) * (j + 1) 将数组元素的值进行初始化,即将数组中的每个元素设置为 i * j
  4. 使用两个嵌套的循环,输出二维数组 a 的元素:

    • 外层循环控制行数,变量 i 的初始值为 0,每次循环增加 1,循环条件为 i < 5
    • 内层循环控制列数,变量 j 的初始值为 0,每次循环增加 1,循环条件为 j < 5
    • 在内层循环中,使用 printf("%2d ", a[i][j]) 来输出二维数组 a 中的元素,其中 %2d 表示输出一个两位数的整数,并用空格进行对齐。
    • 在每一行输出结束之后,使用 printf("\n") 来换行,使输出结果呈现矩阵的形式。
  5. 返回整数值 0 表示程序执行成功结束。

【执行结果】

 1  2  3  4  5
 2  4  6  8 10
 3  6  9 12 15
 4  8 12 16 20
 5 10 15 20 25


29. 统计字符的个数并保存进文件中

【题目】 键入一串字符(换行作为结束标志),统计字符的个数,将该串字符及字符个数显示到屏幕上并写入文件 str. dat 中。

#include <stdio.h>

int main()
{
    char ch;
    int sumch = 0;
    FILE *fp;
    
    // 打开文件 "str.dat",并以写入模式打开
    if (fopen_s(&fp, "str.dat", "w") != 0)
    {
        printf("Failed to open the file.\n");
        return 1;
    }

    // 循环读取用户输入的字符,直到遇到换行符为止
    while ((ch = getchar()) != '\n') 
    {
        sumch++;  // 字符计数器自增
        putchar(ch);  // 输出字符到屏幕
        fputc(ch, fp);  // 写入字符到文件
    }

    printf("sumch=%d\n", sumch);  // 输出字符的个数到屏幕
    fprintf(fp, "sumch=%d\n", sumch);  // 将格式化后的字符串写入文件
    fclose(fp);  // 关闭文件
    
    return 0;
}

【代码详解】

  • 这段代码的功能是从标准输入读取字符,并统计字符的个数,并将字符打印在屏幕上和写入到名为 “str.dat” 的文件中。程序还会输出字符的个数。如果文件打开失败,则会输出一条错误信息。
  1. 包含了 <stdio.h> 头文件,用于标准输入输出函数的声明。

  2. 在 main 函数中声明了字符变量 ch,整数变量 sumch,以及 FILE 类型的指针变量 fp

  3. 使用 fopen_s 函数打开名为 “str.dat” 的文件,并以写入模式 "w" 打开,将文件指针返回给 fp 变量。

    • 使用 fopen_s 函数可以更安全地打开文件,避免潜在的安全问题。
  4. 使用 if 条件判断语句检查文件是否成功打开。

    • 如果 fopen_s 函数返回非零值,则说明文件打开失败,输出一条错误信息并返回非零值。
  5. 使用一个循环,读取用户输入的字符并执行相应的操作,直到遇到换行符 '\n' 为止:

    • 循环条件是 (ch = getchar()) != '\n',表示当从标准输入中读取到的字符不是换行符时,继续循环。
    • 在循环体中,字符计数器 sumch 自增,将读取到的字符输出到屏幕上使用 putchar(ch) 函数,将字符写入到文件中使用 fputc(ch, fp) 函数。
  6. 使用 printf 函数在屏幕上输出字符的个数。

  7. 使用 fprintf 函数将格式化后的字符串写入文件中,格式化的字符串为 "sumch=%d\n",其中 %d 表示一个整数,将 sumch 变量的值插入到字符串中。

  8. 使用 fclose 函数关闭文件。

  9. 返回整数值 0 表示程序执行成功结束。

【执行结果】

  • 键盘输入示例:
    wueyoiwuepwoejwkfldkf.sqwuoqwio都弄去问候
  • 执行结果输出示例:
    wueyoiwuepwoejwkfldkf.sqwuoqwio都弄去问候sumch=41


30. 递归方法:计算从 0 到 10 的阶乘

【题目】用递归方法写出计算 n 的阶乘的函数,调用该函数计算并输出 n=0, 1, 2, ……, 10 时各阶乘的值。

  • 计算公式:

(1)当 n=0,1 时,n! = 1

(2)当 n>1 时,  n! = nx(n-1)!

#include <iostream>

// 递归计算阶乘函数
long fac(int n) {
    // 当 n=0,1 时,n! = 1
    if (n == 0 || n == 1) 
        return 1;
    else
        // 当 n>1 时,n! = n*(n-1)!
        return n * fac(n - 1); 
}

int main() {
    int n;
    long int result;
    for (n = 0; n <= 10; n++) {
        // 调用 fac 函数计算阶乘值
        result = fac(n);
        // 输出阶乘结果
        std::cout << n << "! = " << result << std::endl;
    }
    return 0;
}

【代码详解】

  1. 这段代码通过递归的方式计算了从 0 到 10 的阶乘,并输出了结果。
  2. 这段代码定义了一个递归函数 fac,它用于计算 n 的阶乘的值。
  3. 首先在 main 函数中,我们通过循环从 0 到 10 遍历不同的 n 值。
  4. 在循环中,调用 fac 函数计算当前 n 的阶乘值,并将结果赋给 result 变量。
  5. 最后,输出每个 n 的阶乘结果。

【执行结果】

0! = 1
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
6! = 720
7! = 5040
8! = 40320
9! = 362880
10! = 3628800

更多推荐

关于RISC-V安全性的全面综述

目录摘要引言RISC-V安全综述通用平台的安全要求信任的根源与硬件安全模块OTP管理模块安全内存对称加密(如AES)引擎不对称加密[131](例如,公钥RSA)引擎HASH/HAMC引擎随机数/位生成(例如TRNG[136])引擎TrustedBootServicesRISC-V体系结构安全性的构建块RISC-V体系结

RISC-V Reader 笔记(六)RV32V

RV32V早期并行数据计算:采用SIMD单指令多数据,把一个64位宽寄存器拆成若干个32168位长度部分并行计算。这种方法前期看起来十分简单诱人。但是后来如果要扩展SIMD寄存器宽度,也要复杂化指令集,复杂开销越来越大。向量操作:把数据取出来放入长长的向量寄存器中,流水线并行运算后从向量寄存器中分别取回到内存。并且,时

构建高性能应用:Java与MongoDB的完美融合

AI绘画关于SD,MJ,GPT,SDXL百科全书面试题分享点我直达2023Python面试题2023最新面试合集链接2023大厂面试题PDF面试题PDF版本java、python面试题项目实战:AI文本OCR识别最佳实践AIGamma一键生成PPT工具直达链接玩转cloudStudio在线编码神器玩转GPUAI绘画、A

机器人如何有效采摘苹果?

摘要:本文利用动捕数据构建拟人运动模型,对比观察两种苹果采摘模式,并对系统性能进行全面评估,为提高机器人采摘效率提供创新方法。近期,一项关于苹果采摘机器人的有趣研究——"Designandevaluationofaroboticappleharvesterusingoptimizedpickingpatterns",在

C#网站代码防止漏洞和攻击 增强网站安全性方法

输入验证:永远不要信任用户提供的输入数据。始终对用户提交的数据进行验证和过滤,以防止恶意输入。使用正则表达式、白名单过滤或内置的.NET验证来验证输入。防止SQL注入:使用参数化查询或存储过程来执行数据库查询,而不是将用户输入直接嵌入SQL语句中。这可以有效防止SQL注入攻击。防止跨站脚本(XSS)攻击:始终对用户提交

SpringMVC之JSR303和拦截器

目录一.JSR3031.1.介绍1.2.为什么要使用JSR-3031.3.常用注解1.4.快速入门1.4.1.导入依赖1.4.2.配置校验规则1.4.3.编写方法校验1.4.4.测试二.拦截器2.1.什么是拦截器?2.2.拦截器与过滤器的区别2.3.拦截器的应用场景2.4.基础使用2.5.用户登录权限控制最后实战Spr

指针进阶笔试题

今天分享的是指针的笔试题,相信看完这篇文章对指针又会有深入的了解,让我们来学习吧。首先分享的是指针和数组的关系,我们都知道数组名是首元素的地址,那就让我们来看一下一维数组和指针的关系吧//一维数组inta[]={1,2,3,4};printf("%d\n",sizeof(a));printf("%d\n",sizeof

Java手写桶排序和算法案例拓展

Java手写桶排序和算法案例拓展1.算法思维导图解释实现思路原理#mermaid-svg-OFCWrsU78anzeD09{font-family:"trebuchetms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-OFCWrsU7

【Python】python -m pip install 和 pip install 的区别

文章目录一、pipinstall二、python-mpipinstall三、两者的总结一、pipinstall当你使用pipinstall命令时,你正在使用Python包管理器pip来安装Python包或模块。以下是关于pipinstall的详细理解:安装包:pipinstall<package>命令用于安装指定的Py

【Python】保姆级万字讲解:Python中的 pip 和 conda 的理解

文章目录一、pip的理解1.1安装1.2如何使用1.3升级1.4安装某个版本的包1.5卸载或者是更新包1.6查看某个包的信息1.7查看需要被升级的包1.8查看兼容问题1.9指定国内源来安装1.10下载包但是不安装1.11批量安装软件包二、conda的理解2.1下载源channel详解2.1.1国内部分好用conda下载

Vue学习笔记

初识Vue需要创建Vue实例root容器代码需要符合html规范,但是混入了一些特殊的Vue语法root容器代码被称为Vue模板容器和Vue实力之间一一对应注意区分js表达式、js代码:一个表达式会生成一个值,可以放在任何一个需要值的地方{{}}需要写js表达式,可以读取data中的所有属性data中属性的值发生改变,

热文推荐