当前位置: 首页 > news >正文

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

学完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;
}

相关文章:

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

学完C语言之后&#xff0c;我就去阅读《C Primer Plus》这本经典的C语言书籍&#xff0c;对每一章的编程练习题都做了相关的解答&#xff0c;仅仅代表着我个人的解答思路&#xff0c;如有错误&#xff0c;请各位大佬帮忙点出&#xff01; 1.修改程序清单10.7的rain.c程序&…...

奇舞周刊第493期:Hook 革命!浅谈 React 新 Hook 的未来与思想

关注前端生态发展&#xff0c;了解行业动向。 下面先一起看下本期周刊 摘要 吧~ 奇舞推荐 ■ ■ ■ Hook 革命&#xff01;浅谈 React 新 Hook 的未来与思想 作者阳羡曾写文章对 React 新 Hook use 的设计理念和限制进行了深入分析&#xff0c;并提供了一个可能的实现来帮助读者…...

文件包含的本质、预处理符号、# vs ##

何为头文件&#xff1f; 在C语言中&#xff0c;文件包含是一种常见的编程技术&#xff0c;它允许程序员在一个源文件中使用另一个源文件中的函数或变量。 文件包含通常使用#include预处理指令来实现。#include指令告诉预处理器将文件的内容插入到当前文件的指定位置中。 例如&a…...

【JavaSE】Java基础语法(三十九):网络编程入门

文章目录 1. 网络编程概述2. 网络编程三要素3. IP地址4. InetAddress5. 端口和协议 1. 网络编程概述 计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备&#xff0c;通过通信线路连接起来&#xff0c;在网络 操作系统&#xff0c;网络管理软件及网络通信协…...

中间件SOME/IP简述

SOME/IP SOME/IP 不是广义上的中间件&#xff0c;严格的来讲它是一种通信协议&#xff0c;但中间件这个概念太模糊了&#xff0c;所以我们也一般称 SOME/IP 为通信中间件。 SOME/IP 全称是 Scalable service-Oriented MiddlewarE over IP。也就是基于 IP 协议的面向服务的可扩…...

[自学记录03|百人计划]移动端GPU的TB(D)R架构基础

一、专有名词解释 1.System on Chip&#xff08;Soc&#xff09; Soc是把CPU、GPU、内存、通信基带、GPS模块等等整合在一起的芯片的称呼。常见有A系Soc&#xff08;苹果&#xff09;&#xff0c;骁龙Soc&#xff08;高通&#xff09;&#xff0c;麒麟Soc&#xff08;华为&am…...

详解Java枚举

一、知识点 二、概念 enum 的全称为 enumeration&#xff0c; 是 JDK 1.5 中引入的新特性。 在Java中&#xff0c;被 enum 关键字修饰的类型就是枚举类型。形式如下&#xff1a; enum Color { RED, GREEN, BLUE }如果枚举不添加任何方法&#xff0c;枚举值默认为从0开始的有…...

ES6-ES13学习笔记(4.0)

includes函数 判断字符串是否存在指定字符 <!--* Author: RealRoad1083425287qq.com* Date: 2023-06-01 08:40:33* LastEditors: Mei* LastEditTime: 2023-06-01 08:58:54* FilePath: \vscode\ECMA\05\01.html* Description: * * Copyright (c) 2023 by ${git_name_ema…...

线段树C++详细讲解和个人见解

问题引入 1275. 最大数 给定一个正整数数列 a1,a2,…,an&#xff0c;每一个数都在 0∼p−1 之间。 可以对这列数进行两种操作&#xff1a; 添加操作&#xff1a;向序列后添加一个数&#xff0c;序列长度变成 n1&#xff1b;询问操作&#xff1a;询问这个序列中最后 L 个数中…...

构建sysbench的镜像

方式1&#xff1a;先docker run一个镜像&#xff0c;手动安装好commit docker run -it --name mycentos arm64v8/centos:7 /bin/bash docker commit -a "PX Bai" mycentos mycentos1 docker run -it -d --namemycentos1 mycentos1 /bin/bash docker exec -it mycent…...

leetcode解题思路分析(一百四十)1201 - 1208 题

丑数3 给你四个整数&#xff1a;n 、a 、b 、c &#xff0c;请你设计一个算法来找出第 n 个丑数。丑数是可以被 a 或 b 或 c 整除的 正整数 。 容斥原理二分法 class Solution { public:int nthUglyNumber(int n, int a, int b, int c) {long long ab lcm((long long)a, (lo…...

FPGA设计的指导性原则 (一)

这一部分主要介绍FPGA/CPLD设计的指导性原则,如FPGA设计的基本原则、基本设 计思想、基本操作技巧、常用模块等。FPGA/CPLD设计的基本原则、思想、技巧和常用模 块是一个非常大的问题,在此不可能面面俱到,只能我们公司项目中常用的一些设计原则与 方法提纲携领地加以介绍,希…...

【架构】常见技术点--服务治理

导读&#xff1a;收集常见架构技术点&#xff0c;作为项目经理了解这些知识点以及解决具体场景是很有必要的。技术要服务业务&#xff0c;技术跟业务具体结合才能发挥技术的价值。 目录 1. 微服务 2. 服务发现 3. 流量削峰 4. 版本兼容 5. 过载保护 6. 服务熔断 7. 服务…...

手撕数据结构—单链表

✅作者&#xff1a;简单^不简单 &#x1f525;系列专栏&#xff1a;C语言数据结构 &#x1f496;如果文章有错误&#xff0c;时刻欢迎大家的指正。当然觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4ac;格言&#xff1a;希望我…...

Benewake(北醒) 快速实现 TF02-i-RS485 与电脑通信操作说明

目录 一、前言二、工具准备1. USB-RS485 转接器2. TF02-i-RS4853. 兆信直流电源4.连接线、绝缘胶带、螺丝刀5. PC&#xff1a;Windows 系统6. 串口助手软件 三、连接方式1. USB-RS485 转接板接口说明2. TF02-i-RS485 引脚定义3. 连接图 四、TF02-i-RS485 与电脑通信操作说明1. …...

【分享】科大讯飞星火认知大模型(初体验)

前言&#xff1a; 哈喽&#xff0c;大家好&#xff0c;我是木易巷~ 随着人工智能技术的迅猛发展&#xff0c;自然语言处理&#xff08;NLP&#xff09;成为了热门话题。在众多NLP模型中&#xff0c;科大讯飞星火认知大模型成为了一个备受瞩目的新秀&#xff0c;今天我们来了解…...

logstash 采集应用日志切割问题

1.logstash [oswatch@rce1 conf]$ cat test.conf input { file { path=>["/tmp/test/test.log*"] } } output { stdout { codec=>rubydebug{} } } 2.python脚本: [oswatch@rce1 conf]$ cat t1.py #!/usr/bin/python # -*- coding: UTF-…...

计算机网络实验:认识Packet Tracer软件

目录 前言实验目的实验内容及要求相关知识点实验指导实验过程总结 前言 计算机网络是当今信息技术的重要组成部分&#xff0c;它涉及到多种硬件和软件的协同工作&#xff0c;以实现数据的传输和交换。为了更好地理解和掌握计算机网络的基本原理和技术&#xff0c;我们需要进行…...

【MySQL新手到通关】第六章 时间日期函数

文章目录 1.获取日期时间函数1.1 获取当前日期时间1.2 获取当前日期1.3 获取当前时间 2.日期格式化★★★2.1 日期转指定格式字符串2.2 字符串转日期 3.日期间隔3.1 增加日期间隔 ★★★3.2 减去一个时间间隔★★★3.3 日期相差天数&#xff08;天&#xff09;3.4 相差时间&…...

深蓝学院C++基础笔记 第 1 章 C++初探

第 1 章 C初探 1&#xff0e;从Hello World 谈起 Hello World: #include <iostream> int mian() { std::cout << "Hello World!" << std::endl; }函数: 一段能被反复调用的代码&#xff0c;可以接收输入&#xff0c;进行处理并(或)产生输出-返回…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

【UE5 C++】通过文件对话框获取选择文件的路径

目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 &#xff0c;这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器&#xff0c;右键点击 .uproject 文件&#xff0c;选择 "Generate Visual Studio project files"&#xff0c;重…...

数据库——redis

一、Redis 介绍 1. 概述 Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的、高性能的内存键值数据库系统&#xff0c;具有以下核心特点&#xff1a; 内存存储架构&#xff1a;数据主要存储在内存中&#xff0c;提供微秒级的读写响应 多数据结构支持&…...