C语言学习2:Hello World!详解

目录

1.Hello World ! 代码
2.代码详解
3.用DEV-C++新建C文件
4.代码的编译及运行

1.Hello World !代码:

#include <stdio.h>//头文件

int main()//主函数
{
	printf("hello world !\n");//输出“Hello World !”并换行
	return 0;//返回函数的值
} 

2.代码详解:

对于我个人来言,第一次接触到C语言时,我是拒绝的。当时仅仅因为上面那几行代码,就已经让我晕头转向,不知道从何处下手。所以,从第一个C语言开始,我们就要学会理解每行代码的含义及作用。在此我将会对每行代码进行详细的解释。

#include <stdio.h>
# 在此处代表优先执行某项信息。
include 称为文件包含命令。
stdio 全称为 standard input output,意为标准输入输出。
stdio.h 则是头文件(注意是 stdio.h ,而不是 stdio ),它包含了标准输入输出库
#include <stdio.h> 编译预处理命令,表示优先读取 stdio.h 该头文件中所包含的标准输入输出库

为什么要使用头文件?
例:学校需要登记高一、高二、高三三个年级学生的个人信息,并分别存放于三个档案库中。当高一有个学生的信息需要被查询时,这时候就需要提前电话预约,让管理档案库的老师提前准备好到资料库房拿取档案。“ # include <> ” 的作用就相当于提前打电话预约,但仅仅预约却不告诉管理档案库的老师,需要哪个年级学生的档案库,那么该同学的档案便无法提取。所以还需要告诉该老师,需要调用哪个年级的档案库。那么我们就用 “ stdio.h ” 来表示我们需要高一年级的档案库。这样我们才能读取该同学的信息,并进行下一步操作。

拓展: #include <>#include " " 的区别是什么?
#include <> 的作用是在C编译器设置的include路径内搜索,用于标准或系统提供的头文件,到保存系统标准头文件的位置查找头文件。
#include " " 的作用是让C编译器先在包含当前include指令的文件所在的文件夹内搜索,然后再从标准头文件目录中查找。

int main(){}
int 表示它是返回值是 int 型(整型,即整数)
main 表示它的名字是 main (函数名) ,而 main 函数又称为 主函数,请记住它的特殊性, main 函数是C语言程序不可或缺的部分。
() 表示函数有返回值,因为 main 函数在结束的时候要有 return 语句(可见以上代码中的 return 0; )。
{} 将需要执行的程序代码,写在 { } 内部。

拓展: int main()void main() 的区别是什么?
int mian() 和 void main() 的区别在于有无返回值,int main()会返回一个int型的返回值,而void main() 则返回空值(相当于无返回值)。C语言规范要求 main 函数需要返回一个 int 类型的返回值来告诉操作系统该程序执行是否正确,如果执行正确返回0,错误则返回非0。但 int main() 与 void main() 在实际作用上几乎无差别,但int main() 更为标准,今后编写C语言程序也推荐使用 int main()。

printf("hello world !\n");
printf() 是格式化输出函数,一般用于向标准输出设备按规定格式输出。它的定义包含在头文件 stdio.h 里面,所以我们在读取完头文件 stdio.h 的情况下,可以直接将其调用。
printf(" ") " " 里面所写的内容,便是我们想要输出的内容。在这条代码里面 " " 包含的内容是 hello world !\n ,但实际编译运行后,输出的内容为 hello world ! 而不是 hello world !\n 这是因为 \n 作为转义字符在此起换行的作用。
\n 是一种常见的转义字符。C语言中定义了一些字母前加 \ 来表示常见的那些不能显示并有特殊意义的字符。所以 \n 在此处不只是单纯的两个字符,而是告诉程序运行到此处需要换行( \n 可以根据个人习惯选择性添加)。
; 在每段语句结束之后,需要用 “ ; ” 来告诉编译软件这段语句已结束。好比写文章每句话结束以后要用 “。” 来表示这句话说完了,否则读者就无法知晓这句话是否说完。同理,每写完一段代码就要用 “ ; ” 来告诉编译器,该段已结束,否则编译器就会报错(初学者经常会因为缺少 “ ; ” 导致报错,这属于典型的语法错误)。
printf("<格式化字符串>",<参量表>); 这是printf()函数常用的格式(显而易见,本文用到的是 printf("<格式化字符串>"); 格式, )。

拓展: printf(" "); 中 " "内的内容是可以更改的,本文中用于输出字符串 “ hello world ! ” ,所以在 printf(" "); 的 " "内添加内容 “ hello world ! ”得到 printf(“hello world !\n”); \n用于换行。如果我想输出汉字 “ 你好,世界! ”,那么只需更改 " " 内的内容就行,如 printf(" 你好, 世界!");

return 0;
return 0; 放在主函数结束时,用来表示该函数成功完成,正常终止。它可以用来终止 main() 函数,并返回值0。

拓展: returnreturn 0;return 1; 的区别是什么?
return -> 表示从被调函数返回到主调函数继续执行,返回时可附带一个返回值,由return后面的参数指定。可见;关键字 return 的主作用为返回程序流程的控制权,顺带返回一个值。
return 0; -> 代表函数正常终止。
retrun 1; -> 代表函数非正常终止。

3.用DEV-C++新建C文件:

第①步【点击DEV-C++图标,打开程序】:

在这里插入图片描述
在这里插入图片描述
第②步【新建一个C文件】:

在这里插入图片描述
由图可见,我们也可以使用 Ctrl+N 的方式直接创建一个Source File。

#pic_center在这里插入图片描述在这里插入图片描述
此时我们的C文件已经建立完成了(不一定要在完成代码的编写以后再保存,编写的过程中也要养成即时保存的好习惯哦)!

4.代码的编译及运行:

编译 依赖于编译器,将源码转化成目标文件。
运行 让程序在系统中运行。

第①步【点击 Compile & Run 图标】:

在这里插入图片描述
或直接按键盘的F11,也可编译运行。
注:由于不同的电脑设置不同,部分电脑需要按下 Fn+F11 才能进行编译运行的操作!

第②步【程序运行成功】:

在这里插入图片描述

Hello World!


—————————END—————————

往期回顾

★C语言学习1:从下载编译软件开始!DEV-C++、VC6.0、VS2010、VS2017等编译器的下载(Windows系统)

————————————————————
  • 11
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
目录 历史 前言 I. C语言入门 1. 程序的基本概念 1. 程序和编程语言 2. 自然语言和形式语言 3. 程序的调试 4. 第一个程序 2. 常量、变量和表达式 1. 继续Hello World 2. 常量 3. 变量 4. 赋值 5. 表达式 6. 字符类型与字符编码 3. 简单函数 1. 数学函数 2. 自定义函数 3. 形参和实参 4. 全局变量、局部变量和作用域 4. 分支语句 1. if语句 2. if/else语句 3. 布尔代数 4. switch语句 5. 深入理解函数 1. return语句 2. 增量式开发 3. 递归 6. 循环语句 1. while语句 2. do/while语句 3. for语句 4. break和continue语句 5. 嵌套循环 6. goto语句和标号 7. 结构体 1. 复合类型与结构体 2. 数据抽象 3. 数据类型标志 4. 嵌套结构体 8. 数组 1. 数组的基本概念 2. 数组应用实例:统计随机数 3. 数组应用实例:直方图 4. 字符串 5. 多维数组 9. 编码风格 1. 缩进和空白 2. 注释 3. 标识符命名 4. 函数 5. indent工具 10. gdb 1. 单步执行和跟踪函数调用 2. 断点 3. 观察点 4. 段错误 11. 排序与查找 1. 算法的概念 2. 插入排序 3. 算法的时间复杂度分析 4. 归并排序 5. 线性查找 6. 折半查找 12. 栈与队列 1. 数据结构的概念 2. 堆栈 3. 深度优先搜索 4. 队列与广度优先搜索 5. 环形队列 13. 本阶段总结 II. C语言本质 14. 计算机中数的表示 1. 为什么计算机用二进制计数 2. 不同进制之间的换算 3. 整数的加减运算 3.1. Sign and Magnitude表示法 3.2. 1's Complement表示法 3.3. 2's Complement表示法 3.4. 有符号数和无符号数 4. 浮点数 15. 数据类型详解 1. 整型 2. 浮点型 3. 类型转换 3.1. Integer Promotion 3.2. Usual Arithmetic Conversion 3.3. 由赋值产生的类型转换 3.4. 强制类型转换 3.5. 编译器如何处理类型转换 16. 运算符详解 1. 位运算 1.1. 按位与、或、异或、取反运算 1.2. 移位运算 1.3. 掩码 1.4. 异或运算的一些特性 2. 其它运算符 2.1. 复合赋值运算符 2.2. 条件运算符 2.3. 逗号运算符 2.4. sizeof运算符与typedef类型声明 3. Side Effect与Sequence Point 4. 运算符总结 17. 计算机体系结构基础 1. 内存与地址 2. CPU 3. 设备 4. MMU 5. Memory Hierarchy 18. x86汇编程序基础 1. 最简单的汇编程序 2. x86的寄存器 3. 第二个汇编程序 4. 寻址方式 5. ELF文件 5.1. 目标文件 5.2. 可执行文件 19. 汇编与C之间的关系 1. 函数调用 2. main函数和启动例程 3. 变量的存储布局 4. 结构体和联合体 5. C内联汇编 6. volatile限定符 20. 链接详解 1. 多目标文件的链接 2. 定义和声明 2.1. extern和static关键字 2.2. 头文件 2.3. 定义和声明的详细规则 3. 静态库 4. 共享库 4.1. 编译、链接、运行 4.2. 动态链接的过程 4.3. 共享库的命名惯例 5. 虚拟内存管理 21. 预处理 1. 预处理的步骤 2. 宏定义 2.1. 函数式宏定义 2.2. 内联函数 2.3. #、##运算符和可变参数 2.4. 宏展开的步骤 3. 条件预处理指示 4. 其它预处理特性 22. Makefile基础 1. 基本规则 2. 隐含规则和模式规则 3. 变量 4. 自动处理头文件的依赖关系 5. 常用的make命令行选项 23. 指针 1. 指针的基本概念 2. 指针类型的参数和返回值 3. 指针与数组 4. 指针与const限定符 5. 指针与结构体 6. 指向指针的指针与指针数组 7. 指向数组的指针与多维数组 8. 函数类型和函数指针类型 9. 不完全类型和复杂声明 24. 函数接口 1. 本章的预备知识 1.1. strcpy与strncpy 1.2. malloc与free 2. 传入参数与传出参数 3. 两层指针的参数 4. 返回值是指针的情况 5. 回调函数 6. 可变参数 25. C标准库 1. 字符串操作函数 1.1. 初始化字符串 1.2. 取字符串的长度 1.3. 拷贝字符串 1.4. 连接字符串 1.5. 比较字符串 1.6. 搜索字符串 1.7. 分割字符串 2. 标准I/O库函数 2.1. 文件的基本概念 2.2. fopen/fclose 2.3. stdin/stdout/stderr 2.4. errno与perror函数 2.5. 以字节为单位的I/O函数 2.6. 操作读写位置的函数 2.7. 以字符串为单位的I/O函数 2.8. 以记录为单位的I/O函数 2.9. 格式化I/O函数 2.10. C标准库的I/O缓冲区 2.11. 本节综合练习 3. 数值字符串转换函数 4. 分配内存的函数 26. 链表、二叉树和哈希表 1. 链表 1.1. 单链表 1.2. 双向链表 1.3. 静态链表 1.4. 本节综合练习 2. 二叉树 2.1. 二叉树的基本概念 2.2. 排序二叉树 3. 哈希表 27. 本阶段总结 III. Linux系统编程 28. 文件与I/O 1. 汇编程序Hello world 2. C标准I/O库函数与Unbuffered I/O函数 3. open/close 4. read/write 5. lseek 6. fcntl 7. ioctl 8. mmap 29. 文件系统 1. 引言 2. ext2文件系统 2.1. 总体存储布局 2.2. 实例剖析 2.3. 数据块寻址 2.4. 文件和目录操作的系统函数 3. VFS 3.1. 内核数据结构 3.2. dup和dup2函数 30. 进程 1. 引言 2. 环境变量 3. 进程控制 3.1. fork函数 3.2. exec函数 3.3. wait和waitpid函数 4. 进程间通信 4.1. 管道 4.2. 其它IPC机制 5. 练习:实现简单的Shell 31. Shell脚本 1. Shell的历史 2. Shell如何执行命令 2.1. 执行交互式命令 2.2. 执行脚本 3. Shell的基本语法 3.1. 变量 3.2. 文件名代换(Globbing):* ? [] 3.3. 命令代换:`或 $() 3.4. 算术代换:$(()) 3.5. 转义字符\ 3.6. 单引号 3.7. 双引号 4. bash启动脚本 4.1. 作为交互登录Shell启动,或者使用--login参数启动 4.2. 以交互非登录Shell启动 4.3. 非交互启动 4.4. 以sh命令启动 5. Shell脚本语法 5.1. 条件测试:test [ 5.2. if/then/elif/else/fi 5.3. case/esac 5.4. for/do/done 5.5. while/do/done 5.6. 位置参数和特殊变量 5.7. 函数 6. Shell脚本的调试方法 32. 正则表达式 1. 引言 2. 基本语法 3. sed 4. awk 5. 练习:在C语言中使用正则表达式 33. 信号 1. 信号的基本概念 2. 产生信号 2.1. 通过终端按键产生信号 2.2. 调用系统函数向进程发信号 2.3. 由软件条件产生信号 3. 阻塞信号 3.1. 信号在内核中的表示 3.2. 信号集操作函数 3.3. sigprocmask 3.4. sigpending 4. 捕捉信号 4.1. 内核如何实现信号的捕捉 4.2. sigaction 4.3. pause 4.4. 可重入函数 4.5. sig_atomic_t类型与volatile限定符 4.6. 竞态条件与sigsuspend函数 4.7. 关于SIGCHLD信号 34. 终端、作业控制与守护进程 1. 终端 1.1. 终端的基本概念 1.2. 终端登录过程 1.3. 网络登录过程 2. 作业控制 2.1. Session与进程组 2.2. 与作业控制有关的信号 3. 守护进程 35. 线程 1. 线程的概念 2. 线程控制 2.1. 创建线程 2.2. 终止线程 3. 线程间同步 3.1. mutex 3.2. Condition Variable 3.3. Semaphore 3.4. 其它线程间同步机制 4. 编程练习 36. TCP/IP协议基础 1. TCP/IP协议栈与数据包封装 2. 以太网(RFC 894)帧格式 3. ARP数据报格式 4. IP数据报格式 5. IP地址与路由 6. UDP段格式 7. TCP协议 7.1. 段格式 7.2. 通讯时序 7.3. 流量控制 37. socket编程 1. 预备知识 1.1. 网络字节序 1.2. socket地址的数据类型及相关函数 2. 基于TCP协议的网络程序 2.1. 最简单的TCP网络程序 2.2. 错误处理与读写控制 2.3. 把client改为交互式输入 2.4. 使用fork并发处理多个client的请求 2.5. setsockopt 2.6. 使用select 3. 基于UDP协议的网络程序 4. UNIX Domain Socket IPC 5. 练习:实现简单的Web服务器 5.1. 基本HTTP协议 5.2. 执行CGI程序 A. 字符编码 1. ASCII码 2. Unicode和UTF-8 3. 在Linux C编程中使用Unicode和UTF-8 B. GNU Free Documentation License Version 1.3, 3 November 2008 参考书目 索引
第一部分:基础篇[1] 第一章主要是手机游戏概述,包括游戏概述、手机游戏类型和开发平台的分析;   第二章介绍手机游戏的策划,包括分析玩家需求,编写策划文案,游戏原型的实现。   第三章介绍C、C++编程基础,对于游戏程序员来讲学会C语言是开发各平台游戏的必备语言,本书从实战角度,通过案例方式让读者快速了解C语言和C++语言的语法特点,对于原来从事Java开发的程序员可以快速对比,进而掌握C++语言的使用。   第二部分:Cocos2d-x技术篇   第四章主要介绍Cocos2d-x的环境搭建和HelloWorld的项目实现,通过本章读者可以快速上手开发一个最简单的移动游戏UI,并通过该案例以了解Cocos2d-x的运行原理。   第五章主要介绍Cocos2d-x核心技术,这里包括Cocos2d-x的核心类CCDirector、CCScene、CCNode、CCLayer、CCSprite、CCAction等,通过案例来介绍Cocos2d-x的场景、图层、交互、动作、动画、粒子效果、游戏地图、物理引擎,并详细介绍了Cocos2d-x 2.2.1版本中所有自带Demo的功能。   第三部分:Cocos2d-x游戏实例篇   第六章用一款完整游戏项目《飞机大战》设计来详解手机游戏的开发流程,介绍了游戏进度和游戏菜单的实现、游戏按键处理与碰撞检测等。   第七章介绍了DeepBlueX引擎,这是对Cocos2d-x的二次封装,通过封装让开发者通过状态机的方式来规划游戏的整体架构,并介绍了通过DeeepBlueX引擎实现了《飞机大战》。   第八章主要介绍Cocos2d-x网络编程与网络游戏的实现,包括网络游戏模型、使用Apache搭建网络游戏服务器端、使用Cocos2d-x实现Http网络连接、使用BSD Socket实现Socket通讯。   第四部分:产品发布篇   第九章主要介绍介绍游戏打包与发布,包括发布游戏要准备的项目、制作游戏介绍文档和图标、以及如何寻找发布渠道。
第一部分:基础篇[1] 第一章主要是手机游戏概述,包括游戏概述、手机游戏类型和开发平台的分析;   第二章介绍手机游戏的策划,包括分析玩家需求,编写策划文案,游戏原型的实现。   第三章介绍C、C++编程基础,对于游戏程序员来讲学会C语言是开发各平台游戏的必备语言,本书从实战角度,通过案例方式让读者快速了解C语言和C++语言的语法特点,对于原来从事Java开发的程序员可以快速对比,进而掌握C++语言的使用。   第二部分:Cocos2d-x技术篇   第四章主要介绍Cocos2d-x的环境搭建和HelloWorld的项目实现,通过本章读者可以快速上手开发一个最简单的移动游戏UI,并通过该案例以了解Cocos2d-x的运行原理。   第五章主要介绍Cocos2d-x核心技术,这里包括Cocos2d-x的核心类CCDirector、CCScene、CCNode、CCLayer、CCSprite、CCAction等,通过案例来介绍Cocos2d-x的场景、图层、交互、动作、动画、粒子效果、游戏地图、物理引擎,并详细介绍了Cocos2d-x 2.2.1版本中所有自带Demo的功能。   第三部分:Cocos2d-x游戏实例篇   第六章用一款完整游戏项目《飞机大战》设计来详解手机游戏的开发流程,介绍了游戏进度和游戏菜单的实现、游戏按键处理与碰撞检测等。   第七章介绍了DeepBlueX引擎,这是对Cocos2d-x的二次封装,通过封装让开发者通过状态机的方式来规划游戏的整体架构,并介绍了通过DeeepBlueX引擎实现了《飞机大战》。   第八章主要介绍Cocos2d-x网络编程与网络游戏的实现,包括网络游戏模型、使用Apache搭建网络游戏服务器端、使用Cocos2d-x实现Http网络连接、使用BSD Socket实现Socket通讯。   第四部分:产品发布篇   第九章主要介绍介绍游戏打包与发布,包括发布游戏要准备的项目、制作游戏介绍文档和图标、以及如何寻找发布渠道。
第一部分:基础篇[1] 第一章主要是手机游戏概述,包括游戏概述、手机游戏类型和开发平台的分析;   第二章介绍手机游戏的策划,包括分析玩家需求,编写策划文案,游戏原型的实现。   第三章介绍C、C++编程基础,对于游戏程序员来讲学会C语言是开发各平台游戏的必备语言,本书从实战角度,通过案例方式让读者快速了解C语言和C++语言的语法特点,对于原来从事Java开发的程序员可以快速对比,进而掌握C++语言的使用。   第二部分:Cocos2d-x技术篇   第四章主要介绍Cocos2d-x的环境搭建和HelloWorld的项目实现,通过本章读者可以快速上手开发一个最简单的移动游戏UI,并通过该案例以了解Cocos2d-x的运行原理。   第五章主要介绍Cocos2d-x核心技术,这里包括Cocos2d-x的核心类CCDirector、CCScene、CCNode、CCLayer、CCSprite、CCAction等,通过案例来介绍Cocos2d-x的场景、图层、交互、动作、动画、粒子效果、游戏地图、物理引擎,并详细介绍了Cocos2d-x 2.2.1版本中所有自带Demo的功能。   第三部分:Cocos2d-x游戏实例篇   第六章用一款完整游戏项目《飞机大战》设计来详解手机游戏的开发流程,介绍了游戏进度和游戏菜单的实现、游戏按键处理与碰撞检测等。   第七章介绍了DeepBlueX引擎,这是对Cocos2d-x的二次封装,通过封装让开发者通过状态机的方式来规划游戏的整体架构,并介绍了通过DeeepBlueX引擎实现了《飞机大战》。   第八章主要介绍Cocos2d-x网络编程与网络游戏的实现,包括网络游戏模型、使用Apache搭建网络游戏服务器端、使用Cocos2d-x实现Http网络连接、使用BSD Socket实现Socket通讯。   第四部分:产品发布篇   第九章主要介绍介绍游戏打包与发布,包括发布游戏要准备的项目、制作游戏介绍文档和图标、以及如何寻找发布渠道。
里面都是我新手时期学C的时候整理的一些TXT文档,因为分不够了,所以放上来赚点积分,都是很基础的东西,里面的代码都是经过我测试的,保证可用。 (1)输出Hello,world (2)标识符 (3)常量与变量 (4)整型数据 (5)实型数据 (6)复合赋值表达式 (7)自加自减运算符和逗号表达式 (8)顺序结构及数据输出 (9)数据输入 (10)作业练习一 (11)关系运算符和逻辑运算符 (12)选择结构及条件表达式 (13)循环结构,while语句 (14)循环结构,do while语句 (15)循环结构,for语句 (16)字符型数据 (17)字符型数据实例,作业练习二 (18)函数定义 (19)函数应用实例,作业练习三 (20)指针的定义 (21)函数之间地址值的传递 (22)函数返回地址值 (23)一维数组的定义 (24)一维数组应用实例 (25)一维数组应用实例(2) (26)一维数组应用实例(3) (27)二维数组的定义 (28)二维数组的初始化 (29)二维数组与指针 (30)二维数组应用实例 (31)二维数组应用实例(2) (32)用一维数组来存储字符串 (33)字符串的输入与输出 (34)字符串数组 (35)用于字符串处理的函数 (36)字符串应用实例 (37)传给Main函数的参数 (38)函数指针 (39)函数的递归调用 (40)变量作用域和存储类别 (41)编译预处理和不带参数的宏替换 (42)带参数的宏替换和文件包含 (43)动态存储分配 (44)结构体变量的定义与引用 (45)利用结构体变量构成静态链表 (46)利用结构体变量构成动态链表 (47)共用体的定义与应用 (48)位运算符 (49)File文件的数据输出操作 (50)File文件的数据输入操作 (51)判断文件结束函数 (52)fscanf和fprintf函数 (53)fgets和fputs函数 (54)fread和fwrite函数 (55)文件定位函数 c switch的用法 c 避免调试窗口闪退 c 弹出消息窗口 c 等待函数(sleep) c 定义类成员 c 动态分配内存法定义数组 c 返回二维数组 c 方向键键码 c 改变字体颜色 c 绘制图形 c 获得鼠标当前位置坐标 c 检测键盘按键 c 检测鼠标按下事件 c 将整数转换成二进制数并存放到数组中 c 结构体问题 c 使用winsock实现server和client(通讯程序) c 随机数发生器 c 图形模式详解 c 网页爬虫 c 写图形界面 c 遗传算法实例 c 在图形界面输出文字 c# List的用法 VS2010如何解决每次编译都要重新生成

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

學不董Gavin

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

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

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

打赏作者

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

抵扣说明:

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

余额充值