C Primer Plus第十章编程练习答案

news2025/4/9 6:32:28

学完C语言之后,我就去阅读《C Primer Plus》这本经典的C语言书籍,对每一章的编程练习题都做了相关的解答,仅仅代表着我个人的解答思路,如有错误,请各位大佬帮忙点出!

1.修改程序清单10.7的rain.c程序,用指针进行计算(仍然要声明并初始 化数组)。

#include <stdio.h>
#define MONTHS 12
#define YEARS 5
int main(void)
{
    const float rain[YEARS][MONTHS] =
    {
        {4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6},
        {8.5,8.2,1.2,1.6,2.4,0.0,5.2,0.9,0.3,0.9,1.4,7.3},
        {9.1,8.5,6.7,4.3,2.1,0.8,0.2,0.2,1.1,2.3,6.1,8.4},
        {7.2,9.9,8.4,3.3,1.2,0.8,0.4,0.0,0.6,1.7,4.3,6.2},
        {7.6,5.6,3.8,2.8,3.8,0.2,0.0,0.0,0.0,1.3,2.6,5.2}
    };
    int year, month;
    float subtot, total;

    printf(" YEAR RAINFALL (inches)\n");
    for (year = 0, total = 0; year < YEARS; year++)
    {
        for (month = 0, subtot = 0; month < MONTHS; month++)
        {
            subtot += *(*(rain + year) + month);
        }
        printf("%5d %15.1f\n", 2010 + year, subtot);
        total += subtot;
    }
    printf("\nThe yearly average is %.1f inches.\n\n", total / YEARS);
    printf("MONTHLY AVERAGES:\n\n");
    printf(" Jan Feb Mar Apr May Jun Jul Aug Sep Oct ");
    printf(" Nov Dec\n");

    for (month = 0; month < MONTHS; month++)
    {
        for (year = 0, subtot = 0; year < YEARS; year++)
        {
            subtot += *(*(rain + year) + month);
        }
        printf("%4.1f ", subtot / YEARS);
    }
    printf("\n");

    return 0;
}

2.编写一个程序,初始化一个double类型的数组,然后把该数组的内容 拷贝至3个其他数组中(在main()中声明这4个数组)。使用带数组表示法的 函数进行第1份拷贝。使用带指针表示法和指针递增的函数进行第2份拷贝。 把目标数组名、源数组名和待拷贝的元素个数作为前两个函数的参数。第3 个函数以目标数组名、源数组名和指向源数组最后一个元素后面的元素的指 针。也就是说,给定以下声明,则函数调用如下所示:

double source[5] = {1.1, 2.2, 3.3, 4.4, 5.5};

double target1[5];

double target2[5];

double target3[5];

copy_arr(target1, source, 5);

copy_ptr(target2, source, 5);

copy_ptrs(target3, source, source + 5);

#include <stdio.h>
#define LEN 5
void show_arr(const double x[], int n)
{
    for (int i = 0; i < n; i++)
    {
        printf("%-5g", x[i]);
    }
    putchar('\n');
}
void copy_arr(double x[], const double source[], int n)
{
    for (int i = 0; i < n; i++)
    {
        x[i] = source[i];
    }
}
void copy_ptr(double* x, const double* source, int n)
{
    for (int i = 0; i < n; i++)
    {
        *(x + i) = *(source + i);
    }
}
void copy_ptrs(double* x, const double* source, const double* end)
{
    for (int i = 0; i < end - source; i++)
    {
        *(x + i) = *(source + i);
    }
}
int main(void)
{
    double source[LEN] = { 1.1, 2.2, 3.3, 4.4, 5.5 };
    double target1[LEN];
    double target2[LEN];
    double target3[LEN];

    printf("Source array:\n");
    show_arr(source, LEN);

    copy_arr(target1, source, LEN);
    printf("Target1:\n");
    show_arr(target1, LEN);

    copy_ptr(target2, source, LEN);
    printf("Target2:\n");
    show_arr(target2, LEN);

    copy_ptrs(target3, source, source + LEN);
    printf("Target3:\n");
    show_arr(target3, LEN);

    printf("Done.\n");

    return 0;
}

3.编写一个函数,返回储存在int类型数组中的最大值,并在一个简单的 程序中测试该函数。

#include <stdio.h>
int find_max(const int a[], int n)
{
    int max = a[0];

    for (int i = 1; i < n; i++)
    {
        max = max < a[i] ? a[i] : max;
    }
    return max;
}
void show_array(const int a[], int n)
{
    for (int i = 0; i < n; i++)
    {
        printf("%-3d", a[i]);
    }
    printf("\n");
}
int main(void)
{
    int max;
    int array[5] = { 1, 4, 3, 2, 5 };

    printf("数组元素为:");
    show_array(array, 5);
    max = find_max(array, 5);
    printf("最大值为%d.\n", max);

    return 0;
}

4.编写一个函数,返回储存在double类型数组中最大值的下标,并在一 个简单的程序中测试该函数。

#include <stdio.h>
int find_max_index(const double a[], int n)
{
    int index = 0;
    double maxv = a[0];

    for (int i = 1; i < n; i++)
    {
        if (maxv < a[i])
        {
            maxv = a[i], index = i;
        }
    }
    return index;
}
void show_array(const double a[], int n)
{
    for (int i = 0; i < n; i++)
    {
        printf("%-5f ", a[i]);
    }
    printf("\n");
}
int main(void)
{
    int max_index;
    double array[5] = { 1.0, 4.0, 3.0, 2.0, 5.0 };

    printf("数组元素为:");
    show_array(array, 5);
    max_index = find_max_index(array, 5);
    printf("数组最大值的下标为%d.\n", max_index);

    return 0;
}

5.编写一个函数,返回储存在double类型数组中最大值和最小值的差 值,并在一个简单的程序中测试该函数。

#include <stdio.h>
double d_value(const double a[], int n)
{
    double max = a[0];
    double min = a[0];

    for (int i = 1; i < n; i++)
    {
        max = max < a[i] ? a[i] : max;
        min = min > a[i] ? a[i] : min;
    }
    return max - min;
}
void show_array(const double a[], int n)
{
    for (int i = 0; i < n; i++)
    {
        printf("%-5g", a[i]);
    }
    printf("\n");
}
int main(void)
{
    double array[5] = { 1.0, 4.0, 3.0, 2.0, 5.0 };

    printf("数组元素为:");
    show_array(array, 5);
    printf("数组最大值和最小值的差值为%.2f.\n", d_value(array, 5));

    return 0;
}

6.编写一个函数,把double类型数组中的数据倒序排列,并在一个简单 的程序中测试该函数。

#include <stdio.h>
void reverse(double a[], int n)
{
    for (int i = 0; i < n / 2; i++)
    {
        double t = a[i];
        a[i] = a[n - 1 - i];
        a[n - 1 - i] = t;
    }
    return;
}
void show_array(const double a[], int n)
{
    for (int i = 0; i < n; i++)
    {
        printf("%-5g", a[i]);
    }
    printf("\n");
}
int main(void)
{
    double array[5] = { 1.0, 4.0, 3.0, 2.0, 5.0 };

    printf("数组元素为:");
    show_array(array, 5);
    reverse(array, 5);
    printf("倒序后的数组为:");
    show_array(array, 5);

    return 0;
}

7.编写一个程序,初始化一个double类型的二维数组,使用编程练习2中 的一个拷贝函数把该数组中的数据拷贝至另一个二维数组中(因为二维数组 是数组的数组,所以可以使用处理一维数组的拷贝函数来处理数组中的每个 子数组)。

#include <stdio.h>
void copy_arr(const double a[], double b[], int n)
{
    for (int i = 0; i < n; i++)
    {
        b[i] = a[i];
    }
}
void show_array(double(*x)[3], int n)
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            printf("%-5g", x[i][j]);
        }
        printf("\n");
    }
}
int main(void)
{
    double a[2][3] ={{1.0, 2.0, 3.0},{4.0, 5.0, 6.0}};
    double b[2][3] = { 0.0 };

    printf("数组a元素为:\n");
    show_array(a, 2);
    printf("数组b元素为:\n");
    show_array(b, 2);
    for (int i = 0; i < 2; i++)
    {
        copy_arr(a[i], b[i], 3);
    }
    printf("拷贝后的b数组元素为:\n");
    show_array(b, 2);

    return 0;
}

8.使用编程练习2中的拷贝函数,把一个内含7个元素的数组中第3~第5 个元素拷贝至内含3个元素的数组中。该函数本身不需要修改,只需要选择 合适的实际参数(实际参数不需要是数组名和数组大小,只需要是数组元素 的地址和待处理元素的个数)。

#include <stdio.h>
void copy_arr(double ar1[], const double ar2[], int n)
{
    for (int i = 0; i < n; i++)
    {
        ar1[i] = ar2[i];
    }
}
void show_arr(const double ar[], int n)
{
    for (int i = 0; i < n; i++)
    {
        printf("%-5g", ar[i]);
    }
    printf("\n");
}
int main(void)
{
    double orig[7] = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0 };
    double copy[3];

    printf("数组元素为:");
    show_arr(orig, 7);
    printf("拷贝数组中的第3个到第5个元素到新数组里面:");
    copy_arr(copy, orig + 2, 3);
    show_arr(copy, 3);

    return 0;
}

9.编写一个程序,初始化一个double类型的3×5二维数组,使用一个处理 变长数组的函数将其拷贝至另一个二维数组中。还要编写一个以变长数组为 形参的函数以显示两个数组的内容。这两个函数应该能处理任意N×M数组 (如果编译器不支持变长数组,就使用传统C函数处理N×5的数组)。

#include <stdio.h>
void show_array(int n, int m, double x[][5])
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            printf("%-5g", x[i][j]);
        }
        printf("\n");
    }
}
void copy_array(int n, int m, double a[][5], double b[][5])
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            b[i][j] = a[i][j];
        }
    }
}
int main(void)
{
    double a[3][5] ={{1.0,2.0,3.0,4.0,5.0},{6.0,7.0,8.0,9.0,10.0},{11.0,12.0,13.0,14.0,15.0}};
    double b[3][5] = { 0.0 };

    printf("数组a的元素:\n");
    show_array(3, 5, a);
    printf("数组b的元素:\n");
    show_array(3, 5, b);
    copy_array(3, 5, a, b);
    printf("拷贝之后的数组b元素:\n");
    show_array(3, 5, b);

    return 0;
}

10.编写一个函数,把两个数组中相对应的元素相加,然后把结果储存 到第 3 个数组中。也就是说,如果数组1中包含的值是2、4、5、8,数组2中 包含的值是1、0、4、6,那么该函数把3、4、9、14赋给第3个数组。函数接 受3个数组名和一个数组大小。在一个简单的程序中测试该函数。

#include <stdio.h>
void add_array(const int a[], const int b[], int c[], int n)
{
    for (int i = 0; i < n; i++)
    {
        c[i] = a[i] + b[i];
    }
}
void show_array(const int x[], int n)
{
    for (int i = 0; i < n; i++)
    {
        printf("%-3d", x[i]);
    }
    printf("\n");
}
int main(void)
{
    int a[4] = { 2, 4, 5, 8 }, b[4] = { 1, 0, 4, 6 }, c[4] = { 0 };

    printf("数组a的元素:");
    show_array(a, 4);
    printf("数组b的元素:");
    show_array(b, 4);
    printf("数组c的元素:");
    show_array(c, 4);
    add_array(a, b, c, 4);
    printf("执行相加之后的数组c的元素为:");
    show_array(c, 4);

    return 0;
}

11.编写一个程序,声明一个int类型的3×5二维数组,并用合适的值初始 化它。该程序打印数组中的值,然后各值翻倍(即是原值的2倍),并显示 出各元素的新值。编写一个函数显示数组的内容,再编写一个函数把各元素 的值翻倍。这两个函数都以函数名和行数作为参数。

#include <stdio.h>
void show(int(*a)[5], int n)
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            printf("%-5d", a[i][j]);
        }
        printf("\n");
    }
}
void two_times(int(*a)[5], int n)
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            a[i][j] *= 2;
        }
    }
}
int main(void)
{
    int a[3][5] = { {1, 2, 3, 4, 5},{6, 7, 8, 9, 10},{11, 12, 13, 14, 15} };

    printf("数组a的元素为:\n");
    show(a, 3);
    two_times(a, 3);
    printf("翻倍后的数组元素为:\n");
    show(a, 3);

    return 0;
}

12.重写程序清单10.7的rain.c程序,把main()中的主要任务都改成用函数 来完成。

#include <stdio.h>
#define MONTHS 12
#define YEARS 5
void rainfall_total(const float(*rain)[MONTHS], int years)
{
    int year, month;
    float subtot, total;

    printf("YEAR     RAINFALL  (inches)\n");
    for (year = 0, total = 0; year < years; year++)
    {
        for (month = 0, subtot = 0; month < MONTHS; month++)
        {
            subtot += rain[year][month];
        }
        printf("%5d %15.1lf\n", 2010 + year, subtot);
        total += subtot;
    }
    printf("\nThe yearly average is %.1f inches.\n\n", total / years);
}
void rainfall_aver(const float(*rain)[MONTHS], int years)
{
    float subtot;
    int month, year;

    printf("MONTHLY AVERAGES:\n\n");
    printf(" Jan  Feb  Mar  Apr  May  Jun  Jul  Aug  Sep  Oct  ");
    printf(" Nov  Dec\n");
    for (month = 0; month < MONTHS; month++)
    {
        for (year = 0, subtot = 0; year < years; year++)
        {
            subtot += rain[year][month];
        }
        printf("%4.1f ", subtot / years);
    }
    putchar('\n');
}
int main(void)
{
    const float rain[YEARS][MONTHS] =
    {
        {4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6},
        {8.5,8.2,1.2,1.6,2.4,0.0,5.2,0.9,0.3,0.9,1.4,7.3},
        {9.1,8.5,6.7,4.3,2.1,0.8,0.2,0.2,1.1,2.3,6.1,8.4},
        {7.2,9.9,8.4,3.3,1.2,0.8,0.4,0.0,0.6,1.7,4.3,6.2},
        {7.6,5.6,3.8,2.8,3.8,0.2,0.0,0.0,0.0,1.3,2.6,5.2},
    };

    rainfall_total(rain, YEARS);
    rainfall_aver(rain, YEARS);

    return 0;
}

13.编写一个程序,提示用户输入3组数,每组数包含5个double类型的数 (假设用户都正确地响应,不会输入非数值数据)。该程序应完成下列任务。

a.把用户输入的数据储存在3×5的数组中

b.计算每组(5个)数据的平均值

c.计算所有数据的平均值

d.找出这15个数据中的最大值

e.打印结果

每个任务都要用单独的函数来完成(使用传统C处理数组的方式)。完 成任务b,要编写一个计算并返回一维数组平均值的函数,利用循环调用该 函数3次。对于处理其他任务的函数,应该把整个数组作为参数,完成任务c 和d的函数应把结果返回主调函数。

#include <stdio.h>
#define ROWS 3
#define COLS 5
void store(double ar[], int n)
{
    for (int i = 0; i < n; i++)
    {
        printf("Please enter a number for position %d: ", i + 1);
        scanf("%lf", &ar[i]);
    }
}
double average2d(double ar[][COLS], int rows)
{
    double sum = 0.0;

    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < COLS; j++)
        {
            sum += ar[i][j];
        }
    }
    return rows * COLS > 0 ? sum / (rows * COLS) : 0.0;
}
double max2d(double ar[][COLS], int rows)
{
    double maxv = ar[0][0];

    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < COLS; j++)
        {
            maxv = maxv < ar[i][j] ? ar[i][j] : maxv;
        }
    }
    return maxv;
}
void showarr2(double ar[][COLS], int rows)
{
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < COLS; j++)
        {
            printf("%-5g", ar[i][j]);
        }
        printf("\n");
    }
}
double average(const double ar[], int n)
{
    double sum = 0.0;

    for (int i = 0; i < n; i++)
    {
        sum += ar[i];
    }
    return n > 0 ? sum / n : 0.0;
}
int main(void)
{
    double stuff[ROWS][COLS];

    for (int row = 0; row < ROWS; row++)
    {
        printf("Please enter %d numbers for %d row\n", COLS, row + 1);
        store(stuff[row], COLS);
    }
    printf("Array:\n");
    showarr2(stuff, ROWS);

    for (int row = 0; row < ROWS; row++)
    {
        printf("Average for row %d is %g.\n", row + 1, average(stuff[row], COLS));
    }
    printf("Average is %g.\n", average2d(stuff, ROWS));
    printf("Maximum is %g.\n", max2d(stuff, ROWS));
    printf("Done.\n");

    return 0;
}

14.以变长数组作为函数形参,完成编程练习13。

#include <stdio.h>
#define ROWS 3
#define COLS 5
void store(int n, double ar[n])
{
    for (int i = 0; i < n; i++)
    {
        printf("Please enter a number for position %d: ", i + 1);
        scanf("%lf", &ar[i]);
    }
}
double average2d(int rows, int cols, double ar[rows][cols])
{
    double sum = 0.0;

    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < cols; j++)
        {
            sum += ar[i][j];
        }
    }
    return rows * cols > 0 ? sum / (rows * cols) : 0.0;
}
double max2d(int rows, int cols, double ar[rows][cols])
{
    double maxv = ar[0][0];

    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < cols; j++)
        {
            maxv = maxv < ar[i][j] ? ar[i][j] : maxv;
        }
    }
    return maxv;
}
void showarr2(int rows, int cols, double ar[rows][cols])
{
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < cols; j++)
        {
            printf("%-5g", ar[i][j]);
        }
        printf("\n");
    }
}
double average(int n, const double ar[n])
{
    double sum = 0.0;

    for (int i = 0; i < n; i++)
    {
        sum += ar[i];
    }
    return n > 0 ? sum / n : 0.0;
}
int main(void)
{
    double stuff[ROWS][COLS];

    for (int row = 0; row < ROWS; row++)
    {
        printf("Please enter %d numbers for %d row\n", COLS, row + 1);
        store(COLS, stuff[row]);
    }
    printf("Array:\n");
    showarr2(ROWS, COLS, stuff);

    for (int row = 0; row < ROWS; row++)
    {
        printf("Average for row %d is %g.\n", row + 1, average(COLS, stuff[row]));
    }
    printf("Average is %g.\n", average2d(ROWS, COLS, stuff));
    printf("Maximum is %g.\n", max2d(ROWS, COLS, stuff));
    printf("Done.\n");

    return 0;
}

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

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

相关文章

如何在华为OD机试中获得满分?Java实现【记票统计】一文详解!

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 &#x1f31f;专栏地址: Java华为OD机试真题&#xff08;2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述…

VTK读入DICOM数据

date: 2019-04-02 16:26:00 VTK读入DICOM数据 DICOM示例&#xff1a; 图像来自www.dicomlibrary和medDream 准备图像 公开数据库 DICOM Library&#xff1a;链接&#xff0c;少量CT&#xff08;Computed Tomography&#xff0c;计算机断层扫描&#xff09;&#xff0c;MR&…

网络知识点之-HTTP协议

超文本传输协议&#xff08;Hyper Text Transfer Protocol&#xff0c;HTTP&#xff09;是一个简单的请求-响应协议&#xff0c;它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出&#xff1b;而消息内…

基于Open3D的点云处理4-数据结构Kdtree和Octree

Kdtree Kdtree是一种划分k维数据空间的数据结构&#xff0c;本质也是一颗二叉树&#xff0c;只不过每个节点的数据都是k维&#xff0c;当k1时&#xff0c;就是普通二叉树。 建立Kdtree实际上是一个不断划分的过程&#xff0c;首先选择最sparse的维度&#xff08;一般通过计算…

【LeetCode热题100】打开第6天:正则表达式匹配

文章目录 正则表达式匹配⛅前言&#x1f512;题目&#x1f511;题解 正则表达式匹配 ⛅前言 大家好&#xff0c;我是知识汲取者&#xff0c;欢迎来到我的LeetCode热题100刷题专栏&#xff01; 精选 100 道力扣&#xff08;LeetCode&#xff09;上最热门的题目&#xff0c;适合…

Spring Authorization Server 系列(三)code换取token

code换取token 概述客户端认证方式换取结果 概述 在获取到code后&#xff0c;就可以使用code换取token了&#xff0c;但在换取token这一步还会对客户端进行一些校验&#xff0c;而这也支持不同的方式&#xff0c;一起来看看。 客户端认证方式 JwtClientAssertionAuthenticati…

2023 英国剑桥大学博士后含金量

作为英国顶尖的大学之一&#xff0c;剑桥大学自然也是博士后研究的理想选择。然而&#xff0c;对于那些希望在这所学府找到博士后职位的人来说&#xff0c;他们可能会问&#xff1a;剑桥大学的博士后含金量如何&#xff1f;首先&#xff0c;我们需要了解什么是博士后研究。简单…

阿里版ChatGPT已接入钉钉,张勇:未来所有业务都有大模型加持

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 我新建了人工智能中文站https://ai.weoknow.com 每天给大家更新可用的国内可用chatGPT资源 阿里&#xff1a;大模型也是基础设施。 4 月 7 日下午&#xff0c;阿里云没有一点预告的突然宣布&#xff0c;自研类 ChatGPT …

《数据库应用系统实践》------ 小区停车管理系统

系列文章 《数据库应用系统实践》------ 小区停车管理系统 文章目录 系列文章一、需求分析1、系统背景2、 系统功能结构&#xff08;需包含功能结构框图和模块说明&#xff09;3&#xff0e;系统功能简介 二、概念模型设计1&#xff0e;基本要素&#xff08;符号介绍说明&…

MySQL_7 常见约束及演示

目录 一、约束概述 二、 PRIMARY KEY&#xff08;主键&#xff09; 1.作用 : 2.格式 : 3.自增长 : 4.演示 : 演示Ⅰ—— 主键约束的特点 演示Ⅱ—— 复合主键 演示Ⅲ—— 自增长 三、UNIQUE&#xff08;唯一&#xff09; 1.作用 : 2.格式 : 3.演示 : …

人多岗位少,都快把我卷死了,这是今年软件测试就业的真实写照,也是所有岗位的真实写照。

前两天跟一个HR朋友聊天&#xff0c;她表示刚在boss上发布了一个普通测试岗位&#xff0c;不到一小时竟然收到了几百份简历。而且简历质量极高&#xff0c;这是往年不敢想象的。岗位少&#xff0c;竞争激烈&#xff0c;这是今年软件测试就业的真实写照&#xff0c;也是所有岗位…

网狐大联盟数据库迁移到Linux系统

1.系统要求: ubuntu 20.04 Ubuntu 20.04.6 LTS (Focal Fossa) 安装系统 2.linux上安装mssql server Linux 上的 SQL Server 概述 - SQL Server | Microsoft Learn 安装指令: # 安装mssql-serverwget -qO- https://packages.microsoft.com/keys/microsoft.asc | sudo tee…

路径规划算法:基于入侵杂草优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于入侵杂草优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于入侵杂草优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化…

Java入门教程||Java 数据结构||Java 集合框架

Java 数据结构 Java 数据结构 Java工具包提供了强大的数据结构。在Java中的数据结构主要包括以下几种接口和类&#xff1a; 枚举&#xff08;Enumeration&#xff09;位集合&#xff08;BitSet&#xff09;向量&#xff08;Vector&#xff09;栈&#xff08;Stack&#xff0…

安全测试常用 ADB 命令

ADB&#xff0c;全称 Android Debug Bridge&#xff0c;即 Android 调试桥&#xff0c;是一个对 Android 开发人员和测试人员都必不可少的工具。adb 包含在 Android SDK 平台工具软件包中。可以使用 SDK 管理器下载此软件包&#xff0c;该管理器会将其安装在 android_sdk/platf…

多线程和多进程

线程和进程 最近经常看到多线程和多进程&#xff0c;这两个概念在某些方向还是很像的&#xff0c;但是进程和线程到底有啥联系&#xff0c;又有啥区别&#xff0c;很多人并没有完全弄明白&#xff0c;最近学操作系统的时候&#xff0c;老师经常叫线程为进程的进程&#xff0c;…

CMake之安装打包

目录 安装公共选项安装目标安装文件安装目录安装导出 导出问题 安装 install的用法 公共选项 install有多个签名&#xff0c;这些签名公用的选项有以下&#xff1a; DESTINATION&#xff1a;指定文件要安装的目录&#xff0c;可以是相对路径或绝对路径。 相对路径&#xff…

【JVM】12. 垃圾回收相关概念

文章目录 12.1. System.gc()的理解12.2. 内存溢出与内存泄露内存溢出&#xff08;OOM&#xff09;内存泄漏&#xff08;Memory Leak&#xff09; 12.3. Stop The World12.4. 垃圾回收的并行与并发并发&#xff08;Concurrent&#xff09;并行&#xff08;Parallel&#xff09;并…

QT调用VS编译的RabbitMQ-C静态库

为此折腾两天&#xff0c;参考了不少大神的文章&#xff0c;再次标识感谢。把自己的一些思路简单记录下&#xff1a; https://blog.csdn.net/qq_70244454/article/details/128086920 https://blog.csdn.net/zjzytnn/article/details/70045247 把几个踩过的坑&#xff0c;记录…

【Python REST API】零基础也能轻松掌握的学习路线与参考资料

REST&#xff08;Representational State Transfer&#xff09;是一种基于HTTP协议的软件架构风格&#xff0c;用于构建分布式网络应用程序。Python是一种功能强大的编程语言&#xff0c;它具有丰富的库和框架&#xff0c;可以使用Python编写RESTful API。本篇文章将详细介绍Py…