最新资讯

  • 《算法笔记》学习记录-第二章 C/C++快速入门

《算法笔记》学习记录-第二章 C/C++快速入门

2026-02-06 20:00:56 栏目:最新资讯 9 阅读

《算法笔记》学习记录-第二章 C/C++快速入门

  • 2.0 C语言小程序
  • 2.1 基本数据结构
    • 2.1.1 变量定义
    • 2.1.2 变量类型
    • 2.1.3 强制类型转换
    • 2.1.4 符号常量和const常量
    • 2.1.5 运算符
      • 1. 算数运算符
      • 2. 关系运算符
      • 3. 逻辑运算符
      • 4. 条件运算符
      • 5. 位运算符
  • 2.2 顺序结构
    • 2.2.1 赋值表达式
    • 2.2.2 使用 scanf 和 printf 输入/输出
      • 1. scanf 函数的使用
      • 2. printf 函数的使用
    • 2.2.3 使用 getchar 和 putchar 输入/输出字符
    • 2.2.4 注释
    • 2.2.5 typedef
    • 2.2.6 常用 math 函数
      • 1. fabs(double x)
      • 2. floor(double x) 和 ceil(double x)
      • 3. pow(double r, double p)
      • 4. sqrt(double x)
      • 5. log(double x)
      • 6. sin(double x)、cos(double x) 和 tan(double x)
      • 7. asin(double x)、acos(double x) 和 atan(double x)
      • 8. round(double x)
  • 2.3 选择结构
    • 2.3.1 if 语句
    • 2.3.2 if 语句的嵌套
    • 2.3.3 switch 语句
  • 2.4 循环结构
    • 2.4.1 while 语句
    • 2.4.2 do...while 语句
    • 2.4.3 for 语句
    • 2.4.4 break 和 continue 语句
  • 2.5 数组
    • 2.5.1 一维数组
    • 2.5.2 冒泡排序
    • 2.5.3 二维数组
    • 2.5.4 memset--对数组中每一个元素赋相同的值
    • 2.5.5 字符数组
      • 1. 字符数组的初始化
      • 2. 字符数组的输入输出
        • (1)scanf 输入,printf 输出
        • (2)getchar 输入,putchar 输出
        • (3)gets 输入,puts 输出
      • 3. 字符数组的存放方式
    • 2.5.6 string.h 头文件
      • 1. strlen()
      • 2. strcmp()
      • 3. strcpy()
      • 4. strcat()
    • 2.5.7 sscanf 与 sprintf
  • 2.6 函数
    • 2.6.1 函数的定义
    • 2.6.2 再谈 main 函数
    • 2.6.3 以数组作为函数参数
    • 2.6.4 函数的嵌套调用
    • 2.6.5 函数的递归调用
  • 2.7 指针
    • 2.7.1 什么是指针
    • 2.7.2 指针变量
    • 2.7.3 指针与数组
    • 2.7.4 使用指针变量作为函数参数
    • 2.7.5 引用
      • 1. 引用的含义
      • 2. 指针的引用
  • 2.8 结构体(struct)的使用
    • 2.8.1 结构体的定义
    • 2.8.2 访问结构体内的元素
    • 2.8.3 结构体的初始化
  • 2.9 补充
    • 2.9.1 cin 与 cout
      • 1. cin
      • 2. cout
    • 2.9.2 浮点数的比较
      • 1. 等于运算符(==)
      • 2. 大于运算符(>)
      • 3. 小于运算符(<)
      • 4, 大于等于运算符(>=)
      • 5. 小于等于运算符(<=)
      • 6. 圆周率π
    • 2.9.3 复杂度
      • 1. 时间复杂度
      • 2. 空间复杂度
      • 3. 编码复杂度
  • 2.10 黑盒测试
    • 2.10.1 单点测试
    • 2.10.2 多点测试
      • 3种输入方式:
        • (1) while...EOF 型
        • (2) while...break 型
        • (3) while(T--) 型
      • 三种输出类型
        • (1) 正常输出
        • (2) 每组数据输出之后都额外加一个空行
        • (3) 两组输出数据之间有一个空行,最后一组数据后面没有空行

2.0 C语言小程序

#include  // 头文件
// 等价写法:#include 
// #include  等价 #include 
// #include  等价 #include 

int main(){ // 主函数,一个程序最多只能有一个主函数
    // 定义两个整数型变量a和b
    int a, b;

    // 读入两个整数
    scanf("%d%d", &a, &b);

    // 输出两个整数的和
    printf("%d", a+b);

    return 0;
}






2.1 基本数据结构

2.1.1 变量定义

格式:

变量类型 变量名;

或者

变量类型 变量名 = 初值;     // 在定义的时候就赋初值

2.1.2 变量类型

  • 整型
    • int : 绝对值在 10 9 10^9 109范围以内的整数或者32位整数, 输出格式是%d
    • long long

  • 浮点型 : 输出格式是%f ; 不要使用float,碰到浮点型的数据都用double
    • 单精度float : 有效精度6~7位
    • 双精度double : 有效精度15~16位

  • 字符型
    • 字符变量和字符常量(字符本身,例如: ‘e’):char ;小写字母比大写字母的ASCII码值大32;字符常量(必须是单个字符)必须用单引号标注
    • 转义字符: 换行; Tab键;空字符NULL,其ASCII码为0,不是空格
    • 字符串常量:双引号标记的字符集,可以作为初值赋给字符数组,并用%s格式输出;由多个char字符组合而成的字符集合称作字符数组;不能把字符串常量赋值给字符变量

  • 布尔型
    • bool:C语言中必须添加stdbool.h头文字才可以使用,C++中可以直接使用;取值只能为true(真)或者false(假);整数常量在赋值给布尔型变量时会自动转换为true(非零,包括正整数和负整数)或者false(零);对于计算机来说,truefalse在存储时分别为10;用%d格式输出时,truefalse会输出10

2.1.3 强制类型转换

格式:

(新类型名) 变量名

2.1.4 符号常量和const常量

格式:

#define 标识符 常量     // 注意末尾不加分号

或者

const 数据类型 变量名 = 常量;     // 更推荐

此外,define除了可以定义常量外,其实可以定义任何语句或片段,格式:

#define 标识符 任何语句或片段

注意:宏定义是直接将对应的部分替换,然后才进行编译和运行;它把替换的部分直接原封不动替换进去;尽量不要使用宏定义来做除了定义常量以外的事情,除非给能加的地方都加上括号

例如:

#include 
#define ADD(a, b) ((a)+(b)) // 正确的
// #define ADD(a, b) (a+b) // 错误
// #define ADD(a,b) a+b // 错误

int main(){
	int num1 = 3, num2 = 5;
	printf("%d", ADD(num1, num2));
	return 0;
}

例如:

#include 
#define CAL(x) (x * 2 + 1)

int main(){
	int a = 1;
	printf("%d
", CAL(a + 1)); // 错误,宏定义替换为CAL(a + 1 * 2 + 1)
	return 0;
}

2.1.5 运算符

1. 算数运算符

  • + 加法运算符:两数相加
  • - 减法运算符:两数相减
  • * 乘法运算符:两数相乘
  • / 除法运算符:取前面的数除以后面的数得到的商 (注意:当被除数跟除数都是整型时,并不会得到一个double浮点型的数,而是直接舍去小数部分;除数如果为0,会导致程序异常退出或是得到错误输出“1.#INF00”)
  • % 取模运算符:取前面的数除以后面的数得到的余数
  • ++ 自增运算符:令一个整型变量增加1
    • i++:先使用i再将i加1
    • ++i:先将i加1再使用i
  • -- 自减运算符:令一个整型变量减少1;i----i

加减乘除四种运算的优先级顺序和四则运算的优先级相同;

取模运算符的优先级和除法运算符相同;

2. 关系运算符

六种:<小于、>大于、<=小于等于、>=大于等于、==等于、!=不等于

3. 逻辑运算符

三种:&&与、||或、!

4. 条件运算符

格式:

A ? B : C;     // C语言中唯一的三目运算符,需要三个参数的运算符

含义:如果A为真,那么执行并返回B的结果;如果A为假,那么执行并返回C的结果。

5. 位运算符

六种:<<左移、>>右移、&位与、|位或、^位异或、~位取反

优先级:位运算符<算术运算符

无穷大的数INF(两种形式等价):
const int INF = (1 << 30) - 1;
const int INF = 0x3fffffff;






2.2 顺序结构

2.2.1 赋值表达式

“=”实现赋值

赋值运算符可以通过将其他运算符放在前面来实现赋值操作的简化。
例如:

n = n + 2     等价于     n += 2
n = n * 3     等价于     n *= 3
n = n / m     等价于     n /= m

2.2.2 使用 scanf 和 printf 输入/输出

1. scanf 函数的使用

格式:

scanf("格式控制", 变量地址);

例如:scanf("%d", &n);

其中,变量地址的写法是“&变量名”&称为取地址运算符

常见数据类型变量的 scanf 格式符:

  • int : %d
  • long long : %lld
  • float : %f
  • double : %lf
  • char : %c
  • 字符串(char数组) : %s 注意:数组名称本身就代表了这个数组第一个元素的地址,所以不需要再加取地址运算符

注意:

  • 在 scanf 中,除了 char 数组整个输入的情况不加&之外,其他变量类型都需要加&;
  • scanf 的双引号内的内容其实就是整个输入,只不过把数据换成它们对应的格式符并把变量的地址按次序写在后面而已;
  • 除了%c以外,scanf 对其他格式符的输入是以空白符(即空格、换行等)为结束判断标志的;
  • 字符数组使用%s读入的时候以空格跟换行为读入结束的标志;
  • scanf 的%c格式是可以读入空格跟换行的;

2. printf 函数的使用

格式:

printf("格式控制", 变量名称);

常见数据类型变量的 printf 格式符:

  • int : %d
  • long long : %lld
  • float : %f
  • double : %f // 只有这个和 scanf 不一样
  • char : %c
  • 字符串(char数组) : %s

三种实用的输出格式:

  • %md : 可以使不足m位的int型变量以m位进行右对齐输出,其中高位用空格补齐;如果变量本身超过m位,则保持原样;
  • %0md : 可以使不足m位的int型变量以m位进行右对齐输出,其中高位用0补齐;如果变量本身超过m位,则保持原样;
  • %.mf : 可以让浮点数保留m位小数输出,精度的规则是“四舍六入五成双”;题目要求“浮点数的输出保留XX位小数(或是精确到小数点后XX位)”时使用;如果是四舍五入要用到 round 函数

2.2.3 使用 getchar 和 putchar 输入/输出字符

getchar 用来输入单个字符,putchar 用来输出单个字符;
getchar 可以识别换行符;

2.2.4 注释

  • /**/ : 注释若干连续行的内容
  • // : 注释单行

2.2.5 typedef

给复杂的数据类型起一个别名,提高编码效率
例如:

#include 
typedef long long LL; // 给 long long 起个别名LL
int main(){
    LL a = 123456789012345LL, b = 234567890123456LL; // 直接使用LL 
   printf("%lld
", a+b);
   return 0;
}

输出结果是:

358024679135801

2.2.6 常用 math 函数

1. fabs(double x)

用于对 double 型变量取绝对值
例如:

#include 
#include 
int main(){
    double db = -12.56;
    printf("%.2f
", fabs(db));
    return 0;   
}

输出结果:

12.56

2. floor(double x) 和 ceil(double x)

分别用于 double 型变量的向下取整和向上取整,返回类型为 double 型
例如:

#include 
#include 
int main(){
    double db1 = -5.2, db = 5.2;
    printf("%.0f %.0f
", floor(db1), ceil(db1));
    printf("%.0f %.0f
", floor(db2), ceil(db2));
    return 0;
}

输出结果:

-6 -5
5 6

3. pow(double r, double p)

该函数用于返回 r p r^p rp,要求r和p都是 double 型
例如:

#include 
#include 
int main(){
    double db = pow(2.0, 3.0);
    printf("%f
", db);
    return 0;    
}

输出结果:

8.000000

4. sqrt(double x)

用于返回 double 型变量的算术平方根
例如:

#include 
#include 
int main(){
    double db = sqrt(2.0);
    printf("%f
", db);
    return 0;
}

输出结果:

1.414214

5. log(double x)

用于返回 double 型变量的 以自然对数为底 的对数
例如:

#include 
#include 
int main(){
    double db = log(1.0);
    pringf("%f
", db);
    return 0;
}

输出结果:

0.000000

C语言中没有对任意底数求对数的函数,因此必须使用换底公式来将不是以自然对数为底的对数转换为以e为底的对数,即 l o g a b = l o g e b / l o g e a log_ab = log_eb / log_ea logab=logeb/logea

6. sin(double x)、cos(double x) 和 tan(double x)

分别返回 double 型变量的正弦值、余弦值和正切值。参数要求是弧度制
例如:

#include 
#include 
const double pi = acos(-1.0); // 把pi定义为精确值acos(-1.0)(因为cos(pi)=-1)
int main(){
    double db1 = sin(pi * 45 / 180);
    double db2 = cos(pi *45 / 180);
    double db3 = tan(pi * 45 / 180);
    printf("%f, %f, %f
", db1, db2, db3);
    return 0;
}

输出结果:

0.707107, 0.707107, 1.000000

7. asin(double x)、acos(double x) 和 atan(double x)

分别返回 double 型变量的反正弦值、反余弦值和反正切值
例如:

#include 
#include 
int main(){
    double db1 = asin(1);
    double db2 = acos(-1.0);
    double db3 = atan(0);
    printf("%f, %f, %f
", db1, db2, db3);
    return 0;
}

输出结果:

1.570796, 3.141593, 0.000000

8. round(double x)

用于将 double 型变量x四舍五入,返回类型也是 double 型,需进行取整
例如:

#include 
#include 
inr main(){
    double db1 = round(3.40);
    double db2 = round(3.45);
    double db3 = round(3.50);
    double db4 = round(3.55);
    double db5 = round(3.60);
    printf("%d, %d, %d, %d, %d
", (int)db1, (int)db2, (int)db3, (int)db4, (int)db5);
    return 0;
}

输出结果:

3, 3, 4, 4, 4






2.3 选择结构

2.3.1 if 语句

if 语句 格式:

if(条件A){
    ...
}

if-else 语句 格式:

if(条件A){
    ...
} else {
    ...
}

一般只有在明确不会出错的情况下才可以将大括号去掉
else if 写法格式:

if(条件A){
    ...
} else if(条件B){
    ...
} else {
    ...
}

技巧:如果表达式是“!=0”或“==0”,可以采用比较简单的写法

  • 如果表达式是“!=0”,则可以省略“!=0”;
if(n)  等价于  if(n!=0)
  • 如果表达式是“==0”,则可以省略“==0”,并在表达式 前添加非运算符“!”;
if(!n)  等价于  if(n==0)

2.3.2 if 语句的嵌套

格式:

if(条件A){
    ...
    if(条件B){
        ...
    } else {
        ...
    }    
    ...
} else {
    ...
}

2.3.3 switch 语句

分支条件较多时会显得比较精练,但在分支条件较少时用得并不多
格式:

switch(表达式){
    case 常量表达式1:
        ...
        break;
    case 常量表达式2:
        ...
        break;
    case 常量表达式n:
        ...
        break;
    default;
        ...
}






2.4 循环结构

2.4.1 while 语句

格式:

while(条件A){
    ...
}

技巧:

  • 如果表达式是“!=0”,则可以省略“!=0”;
  • 如果表达式是“==0”,则可以省略“==0”,并在表达式 前添加非运算符“!”;

2.4.2 do…while 语句

格式:

do{
    ...
}while(条件A); // 注意有分号

先执行省略号中的内容一次,然后才判断条件A是否成立。如果条件A成立,继续反复执行省略号的内容,知道某一次条件A不再成立,则退出循环

2.4.3 for 语句

格式:

for(表达式A; 表达式B; 表达式C){
    ...
}

意思:

  • ① 在 for 循环开始前,首先执行表达式A;
  • ② 判断表达式B是否成立:若成立,执行省略号内容;否则,退出循环;
  • ③ 在省略号内容执行完毕后,执行表达式C,之后回到②

常用特例:

for(循环变量赋初值; 循环条件; 循环变量改变){
    ...
}

2.4.4 break 和 continue 语句

break 可以强制退出 switch 语句
示例:

#include 
int main(){
    int n, sum = 0;
    for(int i = 1; i <= 100; i++){
        sum = sum + i;
        if(sum >= 2000) break;
    }
    printf("sum = %d
", sum);
    return 0;
}

continue 可以在需要的地方临时结束循环的当前轮回,然后进入下一个轮回
示例:

#include 
int main(){
    int sum = 0;
    for(int i = 1; i <= 5; i++){
        if(i% 2 == 1) continue;
        sum = sum + i;
    }
    printf("sum = %d
", sum);
    return 0;
}






2.5 数组

2.5.1 一维数组

定义格式:

数据类型 数据名[数据大小];

注意:数组大小必须是整数常量,不可以是变量

访问格式:

数组名称[下标]

在定义了长度为 size 的一维数组后,只能访问下标为 0 ~ size-1 的元素

一维数组的初始化,需要给出用逗号隔开的从第一个元素开始的若干个元素的初值,并用大括号括住。后面未被赋初值的元素将会由不同编译器内部实现的不同而被赋以不同的初值(可能是很大的随机数),而一般情况默认初值为0

示例:

#include 
int main(){
    int a[10] = {5, 3, 2, 6, 8, 4};
    for(int i = 0; i < 10; i++){
        printf("a[%d] = %d
", i, a[i]);
    }
    return 0;
}

输出结果:

a[0] = 5
a[1] = 3
a[2] = 2
a[3] = 6
a[4] = 8
a[5] = 4
a[6] = 0
a[7] = 0
a[8] = 0
a[9] = 0

数组中每个元素都可以被赋值、被运算,可以被当作普通变量进行相同的操作。

递推:根据一些条件,可以不断让后一位的结果由前一位或前若干位计算得来

  • 顺推
  • 逆推

2.5.2 冒泡排序

排序:指将一个无序序列按某个规则进行有序排列。

冒泡排序的本质:交换,即每次通过交换的方式把当前剩余元素的最大值移动到一端,而当剩余元素减少为0时,排序结束。

交换两个数:

#include 
int main(){
    int s = 1, b = 2;
    int temp = a;
    a = b;
    b = temp;
    printf("a = %d, b = %d
", a, b);
    return 0;
}

输出结果:

a = 2, b = 1

冒泡排序举例:
现有一个数组a,其中有5个元素,分别为a[0]=3、a[1]=4、a[2]=1、a[3]=5、a[4]=2,要求把它们按照从小到大的顺序排序。

(1) 第一趟:

a[0] 和 a[1] 比较(3 和 4 比较),a[1] 大,因此不动,此时序列为 {3, 4, 1, 5, 2};

34152

a[1] 和 a[2] 比较(4 和 1 比较),a[1] 大,因此把 a[1] 和 a[2] 交换,此时序列为 {3, 1, 4, 5, 2};

31452

a[2] 和 a[3] 比较(4 和 5 比较),a[3] 大,因此不动,此时序列为 {3, 1, 4, 5, 2};

314 52

a[3] 和 a[4] 比较(5 和 2 比较),a[4] 大,因此把 a[3] 和 a[4] 交换,此时序列为 {3, 1, 4, 2, 5};

31425

第一趟排序结束,共进行了 4 次排序

(2) 第二趟:

a[0] 和 a[1] 比较(3 和 1 比较),a[0] 大,因此把 a[0] 和 a[1] 交换,此时序列为 {1, 3, 4, 2, 5};

13425

a[1] 和 a[2] 比较(3 和 4 比较),a[2] 大,因此不动,此时序列为 {1, 3, 4, 2, 5};

13425

a[2] 和 a[3] 比较(4 和 2 比较),a[2] 大,因此把 a[2] 和 a[3] 交换,此时序列为 {1, 3, 2, 4, 5};

13245

第二趟排序结束,共进行了 3 次排序

(3) 第三趟:

a[0] 和 a[1] 比较(1 和 3 比较),a[1] 大,因此不动,此时序列为 {1, 3, 2, 4, 5};

13245

a[1] 和 a[2] 比较(3 和 2 比较),a[1] 大,因此把 a[1] 和 a[2] 交换,此时序列为 {1, 2, 3, 4, 5};

12345

第三趟排序结束,共进行了 2 次排序

(4) 第四趟:

a[0] 和 a[1] 比较(1 和 2 比较),a[1] 大,因此不动,此时序列为 {1, 2, 3, 4, 5};

12345

第四趟排序结束,共进行了 1 次排序

冒泡排序结束,对 n 个数进行排序,整个过程执行 n-1 趟;当第 i 趟时,从 a[0] 到 a[n-i-1] 都需要与下一个数比较。

代码实现:

#include 
int main(){
    int a[10] = {3, 1, 4, 5, 2};
    for(int i = 1; i <= 4; i++){ // 进行 n - 1 趟
        // 第 i 趟时从 a[0] 到 a[n - i - 1]都与它们下一个数比较
        for(int j = 0; j < 5 - i; j++){
            if(a[j] > a[j + 1]){ // 如果左边的数更大,则交换 a[j] 和 a[j + 1]
                int temp = a[j]; 
                a[j] = a[j + 1]; 
                a[j + 1] = temp;
            }
        }       
    }
    for(int i = 0; i < 5; i++){
        printf("%d ", a[i]);
    }
    return 0;
}

输出结果:

1 2 3 4 5

2.5.3 二维数组

格式:

数据类型 数组名[第一维大小][第二维大小]

访问格式:

数组名[下标1][下标2]

例如:a[3][4]

行标签列0列1列2列3
行0 a[0]:a[0][0]a[0][1]a[0][2]a[0][3]
行1 a[1]:a[1][0]a[1][1]a[1][2]a[1][3]
行2 a[2]:a[2][0]a[2][1]a[2][2]a[2][3]

初始化时,需要按照第一维的顺序依次用大括号给出第二维初始化情况,然后将它们用逗号分隔,并用大括号全部括住,而在这些被赋初值的元素以外的部分将被默认赋值为0。

举例:

#include 
int main(){
    int a[5][6] = {{3, 1, 2}, {8, 4}, {}, {1, 2, 3, 4, 5}};
    for(int i = 0; i < 5; i++){
        for(int j = 0; j < 6; j++){        
            printf("%d", a[i][j]);
        }   
        printf("
");
    }
    return 0;
}

输出结果:

3 1 2 0 0 0
8 4 0 0 0 0 
0 0 0 0 0 0
1 2 3 4 5 0
0 0 0 0 0 0

特别提醒:如果数组大小较大(大概 10 6 10^6 106级别),则需要将其定义在主函数之外,否则会使程序异常退出,原因是函数内部申请的局部变量来自系统栈,允许申请的空间较小;而函数外部申请的全局变量来自静态存储区,允许申请的空间较大。
例如:

#include 
int a[1000000];
int main(){
    for(int i = 0; i < 1000000; i++){
        a[i] = i;
    }
    return 0;
}

2.5.4 memset–对数组中每一个元素赋相同的值

格式:

memset(数组名, 值, sizeof(数组名));

需要再开头添加 string.h 头文件。
只建议使用 memset 赋 0 或 -1 。
memset 使用的是按字节赋值,0 的二进制补码为全 0 ,-1 的二进制补码为全 1。
如果要对数组赋其他数字(例如 1),那么请使用 fill 函数。

示例:

#include 
#include 
int main(){
    int a[5] = {1, 2, 3, 4, 5};
    // 赋初值 0
    memset(a, 0, sizeof(a));
    for(int i = 0; i < 5; i ++){
        printf("%d ", a[i]);
    }
    printf("
");
    // 赋初值 -1
    memset(a, -1, sizeof(a));
    for(int i = 0; i < 5; i++){
        printf("%d ", a[i]);
    }
    pritnf("
");
    return 0;
}

输出结果:

0 0 0 0 0
-1 -1 -1 -1 -1

2.5.5 字符数组

1. 字符数组的初始化

例如:

char str[15] = {'G', 'o', 'o', 'd', ' ', 's', 't', 'o', 'r', 'y', '!'};

字符数组也可以通过直接赋值字符串来初始化(仅限于初始化,程序其他位置不允许这样直接赋值整个字符串),例如:

char str[15] = "Good Story!";

2. 字符数组的输入输出

(1)scanf 输入,printf 输出

两种格式:
%c: 用来输入单个字符,能够识别空格跟换行并将其输入;
%s: 用来输入一个字符串并存在字符数组中,通过空格或换行来识别一个字符串的结束,scanf 在使用 %s 时,后面对应数组名前面不需要加 & 取地址运算符。

(2)getchar 输入,putchar 输出

分别用来输入和输出单个字符,例如:

#include 
int main(){
    char str[5][5];
    for(int i = 0; i < 3; i++){
        for(int j = 0; j < 3; j++){
            str[i][j] = getchar();
        }    
        getchar(); // 这句是为了把输入中每行末尾的换行符吸收掉
    }
    for(int i = 0; i < 3; i++){
        for(int j = 0; j < 3; j++){
            putchar(str[i][j]);
        }
        putchar('
');
    }    
    return 0;
}
(3)gets 输入,puts 输出

gets 用来输入一行字符串(注意:gets 识别换行符 作为输入结束,因此 scanf 完一个整数后,如果要使用 gets,需要先用 getchar 接收整数后的换行符),并将其存放于一维数组(或二维数组的一维)中;puts 用来输出一行字符串,即将一维数组(或二维数组的一维)在界面上输出,并紧跟一个换行。例如:

#include 
int main(){
    char str1[20];
    char str2[5][10];
    gets(str1);
    for(int i = 0; i < 3; i++){
        gets(str2[i]);
    }
    puts(str1);
    for(int i = 0; i < 3; i++){
        puts(str2[i]);
    }
    return 0;
}    

输入下面四个字符串:

WoAiDeRenBuAiWo
QAQ
T_T
WoAiNi

这段代码通过 gets(str1) 将第一个字符串存入字符数组 str1 中,然后通过 for 循环将后三个字符串分别存于 str2[0]、str2[1]和str2[2] 中。之后使用 puts 来将这些字符串原样输出。

3. 字符数组的存放方式

字符数组的每一位都是一个char字符。

在一维字符数组(或是二维字符数组的第二维)的末尾都有一个空字符,以表示存放的字符串的结尾。

空字符 在使用 gets 或 scanf 输入字符串时会自动添加在输入的字符串后面,并占用一个字符位,而 puts 与 printf 就是通过识别 作为字符串的结尾来输出的。

特别提醒1:结束符 的ASCII码为0,即空字符NULL,占用一个字符位,因此开字符数组的时候千万要记得字符数组的长度一定要比实际存储字符串的长度至少多1。注意:int型数组的末尾不需要加,只有char型数组需要。注意:和空格不是一个东西。

特别提醒2:如果不是使用 scanf 函数的 %s 格式或 gets 函数输入字符串(例如使用 getchar),一定要在输入的每个字符串后加入“”,否则 printf 和 puts 输出字符串会因无法识别字符串末尾而输出一大堆乱码。

2.5.6 string.h 头文件

1. strlen()

可以得到字符数组中第一个前的字符的个数

格式:

strlen(字符数组);

例如:

int len = strlen(str);

2. strcmp()

返回两个字符串大小的比较结果,比较原则是按字典序

格式:

strcmp(字符数组1, 字符数组2)

字典序是字符串在字典中的顺序,因此如果有两个字符数组 str1 和 str2,且满足 str1[0…k-1] == str2[0…k-1]、str1[k]

strcmp 的返回结果:
① 如果字符数组1 < 字符数组2,则返回一个负整数(不同编译器处理不同,不一定是-1);
② 如果字符数组1 == 字符数组2,则返回0;
③ 如果字符数组1 > 字符数组2,则返回一个正整数(不同编译器处理不同,不一定是+1)。

例如:

#include 
#include 
int main(){
    char str1[50], str2[50];
    gets(str1);
    gets(str2);
    int cmp = strcmp(str1, str2);
    if(cmp < 0) printf("str1 < str2
");
    else if(cmp > 0) printf("str1 > str2
");
    else printf("str1 == str2
");
    return 0;
}    

输入字符串:

Dear Mozart
Canon

输出结果:

str1 > str2

3. strcpy()

把一个字符串复制给另一个字符串

格式:

strcpy(字符数组1, 字符数组2)

注意:是把字符数组2复制给字符数组1,这里的“复制”包括了结束符。
例如:

strcpy(str1, str2);

4. strcat()

把一个字符串接到另一个字符串后面

格式:

strcat(字符数组1, 字符数组2)

注意:是把字符数组2 接到字符数组1 后面

例如:

#include 
#include 
int main(){
    char str1[50], str2[50];
    gets(str1);
    gets(str2);
    strcat(str1, str2);
    puts(str1);
    return 0;
}    

输入字符串:

ArkLight
Through the Fire and Flames

输出结果:

ArkLightThrough the Fire and Flames

2.5.7 sscanf 与 sprintf

理解:
sscanf : string + scanf
sprintf : string + printf

写法:

scanf("%d", &n);
printf("%d", n);
// 同理,其中 screen 表示屏幕
scanf(screen, "%d", &n); // 把screen的内容以"%d"的格式传输到n中(即从左至右)
printf(screen, "%d", n); // 把n以"%d"的格式传输到screen上(即从右至左)
// 格式相同,只是把screen换成了字符数组(假设定义了一个char数组str[100])
sscanf(str, "%d", &n); // 把字符数组str中的内容以"%d"的格式写到n中(从左至右)
sprintf(str, "%d", n); // 把n以"%d"的格式写到str字符数组中(从右至左)

示例:

// 使用 sscanf 将字符数组str中的内容按"%d:%lf,%s"的格式写到int型变量n、double型变量db、char型数组str2中
#include 
int main(){
    int n;
    double db;
    char str[100] = "2048:3.14,hello", str2[100];
    sscanf(str, "%d:%lf,%s", &n, &db, str2);
    printf("n = %d, db = %.2f, str2 = %s
", n, db, str2);
    return 0;
}

输出结果:

n = 2048, db = 3.14, str2 = hello

示例:

// 使用 sprintf 将int型变量n、double型变量db、char型数组str2按"%d:%.2f,%s"的格式写到字符数组str中
#include 
int main(){
    int n = 12;
    double db = 3.1415;
    char str[100], str2[100] = "good";
    sprintf(str, "%d:%.2f,%s", n, db, str2);
    printf("str = %s
",str);
    return 0;
}

输出结果:

str = 12:3.14,good






2.6 函数

2.6.1 函数的定义

基本语法格式:

返回类型 函数名称(参数类型 参数){
    函数主体
}    

分类:

  • 无参函数:不需要提供参数就可以执行的函数,返回类型是void(表示为空),只实现语句不返回变量
  • 有参函数:需要填写参数的函数

概念:全局变量和局部变量

  • 全局变量:在定义之后的所有程序段内都有效的变量(即定义在其之后所有函数之前)
  • 局部变量:定义在函数内部,且只在函数内部生效,函数结束时局部变量销毁
    • 值传递
      • 形式参数或形参:函数定义的小括号内的参数
      • 实际参数或实参:实际调用时小括号内的参数

2.6.2 再谈 main 函数

结构:

int main(){
    ...
    return 0; // 返回0->告知系统程序正常结束
}

2.6.3 以数组作为函数参数

参数中数组的第一维不需要填写长度(如果是二维数组,那么第二维需要填写长度),实际调用时也只需要填写数组名。

数组作为参数时,在函数中对数组元素的修改就等同于是对原数组元素的修改(这与普通的局部变量不同)

2.6.4 函数的嵌套调用

指在一个函数中调用另一个函数。

2.6.5 函数的递归调用

指一个函数调用该函数自身。函数自己调用自己






2.7 指针

2.7.1 什么是指针

计算机中,每个变量都会存放在内存中分配的一个空间,而每种类型的变量所占的空间不一样,例如:int型变量占用4Byte,long long型变量占用8Byte。

可以把一个字节理解成一个“房间”,每个房间有一个“房间号”。

对应在计算机中,每个字节(即房间)都会有一个地址(即房间号),这里的地址就起房间号的作用,即变量存放的位置,而计算机就是通过地址找到某个变量的。变量的地址一般指它占用的字节中第一个字节的地址。

一个房间号“指向”一个房间,对应到计算机上就是一个地址“指向”一个变量,可以通过地址来找到变量。

在C语言中用“指针”来表示内存地址(或者称指针指向了内存地址),而如果这个内存地址恰好是某个变量的地址,那么又称“这个指针指向该变量”。

可以简单理解为指针就是变量的地址(不太严谨)。

只要在变量前面加上&(取地址运算符),就表示变量的地址。

指针是一个 unsigned 类型的整数。

2.7.2 指针变量

指针变量用来存放指针(或者可以理解成地址)。

定义方式:

// C++ 常把*写在数据类型后
int* p;
double* p;
char* p;
// C常把*写在变量名前
int *p;
double *p;
char *p;

注意:同时定义好几个同种类型的指针变量时

int* p1, p2; // p1是int*型,p2是int型
int* p1, *p2; // p1和p2都是int*型
int *p1, *p2; // 为了美观,把第一个*放在变量名p1前

给指针变量赋值的方式一般是把变量的地址取出来,然后赋给对应类型的指针变量:

int a;
int* p = &a;
// 也可以写成
int a;
int* p;
p = &a;
// 给多个指针变量初始化
int a, b;
int *p1 = &a, *p2 = &b;

注意:int*指针变量的类型p变量名,用来存储地址;因此,地址&a是赋值给p而不是*p的;星号是类型的一部分。

对一个指针变量存放的地址,如何得到这个地址所指的元素?-> 把星号*视为一把开启房间的钥匙,将其加在p的前面,示例:

#include 
int main(){
    int a; // 定义int型变量a,但是没有对其进行初始化
    int* p = &a; // 定义指针变量p,并将a的地址赋值给p。这时,指针变量p存放了a的地址
    a = 233; // a被赋值为233,a所在地址的房间内的东西被改变了,但这并不影响它的地址
    printf("%d
", *p):
    return 0;
}    

输出结果:

233

p保存的是地址,*p是这个地址中存放的元素,如果直接对*p进行赋值,也可以起到改变那个保存的元素的功能。例如:

#include 
int main(){
    int a;
    int* p = &a;
    *p = 233;
    printf("%d, %d
", *p, a);
    return 0;
}

输出结果:

233, 233

指针可以进行加减法,其中减法的结果就是两个地址偏移的距离。

对一个int*型的指针变量p来说,p+1是指p所指的int型变量的下一个int型变量地址。这个所谓的“下一个”是跨越了一整个int型(即4Byte)

指针变量支持自增和自减操作,因此p++等同于p=p+1使用。

对指针变量来说,把其存储的地址的类型称为基类型。基类型必须和指针变量存储的地址类型相同。

2.7.3 指针与数组

数组是由地址上连续的若干个相同类型的数据组合而成。

数组名称也作为数组的首地址使用。

指针变量可以进行加减法 -> a+i 等同于 &a[i],这是因为 a+i 就是指数组a的首地址偏移i个int型变量的位置。但是注意,a+i 只是地址,如果想要访问其中的元素 a[i],需要加上星号,使其变成 *(a+i) 后才和 a[i] 等价。得到一种输入数据元素的新颖写法:

scanf("%d", a + i);

指针变量可以使用自增操作,用于枚举数组中的元素:

#include 
int main(){
    int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    for(int* p = a; p < a + 10; p++){
        printf("%d ", *p);
    }    
    return 0;
}    

输出结果:

1 2 3 4 5 6 7 8 9 10

指针的减法:

#include 
int main(){
    int a[10] = {1, 4, 9, 16, 25, 36, 49};
    int* p = a; // 其实是&a[0]
    int* q = &a[5]; // 其实是&a[5]
    printf("q = %d
", q);
    printf("p = %d
", p);
    printf("q - p = %d
", q - p); // 两个地址之间的距离,这个距离以int为单位
    return 0;
}

输出结果:

q = 2686708
p = 2686688
q - p = 5

两个 int 型的指针相减,等价于在求两个指针之间相差了几个 int。

2.7.4 使用指针变量作为函数参数

指针类型也可以作为函数参数的类型,这是视为把变量的地址传入函数。如果在函数中对这个地址中的元素进行改变,原先的数据就会确实的被改变。示例:

#include 

void change(int* p){
    *p = 233;
}

int main(){
    int a = 1;
    int* p = &a; // 把int*型的指针变量p赋值为a的地址
    change(p); // 通过change函数把指针变量p作为参数传入。此时传入的其实是a的地址。在change函数中,使用*p修改地址中存放的数据,也就是改变了a本身。
    printf("%d
", a); // 输出的是已经改变后的值
    return 0;
}
// 这种传递方式被称为地址传递

经典例子:使用指针作为参数,交换两个数

#include 
int main(){
    int a = 1, b = 2;
    int temp = a;
    a = b;
    b = temp;
    printf("a = %d, b = %d
", a, b);
    return 0;
}

输出结果:

a = 2, b = 1

把交换过程写成函数时函数在接收参数的过程中是单向一次性的值传递。也就是说,在调用swap(a, b)时只是把a和b的值传进去了,这样相当于产生了一个副本,对这个副本的操作不会影响main函数中a、b的值。

main函数传给swap函数的“地址”其实是一个“无符号整型”的数,其本身也跟普通变量一样只是“值传递”。

要使用指针的方法。

指针变量存放的是地址,那么使用指针变量作为参数时传进来的也是地址。只有在获取地址的情况下对元素进行操作,才能真正的修改变量

代码:

#include 

void swap(int* a, int* b){ // swap函数中的a和b都是地址
    int temp = *a; // *a和*b就是地址中存放的数据,可以“看成”是int型变量
    *a = *b;
    *b = temp;
}

int main(){
    int a = 1, b = 2;
    int *p1 = &a, *p2 = &b; // 把a和b的地址作为参数传入
    swap(p1, p2);
    printf("a = %d, b = %d
", *p1, *p2);
    return 0;
}

输出结果:

a = 2, b = 1

2.7.5 引用

1. 引用的含义

引用不产生副本,而是给原变量起了一个别名。对引用变量的操作就是对原变量的操作。

引用的使用方法:只需要在函数的参数类型后面加一个&就可以了(& 加在 int 后面或者变量名前面都可以,考虑到引用时别名的意思,因此一般写在变量名面前)。示例:

#include 
void change(int &x){
    x = 1;
}
int main(){
    int x = 10;
    change(x);
    printf("%d
", x);
    return 0;
}    

输出结果:

1

注意:不管是否使用引用,函数的参数名和实际传入的参数名可以不同。

注意:要把引用的 & 跟取地址运算符 & 区分开来,引用并不是取地址的意思。

2. 指针的引用

示例:

#include 

void swap(int* &p1, int* &p2){
    int* temp = p1;
    p1 = p2;
    p2 = temp;
}

int main(){
    int a = 1, b = 2;
    int *p1 = &a, *p2 = &b;
    swap(p1, p2);
    printf("a = %d, b = %d
", *p1, *p2);
    return 0;
}    

注意:由于引用时产生变量的别名,因此常量不可使用引号






2.8 结构体(struct)的使用

2.8.1 结构体的定义

格式:

struct Name{
    // 一些基本的数据结构或者自定义的数据类型
};

例如:

struct studentInfo{
    int id;
    char gender; // 'F' or 'M'
    char name[20];
    char major[20];
}Alice, Bob, stu[1000]; //两个结构体变量和一个结构体数组(如果不在此处定义变量或数组,则大括号外直接跟上分号)

注意:结构体里面能定义除了自己本身(这样会引起循环定义问题)之外的任何数据类型。不过虽然不能定义自己本身,但是可以定义自身类型的指针变量。例如:

struct node{
    node n; // 不能定义node型变量
    node* next; // 可以定义node*型指针变量
}    

2.8.2 访问结构体内的元素

两种方法:“.”操作和“->”操作
定义studentInfo类型:

struct studentInfo{
    int id;
    char name[20];
    studentInfo* next;  // 多了一个指针next用来指向下一个学生的地址
}stu, *p;  // 结构体变量中定义了普通变量stu和指针变量p    

于是访问stu中变量的写法:

stu.id
stu.name
stu.next

访问指针变量p中元素的写法:

(*p).id
(*P).name
(*p).next

或者C语言中有一种简洁写法:

p->id
p->name
p->next

2.8.3 结构体的初始化

构造函数:用来初始化结构体的一种函数,直接定义在结构体中。

一个特点是:它不需要写返回类型,且函数名与结构体名相同。

一般来说,对一个普通定义的结构体,其内部会生成一个默认的构造函数(但不可见):

struct studentInfo{
    int id;
    char gender;
    // 默认生成的构造函数
    studentInfo(){}
};

如果要自己手动提供id和gender的初始化参数,就提供初始化参数来对结构体内的变量进行赋值,其中_id和_gender都是变量名,只要不和已有的变量冲突,用其他变量名也可以。

struct studentInfo{
    int id;
    char gender;
    // 下面的参数用以对结构体内部变量进行赋值
    studentInfo(int _id, char _gender){
        // 赋值
        id = _id;
        gender = _gender;
    }    
};

构造函数也可以简化成一行:

struct studentInfo{
    int id;
    char gender;
    studentInfo(int _id, char _gender) : id(_id), gender(_gender) {}
};

这样就可以在需要时直接对结构体变量进行赋值了:

studentInfo stu = studentInfo(10086, 'M');

注意:如果自己重新定义了构造函数,则不能不经初始化就定义结构体变量。

为了既能不初始化就定义结构体变量,又能享受初始化带来的便捷,可以把“studentInfo(){}”手动加上。这意味着,只要参数个数和类型不完全相同,就可以定义任意多个构造函数,以适应不同的初始化场合。示例:

struct studentInfo{
    int id;
    char gender;
    // 用以不初始化就定义结构体变量
    studentInfo(){}
    // 只初始化gender
    studentInfo(char _gender){
        gender = _gender;
    }    
    // 同时初始化id和gender
    studentInfo(int _id, char _gender){
        id = _id;
        gender = _gender;
    }    
};

示例,其中结构体Point用于存放平面点的坐标x、y:

#include 
struct Point{
    int x, y;
    Point(){} // 用以不经初始化地定义pt[10]
    Point(int _x, int _y) : x(_x), y(_y) {} // 用以提供x和y的初始化
}pt[10];
int main(){
    int num = 0;
    for(int i = 1; i <= 3; i++){
        for(int j = 1; j <= 3; j++){
            pt[num++] = Point(i, j); // 直接使用构造函数
        }    
    }
    for(int i = 0; i < num; i++){
        printf("%d,%d
", pt[i].x, pt[i].y);
    }    
    return 0;
}    

构造函数在结构体内元素比较多时会使代码显得精炼,因为可以不需要临时变量就初始化一个结构体,而且代码更加工整,推荐使用。






2.9 补充

2.9.1 cin 与 cout

C++中的输入和输出函数,需要添加头文字 "#include ""using namespace std;" 才能使用。不需要指定输入输出的格式,也不需要使用取地址运算符&,而可以直接进行输入/输出。

1. cin

c和in的合成词,采用输入运算符 ">>" 来进行输入。

如果想要输入一个整数n,则可以按下面的写法输入:

#include 
using namespace std;
int main(){
    int n;
    cin >> n; // 不指定格式,不需要加取地址运算符&,直接写变量名就行
    return 0;
}

同时读入多个变量,只需要往后面使用>>进行扩展:

cin >> n >> db >> c >> str; // int型 int,double型 db,char型 c,char型数组 str[]

如果想要读入一整行,则需要使用 getline 函数,例如把一整行都读入char型数组str[100]中:

char str[100];
cin.getline(str, 100);

而如果是string容器,则需要用下面的方式输入:

string str;
getline(cin, str);

2. cout

c和out的合成词,使用输出运算符 "<<",使用方法和cin一致。

cout << n << db << c << str; // int型 int,double型 db,char型 c,char型数组 str[]

但要注意,输出时中间没有加空格,因此可以在每个变量之间加上空格:

cout << n <<" "<< db <<" "<< c <<" "<< str;

在中间输入字符串也可以:

cout << n <<"haha"<< db <<"heihei"<< c <<"wawa"<< str;

cout中,换行有两种方式:

  • 使用 ;
  • 使用 endl(是end line的缩写)
cout << n << "
"<< db << endl;

如果想要控制double型的精度,例如输出小数点后两位,那么需要在输出之前加上一些东西,并且要加上 “#include 头文件:

cout << setiosflags(ios::fixed) << setprecision(2) << 123.4567 << endl; // 输出123.46

2.9.2 浮点数的比较

浮点数在计算机中的存储并不总是精确的。经过大量计算后,浮点型的数可能会存在误差,但是C/C++中的“==”操作是完全相同才能判定为true,于是需要引入一个极小数eps来修正误差。

1. 等于运算符(==)

a 落在 [b-eps, b+eps] 区间中时,应当判断为 a==b 成立。

eps 取 10 − 8 10^{-8} 108是合适的,因此可以将eps定义为常量 1e-8:

const double eps = 1e-8;

为了使比较更加方便,把比较操作写成宏定义的形式:

#define Equ(a, b) ((fabs((a)-(b)))<(eps))  // 将a和b相减,如果差的绝对值小于及销量eps,那么就返回true

注意:如果想要使用不等于,只需要在使用时的Equ前面加一个非运算符“!”即可(!Equ(a, b))。

#include 
#include 
const double eps = 1e-8;
#define Equ(a, b) ((fabs((a)-(b)))<(eps)) 
int main(){
    double db = 1.23;
    if(Equ(db, 1.23)){
        printf("true");
    }else{
        printf("false");
    }    
    return 0;
}    

2. 大于运算符(>)

a 的范围是 (b+eps, +∞),也即a减b大于eps。

#define More(a, b) (((a)-(b))>(eps))

3. 小于运算符(<)

a 的范围是 (-∞, b-eps),也即a减b小于-eps。

#define Less(a, b) (((a)-(b))<(-eps))

4, 大于等于运算符(>=)

可以理解为大于运算符和等于运算符的结合。

a 的范围是 (b-eps, +∞),也即a减b大于-eps。

#define MoreEqu(a, b) (((a)-(b))>(-eps))

5. 小于等于运算符(<=)

可以理解为小于运算符和等于运算符的结合。

a 的范围是 (-∞, b+eps),也即a减b小于eps。

#define LessEqu(a, b) (((a)-(b))<(eps))

6. 圆周率π

因为由 cos(π)=-1 可知 π = arccos(-1)。因此只需要把π写成常量 acos(-1.0)。

const double Pi=acos(-1.0);

2.9.3 复杂度

1. 时间复杂度

时间复杂度是算法需要执行基本运算的次数所处的等级,其中基本运算就是类似加减乘除这种计算机可以直接实现的运算。时间复杂度是评判算法时间效率的有效标准。

在时间复杂度中,高等级的幂次会覆盖低等级的幂次。

趋近于O( c n 2 cn^2 cn2),其中c是一个常数,把这个常数称为算法时间复杂度的常数。

对数复杂度书写时一般省略底数:O( l o g n logn logn)。

常数复杂度O( 1 1 1)表示算法消耗的时间不随规模的增长而增长。

O( 1 1 1) < O( l o g n logn logn) < O( n n n) < O( n 2 n^2 n2)

对一般的OJ系统来说,一秒能承受的运算次数大概是 10 7 10^7 107 ~ 10 8 10^8 108

2. 空间复杂度

空间复杂度表示算法需要消耗的最大数据空间。

O( 1 1 1)的空间复杂度是指算法消耗的空间不随数据规模的增大而增大。

3. 编码复杂度

编码复杂度是一个定性的概念,并没有什么量化的标准。






2.10 黑盒测试

系统后台会准备若干组输入数据,然后让提交的程序去运行这些数据,如果输出的结果与正确答案完全相同(字符串意义上的比较),那么就称通过了这道题的黑盒测试,否则会根据错误类型而返回不同的结果。

2.10.1 单点测试

系统会判断每组数据的输出结果是否正确。如果输出正确,那么对该组数据来说就通过了测试,并获得了这组数据的分值。

2.10.2 多点测试

要求程序能一次运行所有数据,并要求所有输出结果都必须完全正确,才能算作这题通过;而只要有其中一组数据的输出错误,本题就只能得0分。

3种输入方式:

(1) while…EOF 型

如果题目中没有指定何时结束输入,一般都是指输入完所有数据(即到达文件末尾)为止。

scanf 函数的返回值为其成功读入的参数的个数。

只有在读取文件时到达文件末尾导致的无法读取现象才会产生读入失败。这个时候,scanf 函数会返回 -1 而不是0,且C语言中使用 EOF(即End Of File)来表示 -1

启发:当题目没有说明多少数据需要读入时,就可以利用 scanf 的返回值是否为 EOF 来判断输入是否结束。

while(scanf("%d", &n) != EOF){
    ...
}

只要 scanf 的返回值不为 EOF(即文件中的数据没有读完),就反复读入n,执行while函数体的内容;当读入失败(到达文件末尾)时,结束while循环。

如果读入字符串,则有 scanf(“%s”, str) 和 gets(str) 两种方式可用,对应的输入写法:

while(scanf("%s", str) != EOF){
    ...
}
while(gets(str) != NULL){
    ...
}
(2) while…break 型

题目要求当输入的数据满足某个条件时停止输入。

两种写法:

  • 一种是在 while…EOF 的内部进行判断,当满足条件时中断(break)当前 while 循环
#include 
int main(){
    int a, b;
    while(scanf("%d%d", &a, &b) != EOF){
        if(a == 0 && b == 0) break; 
        printf("%d
", a + b);
    }    
    return 0;   
}
  • 把退出条件的判断放在 while 语句中,令其与 scanf 用逗号隔开
#include 
int main(){
    int a, b;
    while(scanf("%d%d", &a, &b), a || b){ // 全写为:a != 0 || b != 0。
    // 含义是:当a和b中有一个不为0时就进行循环
        printf("%d
", a + b);
    }
    return 0;
}
(3) while(T–) 型

题目会给出测试数据的组数,然后才给出相应数量组数的输入数据。

由于给定了测试数据的组数,因此需要用一个变量T来存储,并在程序开始时读入。在读入T后,下面就可以进行T次循环,每次循环解决一组数据的输入与输出,while(T–) 就是循环执行T次的含义。

#include 
int main(){
    int T, a, b;
    scanf("%d", &T);
    while(T--){
        scanf("%d%d", &a, &b);
        printf("%d
", a + b);
    }
    return 0;
}    

三种输出类型

(1) 正常输出

要求需要每两组输出数据中间没有额外的空行,即输出数据是连续的多行。

(2) 每组数据输出之后都额外加一个空行

只需要在每组输出结束之后额外加一个换行符 即可。

(3) 两组输出数据之间有一个空行,最后一组数据后面没有空行

一般是在第三种输入类型 while(T–) 的情况下,只需要通过判断T是否已经减小到0来判断是否应当输出额外的换行。

注意:在多点测试中,每一次循环都要重置一下变量和数组,否则下一组数据来临的时候变量和数组的状态就不是初始状态了。重置数组一般使用 memset 函数或 fill 函数。

本文地址:https://www.yitenyun.com/6289.html

搜索文章

Tags

#飞书 #人工智能 #语言模型 #服务器 #大模型 #ai #ai大模型 #agent #python #pip #conda #AI #log4j #ollama #微信 #运维 #私有化部署 #学习 #产品经理 #AI大模型 #大模型学习 #大模型教程 #AI编程 #飞牛nas #fnos #github #信息与通信 #自然语言处理 #rpa #实时互动 #远程工作 #linux #云计算 #云原生 #kylin #docker #arm #ios面试 #ios弱网 #断点续传 #ios开发 #objective-c #ios #ios缓存 #ssh #Trae #IDE #AI 原生集成开发环境 #Trae AI #fastapi #html #css #mongodb #数据库 #算法 #数据结构 #PyTorch #深度学习 #模型训练 #星图GPU #银河麒麟高级服务器操作系统安装 #银河麒麟高级服务器V11配置 #设置基础软件仓库时出错 #银河麒高级服务器系统的实操教程 #生产级部署银河麒麟服务系统教程 #Linux系统的快速上手教程 香港站群服务器 多IP服务器 香港站群 站群服务器 #ARM服务器 # GLM-4.6V # 多模态推理 #vscode #ubuntu #gitee #kubernetes #笔记 #平面 #容器 #学习方法 #分布式 #架构 #配置中心 #SpringCloud #Apollo #大数据 #职场和发展 #程序员创富 #AIGC #开源 #mysql #分库分表 #垂直分库 #水平分表 #雪花算法 #分布式ID #跨库查询 #自动化 #ansible #llama #opencv #神经网络 #企业微信 #AI办公 #智能助手 #科技 #数学建模 #开发语言 #音视频 #YOLO #java #spring boot #maven #spring #华为云 #部署上线 #动静分离 #Nginx #新人首发 #ide #前端 #javascript #web安全 #安全 #php #网络安全 #就业指南 #pytorch #notepad++ #大语言模型 #长文本处理 #GLM-4 #Triton推理 #网络 #tcp/ip #hadoop #hbase #hive #zookeeper #spark #kafka #flink #流程图 #论文阅读 #信息可视化 #大模型入门 #低代码 #爬虫 #golang #数据结构与算法 #Telegram机器人 #ClawdBot #多模态翻译 #大模型推理 #C++ #Reactor #springboot #gemini #gemini国内访问 #gemini api #gemini中转搭建 #Cloudflare #rag #langchain #CFD #node.js #阿里云 #区块链 #测试用例 #生活 #pycharm #FRP #http #mcp #mcp server #AI实战 #Agent #程序员 #MobaXterm #sql #agi #物联网 #websocket #SSM 框架 #孕期健康 #产品服务推荐 #推荐系统 #用户交互 #项目 #高并发 #flutter #鸿蒙 #机器学习 #windows #进程控制 #java-ee #微服务 #Oauth2 #nginx #aws #fabric #postgresql #openHiTLS #TLCP #DTLCP #密码学 #商用密码算法 #经验分享 #安卓 #堡垒机 #安恒明御堡垒机 #windterm #harmonyos #华为 #重构 #计算机视觉 #矩阵 #线性代数 #AI运算 #向量 #RAGFlow #DeepSeek-R1 #word #umeditor粘贴word #ueditor粘贴word #ueditor复制word #ueditor上传word图片 #FaceFusion # Token调度 # 显存优化 #RTP over RTSP #RTP over TCP #RTSP服务器 #RTP #TCP发送RTP #多个客户端访问 #IO多路复用 #回显服务器 #TCP相关API #能源 #分阶段策略 #模型协议 #开源软件 #Ansible # 自动化部署 # VibeThinker #Linux #TCP #c++ #线程 #线程池 #iventoy #VmWare #OpenEuler #git #驱动开发 #风控模型 #决策盲区 #ddos #visual studio #测试工具 #android #腾讯云 #c# #https #网络协议 #后端 #HCIA-Datacom #H12-811 #题库 #最新题库 #转行 #centos #鸿蒙PC #Windows 更新 #MCP #MCP服务器 #RAG #RAG调优 #RAG系统 #召回 #qt #vue上传解决方案 #vue断点续传 #vue分片上传下载 #vue分块上传下载 #性能优化 #FL Studio #FLStudio #FL Studio2025 #FL Studio2026 #FL Studio25 #FL Studio26 #水果软件 #正则 #正则表达式 #电脑 #mobaxterm #unity #游戏引擎 #mvp #个人开发 #设计模式 #毕业设计 #课程设计 #dify #ci/cd #jenkins #gitlab #Conda # 私有索引 # 包管理 #pjsip #ai agent #ai大小模型 #小模型 #开源小模型 #8b模型 #国产大模型 #SOTA #程序人生 #科研 #博士 #数信院生信服务器 #Rstudio #生信入门 #生信云服务器 #stm32 #cpolar #进程 #知识图谱 #servlet #bytebase #vue.js #ecmascript #elementui #serverless #硬件工程 #搜索引擎 #导航网 #rocketmq #论文 #毕设 #缓存 #redis #Harbor #microsoft #le audio #蓝牙 #低功耗音频 #通信 #连接 #iBMC #UltraISO #swiftui #swift #scrapy #jvm #学习笔记 #jdk #PyCharm # 远程调试 # YOLOFuse #单片机 #嵌入式硬件 #电脑故障 #文件系统 #jar #内网穿透 #内存治理 #django #牛客周赛 #超算服务器 #算力 #高性能计算 #仿真分析工作站 #文心一言 #AI智能体 #DeepSeek #服务器繁忙 #spring cloud #json #lvs #负载均衡 #matlab #支持向量机 #lstm #分类 #jetty #Canal #散列表 #哈希算法 #udp #c语言 #ui #团队开发 #墨刀 #figma #企业开发 #ERP #项目实践 #.NET开发 #C#编程 #编程与数学 #mcu #处理器模块 #现货库存 #价格优惠 #PM864AK01 #3BSE018161R1 #PLC #控制器模块 #svn #时序数据库 #OCR #文档识别 #DeepSeek-OCR-2 #信创适配 #jmeter #功能测试 #软件测试 #自动化测试 #儿童书籍 #儿童诗歌 #童话故事 #经典好书 #儿童文学 #好书推荐 #经典文学作品 #Redisson #华为od #华为od机考真题 #华为od机试真题 #华为OD上机考试真题 #华为OD机试双机位C卷 #华为OD上机考试双机位C卷 #华为ODFLASH坏块监测系统 #链表 #ssl #vim #gcc #yum #gitea #ESP32 #开发环境搭建 #蓝桥杯 #设备驱动 #芯片资料 #网卡 #uni-app #小程序 #ESXi #select #360AI图片精简版 #看图工具 #电脑看图工具 #360看图工具 #AI看图工具 #机器人 #面试 #vllm #内容运营 #产品运营 #推荐算法 #游戏 #压枪 #dubbo #shell #CPU利用率 #ProCAST2025 #ProCast #脱模 #顶出 #应力计算 #铸造仿真 #变形计算 #FTP服务器 #2026年美赛C题代码 #2026年美赛 #计算机网络 #java大文件上传 #java大文件秒传 #java大文件上传下载 #java文件传输解决方案 #leetcode #新浪微博 #前端框架 #es安装 #LangFlow #智能体 #CISSP #CISSP考点 #信息安全 #CISSP哪里考 #公众号:厦门微思网络 #+微信号:xmweisi #prometheus #开源社区 #国产基础软件 #操作系统 #AI框架 #Rust #diskinfo # TensorFlow # 磁盘健康 #服务器架构 #AI推理芯片 #高仿永硕E盘的个人网盘系统源码 #web #webdav #边缘计算 #autosar #SSH # ProxyJump # 跳板机 #防排烟监控 #消防风机一体化 #BA楼宇自控 #DDC控制器 #IBMS集成系统 #numpy #scikit-learn #matplotlib #FutureWarning #LLM #线性回归 #汽车 #目标检测 #pyqt #单目测距 #速度估计 #pyqt界面 #注意力机制 #css3 #鸭科夫 #逃离鸭科夫 #鸭科夫联机 #鸭科夫异地联机 #开服 #嵌入式 #LabVIEW #光谱仪 #串口通信 #AQ6370 #自动化巡检 #chrome #go #unitask #系统架构 #Dell #PowerEdge620 #内存 #硬盘 #RAID5 #国企混改 #国企混改咨询 #国企混改战略规划 #GPU #曦望 #APM #AudioPolicy #音频策略 #pdf #excel #openclaw #实在Agent #深度优先 #DFS #程序设计 #计算机毕业设计 #程序定制 #源码 #大作业 #社科数据 #数据分析 #数据挖掘 #数据统计 #经管数据 #职场发展 #我的世界 #游戏私服 #云服务器 #创业创新 #全能视频处理软件 #视频裁剪工具 #视频合并工具 #视频压缩工具 #视频字幕提取 #视频处理工具 #架构师 #软考 #系统架构师 #xss #selenium #远程连接 #Ubuntu服务器 #硬盘扩容 #命令行操作 #VMware #PowerBI #企业 #压力测试 #三种参数 #参数的校验 #fastAPI #论文笔记 #系统安全 #数列 #数学 #数论 #洛谷 #AI写作 #flask #同步WebServer服务器 #ESP32网页服务器 #轻量级http服务器 #ESP32物联网 #chatgpt #ffmpeg #SSE #DS随心转 #whisper #google #search #微信小程序 #计算机 #连锁药店 #连锁店 #visual studio code #postman #easyui #sqlmap #单元测试 #wpf #酒店客房管理系统 #策略模式 #软件工程 #Buck #NVIDIA #交错并联 #DGX #transformer #虚幻 #ue5 #钉钉 #arm开发 #思维模型 #认知框架 #认知 #laravel #零售 #无人机 #安全架构 #3d #数字营销 #seo #数据仓库 #ISP Pipeline #行缓冲 #Android #Bluedroid #stl #react.js #macos #逻辑回归 #广播 #组播 #并发服务器 #TRO #TRO侵权 #TRO和解 #数字化转型 #实体经济 #中小企业 #商业模式 #软件开发 #青蓝送水模式 #创业干货 #健康医疗 #金融 #教育电商 #媒体 #prompt #wsl #L2C #勒让德到切比雪夫 #游戏美术 #技术美术 #游戏策划 #游戏程序 #用户体验 #防毒口罩 #防尘口罩 #具身智能 #发展心理学 #运动控制 #内在动机 #镜像神经元 #交叉学科 #企业架构治理 #电力企业IT架构 #IT架构设计 # Triton # 高并发 #DisM++ # 系统维护 #wps #敏捷流程 #dreamweaver #AI大模型应用开发 #语义检索 #文本向量化 #GTE-Pro #企业AI #电商 #计算机现代史 #bash #powerpoint #Com #车辆排放 #模型微调 #本地部署 #vLLM #IPMI #智慧校园一体化平台 #智慧校园管理系统 #合肥自友科技-智慧校园 #智慧校园源头厂家 #智慧校园软件供应商 #智慧校园平台服务商 #高性价比智慧校园系统 #MIMO #OFDM #技术原理 #通信算法 #GNC #控制 #姿轨控 #openresty #lua #googlecloud #math #homework #测试覆盖率 #可用性测试 #智能体从0到1 #新手入门 #信号处理 #目标跟踪 #大模型面试 #mybatis #后端 #rpc #protobuf #阻塞队列 #生产者消费者模型 #服务器崩坏原因 #肿瘤相关巨噬细胞 #CXCL5 #信号通路 #胃癌 #mTOR #乐备实 #labex #SEO #Modbus-TCP #七年级上册数学 #有理数 #有理数的加法法则 #绝对值 #SQL #编辑器 #蓝耘智算 #CNAS #CMA #程序文件 #cnn #gpu算力 #typescript #OBC #list #智能路由器 #tomcat #fastmcp #mmap #nio #pipeline #Transformers #NLP #AI运维 #Clawdbot #企业微信集成 #DevOps自动化 #全栈 #IndexTTS2 # 阿里云安骑士 # 木马查杀 #智能家居 #命令模式 #银河麒麟 #人大金仓 #Kingbase #ZeroTermux #宝塔面板 #移动服务器 #Linux环境 #企业级存储 #网络设备 #状态模式 #android-studio #android studio #android runtime #YOLO26 #YOLO11 #oracle #海外服务器安装宝塔面板 #sglang #GB/T4857 #GB/T4857.17 #GB/T4857测试 #SAM3 #echarts #Playbook #AI服务器 #自动驾驶 #clawdbot #QQbot #QQ #labview #集成测试 #AI产品经理 #大模型开发 #打卡 #计算机英语翻译 #漏洞 #数据安全 #注入漏洞 #Java面试 #Java程序员 #后端开发 #Redis #分布式锁 #爱心代码 #表白代码 #爱心 #tkinter #情人节表白代码 #sqlserver #tcp/ip #智能路由器 #测评 #osg #设计规范 #放大电路 #MapGIS #云服务 #云门户 #IGServer #多线程 #数组 #性能调优策略 #双锁实现细节 #动态分配节点内存 #RAID #磁盘 #系统管理 #服务 #abtest #LangGraph #r-tree #vue3 #天地图 #403 Forbidden #天地图403错误 #服务器403问题 #天地图API #部署报错 #考研 #京东云 #Cpolar #国庆假期 #服务器告警 #STL #string #笔试 #研发管理 #禅道 #禅道云端部署 #计算几何 #斜率 #方向归一化 #叉积 #.net #CCE #Dify-LLM #Flexus ##程序员和算法的浪漫 #spine #twitter #svm #amdgpu #kfd #ROCm #bootstrap #js逆向 #逆向 #混淆 #中间件 #可信计算技术 #elasticsearch #版本控制 #Git入门 #开发工具 #代码托管 #阳台种菜 #园艺手扎 #Gemini #Nano Banana Pro #Smokeping #其他 #SEO优化 #微PE #硬盘克隆 #DiskGenius #智能手机 #算法备案 #Moltbot #跳槽 #业界资讯 #麒麟 #国产化 #漏洞挖掘 #Exchange #SSH保活 #Miniconda #远程开发 #everything #vue #risc-v #安全威胁分析 #asp.net #私域运营 #流量运营 #esp32 arduino #window10 #window11 #病毒 #DCOM进程 #系统进程资源占用高 #迁移重构 #代码迁移 #聚类 #eureka #firefox #企业存储 #RustFS #对象存储 #高可用 #rust #Moltbook #SSH代理转发 #图像分类 #图像分割 #yolo26算法 #语义搜索 #嵌入模型 #Qwen3 #AI推理 #材料工程 #数码相机 #智能电视 #Java #Spring #Spring Boot #DHCP #react native #adb #运营 #KMS 激活 #JavaScript #sql注入 #windbg分析蓝屏教程 #b/s架构 #ssm #移动学习平台 #vnstat #监控 #结构体 #WT-2026-0001 #QVD-2026-4572 #smartermail #软件构建 #Deepseek #gpt-3 #扩展屏应用开发 #百度 #百度文库 #爱企查 #旋转验证码 #验证码识别 #图像识别 #源代码管理 #ai编程 #Ubuntu #Steam #饥荒联机版 #claude #AI-native #dba #就业 #CPU #监测 #ShaderGraph #图形 #Taiji #vivado license #数据集 #TURN # WebRTC # HiChatBox #winscp #Streamlit #Qwen #AI聊天机器人 #文字检测 #梁辰兴 #传输连接管理 #计算机网络基础 # 双因素认证 #隐私合规 #网络安全保险 #法律风险 #风险管理 #Chat平台 #ARM架构 #gpio #Docker #网络攻击模型 #制造 #ipmitool #BMC #cocoa #Tetrazine-Acid #1380500-92-4 #fpga开发 #SIP服务器 #语音服务器 #VoIP #SIP协议 #语音识别 #幼儿园 #园长 #幼教 #测试流程 #金融项目实战 #P2P #html5 #智能化测试 #质量效能 #skills #playwright #持续测试 #职业和发展 #未加引号服务路径 #Springboot3.0 #超算中心 #PBS #lsf #rabbitmq #反向代理 #Keycloak #Quarkus #AI编程需求分析 #门禁 #读卡器 #梯控 #门禁一卡通 #门禁读卡器 #梯控读卡器 #IC卡读卡器 #启发式算法 #守护进程 #复用 #screen #epoll #intellij-idea #database #idea #儿童AI #图像生成 #wordpress #雨云 # IndexTTS 2.0 # 自动化运维 #投标 #标书制作 #apache #n8n解惑 #交互 #用户运营 #mvc #asp.net大文件上传 #asp.net大文件上传下载 #asp.net大文件上传源码 #ASP.NET断点续传 #收银台开源 #收银台接口 #东方仙盟 #仙盟创梦IDE #商业开源 #2026美国大学生数学建模 #2026美赛 #美赛ICM #美赛ICM Problem F #ICM赛题F #MATLAB #iphone #SSH Agent Forwarding # PyTorch # 容器化 #windows11 #系统修复 #homelab #Lattepanda #Jellyfin #Plex #Emby #Kodi #春秋云境 #CVE-2020-5515 #高考 #高品质会员管理系统 #收银系统 #同城配送 #最好用的电商系统 #最好用的系统 #推荐的前十系统 #JAVA PHP 小程序 #omv8 #树莓派 #nas #6G #太赫兹 #无线通信 #频谱 #无线 #并发 #KMS激活 #求职招聘 #copilot #数据采集 #汇编 #tensorflow #KMP #企业微信机器人 #本地大模型 #娱乐 #junit #.netcore #部署 #容斥原理 #单例模式 # GLM-4.6V-Flash-WEB # AI部署 # CUDA #clickhouse #社交智慧 #职场生存 #系统思维 #身体管理 #商务宴请 #拒绝油腻 #清醒日常 #贪心算法 #openvino #手机检测 #课堂手机检测 #统信UOS #搜狗输入法 #WIN32汇编 #todesk #Fun-ASR # 语音识别 # WebUI #文本生成 #AI助手 #LoRA # RTX 3090 # lora-scripts #CUDA #Triton #余行补位 #意义对谈 #余行论 #领导者定义计划 #nmodbus4类库使用教程 #jupyter #webrtc #http头信息 #2026AI元年 #年度趋势 #运维开发 #带宽 #流量 #大带宽 #若依 #quartz #框架 #鸿蒙系统 #车载系统 #Kylin-Server #国产操作系统 #服务器安装 #排序算法 #插入排序 #bond #服务器链路聚合 #网卡绑定 #azure #muduo库 #1024程序员节 #n8n #nodejs #AI论文写作工具 #学术论文创作 #论文效率提升 #MBA论文写作 #esb接口 #走处理类报异常 #bug菌问答团队 #旅游 #国产化OS #SSH跳转 #容器化 #GPU服务器 #RustDesk # IndexTTS # GPU集群 #银河麒麟部署 #银河麒麟部署文档 #银河麒麟linux #银河麒麟linux部署教程 #RSO #机器人操作系统 #以太网温湿度气体多参量传感器 #以太网多合一传感器 #以太网环境监测终端 #可定制气体监测模组 #AI电商客服 #CVE-2025-68143 #CVE-2025-68144 #CVE-2025-68145 #weston #x11 #x11显示服务器 #ONLYOFFICE #MCP 服务器 #5G #考试系统 #在线考试 #培训考试 #考试练习 #HeyGem # 数字人系统 # 远程部署 #轻量大模型 #LED #设备树 #GPIO #memcache #连接数据库报错 #银河麒麟操作系统 #openssh #华为交换机 #信创终端 #长文本理解 #glm-4 #推理部署 #proc #mariadb #sentinel #公共MQTT服务器 # 黑屏模式 # TTS服务器 #I/O #Lenyiin #vision pro #IndexTTS 2.0 #本地化部署 #cpu #一人公司 #独立开发者 #数模美赛 #sqlite #paddleocr #直流无刷电机 #六步换相 #生信 #大模型应用 #API调用 #PyInstaller打包运行 #服务端部署 #pencil #pencil.dev #设计 #大模型呼叫 #外呼系统 #AI外呼 #外呼系统推荐 #智能客服 #外呼 #GitPuk #国产开源免费代码管理工具 #Arbess #cicd工具 #一文上手 #电气工程 #C# #muduo #EventLoop #全链路优化 #实战教程 #AI生成 # outputs目录 # 自动化 #Claude #视频去字幕 # 显卡驱动备份 #kong #Kong Audio #Kong Audio3 #KongAudio3 #空音3 #空音 #中国民乐 #汇智网盘系统 #企业级云存储 #智能协作 #cursor #uvicorn #uvloop #asgi #event #ajax #编程语言 #聊天小程序 #gpt #TensorRT # 推理优化 #OpenAI #故障 #优化 #三维 #3D #三维重建 #双指针 #信令服务器 #Janus #MediaSoup #Llama-Factory # 大模型推理 #V11 #kylinos #Jetty # CosyVoice3 # 嵌入式服务器 #CVE-2025-61686 #路径遍历高危漏洞 # 服务器IP # 端口7860 #建筑缺陷 #红外 #需求分析 #uv #铬锐特 #uv胶 #紫外线胶水 #光固化胶水 #胶粘剂 #CSDN #动态规划 #戴尔服务器 #戴尔730 #装系统 #旅游推荐管理系统 #旅游攻略 #流媒体 #NAS #飞牛NAS #NVR #EasyNVR # GPU租赁 # 自建服务器 #embedding #遛狗 #MinIO服务器启动与配置详解 #AB包 #代理 #m3u8 #HLS #移动端H5网页 #APP安卓苹果ios #监控画面 直播视频流 #SSH复用 # Miniconda # 远程开发 #RPA #影刀RPA #DooTask #AutoDL使用教程 #AI大模型训练 #linux常用命令 #PaddleOCR训练 #建站 #在线培训系统 #Tracker 服务器 #响应最快 #torrent 下载 #2026年 #Aria2 可用 #迅雷可用 #BT工具通用 #Puppet # IndexTTS2 # TTS #mssql #算法笔记 #xeon #GATT服务器 #蓝牙低功耗 #vuejs #非标机械设计 #机器视觉 #6D位姿 #grafana #昇腾300I DUO #毕设代做 #课设 # 远程连接 #vp9 #gerrit #ocr #lprnet #车牌识别 #crnn #车牌检测 #ModelEngine #系统升级 #信创 #usb #通信协议 #指针 #anaconda #虚拟环境 #GB28181 #SIP信令 #SpringBoot #视频监控 #Gunicorn #WSGI #Flask #并发模型 #Python #性能调优 #智能体来了 #图书馆 #自习室 #平板 #交通物流 #智能硬件 #提词器 #芦笋提词器 #编程助手 #IO #ceph #ambari #文生视频 #CogVideoX #AI部署 #榛樿鍒嗙被 #金融投资Agent #uniapp #合法域名校验出错 #服务器域名配置不生效 #request域名配置 #已经配置好了但还是报错 #uniapp微信小程序 #行为模式分析 #数据 #应用层 #跨领域 #敏感信息 #智慧城市 #TCP服务器 #语音控制 #ida #全排列 #回溯 #剪枝 #STJ算法 #glibc #RTSP #Live555 #流媒体服务器 #Anaconda配置云虚拟环境 #MQTT协议 #8U #硬件架构 #Node.js #漏洞检测 #CVE-2025-27210 #ROS # 局域网访问 # 批量处理 #claude code #codex #code cli #ccusage #zabbix #PyTorch 特性 #动态计算图 #张量(Tensor) #自动求导Autograd #GPU 加速 #生态系统与社区支持 #与其他框架的对比 # 树莓派 # ARM架构 #STUN # TURN # NAT穿透 #synchronized #锁 #reentrantlock #RAID技术 #存储 #Ascend #MindIE # OTA升级 # 黄山派 #静脉曲张 #腿部健康 #C₃₂H₄₅N₇O₁₁S₂ #Cesium #交互设计 #智能避障 #学工管理系统 #学工一体化平台 #学工软件二次开发 #学工平台定制开发 #学工系统服务商 #学工系统源头厂家 #智慧校园学工系统 #Discord机器人 #云部署 #程序那些事 #blender #设计师 #图像处理 #AirDrop #mybatis #分布式数据库 #集中式数据库 #业务需求 #选型误 #Tokio #异步编程 #系统编程 #Pin #http服务器 #llm #领域驱动 #防火墙 #pytest #web3.py #kmeans #TcpServer #accept #高并发服务器 #python学习路线 #python基础 #python进阶 #python标准库 #seata #TC/TM/RM #串口服务器 #工业级串口服务器 #串口转以太网 #串口设备联网通讯模块 #串口服务器选型 #debian #x-cmd #doubao #kimi #zhipu #claude-code #摩尔线程 #ICPC #里氏替换原则 #pve #JT/T808 #车联网 #车载终端 #模拟器 #仿真器 #开发测试 #多进程 #python技巧 #paddlepaddle #政务 #r语言-4.2.1 #r语言 #语言 #zotero #WebDAV #同步失败 #代理模式 #AI赋能盾构隧道巡检 #开启基建安全新篇章 #以注意力为核心 #YOLOv12 #AI隧道盾构场景 #盾构管壁缺陷病害异常检测预警 #隧道病害缺陷检测 #LE Audio #BAP #捷配 #pcb工艺 #参数估计 #矩估计 #概率论 #泛型 #接口 #抽象类 #面向对象设计 #ueditor导入word #ueditor导入pdf #sizeof和strlen区别 #sizeof #strlen #计算数据类型字节数 #计算字符串长度 #可再生能源 #绿色算力 #风电 #LabVIEW知识 #LabVIEW程序 #LabVIEW功能 #回归 #智能制造 #供应链管理 #工业工程 #字符串 #时间复杂度 #空间复杂度 #eclipse #域名注册 #新媒体运营 #网站建设 #国外域名 #前端界面 #IO编程 #Spring AI #AI Agent #开发者工具 #clamav #HistoryServer #Spark #YARN #jobhistory #内存接口 # 澜起科技 # 服务器主板 #简单数论 #埃氏筛法 #计算机外设 #yolo #comfyui #yolov12 #研究生life #树莓派4b安装系统 #强化学习 #策略梯度 #REINFORCE #蒙特卡洛 #我的世界服务器搭建 #minecraft #模板和元编程 #zygote #应用进程 #gpu #nvcc #cuda #nvidia #IntelliJ IDEA #模块 #算力一体机 #ai算力服务器 #RXT4090显卡 #RTX4090 #深度学习服务器 #硬件选型 #scala #健身房预约系统 #健身房管理系统 #健身管理系统 #JAVA #ThingsBoard MCP # 公钥认证 #spring native # 服务器IP访问 # 端口映射 #高级IO #几何学 #拓扑学 #openEuler #CANN #UEFI #BIOS #Legacy BIOS #1panel #vmware #硬件 #密码 #Zernike #hcipy #光学设计 #像差仿真 #SEW #赛威 #SEW变频器 #科普 #GESP4级 #GESP四级 #sort #滑动窗口 #docker-compose #fiddler #mapreduce #智慧社区 #管理系统 # 环境迁移 #卷积神经网络 #dash #opc ua #opc #LVDS #高速ADC #DDR # GLM-TTS # 数据安全 #xshell #host key #区间dp #二进制枚举 #图论 #TTS私有化 # 音色克隆 #markdown #IT #技术 #支付 #改行学it #Coze工作流 #AI Agent指挥官 #多智能体系统 #rustdesk #ip #HBA卡 #RAID卡 #智能一卡通 #消费一卡通 #智能梯控 #一卡通 #超时设置 #客户端/服务器 #网络编程 #标准化事件委托 #工序流程工艺路径 #业务流程标准化 #api #key #AI作画 #实时检测 #SAP #ebs #metaerp #oracle ebs #tdengine #涛思数据 #VibeVoice # 语音合成 #框架搭建 #华为机试 #海外短剧 #海外短剧app开发 #海外短剧系统开发 #短剧APP #短剧APP开发 #短剧系统开发 #海外短剧项目 #910B #昇腾 #TTS #练习 #基础练习 #循环 #九九乘法表 #计算机实现 #工厂模式 #Proxmox VE #虚拟化 # 批量管理 #C语言 #数据可视化 #网路编程 #百万并发 #NPU #rtmp #动画 #集成学习 #证书 #hdfs #后端框架 #测试网 #erc-20 #独立链 #polkadot #H5 #跨域 #发布上线后跨域报错 #请求接口跨域问题解决 #跨域请求代理配置 #request浏览器跨域 #MCP服务器注解 #异步支持 #方法筛选 #声明式编程 #自动筛选机制 #408 #线索二叉树 #邮箱 #postfix #dovecot #React #Next #CVE-2025-55182 #RSC #SSH免密登录 #ue4 #DedicatedServer #独立服务器 #专用服务器 #快递盒检测检测系统 #p2p #建造者模式 #游戏机 #JumpServer #UDP的API使用 #进程创建与终止 #ngrok #unity3d #服务器框架 #Fantasy #振镜 #振镜焊接 #chat #网络配置实战 #Web/FTP 服务访问 #计算机网络实验 #外网访问内网服务器 #Cisco 路由器配置 #静态端口映射 #网络运维 #claudeCode #content7 # 目标检测 #多接口并发 #首页优化 #galeweather.cn #高精度天气预报数据 #光伏功率预测 #风电功率预测 #高精度气象 #Modbus # 串口服务器 # NPort5630 #Highcharts #插件封装 #vlookup #文件IO #输入输出流 #麒麟OS #tcpdump #milvus #知识库 #Python办公自动化 #Python办公 #实时音视频 #UDP套接字编程 #UDP协议 #网络测试 #灌封胶 #有机硅灌封胶 #聚氨酯灌封胶 #环氧树脂灌封胶 #电子灌封胶 #SRS #直播 #OpenHarmony #STDIO协议 #Streamable-HTTP #McpTool注解 #服务器能力 #AutoDL #租显卡 #训练推理 #标准IO #函数接口 #小白 #知识 #iot #论文复现 #ArkUI #ArkTS #鸿蒙开发 #鼠大侠网络验证系统源码 #Dify #轻量化 #低配服务器 #Anything-LLM #IDC服务器 #工具集 #journalctl #创业管理 #财务管理 #团队协作 #创始人必修课 #数字化决策 #经营管理 #贝叶斯优化深度学习 #Nacos #AI技术 #数据迁移 #系统安装 #LobeChat #GPU加速 #YOLOFuse # 水冷服务器 # 风冷服务器 #dlms #dlms协议 #逻辑设备 #逻辑设置间权限 #运动 #翻译 #开源工具 #wireshark #xlwings #Excel #openlayers #bmap #tile #server #flume #elk #决策树 #ZooKeeper #ZooKeeper面试题 #面试宝典 #深入解析 #K8s #镜像 #集群自动化 #CosyVoice3 #SSH反向隧道 # Jupyter远程访问 #文件管理 #文件服务器 #模拟退火算法 #虚拟机 #Hadoop #客户端 #DIY机器人工房 #零代码平台 #AI开发 #UDP #HTML #web前端 #网页开发 #pandas #nacos #银河麒麟aarch64 #mamba #powerbi #凤希AI伴侣 #esp32教程 #SQL调优 #EXPLAIN #慢查询日志 #分布式架构 #文件传输 #电脑文件传输 #电脑传输文件 #电脑怎么传输文件到另一台电脑 #电脑传输文件到另一台电脑 #环境搭建 #scanf #printf #getchar #putchar #cin #cout #AI应用 #连锁门店核销 #美团团购券核销 #美团核销api #saas平台美团核销 #java接入美团团购 #ipv6 #群晖 #音乐 #neo4j #NoSQL #can #Spring源码 #江协 #瑞萨 #OLED屏幕移植 #流量监控 #SMP(软件制作平台) #EOM(企业经营模型) #应用系统 #MC #空间计算 #原型模式 # 云服务器 #远程访问 #远程办公 #飞网 #安全高效 #配置简单 #学术写作辅助 #论文创作效率提升 #AI写论文实测 #数据访问 #笔记本电脑 #链表的销毁 #链表的排序 #链表倒置 #判断链表是否有环 #hibernate #逆向工程 #GEO服务 #黑客技术 #挖漏洞 #日志分析 #水性三防漆 #UV三防漆 #有机硅三防漆 #聚氨酯三防漆 #醇酸树脂三防漆 #丙烯酸三防漆 #自动化运维 #防毒面罩 #防尘面罩 #web3 #arm64 #Socket #EMC存储 #存储维护 #NetApp存储 #MOXA #人脸识别 #人脸核身 #活体检测 #身份认证与人脸对比 #微信公众号 #ms-swift # 一锤定音 # 大模型微调 #deepseek #OSS #CDN #最佳实践 #架构设计 #React安全 #漏洞分析 #Next.js #反序列化漏洞 #eBPF #UOS #海光K100 #统信 #SSH公钥认证 # 安全加固 #cpp #智慧校园解决方案 #智慧校园选型 #智慧校园采购 #智慧校园软件 #智慧校园专项资金 #智慧校园定制开发 #模型上下文协议 #MultiServerMCPC #load_mcp_tools #load_mcp_prompt #unix #asp.net上传文件夹 #SSH别名 #Java生成PDF #Freemarker转PDF #PDFBox转图片 #HTML转PDF乱码解决 #VMware Workstation16 #服务器操作系统 #Qwen3-14B # 大模型部署 # 私有化AI #CPU推理 #IFix #c++20 #ping通服务器 #读不了内网数据库 ##租显卡 #攻防演练 #Java web #红队 # 远程访问 # 服务器IP配置 #screen 命令 #Android16 #音频性能实战 #音频进阶 #黑群晖 #无U盘 #纯小白 #Kuikly #openharmony #蓝湖 #Axure原型发布 #reactor反应堆 #电路仿真 #proteus #AD #keil #硬件工程师面试 #H5网页 #网页白屏 #H5页面空白 #资源加载问题 #打包部署后网页打不开 #HBuilderX #screen命令 #EDCA OS #可控AI #挖矿 #Linux病毒 #题解 #图 #dijkstra #迪杰斯特拉 #VS Code调试配置 #Deepoc #具身模型 #开发板 #未来 #uvx #uv pip #npx #Ruff #sklearn #TFTP #性能测试 #LoadRunner #HarmonyOS APP #N8N #程序员转型 #Gateway #认证服务器集成详解 #dynadot #域名 #服务器开启 TLS v1.2 #IISCrypto 使用教程 #TLS 协议配置 #IIS 安全设置 #服务器运维工具 #千问 #晶振 #WinDbg #Windows调试 #内存转储分析 #mtgsig #美团医药 #美团医药mtgsig #美团医药mtgsig1.2 #spring ai #oauth2 #套接字 #I/O多路复用 #字节序 #log #格式工厂 #cascadeur #OpenManage #浏览器自动化 #python #JNI #大剑师 #nodejs面试题 #C2000 #TI #实时控制MCU #AI服务器电源 #经济学 #内网 #梯控一卡通 #电梯一卡通 #考勤一卡通 #远程桌面 #远程控制 # Base64编码 # 多模态检测 #rsync # 数据同步 #浏览器指纹 #DNS #RK3576 #瑞芯微 #硬件设计 #运维工具 #win11 #edge #迭代器模式 #观察者模式 #C #雨云服务器 #Minecraft服务器 #教程 #MCSM面板 #Apple AI #Apple 人工智能 #FoundationModel #Summarize #SwiftUI #移动端h5网页 #调用浏览器摄像头并拍照 #开启摄像头权限 #拍照后查看与上传服务器端 #摄像头黑屏打不开问题 #SPA #单页应用 #工作 #服务器IO模型 #非阻塞轮询模型 #多任务并发模型 #异步信号模型 #多路复用模型 #懒汉式 #恶汉式 #gRPC #注册中心 #入侵 #日志排查 #路由器 # 服务器配置 # GPU #swagger # 大模型 # 模型训练 #Spring AOP #贴图 #材质 #YOLO识别 #YOLO环境搭建Windows #YOLO环境搭建Ubuntu #Cubase #Cubase15 #Cubase14 #Cubase12 #Cubase13 #Cubase 15 Pro #Cubase 14 Pro #工程设计 #预混 #扩散 #燃烧知识 #层流 #湍流 #CLI #langgraph.json #WinSCP 下载安装教程 #SFTP #FTP工具 #服务器文件传输 #个人博客 # 键鼠锁定 #agentic bi #raid #raid阵列 #手机h5网页浏览器 #安卓app #苹果ios APP #手机电脑开启摄像头并排查 #bigtop #hdp #hue #kerberos #音乐分类 #音频分析 #ViT模型 #Gradio应用 #docker安装seata #嵌入式编译 #ccache #distcc #顶刊 #绘图 #研究生 #cocos2d #图形渲染 #欧拉 #测速 #iperf #iperf3 #学术生涯规划 #CCF目录 #基金申请 #职称评定 #论文发表 #科研评价 #顶会顶刊 #宝塔面板部署RustDesk #RustDesk远程控制手机 #手机远程控制 #pygame #OWASP #juice-shop #安全漏洞练习靶场 #ARM64 # DDColor # ComfyUI #智能合约 #runtmie #express #cherry studio #puppeteer #生产服务器问题查询 #日志过滤 #Autodl私有云 #深度服务器配置 #KMS #slmgr #VoxCPM-1.5-TTS # 云端GPU # PyCharm宕机 #rdp #人脸识别sdk #视频编解码 #漏洞修复 #IIS Crypto #期刊 #SCI #GLM-4.6V-Flash-WEB # AI视觉 # 本地部署 #系统故障 #硬盘修复 #Fluentd #Sonic #日志采集 #面向对象 #RGFNet多模态目标检测 #可见光-红外图像融合目标检测 #TGRS 2025顶刊论文 #YOLO多模态创新改进 #YOLO多模态融合属于发文热点 #restful #nfs #iscsi #libosinfo #外卖配送 #大模型部署 #mindie #ComfyUI # 推理服务器 #Karalon #AI Test #YOLOv8 # Docker镜像 #x86_64 #数字人系统 #ET模式 #非阻塞 # 服务器迁移 # 回滚方案 #gnu #remote-ssh #SA-PEKS # 关键词猜测攻击 # 盲签名 # 限速机制 #模版 #函数 #类 #性能 #RAM #WEB #rtsp #转发 #CMake #Make #C/C++ #西门子 #汇川 #Blazor #EtherCAT #XMC4800 #工业自动化 #工程实践 #排序 # 高并发部署 #鲲鹏 #Coturn #vps #夏天云 #夏天云数据 #软件 #本地生活 #电商系统 #商城 #vrrp #脑裂 #keepalived主备 #高可用主备都持有VIP #SMARC #ARM #软件需求 # 代理转发 #idm #simulink #寄存器 #aiohttp #asyncio #异步 #项目申报系统 #项目申报管理 #项目申报 #企业项目申报 #web服务器 #webpack # 智能运维 # 性能瓶颈分析 #devops #gateway #Comate #I/O模型 #水平触发、边缘触发 #多路复用 #Aluminium #Google #高精度农业气象 #北京百思可瑞教育 #百思可瑞教育 #北京百思教育 #一周会议与活动 #ICLR #CCF #Shiro #CVE-2016-4437 #二值化 #Canny边缘检测 #轮廓检测 #透视变换 #C++ UA Server #SDK #Windows #跨平台开发 #联机教程 #局域网联机 #局域网联机教程 #局域网游戏 ##python学习笔记 #python中with语句详解 #视觉检测 # ControlMaster #身体实验室 #健康认知重构 #微行动 #NEAT效应 #亚健康自救 #ICT人 #BIOS中断 #safari #b树 #CS2 #debian13 #memory mcp #Cursor #npm #asp.net上传大文件 #VPS #搭建 #土地承包延包 #领码SPARK #aPaaS+iPaaS #智能审核 #档案数字化 #webgl #turn #ICE #信创国产化 #达梦数据库 #大学生 #国产PLM #瑞华丽PLM #瑞华丽 #PLM #网站 #截图工具 #批量处理图片 #图片格式转换 #图片裁剪 #温湿度监控 #WhatsApp通知 #IoT #MySQL #MS #Materials #X11转发 #xml #可撤销IBE #服务器辅助 #私钥更新 #安全性证明 #双线性Diffie-Hellman #API限流 # 频率限制 # 令牌桶算法 #短剧 #短剧小程序 #短剧系统 #微剧 #SMTP # 内容安全 # Qwen3Guard #SSH跳板机 # Python3.11 # AI翻译机 # 实时翻译 #DDD #tdd #视频 #安全性测试 #全文检索 #插件 #渗透测试 #网安应急响应 #管道Pipe #system V #FHSS #心理健康服务平台 #心理健康系统 #心理服务平台 #心理健康小程序 # 远程运维 #js # GPU服务器 # tmux #DAG #服务器解析漏洞 #云服务器选购 #Saas #数据恢复 #视频恢复 #视频修复 #RAID5恢复 #流媒体服务器恢复 #NFC #智能公交 #服务器计费 #FP-增长 #outlook #错误代码2603 #无网络连接 #2603 #对话框 #Dialog #桌面开发 #MessageDialog #QInputDialog #解释器模式 #效率神器 #办公技巧 #自动化工具 #Windows技巧 #打工人必备 #标准化流模型 #概率生成模型 #可逆变换 #概率密度变换 #知识点 #SSH密钥 #RIP #结构体与联合体 #数字孪生 #三维可视化 #VSCode # Qwen3Guard-Gen-8B #ETL管道 #向量存储 #数据预处理 #DocumentReader #samba #intellij idea #毕设定制 #随机森林 #smtp #smtp服务器 #PHP #AI视频创作系统 #AI视频创作 #AI创作系统 #AI视频生成 #AI工具 #AI创作工具 #fs7TF #华为od机试 #华为od机考 #华为od最新上机考试题库 #华为OD题库 #od机考题库 #AI+ #coze #AI入门 #AI赋能 #计组 #数电 #cosmic #运维 #Python3.11 #AI 推理 #NV #npu #pxe #AI教材写作工具 #AI创作技术 #教材编写实战 #创作效率优化 #处理器 #free #vmstat #sar #上下文工程 #langgraph #意图识别 #ansys #ansys问题解决办法 # 网络延迟 #ranger #MySQL8.0 #win10 #qemu #远程软件 #MinIO #reactjs #信奥赛 #提高组 #csp-s #初赛 #真题 #vertx #vert.x #vertx4 #runOnContext #昭和仙君 #宠物 #传感器 #MicroPython # Connection refused #WRF #WRFDA #teamviewer #HarmonyOS #机器人学习 #数据库架构 # IP配置 # 0.0.0.0 #STDIO传输 #SSE传输 #WebMVC #WebFlux #熵权法 #灰色关联分析 #Socket网络编程 #传统服饰销售平台 #视觉理解 #Moondream2 #多模态AI #istio #服务发现 #web server #请求处理流程 #ftp #sftp #勒索病毒 #勒索软件 #加密算法 #.bixi勒索病毒 #数据加密 #OPCUA #CA证书 # 轻量化镜像 # 边缘计算 #代码规范 #Host #SSRF # 批量部署 #星际航行 #opc模拟服务器 # ms-swift #IPMB #远程管理 #服务器线程 # SSL通信 # 动态结构体 #报表制作 #职场 #用数据讲故事 #语音生成 #奈飞工厂算法挑战赛 #个人助理 #数字员工 #Langchain-Chatchat # 国产化服务器 # 信创 #canvas层级太高 #canvas遮挡问题 #盖住其他元素 #苹果ios手机 #安卓手机 #调整画布层级 #铁路桥梁 #DIC技术 #箱梁试验 #裂纹监测 #四点弯曲 #节日 #ESP32编译服务器 #Ping #DNS域名解析 #麦克风权限 #访问麦克风并录制音频 #麦克风录制音频后在线播放 #用户拒绝访问麦克风权限怎么办 #uniapp 安卓 苹果ios #将音频保存本地或上传服务器 #Syslog #系统日志 #日志监控 #taro #AI应用编程 # REST API #游戏服务器断线 # keep-alive #闲置物品交易系统 #地理 #遥感 #IPv6 #MCP SDK #自由表达演说平台 #演说 #持续部署 #机器翻译 #Minecraft #PaperMC #我的世界服务器 #前端开发 #EN4FE #Archcraft #llvm #国产开源制品管理工具 #Hadess #范式 #ClaudeCode #AICoder #人工智能编码助手 #glances #开关电源 #热敏电阻 #PTC热敏电阻 #duckdb #多模态 #微调 #超参 #LLamafactory #API #阿里云RDS #青少年编程 #batch #springboot3 #springboot3升级 #Spring Batch #升级Spring Batch # 硬件配置 #万悟 #联通元景 #coffeescript #传统行业 #tornado #H3C #攻击溯源 #编程 #warp #bug #数智红包 #商业变革 #net core #kestrel #web-server #asp.net-core #Prometheus #Zabbix #语音合成 #tekton #FASTMCP #磁盘配额 #存储管理 #形考作业 #国家开放大学 #系统运维 #因果学习 #网络 #Go并发 #高并发架构 #Goroutine #系统设计 #英语学习 #交换机 #三层交换机 #lucene #高斯溅射 #主板 #电源 #说话人验证 #声纹识别 #CAM++ #云开发 #AI智能棋盘 #Rock Pi S #MC群组服务器 #BoringSSL #云计算运维 #PTP_1588 #gPTP #农产品物流管理 #物流管理系统 #农产品物流系统 #农产品物流 #ArcGIS #批量操作 #地理空间分析 #c++高并发 #k8s # ARM服务器 # 鲲鹏 #4U8卡 AI 服务器 ##AI 服务器选型指南 #GPU 互联 #GPU算力 # SSH #uip #CTF #SQL注入 #WAF绕过 #银河麒麟服务器系统 #进程等待 #wait #waitpid # 离线AI #开发实战 #文件上传漏洞 #moltbot #godot #nosql #结构与算法 #静态链接 #链接 #TLS协议 #HTTPS #运维安全 #Docsify #技术博客 #A2A #GenAI #idc #系统降级 #华为P30 # GLM # 服务连通性 #esp32 #mosquito #程序开发 #库存管理 #量子计算 #NSP #下一状态预测 #aigc #ACID #多文档事务 #分布式事务 #算力建设 #RK3588 #RK3588J #评估板 #核心板 #嵌入式开发 #声源定位 #MUSIC #ASR #SenseVoice # 高温监控 #海量数据存储 #resnet50 #分类识别训练 #Xshell #Finalshell #生物信息学 #组学 #Spire.Office #ServBay #AI零代码开发 #敏捷开发 #自然语言编程 #软件开发范式变革 #FunASR #语音转文字 #Unity #游戏服务器 #代理服务器 #Matrox MIL #二次开发 #CMC #智能体对传统行业冲击 #行业转型 # DIY主机 # 交叉编译 #0day漏洞 #DDoS攻击 #漏洞排查 #2025年 #odoo #appche #c #CS336 #Assignment #Experiments #TinyStories #Ablation #校园志愿者 #LangGraph 1.0 #企业级部署 #Kubernetes集群 #生产环境 #CVE-2025-13878 #CWE-617 #远程攻击 #PN 结 #ARMv8 #内存模型 #内存屏障 #RWK35xx #语音流 #实时传输 #node #AE #AITechLab #cpp-python #CUDA版本 #adobe #Proteus #UART #嵌入式系统 #gmssh #宝塔 #基础语法 #标识符 #常量与变量 #数据类型 #运算符与表达式 #POC #问答 #交付 #Linly-Talker # 数字人 # 服务器稳定性 #总体设计 #电源树 #框图 #boosting #边缘AI # Kontron # SMARC-sAMX8 #okhttp #向量嵌入 #boltbot #人脸活体检测 #live-pusher #动作引导 #张嘴眨眼摇头 #苹果ios安卓完美兼容 #小艺 #搜索 #xcode #SQL注入主机 #Linux多线程 #cesium #可视化 #cmmi #结对编程 #信息收集 #poll #人流量统计 #roi区域识别 #车辆识别 # 模型微调 #开题报告 #VMware创建虚拟机 #远程更新 #缓存更新 #多指令适配 #物料关联计划 #个性化推荐 #BERT模型 #RS232 #RS485 #RS422 #Qwen3-VL # 服务状态监控 # 视觉语言模型 #传媒 #隐函数 #常微分方程 #偏微分方程 #线性微分方程 #线性方程组 #非线性方程组 #复变函数 #YOLOv13多模态创新改进 #YOLO多模态融合检测改进 #ICCV 2025多模态顶会 #LIF 局部光照感知融合模块 #效融合 RGB 与红外信息 #可见光与红外图像融合目标检测 #美食 #UDP服务器 #recvfrom函数 #大数据分析 #个人电脑 #Ward #递归 #线性dp #bochs #Termux #Samba #protobuffer #结构化数据序列化机制 #音诺ai翻译机 #AI翻译机 # Ampere Altra Max # 权限修复 #WAN2.2 #车载嵌入式 #Zigzag #日志模块 #统信操作系统 #人形机器人 #人机交互 #VMWare Tool #网络安全大赛 #ssh登录 #爬虫实战 #零基础python爬虫教学 #双色球历史开奖数据 #期号红球篮球开奖日期等 #结构化CSV存储 #实例分割 #isic2016 #Helm Chart #Mycat #AI工具集成 #容器化部署 #grpc #Navidrome #AI教程 #二维数组 #基金 #股票 #ossinsight #测量 #网络安全计划 #数字时代 #jquery #机器人运动学 #PyKDL # child_process #分子动力学 #化工仿真 #小智 #session #OpenCode #技能系统 #技能模板 #JADX-AI 插件 #starrocks #FPGA #动态数码管 #Verilog HDL #计时 #电子电气架构 #系统工程与系统架构的内涵 #Routine #基于uni-app的 #校园二手物品交易系统 #L6 #L10 #L9 #AI写作工具 #教材编写效率提升 #AI教材编写 #教材编写难题解决 #教育领域AI应用 #远程桌面协议 #SPICE #Beidou #北斗 #SSR #composer #symfony #java-zookeeper #MOSFET #晶圆制造 #芯片制造 #TCP/IP #DuckDB #协议 #开关电源设计 #思爱普 #SAP S/4HANA #ABAP #NetWeaver #SpringSecurity #鉴权 #Arduino BLDC #核辐射区域探测机器人 #haproxy #电梯 #电梯运力 #电梯门禁 #vncdotool #链接VNC服务器 #如何隐藏光标 #数据报系统 #保姆级教程 #电机正反转 #TMC2240 #DIR引脚控制 #机器狗 #AGV #AMR #机器人乘梯 #fork函数 #进程创建 #进程终止 #DSL #解析器 #redisson #力扣 #前缀和 #分享 #PS #photoshop #anti-content #anti-content分析 #anti-content逆向 #Typora #状态图 #甘特图 #类图 #时序/序列图 #实体关系ER图