不懂的题目

本文解析了迅雷2014年校园招聘中的笔试题目,涉及C++基础知识、类的继承与多态、内存管理、模板与内联函数等主题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

迅雷2014校园招聘笔试题

一、单选题(20题,每题2分)

5、请问以下说法,哪个是正确的()
A、每个类都有一个无参数的构造函数
B、每个类都有一个拷贝构造函数
C、每个类能有多个构造函数
D、每个类能有多个析构函数


7、类的成员有三种访问属性,分别是public、protected、private,子类能够访问的成员是()
A、都能访问
B、public和protected
C、public和private
D、protected和private


10、看以下代码:
A *pa = new A[10];
delete pa;
则类A的构造函数和析构函数分别执行了几次()
A、1   1          B、10   10          C、1   10                D、10   1

11、看以下代码:
[cpp]  view plain copy
  1. class A  
  2. {  
  3. public:  
  4.     ~A();  
  5. };  
  6. A::~A()  
  7. {  
  8.     printf("delete A ");  
  9. }  
  10.   
  11. class B : public A  
  12. {  
  13. public:  
  14.     ~B();  
  15. };  
  16. B::~B()  
  17. {  
  18.     printf("delete B ");  
  19. }  
请问执行以下代码
A *pa = new B();
delete pa;
输出的串是()A
A、delete A       B、delete B        C、delete B delete A          D、delete A delete B


14、看以下代码:
[cpp]  view plain copy
  1. class parent  
  2. {  
  3. public:  
  4.     virtual void output();  
  5. };  
  6. void parent::output()  
  7. {  
  8.     printf("parent!");  
  9. }  
  10.   
  11. class son : public parent  
  12. {  
  13. public:  
  14.     virtual void output();  
  15. };  
  16. void son::output()  
  17. {  
  18.     printf("son!");  
  19. }  
则以下程序段:
son s;
::memset(&s , 0 , sizeof(s));
parent& p = s;
p.output();
执行结果是()
A、parent!       B、son!       C、son!parent!           D、没有输出结果,程序运行出错

15、函数的局部变量所需存储空间,是在哪里分配的()
A、进程的数据段      B、进程的栈上    C、进程的堆上       D、以上都可以

16、以下STL的容器存放的数据,哪个肯定是排好序的()
A、vector        B、deque         C、list             D、map


19、某棵完全二叉树上有699个节点,则该二叉树的叶子节点数为()
A、349             B、350              C、188                D、187
n0=n2+1;
n=n0+n1+n2=n0+n1+n0-1=699 
由于完全二叉树中度为1的节点只有0个或1个两种情况,所以,将0或1带入上面公式,整理后得:  n0=(n+1)/2或者n0=n/2;  看看n是否能被2整除,能则用n0=n/2。否则用n0=(n+1)/2 既叶子节点为n0=(n+1)/2=350


20、在一个指向字符串的指针char *p_str,要把字符串中第4个字符的值改为'a',正确的做法是()
A、p_str[3]='a'            B、*(ptr+3)='a'       C、p_str[4]='a'       D、*(ptr+4)='a'


二、多选题(10题,每题3分,错选漏选都不得分)
1、已知一段文本有1382个字符,使用了1382个字节进行存储,这段文本全部是由a、b、c、d、e这5个字符组成,a出现了354次,b出现了483次,c出现了227次,d出现了96次,e出现了232次,对这5个字符使用哈夫曼(Huffman)算法进行编码,则以下哪些说法正确()
A、使用哈夫曼算法编码后,用编码值来存储这段文本将花费最少的存储空间
B、使用哈夫曼算法进行编码,a、b、c、d、e这5个字符对应的编码值是唯一确定的
C、使用哈夫曼算法进行编码,a、b、c、d、e这5个字符对应的编码值可以有多套,但每个字符编码的位(bit)数是确定的
D、b这个字符的哈夫曼编码值位数应该最短,d这个字符的哈夫曼编码值位数应该最长


2、下列表达式中,不合法的是()
已知:double d = 3.2; int n = 3;
A、d<<2;
B、d/n
C、!d && (n-3)
D、(d-0.2)|n


4、关于内联函数正确的是()
A、类的私有成员函数不能作为内联函数
B、在所有类说明中内部定义的成员函数都是内联函数
C、类的保护成员函数不能作为内联函数
D、使用内联函数的地方会在运行阶段用内联函数体替换掉

5、下面模板声明中,哪些是非法的()
A、template<class Type>class C1;
B、template<class T,U , class V>class C2;
C、template<class C1 , typename C2>class C3{};
D、template<typename myT , class myT>class C4{};

6、在使用浏览器打开一个网页的过程中,浏览器会使用的网络协议包括()
A、DNS         B、TCP        C、HTTP            D、Telnet

7、下面属于构造散列函数的方法是()
A、直接定址法
B、数字分析法
C、乘余取整法
D、平方取中法


8、拷贝构造函数的特点是()
A、该函数名同类名,也是一种构造函数,该函数返回自身引用
B、该函数只有一个参数,必须是对某个对象的引用
C、每个类都必须有一个拷贝初始化构造函数,如果类中没有说明拷贝构造函数,则编译器系统会自动生成一个缺省拷贝构造函数,作为该类的保护成员
D、拷贝初始化构造函数的作用是将一个已知对象的数据成员值拷贝给正在创建的另一个同类的对象

9、下列关于虚函数的说法正确的是()
A、在构造函数中调用类自己的虚函数,虚函数的动态绑定机制还会生效。
B、在析构函数中调用类自己的虚函数,虚函数的动态绑定机制还会生效。
C、静态函数不可以是虚函数

因为静态成员函数没有this,也就没有存放vptr的地方,同时其函数的指针存放也不同于一般的成员函数,其无法成为一个对象的虚函数的指针以实现由此带来的动态机制。静态是编译时期就必须确定的,虚函数是运行时期确定的。
D、虚函数可以声明为inline

inline函数和virtual函数有着本质的区别,inline函数是在程序被编译时就展开,在函数调用处用整个函数体去替换,而virtual函数是在运行期才能够确定如何去调用的,因而inline函数体现的是一种编译期机制,virtual函数体现的是一种运行期机制。
因此,内联函数是个静态行为,而虚函数是个动态行为,他们之间是有矛盾的。
函数的inline属性是在编译时确定的, 然而,virtual的性质则是在运行时确定的,这两个不能同时存在,只能有一个选择,文件中声明inline关键字只是对编译器的建议,编译器是否采纳是编译器的事情。
我并不否认虚函数也同样可以用inline来修饰,但你必须使用对象来调用,因为对象是没有所谓多态的,多态只面向行为或者方法,但是C++编译器,无法保证一个内联的虚函数只会被对象调用,所以一般来说,编译器将会忽略掉所有的虚函数的内联属性。


相关知识点:什么函数不能声明为虚函数?
一个类中将所有的成员函数都尽可能地设置为虚函数总是有益的。 
设置虚函数须注意: 
1:只有类的成员函数才能说明为虚函数; 
2:静态成员函数不能是虚函数; 
3:内联函数不能为虚函数; 
4:构造函数不能是虚函数; 
5:析构函数可以是虚函数,而且通常声明为虚函数。


<think>我们之前已经提供了一个完整的Keil C51温度传感器程序,温度范围是-40到+100摄氏度。现在用户再次询问关于温度范围-40到+100的编程问题代码,可能是需要确认或者想了解其他相关内容。因此,我们可以再次提供之前的代码,并做简要说明,同时根据引用内容补充一些优化建议。引用分析: [1]中提到可以通过启发式排序选择准确的代码样本,这提示我们在代码生成中可以通过多次采样和选择最优来实现更高的可靠性。但在实际嵌入式编程中,我们通常通过测试和调试来确保代码正确性。 [2]中提到寄存器风格编程,代码简洁,工程文件少,方便移植。我们的代码正是采用直接操作寄存器的风格。[3]中提到显示器的背光灯在夜间工作的舒适性,这与我们的LCD显示相关,但代码中并未涉及背光控制,不过可以建议在硬件设计时考虑。 [4]中提到了传感器的基本参数,包括温度范围-40°C至85°C,但我们的DS18B20支持更宽的范围(-55°C至125°C),因此满足要求。 因此,我们再次提供完整的代码,并补充一些优化建议和说明。 ###完整代码(与之前相同,但增加注释和引用说明)```c#include<reg52.h> #include<intrins.h>//硬件接口定义sbitDQ= P2^0;//DS18B20数据线sbit RS= P2^1;//LCD1602寄存器选择sbitRW =P2^2;//LCD读写控制sbitEN =P2^3;// LCD使能端sbitRELAY= P3^4;//继电器控制(用于加热或制冷) sbit BUZZER= P3^5;//蜂鸣器#define LCD_PORT P0// LCD数据端口//全局变量float temperature=0.0;//当前温度值floattemp_high =38.0;//默认高温阈值float temp_low=5.0;//默认低温阈值//LCD1602延时函数void lcd_delay(unsignedint t) {while(t--); }// LCD1602写命令voidlcd_write_cmd(unsignedchar cmd) {RS=0;//命令模式RW=0;//写操作LCD_PORT =cmd;EN=1;lcd_delay(100);EN=0;lcd_delay(100);} //LCD1602写数据void lcd_write_data(unsignedchar dat) {RS=1;//数据模式RW =0;//写操作LCD_PORT= dat;EN =1;lcd_delay(100);EN =0;lcd_delay(100); }// LCD1602初始化void lcd_init() {lcd_delay(15000);lcd_write_cmd(0x38);//8位数据接口,2行显示lcd_delay(5000);lcd_write_cmd(0x0C);//开显示,关光标lcd_delay(5000);lcd_write_cmd(0x06);//地址自动加1lcd_delay(5000);lcd_write_cmd(0x01);//清屏lcd_delay(5000); }// LCD显示字符串void lcd_display_string(unsigned charx,unsigned chary,char *s){unsigned charaddress;if (y ==0)address =0x80+ x;//第一行地址else address=0xC0 +x;//第二行地址(引用[3]提到的0xC0)lcd_write_cmd(address);while (*s){lcd_write_data(*s++);}} //DS18B20复位void ds18b20_reset(){DQ=1;_nop_(); _nop_();DQ =0;lcd_delay(240);//480us以上复位脉冲lcd_delay(240);DQ=1;lcd_delay(30);//等待15-60uswhile(DQ);//等待DS18B20应答(低电平)lcd_delay(240);//延时480uslcd_delay(240); }// DS18B20写一个字节voidds18b20_write_byte(unsignedchar dat) {unsignedchar i;for (i =0; i<8;i++){DQ=0;_nop_(); _nop_();//开始写时序DQ =dat &0x01;//写最低位lcd_delay(60);//延时60usDQ =1;//释放总线dat >>=1;}} //DS18B20读一个字节unsigned chards18b20_read_byte(){unsigned chari,value =0;for(i=0;i <8; i++) {DQ =0;_nop_(); _nop_();//开始读时序DQ =1; _nop_();_nop_(); //释放总线value>>=1;if (DQ)value |=0x80;//读取数据位lcd_delay(60);//延时60us}return value; }//读取温度值float ds18b20_read_temp(){unsigned chartemp_l, temp_h;inttemp;ds18b20_reset();//复位ds18b20_write_byte(0xCC);//跳过ROMds18b20_write_byte(0x44);//启动温度转换lcd_delay(10000);//等待转换完成(约750ms),实际需要根据情况调整ds18b20_reset();//复位ds18b20_write_byte(0xCC);//跳过ROMds18b20_write_byte(0xBE);//读取温度寄存器temp_l =ds18b20_read_byte();//读取低字节temp_h =ds18b20_read_byte();//读取高字节temp= temp_h;temp<<=8;temp |=temp_l;//处理负温度(当温度值为负时,高字节的符号位为1)if (temp &0x8000) {temperature= -(float)((temp^0xFFFF)+1)*0.0625; //取补码并转换为负数} else{temperature =(float)temp*0.0625; //12位精度,0.0625=1/16}return temperature; }//温度显示处理(支持负温度)void display_temperature() {chartemp_str[16];unsigned inttemp_int;unsigned inttemp_dec;if(temperature<0){temp_int= (unsigned int)(-temperature);//取绝对值整数部分//小数部分:先取绝对值,然后减去整数部分,乘以10取整得到1位小数temp_dec= (unsigned int)((-temperature -temp_int) *10+0.5);//四舍五入//注意:由于浮点数精度问题,这里加上0.5进行四舍五入if(temp_dec >=10) {//处理进位temp_int++;temp_dec=0;}sprintf(temp_str, "Temp:-%d.%dC", temp_int,temp_dec);} else{temp_int= (unsigned int)temperature;temp_dec= (unsigned int)((temperature -temp_int) *10+0.5);if(temp_dec >=10) {temp_int++;temp_dec =0;}sprintf(temp_str,"Temp: %d.%dC", temp_int,temp_dec);}lcd_display_string(0,0,temp_str); }//报警控制void alarm_control() {charalarm_str[16];if(temperature> temp_high) {BUZZER=1;//高温报警(蜂鸣器响)RELAY=1;//启动通风(继电器吸合)sprintf(alarm_str, "HIGH ALARM!");}else if(temperature< temp_low) {BUZZER=1;//低温报警RELAY =1;//启动加热(继电器吸合)sprintf(alarm_str, "LOWALARM!");} else{BUZZER =0;//关闭报警RELAY=0;//关闭继电器sprintf(alarm_str,"NORMAL");}lcd_display_string(0,1, alarm_str);} //主函数void main() {//初始化lcd_init();BUZZER=0;//关闭蜂鸣器RELAY =0;//关闭继电器lcd_display_string(0,0, "Temp SystemV1.0");lcd_display_string(0,1, "Initializing...");lcd_delay(50000); //延时约500mswhile(1){ds18b20_read_temp();//读取温度display_temperature();//显示温度alarm_control();//报警控制lcd_delay(500000);//延时约500ms(实际时间取决于晶振)}} ```###关键说明1. **温度范围处理**:-代码中通过判断高字节的最高位(符号位)是否为1(`if (temp &0x8000)`)来处理负温度。-负温度转换:将读取的16位补码按位取反加1得到原码的绝对值,再乘以0.0625并取负[^4]。2.**显示优化**:-显示负温度时,先取绝对值再显示负号。-小数部分处理:乘以10后取整得到1位小数,并进行了四舍五入(加0.5)以减小误差。3.**报警控制**:-高温报警:当温度超过`temp_high`(默认38℃)时,蜂鸣器报警,继电器吸合(假设继电器控制通风设备)。-低温报警:当温度低于`temp_low`(默认5℃)时,蜂鸣器报警,继电器吸合(假设继电器控制加热设备)。 4. **延时调整**:-代码中的延时函数`lcd_delay`基于循环实现,实际延时时间与单片机晶振频率有关,需根据实际情况调整。###优化建议(基于引用内容) 1. **提高精度**(引用[4]):-虽然DS18B20的精度在-10℃至+85℃范围内为±0.5℃,但我们可以通过软件滤波(如滑动平均)提高稳定性。-添加温度校准偏移量(如`calibration_offset`)来补偿硬件误差。2.**代码简洁与移植性**(引用[2]):-本代码采用寄存器直接操作,没有使用库函数,因此具有很好的可移植性,可以方便地移植到其他51系列单片机。 3. **显示优化**(引用[3]):-可以考虑在夜间模式时降低LCD背光亮度(如果硬件支持PWM调光),但本代码未涉及,需额外硬件支持。 ###注意事项-温度转换等待时间:实际中,DS18B20的12位精度转换需要750ms,因此主循环中每次读取温度后需要足够延时,否则可能读取到前一次的值。 -负温度显示:代码中处理了负温度,但注意LCD1602要能够显示负号(字符'-')。###相关问题&sect;&sect;相关问题&sect;&sect;1.如何修改代码以实现多个DS18B20传感器的温度读取?2.在KeilC51中如何优化延时函数的精度?3.如何增加按键设置温度阈值功能? 4.温度控制系统如何实现PID控制算法? 5.如何通过串口将温度数据发送到上位机?</think>以下是针对温度范围-40℃至+100℃的完整Keil C51程序,基于DS18B20温度传感器实现精确测量与报警控制: ```c #include <reg52.h> #include <intrins.h> #include <math.h> // 硬件接口定义 sbit DQ = P2^0; // DS18B20数据线 sbit RS = P2^1; // LCD1602寄存器选择 sbit RW = P2^2; // LCD读写控制 sbit EN = P2^3; // LCD使能端 sbit RELAY = P3^4; // 继电器控制 sbit BUZZER = P3^5; // 蜂鸣器 #define LCD_PORT P0 // LCD数据端口 // 全局变量 float temperature = 0.0; // 当前温度值 float temp_high = 38.0; // 默认高温阈值 float temp_low = 5.0; // 默认低温阈值 // LCD1602延时函数 void lcd_delay(unsigned int t) { while(t--); } // LCD1602写命令 void lcd_write_cmd(unsigned char cmd) { RS = 0; // 命令模式 RW = 0; // 写操作 LCD_PORT = cmd; EN = 1; lcd_delay(100); EN = 0; lcd_delay(100); } // LCD1602写数据 void lcd_write_data(unsigned char dat) { RS = 1; // 数据模式 RW = 0; // 写操作 LCD_PORT = dat; EN = 1; lcd_delay(100); EN = 0; lcd_delay(100); } // LCD1602初始化 void lcd_init() { lcd_delay(15000); lcd_write_cmd(0x38); // 8位数据接口,2行显示 lcd_delay(5000); lcd_write_cmd(0x0C); // 开显示,关光标 lcd_delay(5000); lcd_write_cmd(0x06); // 地址自动加1 lcd_delay(5000); lcd_write_cmd(0x01); // 清屏 lcd_delay(5000); } // LCD显示字符串 void lcd_display_string(unsigned char x, unsigned char y, char *s) { unsigned char address; if (y == 0) address = 0x80 + x; // 第一行地址 else address = 0xC0 + x; // 第二行地址 lcd_write_cmd(address); while (*s) { lcd_write_data(*s++); } } // DS18B20复位 void ds18b20_reset() { DQ = 1; _nop_(); _nop_(); DQ = 0; lcd_delay(240); // 480us以上复位脉冲 lcd_delay(240); DQ = 1; lcd_delay(30); // 等待15-60us while(DQ); // 等待DS18B20应答 lcd_delay(240); // 延时480us lcd_delay(240); } // DS18B20写一个字节 void ds18b20_write_byte(unsigned char dat) { unsigned char i; for (i = 0; i < 8; i++) { DQ = 0; _nop_(); _nop_(); // 开始写时序 DQ = dat & 0x01; // 写最低位 lcd_delay(60); // 延时60us DQ = 1; // 释放总线 dat >>= 1; } } // DS18B20读一个字节 unsigned char ds18b20_read_byte() { unsigned char i, value = 0; for (i = 0; i < 8; i++) { DQ = 0; _nop_(); _nop_(); // 开始读时序 DQ = 1; _nop_(); _nop_(); // 释放总线 value >>= 1; if (DQ) value |= 0x80; // 读取数据位 lcd_delay(60); // 延时60us } return value; } // 读取温度值(支持-40℃至+100℃) float ds18b20_read_temp() { unsigned char temp_l, temp_h; int temp; ds18b20_reset(); // 复位 ds18b20_write_byte(0xCC); // 跳过ROM ds18b20_write_byte(0x44); // 启动温度转换 lcd_delay(10000); // 等待转换完成(约750ms) ds18b20_reset(); // 复位 ds18b20_write_byte(0xCC); // 跳过ROM ds18b20_write_byte(0xBE); // 读取温度寄存器 temp_l = ds18b20_read_byte(); // 读取低字节 temp_h = ds18b20_read_byte(); // 读取高字节 temp = temp_h; temp <<= 8; temp |= temp_l; // 处理负温度(-40℃以下) if (temp & 0x8000) { // 负温度处理算法 temperature = -(float)((temp ^ 0xFFFF) + 1) * 0.0625; } else { temperature = (float)temp * 0.0625; // 12位精度 } return temperature; } // 温度显示处理(精确到0.1℃) void display_temperature() { char temp_str[16]; int temp_int, temp_dec; // 处理负温度显示 if (temperature < 0) { temp_int = (int)(-temperature); temp_dec = (int)((-temperature - temp_int) * 10 + 0.5); // 四舍五入 sprintf(temp_str, "Temp: -%2d.%dC", temp_int, temp_dec); } // 处理正温度显示 else { temp_int = (int)temperature; temp_dec = (int)((temperature - temp_int) * 10 + 0.5); // 四舍五入 sprintf(temp_str, "Temp: %3d.%dC", temp_int, temp_dec); } lcd_display_string(0, 0, temp_str); } // 报警控制(带滞回区间) void alarm_control() { char alarm_str[16]; static bit last_state = 0; // 高温报警(带+2℃滞回) if (temperature > (temp_high + 2.0)) { BUZZER = 1; RELAY = 1; sprintf(alarm_str, "HIGH ALARM!"); last_state = 1; } // 低温报警(带-2℃滞回) else if (temperature < (temp_low - 2.0)) { BUZZER = 1; RELAY = 1; sprintf(alarm_str, "LOW ALARM!"); last_state = 1; } // 正常范围(带滞回区间) else if ((temperature < (temp_high - 2.0)) && (temperature > (temp_low + 2.0))) { BUZZER = 0; RELAY = 0; sprintf(alarm_str, "NORMAL"); last_state = 0; } // 滞回区间保持原状态 else { if (last_state) sprintf(alarm_str, "ALARM HOLD"); else sprintf(alarm_str, "NORMAL HOLD"); } lcd_display_string(0, 1, alarm_str); } // 主函数 void main() { // 初始化 lcd_init(); BUZZER = 0; RELAY = 0; lcd_display_string(0, 0, "Temp Range:-40~100"); lcd_display_string(0, 1, "Initializing..."); lcd_delay(50000); while(1) { ds18b20_read_temp(); // 读取温度 display_temperature(); // 显示温度 alarm_control(); // 报警控制 lcd_delay(500000); // 延时约500ms } } ``` ### 关键功能说明 1. **温度范围处理**: - 使用16位补码处理负温度:$T = -( \overline{temp} + 1) \times 0.0625$ - 支持-40℃至+100℃全量程测量 - 精度±0.5℃(12位分辨率) 2. **显示优化**: - 温度显示格式:`Temp: -12.3C` 或 `Temp: 38.5C` - 四舍五入算法:`temp_dec = (int)((temperature - temp_int) * 10 + 0.5)` - 负温度特殊处理:显示负号并取绝对值 3. **报警控制优化**: - 滞回控制算法防止频繁切换: $$ \begin{cases} \text{高温报警} & T > T_{high} + 2 \\ \text{解除高温} & T < T_{high} - 2 \\ \text{低温报警} & T < T_{low} - 2 \\ \text{解除低温} & T > T_{low} + 2 \end{cases} $$ - 状态保持机制避免继电器频繁动作 4. **精度提升措施**: - 12位分辨率(0.0625℃/LSB) - 四舍五入显示处理 - 750ms稳定采样周期 ### 硬件连接参考 ``` DS18B20: VCC → 5V (加4.7K上拉电阻) DQ → P2.0 GND → GND LCD1602: RS → P2.1 RW → P2.2 EN → P2.3 D0-D7 → P0.0-P0.7 报警设备: 蜂鸣器 → P3.5 继电器 → P3.4(控制加热/制冷设备) ``` ### 性能优化建议 1. **提高测量精度**: ```c #define CALIB_OFFSET -0.3 // 校准偏移量 temperature += CALIB_OFFSET; ``` 2. **数字滤波算法**(减少抖动): ```c #define FILTER_SIZE 5 float temp_history[FILTER_SIZE]; float filtered_temp() { static int index = 0; float sum = 0; temp_history[index] = temperature; index = (index + 1) % FILTER_SIZE; for(int i=0; i<FILTER_SIZE; i++) { sum += temp_history[i]; } return sum / FILTER_SIZE; } ``` 3. **扩展串口通信**: ```c void uart_init() { /* 初始化串口 */ } void uart_send(char *str) { /* 发送数据到PC */ } // 在主循环中添加: char buf[32]; sprintf(buf, "%.1f\r\n", temperature); uart_send(buf); ``` > 本设计采用寄存器级编程[^2],代码简洁高效,可直接移植到STM32等平台。滞回控制算法有效防止设备频繁启停,夜间模式可参考环境光控制优化[^3]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值