C++——条件判断

if语句的三种形态

形态1:

 

#include <iostream>

using namespace std;

int main(void) {

      int salary;

     

      cout << "你月薪多少?";

      cin >> salary;

     

      if (salary < 20000) {

            cout << "你是一个好人, 还不想谈恋爱." << endl;

      }

     

      system("pause");

      return 0;

}

形态2:

 

#include <iostream>

using namespace std;

int main(void) {

      int salary;

     

      cout << "你月薪多少?" << endl;

      cin >> salary;

     

      if (salary < 20000) {

            cout << "你是一个好人, 还不想谈恋爱." << endl;

      } else {

            cout << "我没有什么要求, 只要你对我好就行." << endl;

      }

     

      system("pause");

      return 0;

}

形态3

#include <iostream>

#include <string>

#include <stdio.h>

using namespace std;

int main(void)

{

      int salary;

      string houseRet;  //是否有房

      string carRet; //是否有车

      cout << "你的月薪是多少?" << endl;

      cin >> salary;

      cout << "你有房吗?" << endl;

      cin >> houseRet;

      cout << "你有车吗?" << endl;

      cin >> carRet;

      if (salary < 20000) {

            cout << "你是一个好人, 我现在还不想谈恋爱." << endl;

      } else if (houseRet == "有") {

            cout << "我其实没有什么要求,只要你对我好." << endl;

      } else if (carRet == "有") {

            cout << "还不错哦, 以后再联系." << endl;

      } else {

            cout  << "有缘再见." << endl;

      }

      system("pause");

      return 0;

}

if语句的嵌套

实例:

求3个数的最大值。

#include <iostream>

#include <windows.h>

using namespace std;

int main(void) {

       int x, y, z;

       cout << "请输入3个整数: " << endl;

       cin >> x  >> y >> z;

       if (x > y) {

              if (x > z) {

                     cout << "最大值是: " << x << endl;

              } else {

                     cout << "最大值是: " << z << endl;

              }

       } else {

              if (y > z) {

                     cout << "最大值是: " << y << endl;

              } else {

                     cout << "最大值是: " << z << endl;

              }

       }

       system("pause");

       return 0;

}

嵌套的常见错误(配对错误)

与前面最近的,而且还没有配对的if匹配

 错误避免方法:

  1. 严格使用 { }
  2. 先写{}再写里面的内容
  3. 保持良好的“缩进”

switch的基本使用

语法:

switch  (x) {

case  表达式1:

  语句1

     break;

case  表达式2:

     语句2

     break;

case  表达式3:

     语句3

     break;

default表达式1:

     语句1

     break;

}

流程图:

 demo

#include <iostream>

#include <windows.h>

using namespace std;

int main(void) {

       int num;

        

       cout << "请输入一个数字: ";

       cin >> num;

       switch (num) {

       case 1:

              cout << "星期一:包子" << endl;

              break;

       case 2:

              cout << "星期二:馒头" << endl;

              break;

       case 3:

              cout << "星期三:稀饭" << endl;

              break;

       case 4:

              cout << "星期四:白菜" << endl;

              break;

       case 5:

              cout << "星期五:土豆" << endl;

              break;

       case 6:

       case 7:

              cout << "周末:休息" << endl;

              break;

       default:

              cout << "请输入1-7" << endl;

              break;

       }

       system("pause");

       return 0;

}

switch和if的选择

switch: 用于int/char/long/long long 类型的变量,和多个特定常量的判断处理。

        (float和double类型不可以)

if: 适用于各种逻辑判断

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
目录 第1篇初级篇 第1章 初识C++ 1.1 c++简介 1.2 C++与C的区别 1.3 学习c++之前需要先学C吗 1.4 c++与其他语言的区别 1.5 c++的版本以及安装问题 第2章 做一个最简短的C4-+程序 2.1 简单的屏幕输出小程序 2.2 输出语句的使用 2.3 std::介绍 2.4 iostream与iostream.h的区别 2.5 重名问题 2.6 注释 2.7 总结 第3章 初步了解函数 3.1 一个简单的函数 3.2 函数的传参 3.3 函数的返回值、参数与变量 3.4.函数的声明与定义 3.5 局部变量 3.6 全局变量 3.7 总结 第4章 C4-+数据类型 4.1 变量的定义 4.2 将变量及数据存储在内存中 4.3 布尔型变量 4.4 字符型变量 4.5 wchart双字符型变量 4.6 整型概述 4.7 整型变量的定义 4.8 浮点型变量 4.9 常量 4.10枚举型常量 第5章 if语句与运算符 5.1 语句的定义 5.2 块的定义 5.3 表达式的定义 5.4 运算符的定义 5.4.1 赋值运算符的定义 5.4.2 数学运算符的定义 5.4.3 赋值运算符与数学运算符的联合 5.5 自加与自减 5.5.1 前置 5.5.2 后置 5.6 表达式的优先级 5.7 关系运算符 5.8 if语句 5.8.1 else语句 5.8.2 elseif语句 5.8.3 if语句的嵌套 5.9 逻辑运算符及其使用 5.9.1 逻辑“与” 5.9.2 逻辑“或” 5.9.3 逻辑“非” 5.9.4 逻辑运算符的优先级 5.9.5 运算式的真假关系 5.1 0三目运算符 5.1 0.1 三目运算符的优先问题 5.1 0.2 三目运算符的使用问题 5.1 0.3 三目运算符的型别问题 5.1 0.4 三目运算符在字符型变量中的应用 5.1 1复杂嵌套的if语句 5.1 2总结 第6章 面向对象 6.1 面向对象程序语言的主要特征 6.2 类、对象和成员 6.3 类、对象和成员的使用方法及区别 6.3.1 声明一个类 6.3.2 命名习惯 6.3.3 定义一个对象 6.3.4 类与对象的区别 6.3.5 对象与成员的关系 6.3.6 不要给类赋值 6.3.7 对象只能调用类中存在的方法 6.4 公有 6.5 私有 6.6 成员函数的声明和定义 6.7 内联函数 6.7.1 普通内联函数 6.7.2 内联成员函数 6.8 头文件与源文件 6.9 const成员函数 6.10构造函数 6.11默认构造函数 6.12析构函数 6.13析构对象数组 6.14总结 第7章 循环语句 7.1 循环语句的前身——goto语句 7.2 慎用goto语句 7.3 while语句 7.3.1 带运算符的while语句 7.3.2 以字符为条件的while语句 7.3.3 限定while循环的次数 7.3.4 continue语句 7.3.5 break语句 7.3.6 永不休止的while循环 7.4. do……while循环 7.5 for循环 7.5.1 灵活的for循环 7.5.2 条件为空的for循环 7.5.3 执行为空的for循环 7.5.4 嵌套的for循环 7.6 switch语句 7.6.1 switch语句常见错误 7.6.2 switch的菜单功能 7.7 总结 第8章 指针 8.1 什么是地址 8.2 用指针来保存地址 8.2.1 空指针 8.2.2 指针与变量类型 8.2.3 用指针来访问值 8.2.4 指针地址、指针保存的地址和 该地址的值 8.2.5 指针对数值的操作 8.2.6 更换指针保存的地址 8.3 为什么使用指针 8.3.1 栈和堆 8.3.2 用指针创建堆中空间 8.3.3 用指针删除堆中空间 8.4 动态内存 8.4.1 内存泄漏 8.4.2 在堆中创建对象 8.4.3 在堆中删除对象 8.4.4 访问堆中的数据成员 8.4..5 在构造函数中开辟内存空间 8.4.6 对象在栈与堆中的不同 8.5 this指针 8.6 指针的常见错误 8.7 指针运算 8.7.1 指针的加减运算 8.7.2 指针的赋值运算 8.7 _3指针的相减运算 8.7.4 指针的比较运算 8.8 指针 8.8.1 常量指针 8.8.2 指向常量的指针 8.8.3 指向常量的常指针 8.9 总结 第9章 引用 9.1 什么是引用 9.1.1 引用的地址 9.1.2 引用就是别名常量 9.1.3 引用对象 9.1 4空引用 9.2 函数的参数传递 9.2.1 按值传递 9.2.2 按址传递 9.2.3 按别名传递 9.2.4 让函数返回多个值 9.3 传递对象 9.3.1 按值来传递对象 9.3.2 利用指针来传递对象 9.3.3 利用cost指针来传递对象 9.3.4 利用引用来传递对象 9.3.5 到底是使用引用还是指针 9.3.6 引用和指针可以一块用 9.4 引用应注意的问题 9.4.1 引用容易犯的错误 9.4.2 引用一个按值返回的堆中对象 9.4 -3引用一个按别名返回的堆中对象 9.4.4 在哪里创建,就在哪里释放 9.5 总结 第10章 深入函数 10.1 函数重载 10.1.1 普通函数的重载 10.1.2 成员函数的重载 10.2 函数的默认参数 10.3 重载构造函数 10.3.1 成员变量的赋值与初始化 10.3.2 成员变量的初始化与构造函数 10.3.3 复制构造函数 10.3.4 构造函数和new运算符 10.3.5 再谈默认构造函数 10.4.析构函数和delete运算符 10.4..1 默认析构函数 10.4.2 调用构造函数进行类型转换 10.5 浅层复制构造函数 10.6 深层复制构造函数 第11章 运算符重载 11.1 运算符重载 11.2 在成员函数中实现自加 11.3 重载前置自加运算符 11.4 创建临时对象 11.5 创建无名临时对象 11.6 取消创建临时对象 11.7 重载后置自加运算符 11.8 重载加法运算符函数operator+ 11.9 重载赋值运算符函数operator 11.10转换类型运算符 11.10.1 温习调用构造函数实现的类型转换 11.10.2 通过构造函数将变量转换为一个对象的成员变量 11.10.3 通过operator关键字进行转换 11.11什么可以重载,什么不可以重载 第12章 继承 12.1 什么是继承和派生 12.1.1 复杂的继承和派生 12.1.2 继承和派生如何在C++中实现 12.1.3 继承的种类及语法 12.1.4 单一继承 12.2 公有型、保护型和私有型 12.3 访问权限 12.4 多重继承 12.5 继承的构造与析构 12.6 合理利用基类构造函数 12.7 继承和重载的两义性问题 12.7.1 多重继承容易产生两义性 12.7.2 继承中的重载 12.7.3 两义性的归属问题 12.7.4 减少两义性产生的混淆问题 12.7.5 虚基类不会产生两义性 12.8 总结 第13章 虚函数 13.1 指向子对象的父指针 13.2 虚函数 13.3 拳击游戏 13.4 继承是否可以实现多态性 13.5 在编译时的静态联编 13.6 在运行时的静态联编 13.7 在运行时的动态联编 13.8 在编译时的动态联编 13.9 调用虚函数 13.9.1 在虚函数中调用成员函数 13.9.2 3种调用虚函数的方式比较 13.10被继承的虚函数仍然是虚函数 13.11系统是如何调用虚函数的 13.12在虚函数中使用成员名限定 13.13虚析构函数 13.14总结 第14章 数组 14.1 数组的基本用法 14.1.1 什么是数组 14.1.2数组元素 14.1.3数组下标越界 14.1.4 倒序输出 14.1.5 将数组的下标定义为常量 14.1.6 手动操作数组元素 14.1.7 数组的初始化 14.2 数组的用途 14.2.1 求平均考试成绩 14.2.2 兔子繁殖问题 14.2.3 数字排序问题 14.3 数组在内存中的分布 14.4.输出数组名 14.5 数组名与函数 14.6 传递与接收 14.7 数组与函数 14.7.1 函数传参实例一——求数组所有元素的和 14.7.2 函数传参实例二——用递增法查找数据 14.7.3 函数传参实例三——用二分算法查找数据 14.7.4 函数传参实例四——判断数组是否按照顺序排列 14.7.5 函数传参实例五——判断数组排列方式后执行不同的函数 14.8 数组在对象中的传参 14.9 对象数组 14.10 在对象数组中初始化成员变量 14.11 指针数组 14.12 枚举常量与数组 14.13 多维数组 14.14 多维数组的初始化 14.15 字符数组 14.16 重载数组下标操作符 14.17 总结 第15章 链表 15.1 声明链表结构 15.2 简单的图书链表 15.2.1 图书链表 15.2.2 类的链表 15.3 动态链表 15.3.1 动态链表的建立 15.3.2 解决输入字符造成死循环的问题 15.3.3 动态链表的显示 15.3.4 动态链表的删除 第16章 多态性 第17章 类的特殊成员 第2篇 高级篇 第19章 代码重用 第20篇 高级篇 第20章 友元类与嵌套类 第21章 流 第22章 命名空间 第23章 模板 第24章 异常和错误处理 第25章 补充知识 附录A ASCII码对照表 附录B C++的关键字 附录C C++常用头文件列表 附录D 运算符的优先级 后记
c++11智能指针解析——揭开底层⾯纱,完整理解智能指针 昨天跟同事⼩⼩的研究了下关于不同平台下的字节对齐问题,起因是遇到了⼀个坑,vs上没有问题,在安卓上却崩溃了。找了半天后发现是 c++字节补齐问题,期间包括使⽤#pragma pack(1)来限定字节对齐⽅式等各种条件,也是把我们搞的七晕⼋素,总算是进⼀步了解了c++对 象结构以及编译器的操作(有机会的话也补充下字节对齐的理解)。进⽽想到了智能指针,稍微了解下。第⼀次接触智能指针,天知道⼤学 期间⾃⼰有多不努⼒,很多知识点都得留到现在来补齐,所以还是做做笔记吧。 简断截说:c++的⼊门坑点⼤家都是有⽬共睹的,⽆⾮就是指针的理解不深导致⼀些野指针,内存泄露等问题,所以就不赘述。智能指针正 好能够弥补这些问题,因为它本质是存放在栈的模板对象,只是在栈内部包了⼀层指针。⽽栈在其⽣命周期结束时,其中的指针指向的堆内 存也⾃然被释放了。因⽽实现了智能管理的效果,不需要考虑内存问题了,其实有点类似某种单例写法,程序运⾏结束,也不⽤考虑单例对 象内存问题。 本次讨论:c++11之前的auto_ptr; c++11新加的unique_ptr, shared_ptr以及weak_ptr。 头⽂件:#include <memory> 1.auto_ptr auto_ptr是我第⼀个看的智能指针,也是标准库⾥的智能指针,有许多缺陷。 ⾸先看下结构: 从图中可以看书也是⼀个模板,使⽤⽅法⼤致类似于vector模板。如下: class Base1 { //__int64 ss; //public: bool dd; int m_itest; public: virtual void func(){ cout << "test successed" << endl; } };//先写⼀个测试类 main函数如下: int _tmain(int argc, _TCHAR* argv[]) { auto_ptr <Base1> base1(new Base1);//可理解为先声明⼀个名为base1的Base1类型智能指针,然后再base1⾥⾯管理new Base1 if (base1.get())//get是智能指针的函数,返回当前当前智能指针对象,即⽤以判断是否为空 { base1->func(); } return 0; } 正常⽤法是这样,然⽽我们可以再仔细翻看下底层: 从上图可以看出,该智能指针成员函数也与vector相似,很容易得出 1、base1.get():返回当前指针对象; 2、base1.release():清空当前智能指针对象,并返回类型指针。所以假如我们要正常删除,那么需要这样: Base1*base2 = base1.release(); delete base2; 很⿇烦对不对,没关系,还有第三个函数呢 3、base1.reset():从图中可看出,是重置智能指针,即把内存删除,且智能指针指向空,但类型不变,所以可以这样安全便捷地删除: base1.reset(); 然⽽继续看,还有⼀个问题: auto_ptr还重载了等号操作符,由图可知意思是把赋值智能指针的内存交给被赋值智能指针,即如下意思: auto_ptr <Base1> base2; base2 = base1;//将base1的控制权转交给base2,且base1清空了 base2->func(); 因此这样就有些问题,控制权可以随便转换,但是只有⼀个在⽤,⽤起来会受到诸多限制,所以有了下⾯的智能指针。 介绍之前先上⼀张别⼈的表格,来源:,这是c++11中的智能指针与boost库中的⽐较,原本boost就是为完善auto_ptr搞得这些,现在 c++11有了,也就不需要再⽤咯。 2.unique_ptr C++11引⼊了许多便捷的功能,其中也包括这个,在⽤之前我们可以先看下底层: 可以清楚的看到,unique_ptr中的拷贝构造和赋值操作符delete了,所以也就意味着,他和auto_ptr有区别,控制权唯⼀,不能随意转换。⽤法都差不 多: unique_ptr<Base1> base1(new Base1); unique_ptr<Base1> base2;//但是不能⽤拷贝构造和等号赋值把base1赋值给base2了 但是如果想切换控制权的话也不是没有办法,我们可以看到还有个这样的函数: 要理解这两个函数,⾸先要理解c++11引⼊的move和forward;⽽要理解move和forward得先理解左值和右值概念。所以还是讲全⼀点吧(已经了解的 就直接跳过可以): 补充知识点(其实可以直接看我下⼀篇更⽅便理解:): 1、左值与右值: 左值指的是既能够出现在等号左边也能出现在等号右边的变量(或表达式),右值指的则是只
目录 第1篇初级篇 第1章 初识C++ 1.1 c++简介 1.2 C++与C的区别 1.3 学习c++之前需要先学C吗 1.4 c++与其他语言的区别 1.5 c++的版本以及安装问题 第2章 做一个最简短的C4-+程序 2.1 简单的屏幕输出小程序 2.2 输出语句的使用 2.3 std::介绍 2.4 iostream与iostream.h的区别 2.5 重名问题 2.6 注释 2.7 总结 第3章 初步了解函数 3.1 一个简单的函数 3.2 函数的传参 3.3 函数的返回值、参数与变量 3.4.函数的声明与定义 3.5 局部变量 3.6 全局变量 3.7 总结 第4章 C4-+数据类型 4.1 变量的定义 4.2 将变量及数据存储在内存中 4.3 布尔型变量 4.4 字符型变量 4.5 wchart双字符型变量 4.6 整型概述 4.7 整型变量的定义 4.8 浮点型变量 4.9 常量 4.10枚举型常量 第5章 if语句与运算符 5.1 语句的定义 5.2 块的定义 5.3 表达式的定义 5.4 运算符的定义 5.4.1 赋值运算符的定义 5.4.2 数学运算符的定义 5.4.3 赋值运算符与数学运算符的联合 5.5 自加与自减 5.5.1 前置 5.5.2 后置 5.6 表达式的优先级 5.7 关系运算符 5.8 if语句 5.8.1 else语句 5.8.2 elseif语句 5.8.3 if语句的嵌套 5.9 逻辑运算符及其使用 5.9.1 逻辑“与” 5.9.2 逻辑“或” 5.9.3 逻辑“非” 5.9.4 逻辑运算符的优先级 5.9.5 运算式的真假关系 5.1 0三目运算符 5.1 0.1 三目运算符的优先问题 5.1 0.2 三目运算符的使用问题 5.1 0.3 三目运算符的型别问题 5.1 0.4 三目运算符在字符型变量中的应用 5.1 1复杂嵌套的if语句 5.1 2总结 第6章 面向对象 6.1 面向对象程序语言的主要特征 6.2 类、对象和成员 6.3 类、对象和成员的使用方法及区别 6.3.1 声明一个类 6.3.2 命名习惯 6.3.3 定义一个对象 6.3.4 类与对象的区别 6.3.5 对象与成员的关系 6.3.6 不要给类赋值 6.3.7 对象只能调用类中存在的方法 6.4 公有 6.5 私有 6.6 成员函数的声明和定义 6.7 内联函数 6.7.1 普通内联函数 6.7.2 内联成员函数 6.8 头文件与源文件 6.9 const成员函数 6.10构造函数 6.11默认构造函数 6.12析构函数 6.13析构对象数组 6.14总结 第7章 循环语句 7.1 循环语句的前身——goto语句 7.2 慎用goto语句 7.3 while语句 7.3.1 带运算符的while语句 7.3.2 以字符为条件的while语句 7.3.3 限定while循环的次数 7.3.4 continue语句 7.3.5 break语句 7.3.6 永不休止的while循环 7.4. do……while循环 7.5 for循环 7.5.1 灵活的for循环 7.5.2 条件为空的for循环 7.5.3 执行为空的for循环 7.5.4 嵌套的for循环 7.6 switch语句 7.6.1 switch语句常见错误 7.6.2 switch的菜单功能 7.7 总结 第8章 指针 8.1 什么是地址 8.2 用指针来保存地址 8.2.1 空指针 8.2.2 指针与变量类型 8.2.3 用指针来访问值 8.2.4 指针地址、指针保存的地址和 该地址的值 8.2.5 指针对数值的操作 8.2.6 更换指针保存的地址 8.3 为什么使用指针 8.3.1 栈和堆 8.3.2 用指针创建堆中空间 8.3.3 用指针删除堆中空间 8.4 动态内存 8.4.1 内存泄漏 8.4.2 在堆中创建对象 8.4.3 在堆中删除对象 8.4.4 访问堆中的数据成员 8.4..5 在构造函数中开辟内存空间 8.4.6 对象在栈与堆中的不同 8.5 this指针 8.6 指针的常见错误 8.7 指针运算 8.7.1 指针的加减运算 8.7.2 指针的赋值运算 8.7 _3指针的相减运算 8.7.4 指针的比较运算 8.8 指针 8.8.1 常量指针 8.8.2 指向常量的指针 8.8.3 指向常量的常指针 8.9 总结 第9章 引用
Probit模型是一种离散选择模型,常用于分析二元选择数据,比如一个人是否购买某个产品。Probit模型假设选择行为服从正态分布,通过最大似然估计来估计模型参数。以下是一个C++带类实现离散选择模型Probit模型的示例代码: ```cpp #include <iostream> #include <cmath> #include <vector> using namespace std; class ProbitModel { private: vector<double> X; // 自变量 vector<int> Y; // 因变量 int n; // 样本数 int k; // 自变量个数 double theta; // 参数 double LL; // 对数似然函数值 public: ProbitModel(vector<double> x, vector<int> y) { X = x; Y = y; n = x.size(); k = 1; } // 似然函数 double likelihood() { double sum = 0.0; for (int i = 0; i < n; i++) { double z = X[i] * theta; sum += Y[i] * log(CDF(z)) + (1 - Y[i]) * log(1 - CDF(z)); } return sum; } // 累积分布函数 double CDF(double z) { return 0.5 * (1 + erf(z / sqrt(2))); } // 一阶导数 double firstDerivative() { double sum = 0.0; for (int i = 0; i < n; i++) { double z = X[i] * theta; sum += (Y[i] - CDF(z)) * X[i] / CDF(z) / (1 - CDF(z)); } return sum; } // 二阶导数 double secondDerivative() { double sum = 0.0; for (int i = 0; i < n; i++) { double z = X[i] * theta; sum += -X[i] * X[i] * CDF(z) * (1 - CDF(z) + z * exp(-z * z / 2)) / pow(CDF(z), 2) / pow(1 - CDF(z), 2); } return sum; } // 牛顿法求解 void fit() { double epsilon = 1e-6; // 迭代终止条件 int maxIter = 1000; // 最大迭代次数 double delta; // 梯度 double deltaTheta; // 参数更新量 int iter = 0; // 迭代次数 while (iter < maxIter) { double f1 = firstDerivative(); double f2 = secondDerivative(); delta = -f1 / f2; deltaTheta = delta; theta += deltaTheta; LL = likelihood(); if (abs(deltaTheta) < epsilon) { break; } iter++; } } // 获取参数 double getTheta() { return theta; } // 获取对数似然函数值 double getLL() { return LL; } }; int main() { vector<double> X{1.0, 2.0, 3.0, 4.0, 5.0}; vector<int> Y{0, 0, 1, 1, 1}; ProbitModel pm(X, Y); pm.fit(); cout << "theta = " << pm.getTheta() << endl; cout << "LL = " << pm.getLL() << endl; return 0; } ``` 以上代码实现了一个简单的Probit模型,使用了牛顿法来求解模型参数。在main函数中,我们定义了一个样本,其中X为自变量,Y为因变量,表示是否购买某个产品。然后我们创建了一个ProbitModel对象pm,并调用其fit方法来拟合模型并求解参数。最后,我们输出了参数theta和对数似然函数值LL。 需要注意的是,Probit模型假设选择行为服从正态分布,因此我们在实现CDF函数时使用了误差函数erf,这需要包含cmath头文件。此外,由于Probit模型涉及到对数似然函数的计算,因此我们需要对结果进行判断,避免出现NaN或-inf等不合法的值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会飞的鱼-blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值