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

NO.32十六届蓝桥杯备战|函数|库函数|自定义函数|实参|形参|传参(C++)

函数是什么

数学中我们其实就⻅过函数的概念,⽐如:⼀次函数 y = kx + b ,k和b都是常数,给⼀个任意的x ,就得到⼀个 y 值。其实在C/C++语⾔中就引⼊了函数(function)的概念,有些翻译为:⼦程序,⼦程序这种翻译更加准确⼀些。函数就是⼀个完成某项特定的任务的⼀⼩段代码,这段代码是有特殊的写法和调⽤⽅法的。
其实⼤家在前⾯学习的时候,就⻅过函数了,⽐如:main函数、scanf函数、printf函数、pow函数、sqrt函数等。C/C++语⾔程序其实是由若⼲个⼩的函数组合⽽成的,也可以说:⼀个⼤的计算任务可以分解成若⼲个较⼩的函数(对应较⼩的任务)完成。同时⼀个函数如果能完成某项特定任务的话,这个函数也是可以复⽤的,提升了开发软件的效率。

#include <iostream>  
using namespace std;  
int main()
{  int arr[10] = { 0 };  //打印数组的内容  //给数组的元素赋值为1~10  //打印数组  return 0;  
}

如果没有函数,我们能写出的代码如下的代码1,其中橙⾊部分的内容和绿⾊部分的代码是重复的,⽬的就是打印数组内容,那如果我能把这部分封装成⼀个函数,在需要的时候调⽤,就⽅便很多,这就是代码2

//代码1  
#include<iostream>  
using namespace std;  
int main()  
{  int arr[10] = { 0 };  //打印数组的内容  int i = 0;  for (i = 0; i < 10; i++)  {  cout << arr[i] << " ";  }  cout << endl;  //给数组的元素赋值为1~10  for (i = 0; i < 10; i++)  {  arr[i] = i + 1;  }  //打印数组  for (i = 0; i < 10; i++)  {  cout << arr[i] << " ";  }  cout << endl;  return 0;  
}
//代码2  
#include<iostream>  
using namespace std;  
void print_arr(int arr[])  
{  int i = 0;  for (i = 0; i < 10; i++)  {  cout << arr[i] << " ";  }  cout << endl;  
}  int main()  
{  int arr[10] = { 0 };  //打印数组的内容  print_arr(arr);  //给数组的元素赋值为1~10  for (int i = 0; i < 10; i++)  {  arr[i] = i + 1;  }  //打印数组  print_arr(arr);return 0;  
}

在代码2中 print_arr 就是我们⾃⼰定义的⼀个函数,使⽤函数能有什么好处呢?

  1. 模块化开发,⼀个⼤的功能,总能拆分成各种⼦功能,每个⼦功能都可以设计成⼀个函数,每个函数可以作为⼀个独⽴的模块存在,程序的逻辑更加清晰,逻辑关系更加明确。
  2. 代码可以复⽤,只要根据需要定义出⼀个函数,需要这个功能的地⽅,直接调⽤函数就⾏,降低了代码的冗余,提升了开发效率。
  3. ⽅便多个程序员之间协作开发,⽅便程序的多个模块之间互相交互。
  4. 熟悉函数的使⽤之后,代码的编写、阅读、调试、维护都变得更加容易。

函数的分类

在C/C++中,函数⼀般分为库函数和⾃定义函数

库函数

printf 、 scanf 都是库函数,库函数是标准库中提供的现成的函数,我们只要学习函数的功能,就能直接使⽤。有了库函数,⼀些常⻅的功能就不需要程序员⾃⼰实现了,⼀定程度提升了效率;同时库函数的质量和执⾏效率上都更有保证。
编译器的标准库中提供了⼀系列的库函数,这些库函数根据功能的划分,都在不同的头⽂件中进⾏了声明。
库函数的学习和查阅⼯具很多,⽐如:
C/C++官⽅参考⼿册:https://zh.cppreference.com/w/cpp/header
C/C++第三⽅⽹站:https://legacy.cplusplus.com/reference/
库函数中有数学相关的,有⽇期相关的,有算法相关的等等。这些库函数相关的信息都有⾃⼰对应的头⽂件,每⼀个头⽂件中都包含了相关的⼀组函数和类型等信息,库函数的学习不⽤着急⼀次性全部学会,慢慢学习,各个击破就⾏。
C++是兼容C语⾔,所以在C++中也包含了⼀些来⾃C语⾔的头⽂件,这些头⽂件的后缀是 .h ,如果需要也可以直接包含使⽤;有⼀些来⾃C语⾔的头⽂件,在C++中会在原来C语⾔的头⽂件进⾏了封装,在C++程序中更推荐C++的头⽂件写法,以下是常⻅C和C++对应的头⽂件:

解释C头文件C++头文件
常用数学函数<math.h><cmath>
浮点类型的极限<float.h><cfloat>
C风格输入输出<stdio.h><cstdio>
字符串处理<string.h><string>
库函数使⽤举例
sqrt
double sqrt (double x);
  • sqrt 是函数名
  • x 是函数的参数,表⽰调⽤ sqrt 函数需要传递⼀个 double 类型的值
  • double 是返回值类型,表⽰函数计算的结果是 double 类型的值
作用

Compute square root计算平⽅根
Returns the square root of x.(返回平⽅根)

头文件

库函数是在标准库中对应的头⽂件中声明的,所以库函数的使⽤,务必包含对应的头⽂件,不包含是可能会出现⼀些问题的。

#include <iostream>  
#include <cmath> //数学函数头⽂件,不包含则⽆法使⽤sqrt函数  
using namespace std;  
int main()  
{  double d = 16.0;  double r = sqrt(d);  cout << r << endl;  return 0;  
}

![[Pasted image 20250309151822.png]]

⾃定义函数

了解了库函数,其实库函数的功能是有限的,实际开发过程中还是得根据需要将代码封装成⾃定义的函数;⾃定义的函数就是⾃⼰设计和实现的函数

函数的语法形式
ret_type fun_name(形式参数)  
{ }
  • ret_type 是⽤来表⽰函数计算结果的类型,有时候返回类型可以是 void ,表⽰什么都不返回
  • fun_name 是为了⽅便使⽤函数;就像⼈的名字⼀样,有了名字⽅便称呼,函数有了名字⽅便调⽤,所以函数名尽量要根据函数的功能起的有意义。
  • 函数的参数就相当于⼯⼚加⼯需要的原材料,函数的参数也可以是 void ,明确表⽰函数没有参数。如果有参数,多个参数⽤逗号隔开,每个参数要分别交代清楚参数的类型和名字。
  • {} 括起来的部分被称为函数体,函数体就是完成计算的过程。
函数定义

写⼀个加法函数,完成2个整型变量的加法操作

#include<iostream>  
using namespace std;  
int main()  
{  int a = 0;  int b = 0;  //输⼊  cin >> a >> b;  //任务:调⽤加法函数,完成a和b的相加  //求和的结果放在r中  //to do  //输出  cout << r << endl;  return 0;  
}

给函数取名: Add ,函数 Add 需要接收2个整型类型的参数,函数计算的结果也是整型

#include<iostream>  
using namespace std;  
//这就是函数的定义  
int Add(int x, int y)  
{  int z = 0;  z = x + y;  return z;  
}  int main()  
{  int a = 0;  int b = 0;  //输⼊  cin >> a >> b;  //调⽤加法函数,完成a和b的相加  //求和的结果放在r中  int r = Add(a, b);  //输出  cout << r << endl;  return 0;  
}

Add 函数也可以简化为

int Add(int x, int y)  
{  
return x + y;  
}

![[Pasted image 20250309152147.png]]

函数的参数部分需要交代清楚:参数个数,每个参数的类型是啥,形参的名字叫啥

函数参数和返回值

实参和形参

实际上,在函数定义和使⽤的过程中,函数的参数要被分为两种:

  • 实际参数,简称实参
  • 形式参数,简称形参
实参

实际参数就是真实传递给函数的参数。
在上⾯代码中,第4~6⾏是 Add 函数的定义,有了函数后,再第19⾏调⽤ Add 函数的。
我们把第19⾏调⽤ Add 函数时,传递给函数的参数 a 和 b ,称为实际参数,简称实参。

形参

在上⾯代码中,第4⾏定义函数的时候,在函数名 Add 后的括号中写的 x 和 y ,称为形式参数,简称形参。
为什么叫形式参数呢?实际上,如果只是定义了 Add 函数,⽽不去调⽤的话, Add 函数的参数 x 和 y 只是形式上存在的,不会向内存申请空间,不会真实存在的,所以叫形式参数。形式参数只有在函数被调⽤的过程中为了存放实参传递过来的值,才向内存申请空间,这个过程就是形式的实例化。

实参和形参的关系

虽然我们提到了实参是传递给形参的,他们之间是有联系的,但是形参和实参各⾃是独⽴的内存空间。
这个现象是可以通过调试来观察的。请看下⾯的代码和调试演⽰:

#include<iostream>  
using namespace std;  
int Add(int x, int y)  
{  int z = 0;  z = x + y;  return z;  
}
int main()  
{  int a = 0;  int b = 0;  //输⼊  cin >> a >> b;  //调⽤加法函数,完成a和b的相加  //求和的结果放在r中  int r = Add(a, b);  //输出  cout << r << endl;  return 0;  
}

![[Pasted image 20250309152421.png]]

我们在调试的可以观察到, x 和 y 确实得到了 a 和 b 的值,但是 x 和 y 的地址和 a 和 b 的地址不⼀样的,当 a 和 b 传参给形参x和y的时候, x 和 y 只是得到了 a 和 b 的值,他们得有⾃⼰独⽴的空间。所以我们可以理解为形参是实参的⼀份临时拷⻉。
![[Pasted image 20250309153212.png]]

函数传参

数组做函数参数

在使⽤函数解决问题的时候,难免会将数组作为参数传递给函数,在函数内部对数组进⾏操作。⽐如:写⼀个函数将⼀个整型数组的内容,全部置为 -1 ,再写⼀个函数打印数组的内容。

#inculude <iostream>  
using namespace std;  
int main()  
{  int arr[] = {1,2,3,4,5,6,7,8,9,10};  set_arr(); //设置数组内容为-1  print_arr(); //打印数组内容  return 0;  
}

这⾥的 set_arr 函数要能够对数组内容进⾏设置,就得把数组作为参数传递给函数,同时函数内部在设置数组每个元素的时候,也得遍历数组,需要知道数组的元素个数。所以我们需要给 set_arr传递2个参数,⼀个是数组,另外⼀个是数组的元素个数。仔细分析 print_arr 也是⼀样的,只有拿到了数组和元素个数,才能遍历打印数组的每个元素。

int main()  
{  int arr[] = {1,2,3,4,5,6,7,8,9,10};  int sz = sizeof(arr)/sizeof(arr[0]);  set_arr(arr, sz);   //设置数组内容为-1print_arr(arr, sz);   //打印数组内容return 0;
}

数组作为参数传递给了 set_arr 和 print_arr 函数了,那这两个函数应该如何设计呢?
这⾥我们需要知道数组传参的⼏个重点知识:

  • 函数的实参的名字和形参的名字可以相同,也可以不同
  • 函数的形式参数要和函数的实参个数匹配
  • 函数的实参是数组,形参也写成数组形式的
  • 形参如果是⼀维数组,数组⼤⼩可以省略不写
  • 形参如果是⼆维数组,⾏可以省略,但是列不能省略
  • 数组传参,形参是不会创建新的数组的
  • 形参操作的数组和实参的数组是同⼀个数组
void set_arr(int arr[], int sz)  
{  int i = 0;  for(i = 0; i < sz; i++)  {  arr[i] = -1;  }  
}  
void print_arr(int arr[], int sz)  
{  int i = 0;  for(i = 0; i < sz; i++)  {  cout << arr[i] << " ";  }  cout << endl;  
}
字符串做函数参数

那如果将字符串做函数参数呢?其实也很简单,直接在形参的部分使⽤字符串来接收就可以。这⾥的形参 s 也是实参 s 的⼀份临时拷⻉,对形参的修改不能影响实参。

void test(string s)  
{  cout << s << endl;  
}  
int main()  
{  string s("hello world");  test(s);  
}
全局变量不⽤传参

全局变量的作⽤域很⼤,在整个程序中都可以使⽤,那么只要把变量、数组等定义成全局变量,在函数中使⽤,是可以不⽤传参的,在竞赛中为了⽅便经常使⽤,但是在软件⼯程中很少这么使⽤

#include <iostream>  
using namespace std;  
int arr[10] = { 0 };  void print_arr()  
{  int i = 0;  for (i = 0; i < 10; i++)  {  cout << arr[i] << " ";  }  cout << endl;  
}  int main()  
{  //打印数组的内容  print_arr();  //给数组的元素赋值为1~10  for (int i = 0; i < 10; i++)  {  arr[i] = i + 1;}  //打印数组  print_arr();  return 0;  
}

有时候变量或者数组,定义成全局的时候,是不能解决问题,⽐如:递归等场景,这时候,就得考虑传参的问题

相关文章:

NO.32十六届蓝桥杯备战|函数|库函数|自定义函数|实参|形参|传参(C++)

函数是什么 数学中我们其实就⻅过函数的概念&#xff0c;⽐如&#xff1a;⼀次函数 y kx b &#xff0c;k和b都是常数&#xff0c;给⼀个任意的x &#xff0c;就得到⼀个 y 值。其实在C/C语⾔中就引⼊了函数&#xff08;function&#xff09;的概念&#xff0c;有些翻译为&a…...

计算机视觉算法实战——老虎个体识别(主页有源码)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​ ​​​ 1. 领域介绍 老虎个体识别是计算机视觉中的一个重要应用领域&#xff0c;旨在通过分析老虎的独特条纹图案&#xff0c;自动识别和区…...

【移动WEB开发】rem适配布局

目录 1. rem基础 2.媒体查询 2.1 语法规范 2.2 媒体查询rem 2.3 引入资源&#xff08;理解&#xff09; 3. less基础 3.1 维护css的弊端 3.2 less介绍 3.3 less变量 3.4 less编译 3.5 less嵌套 3.6 less运算 4. rem适配方案 4.1 rem实际开发 4.2 技术使用 4.3 …...

25年携程校招社招求职能力北森测评材料计算部分:备考要点与误区解析

在求职过程中&#xff0c;能力测评是筛选候选人的重要环节之一。对于携程这样的知名企业&#xff0c;其能力测评中的材料计算部分尤为关键。许多求职者在备考时容易陷入误区&#xff0c;导致在考试中表现不佳。本文将深入解析材料计算部分的实际考察方向&#xff0c;并提供针对…...

【Elasticsearch入门到落地】9、hotel数据结构分析

接上篇《8、RestClient操作索引库-基础介绍及导入demo》 上一篇我们介绍了RestClient的基础&#xff0c;并导入了使用Java语言编写的RestClient程序Demo以及将要分析的数据库。本篇我们就要分析导入的宾馆数据库tb_hotel表结构的具体含义&#xff0c;并分析如何建立其索引库。 …...

现代互联网网络安全与操作系统安全防御概要

现阶段国与国之间不用对方路由器&#xff0c;其实是有道理的&#xff0c;路由器破了&#xff0c;内网非常好攻击&#xff0c;内网共享开放端口也非常多&#xff0c;更容易攻击。还有些内存系统与pe系统自带浏览器都没有javascript脚本功能&#xff0c;也是有道理的&#xff0c;…...

轻量级TCC框架的实现

现有seata、tcc-transaction等tcc框架实现都较为重量级&#xff0c;今天主要带来一种轻量级的实现&#xff0c;大概只用了1200行代码实现。不依赖具体框架grpc、http、dubbo等&#xff0c;只需要业务系统按照标准化实现Try、Commit、Cancel实现接口即可。 已解决悬挂、幂等、空…...

共绘智慧升级,看永洪科技助力由由集团起航智慧征途

在数字化洪流汹涌澎湃的当下&#xff0c;企业如何乘风破浪&#xff0c;把握转型升级的黄金机遇&#xff0c;已成为所有企业必须直面的时代命题。由由集团&#xff0c;作为房地产的领航者&#xff0c;始终以前瞻视野引领变革&#xff0c;坚决拥抱数字化浪潮&#xff0c;携手数字…...

小程序开发总结

今年第一次帮别人做小程序。 从开始动手到完成上线&#xff0c;一共耗时两天。AI 让写代码变得简单、高效。 不过&#xff0c;小程序和 Flutter 等大厂开发框架差距实在太大&#xff0c;导致我一开始根本找不到感觉。 第一&#xff0c;IDE 不好用&#xff0c;各种功能杂糅在…...

元脑服务器:浪潮信息引领AI基础设施的创新与发展

根据国际著名研究机构GlobalData于2月19日发布的最新报告&#xff0c;浪潮信息在全球数据中心领域的竞争力评估中表现出色&#xff0c;凭借其在算力算法、开放加速计算和液冷技术等方面的创新&#xff0c;获得了“Leader”评级。在创新、增长力与稳健性两个主要维度上&#xff…...

uniapp+node+mysql接入deepseek实现流式输出

node import express from express; import mysql from mysql2; import cors from cors; import bodyParser from body-parser; import axios from axios; import { WebSocketServer } from ws; // 正确导入 WebSocketServerconst app express();// Middlewares app.use(cors…...

PHP MySQL 创建数据库

PHP MySQL 创建数据库 引言 在网站开发中&#xff0c;数据库是存储和管理数据的核心部分。PHP 和 MySQL 是最常用的网页开发语言和数据库管理系统之一。本文将详细介绍如何在 PHP 中使用 MySQL 创建数据库&#xff0c;并对其操作进行详细讲解。 前提条件 在开始创建数据库之…...

UE4 World, Level, LevelStreaming从入门到深入

前言 在《塞尔达传说&#xff1a;旷野之息》中&#xff0c;玩家攀上初始高塔的瞬间&#xff0c;目光所及的山川湖泊皆可抵达&#xff1b;在《艾尔登法环》中&#xff0c;黄金树的辉光始终悬于地平线之上&#xff0c;指引玩家穿越无缝衔接的史诗战场。这些现代游戏杰作背后的核…...

3月8日实验

拓扑&#xff1a; 需求&#xff1a; 1.学校内部的HTTP客户端可以正常通过域名www.baidu.com访问到白度网络中的HTTP服务器 2.学校网络内部网段基于192.168.1.0/24划分&#xff0c;PC1可以正常访问3.3.3.0/24网段&#xff0c;但是PC2不允许 3.学校内部路由使用静态路由&#…...

IO多路复用实现并发服务器

一.select函数 select 的调用注意事项 在使用 select 函数时&#xff0c;需要注意以下几个关键点&#xff1a; 1. 参数的修改与拷贝 readfds 等参数是结果参数 &#xff1a; select 函数会直接修改传入的 fd_set&#xff08;如 readfds、writefds 和 exceptfds&#xf…...

【漫话机器学习系列】122.相关系数(Correlation Coefficient)

深入理解相关系数&#xff08;Correlation Coefficient&#xff09; 1. 引言 在数据分析、统计学和机器学习领域&#xff0c;研究变量之间的关系是至关重要的任务。我们常常想知道&#xff1a;当一个变量变化时&#xff0c;另一个变量是否也会随之变化&#xff1f;如果会&…...

控制系统分类

文章目录 定义与特点1. 自治系统&#xff08;Autonomous System&#xff09;与非自治系统&#xff08;Non-Autonomous System&#xff09;自治系统非自治系统 2. 线性系统&#xff08;Linear System&#xff09;与非线性系统&#xff08;Nonlinear System&#xff09;线性系统非…...

文档操作方法得合理使用

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…...

Python asyncIO 面试题及参考答案 草

目录 如何正确定义一个协程函数?直接调用协程会引发什么问题? 使用 async def 定义的协程与普通函数执行流程有何本质区别? 解释 asyncio.run () 的作用及与手动管理事件循环的差异 为什么协程中必须使用 await 而非 yield 挂起操作? 写出通过 async for 实现异步迭代器…...

计算机网络——交换机

一、什么是交换机&#xff1f; 交换机&#xff08;Switch&#xff09;是局域网&#xff08;LAN&#xff09;中的核心设备&#xff0c;负责在 数据链路层&#xff08;OSI第二层&#xff09;高效转发数据帧。它像一位“智能交通警察”&#xff0c;根据设备的 MAC地址 精准引导数…...

【Frida Android】实战篇:Frida-Trace 进阶追踪——JNI 函数参数捕获与修改

1. 为什么需要捕获JNI函数参数&#xff1f; 在Android安全分析和逆向工程中&#xff0c;JNI函数往往是关键突破口。很多应用会把核心逻辑放在native层实现&#xff0c;比如加密算法、授权验证、敏感数据处理等。单纯Hook Java层方法可能无法触及这些关键逻辑&#xff0c;这时候…...

Axure Mac全汉化3步法:设计师效率提升实战指南

Axure Mac全汉化3步法&#xff1a;设计师效率提升实战指南 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包&#xff0c;不定期更新。支持 Axure 9、Axure 10。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 你是否曾…...

信创实践:Nacos 2.4.1 与人大金仓 Kingbase 的深度适配与性能调优

1. 为什么需要从MySQL迁移到人大金仓Kingbase&#xff1f; 最近几年&#xff0c;国产数据库的发展速度确实让人惊喜。作为一线开发者&#xff0c;我亲身体验了从MySQL迁移到人大金仓Kingbase的全过程。说实话&#xff0c;刚开始心里也没底&#xff0c;毕竟MySQL用得太顺手了。但…...

【FastAPI 2.0流式AI响应终极指南】:20年架构师亲授异步SSE/Chunked Transfer实战避坑清单

第一章&#xff1a;FastAPI 2.0流式AI响应面试概览在现代AI应用开发中&#xff0c;面试场景下的实时交互体验正成为关键评估维度。FastAPI 2.0 引入了对原生异步流式响应&#xff08;StreamingResponse&#xff09;的深度优化&#xff0c;支持 Server-Sent Events&#xff08;S…...

语音合成延迟优化:IndexTTS-2-LLM网络IO调优实战

语音合成延迟优化&#xff1a;IndexTTS-2-LLM网络IO调优实战 1. 为什么语音合成总在“等”&#xff1f;从用户卡顿说起 你有没有试过在语音合成页面点下“开始合成”&#xff0c;然后盯着进度条数秒——明明只是一句话&#xff0c;却要等3秒、5秒&#xff0c;甚至更久&#x…...

避坑指南:S-Function参数传递中mxArray操作的3个典型错误

S-Function开发实战&#xff1a;mxArray参数传递的3大陷阱与防御性编程技巧 在Simulink的S-Function开发中&#xff0c;mxArray作为MATLAB与C/C之间的数据桥梁&#xff0c;其正确操作直接关系到模块的稳定性和可靠性。许多开发者在参数传递环节频繁遭遇段错误、内存泄漏和类型误…...

从Windows命令行小白到Scoop社区贡献者:我的完整成长指南

从Windows命令行小白到Scoop社区贡献者&#xff1a;我的完整成长指南 【免费下载链接】Scoop A command-line installer for Windows. 项目地址: https://gitcode.com/gh_mirrors/sc/Scoop 想要在Windows系统上快速安装和管理软件&#xff1f;厌倦了繁琐的图形界面安装过…...

TranslucentTB终极配置指南:轻松打造个性化Windows任务栏透明效果

TranslucentTB终极配置指南&#xff1a;轻松打造个性化Windows任务栏透明效果 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB Translucen…...

OpenClaw+GLM-4.7-Flash学习助手:自动整理课程笔记与生成复习题

OpenClawGLM-4.7-Flash学习助手&#xff1a;自动整理课程笔记与生成复习题 1. 为什么需要自动化学习助手&#xff1f; 去年备考研究生时&#xff0c;我每天要处理3-4小时的课程视频。最痛苦的不是听课本身&#xff0c;而是课后整理&#xff1a;手动截取关键片段、转录字幕、标…...

智能记账本:OpenClaw+Qwen3.5-9B自动归类信用卡消费邮件

智能记账本&#xff1a;OpenClawQwen3.5-9B自动归类信用卡消费邮件 1. 为什么需要自动化记账工具 每次收到银行消费短信时&#xff0c;我都会陷入两难&#xff1a;手动记账太繁琐&#xff0c;不记账又会导致月度消费分析失真。传统记账软件需要手动输入金额和分类&#xff0c…...