C语言的分支和循环(初学者必看!!)

一、简要介绍

        C语言,简而言之,是一种我们与计算机交流的语言。通过特定的语法和结构,写出计算机能够理解的语句,让计算机去执行我们想让其执行的操作。

        C语言中,语句是构成程序的基本单位,一条语句是一个指令或命令,用于执行我们想让计算机执行的操作。每个语句通常以分号(;)结尾,但要注意,C语言中所有的语句结构都是以英文来书写,只有我们自己进行一些特别的操作会用到中文。

       C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构,C语⾔是能够实现这三种结构的,其实我们如果仔细分析,我们⽇常所⻅的事情都可以拆分为这三种结构或者这三种结构的组合。

C语言的语句大致有六种:赋值语句、条件语句、循环语句、函数调用语句、空语句、复合语句

1.赋值语句,这便是一条简单的赋值语句,用于给变量a赋值为5

a = 5;

2.条件语句

if(条件表达式)
{
    // 这里面写条件为真时执行的语句,我们就写打印条件是真的 
    printf("real!!");

}
else
{
    printf("false");
}

上述便是C语言中最常见的条件语句——if-else,也是分支结构的一种。值得注意的是在C语言中我们把0看成“假”,非0看成“真”,即只要上述的条件表达式的结果为非零就执行为真时执行的语句;(本章会重点讲解这个分支和循环,所以这里不太明白也不用着急,哈哈)。

3.循环语句

我们在C语言解决问题中,可能会遇到一次额需要重复执行的操作。比如,计算1+2+···+n,这时如果我们一个一个赋值进行计算,那无疑是愚蠢的(哈哈)。所以C语言给了我们循环结构,借助循环语句,我们便可简洁解出上述问题

int i=1;
int sum = 0;

for(i=1;i<=n;i++)
{
    sum = sum + i;
}    

我们在这里定义了一个循环变量(就当成一个简单变量,不用深究,哈哈哈),然后又定义了sum变量作为“容器”储存后面1,2,···n相加的值。寥寥几句就解决了原本束手无策的问题。(看不懂不要着急,哈哈,后面会一一介绍的,但你要了解一些C语言的常见概念和数据类型以及变量哦。哈哈,我有点懒,这个第一课没给你们整理,但我相信你们的自觉性的,哈哈)(可能有时间也给你们补一下,嘿嘿)

4.函数调用语句(这个比较知识点靠后,但这里还是大致提一下)

函数调用语句是用于调用函数,并执行函数中的代码,实现某些功能的语句。这里不做详细介绍几句一例,后续的章节会介绍

void fun()
{
    printf("我爱编程\n");
}

int main()
{
    fun();    

    return 0;
}

这里在主函数main里面,调用了fun函数,fun函数的功能是打印"我爱编程"

5.空语句

既然每个语句都以';'结尾,那当我们什么都不写的时候,会发生什么,哈哈,这便是一个空语句,他没有任何操作。

;

6.复合语句

复合语句是由多条语句组成的块,通常使用大括号{}括起来。如:

{
    int a = 10;
    printf("haha\n");
    printf("%d\n",a);

    //在这个括号里我们执行了三条语句

}

二、分支语句

在C语言中,我们可以通过使用if-else语句和switch语句实现分支结构,下面开始一一介绍

1. if语句

1.1 if语句的语法形式如下

if(表达式)
    语句;

前面我们提到过,C语言中,0为假,非零为真,所以只要表达式的值为非零,就会执行下面跟着的语句。下面就是一个简单的语句,输入一个数a,判断其是否为奇数,是奇数的话就打出a是奇数。其中我们用“==”来判断是否相等,与“%”来计算一个数除以另一个数得到的余数。(关系操作符后面也会讲到)

int main()
{
    int a = 0;
    scanf("%d",&a);
    if(a % 2 == 1)
        printf("a为奇数\n");



    return 0;
}

1.2 else

 那如果不是奇数,就是偶数,我们能不能打出“a是偶数”呢?当然可以!我们这时候需要借助else

if(表达式)
    语句 1;
else
    语句 2;

这里如果if里面的表达式为假,那么就不执行if后面的语句 1;而加上else,它与这个if相匹配,配成一个组合,如果为假,就执行else后面的语句 2 ;那么我们就可以完成刚才的程序了。

int main()
{
    int a = 0;
    scanf("%d",&a);
    if(a % 2 == 1)
        printf("a是奇数\n");
    else
        printf("a不是奇数\n");
    return 0;
}

1.3 一个分支中包含多个语句

我们此时不仅向打印出a是不是奇数,还想打出a是多少在下一行,是不是直接加上一个printf就行?就像下面这样。

{
    int a = 0;
    scanf("%d",&a);
    if(a % 2 == 1)
        printf("a是奇数\n");
        printf("a = %d\n",a);
    else
        printf("a不是奇数\n");
        printf("a = %d\n",a);
    return 0;
}

哈哈哈,你可以运行一下试试,你会发现无论a是奇数还是偶数,都会打出两行“a = ?”,(?是你输入的a的值)。这是因为,if和else默认只能控制一条语句,不仅是他们,while,for的循环也是只默认控制一条语句。那如果我们想让它控制多条语句怎们办呢?我们只需要借助大括号“{}”,把他们括在一起,这个大括号就相当于把这几条语句合并成“一条语句”,这样就可以实现我们的要求了。

{
    int a = 0;
    scanf("%d",&a);
    if(a % 2 == 1)
    {
        printf("a是奇数\n");
        printf("a = %d\n",a);
    }
    else
    {
        printf("a不是奇数\n");
        printf("a = %d\n",a);
    }
    return 0;
}

1.4 else if

我们在使用if-else的时候,有时候结果不止由两种,也许有三种,四种;这样的情况下,C语言也提供了一个语法else if去实现多分支。else if 的使用与if相同,表达式为真是就执行其控制语句,不过要从上向下依次执行,只要有一个if,或else if的条件为真就执行其语句,不再向下执行了。如果都不满足,就执行else控制的语句

int main()
{
    int a = 0;
    scanf("%d",&a)
    if(a > 0)
    {
        printf("a是正数\n");
    }
    else if(a < 0)
    {
        printf("a是正数\n");
    }
    if(a == 0)
    {
        printf("a为零\n");
    }





    return 0;
}

1.5 if-else的嵌套

我们在遇到一些问题时有时不仅仅要进行一次判断,而是要进行多次判断。比如,a受否大于零,如果大于零是否是奇数。那们对于这样的多重判断我们就要用到嵌套了,就是一个if控制的语句里面又有一个if语句。

int main()
{
    int a = 0;
    scanf("%d",&a)
    if(a > 0)
    {
        printf("a是正数\n");
        if(a %2 == 1)
            printf("a还是奇数\n");
        else
            printf("a还是偶数\n");
    }
    else if(a < 0)
    {
        printf("a是正数\n");
        if(a %2 == 1)
            printf("a还是奇数\n");
        else
            printf("a还是偶数\n");
    }
    if(a == 0)
    {
        printf("a为零\n");
        if(a %2 == 1)
            printf("a还是奇数\n");
        else
            printf("a还是偶数\n");
    }





    return 0;
}

在这里,细心的小伙伴估计已经发现了,else if本身就是一个嵌套语句,当最初的if为假时,我们进入else,else后面紧跟着一个if,形成了嵌套语句。这样,你对嵌套和if-else的使用是不是更深入了呢?

1.6 注意事项

当我们使用多个if,else的时候,切记,一个else,只跟离他最近的if相配对,如下面的第一张图,我们把第一个if和else对齐,我们原本是想当a == 1,b == 2时打印“happy”,不是时打印“no!”,可是当你运行起来发现,什么都没有打印,因为这里的else是跟第二个if配对了。所以,在我们书写代码时,通常都用大括号括起来,整理成更课=可读,可理解的样子,这样就不会发生上面的问题了。

int main()
{
    int a = 1;
    int b = 2;
    if(a == 1)
        if(b == 2)
            printf("happy\n");
    else
        printf("no!\n");
    


    return 0;
}

int main()
{
    int a = 1;
    int b = 2;
    if(a == 1)
    {
        if(b == 2)
        {
            printf("happy\n");
        }

    }
    else
    {
        printf("no!\n");
    }


    return 0;
}

2. switch语句

2.1 switch的用法

        上面我们提到,如果我们有多个分支,可以使用else if去处理,可当这分支很多很多,比如输入数字,转化为星期几,我们就要打出6个else,这太过繁杂了。C语言又给了我们switch语句来解决这一问题。

switch (expression) 
{
    case value1: statement
    case value2: statement
    default: statement
}

switch 语句是⼀种特殊形式的 if-else 结构,⽤于判断条件有多个结果的情况。它把多重
的 else if 改成更易⽤、可读性更好的形式。
上⾯代码中,根据表达式 expression 不同的值,执⾏相应的 case 分⽀。如果找不到对应的值,
就执⾏ default 分⽀

那么数字转成星期几就可以向下面这样

int main()
{
    int n = 0;
    scanf("%d",&n);
    switch(n)
    {
        case 1:
            printf("星期一");
            break;
        case 2:
            printf("星期二");
            break;
        case 3:
            printf("星期三");
            break;
        case 4:
            printf("星期四");
            break;
        case 5:
            printf("星期五");
            break;
        case 6:
            printf("星期六");
            break;
        case 7:
            printf("星期日");
            break;
        default:
            printf("请输入1~7的数字");
            break;    
        

    }

    return 0;
}

这里的break是用来跳出switch的,如果我们没有这个break(英文是打断的意思,循环也会用到),如果我们输入1,它就会从case 1 执行,执行完case 1后,由于没有打断,他就会继续执行case 2,直到遇到break或者该条switch语句执行完毕为止(default在最后,default也会打印哦);

2.2 注意事项:

 switch 后的 expression 必须是整型表达式;case 后的值,必须是整形常量表达式。

 case 和后边的数字之间必须有空格;每⼀个 case 语句中的代码执⾏完成后,需要加上 break ,才能跳出这个switch语句。

default的位置没有要求,case 1 ,case 2···等的位置也没有要求,可以随意放置,switch会找到后面相对应的值进行执行。但一般我们会按一定顺序,且把default放到最后。

二、关系操作数

1.关系操作符

1.1 关系运算符

C语言中有很多的关系表达式,其中里面使用的运算符就是“关系运算符”,如我们前面提到过的“==”,它们主要有六个:“>”——大于运算符,“<”——小于运算符,“<=”——小于等于运算符,“>=”——大于等于运算符,“==”——等于运算符,“!=”不等于运算符。

前面我们也说过,C语言中0为假,非零为真,那下面的代码的返回值就是0或1。

a == b;
a != b;
a < b;
a > b;
a <= b;
a >= b;

所以关系表达式常用于if结构或while结构(while是一种循环结构,后面会讲解)中。

if (x == 3) 
{
    printf("x is 3.\n");
}

1.2.  特别注意:

1.2.1 相等运算符“==”和赋值运算符“=”是两个不一样的运算符,千万千万不要弄混淆,如果写成了下面的样子,就会发生意想不到的效果。如下面,我的原意是 x == 3 ,但是不⼩⼼写成 x = 3 。这个式⼦表⽰对变量 x 赋值 3 ,它的返回值为 3 ,所以 if 判断总是为真。(所以==0如果写错了,那是不是就永远返回假,就永远不执行!!!)

if (x = 3) 
{
    printf("x is 3.\n");
}

1.2.2 多个运算符不宜连用

如果我们向写一个条件,想让a在50到100之间时,打印“成功了一半了”,写成了下面那样,把这段代码偷偷藏起来吧,以后看到了要笑掉大牙的。(但是python有这样的结构,当然我这里不教的,哈哈)这里就犯了一个C语言初学者的错误,多个关系运算符不宜连用

int main()
{
    int a;
    scanf("%d",&a);
    if(50 < a < 100)
    {
        printf("成功一半了\n");
    }


    return 0;
}

我们的原意是想判断a是否在50~100之间,可是,C语言中,上面介绍的关系运算符,是同一优先级的(这里可以通过数学中的加减乘除,先乘除,后加减,乘除,加减从左向右依次计算),所以会从左向右计算。那么前面的 50 < a,根据我们前面介绍的是不是就返回1或0,然后计算 1或0 < 100,结果肯定会返回1,所以,C语言中,关系运算符不宜连用。如果想实现上述功能,我们可以借助另外的操作符——逻辑操作符(&&,||,!)

int main()
{
    int a;
    scanf("%d",&a);
    if(50 < a && a < 100)
    {
        printf("成功一半了\n");
    }


    return 0;
}

我们将在介绍完条件操作符后讲解。

1.3 条件操作符

条件操作符也叫三⽬操作符,需要接受三个操作数的,形式如下:

exp1 ? exp2 : exp3

 条件操作符的计算逻辑是:如果 exp1 为真, exp2 计算,exp2计算的结果是整个表达式的结果;如果exp1 为假, exp3 计算,exp3 计算的结果是整个表达式的结果。我们可以用它改造一些函数。

#include <stdio.h>
int main()

{
    int a = 0;
    int b = 0;
    scanf("%d %d", &a, &b);
    if (a > 5)
    b = 3;
    else
    b = -3;
    printf("%d\n", b);
    return 0;
}
    改造后:
#include <stdio.h>
int main()
{
    int a = 0;
    int b = 0;
    scanf("%d", &a);
    b = a>5 ? 3:-3;
    printf("%d\n", b);
    return 0;
}

这里我们给b赋值“b =”,后面是一个条件操作符,它的返回值就是b被赋的值,这里如果a>5,exp1为真,b = 3,反之,b = -3;

2. 逻辑操作符

2.1 逻辑运算符

! :逻辑取反运算符(改变单个表达式的真假)。
&& :与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。
|| :或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)。
注:C语⾔中,⾮0表⽰真,0表⽰假。

2.1.1 逻辑取反运算符

假如我们需要一个flag,只有当flag为假时我们才执行一些操作,比如除法,除数不能为零。下面写一个除法计算器

int main()
{
    int a = 1,b = 1;
    int flag = (b==0); 
    scanf("%d",&a,&b);
    if(!flag)
    {
        printf("%d\n",a/b);
    }


    return 0;
}

我们这里加了一些不必要的操作,但其实是为了更深的去理解,如果 flag 为真, !flag 就是假,如果 flag 为假, !flag 就是真,所以上⾯的代码的意思就是 flag 为假,执⾏if语句中的代码。

2.1.2 与运算符

&& 就是与运算符,也是并且的意思, && 是⼀个双⽬操作符,使⽤的⽅式是 a&&b , && 两边的表达式都是真的时候,整个表达式才为真,只要有⼀个是假,则整个表达式为假。可以通过我们前面局的例子理解

int main()
{
    int a;
    scanf("%d",&a);
    if(50 < a && a < 100)
    {
        printf("成功一半了\n");
    }


    return 0;
}

2.1.3 或运算符

和与运算符刚好相反,|| 就是或运算符,也就是或者的意思, || ?也是⼀个双⽬操作符,使⽤的⽅式是 a || b , || 两边的表达式只要有⼀个是真,整个表达式就是真,两边的表达式都为假的时候,才为假。

比如我们想说当a等于1,2时,输出“a不是1就是2”.

int main()
{
    int a;
    scanf("%d",&a);
    if(a == 1 || a == 2 )
    {
        printf("a不是1就是2\n");
    }


    return 0;
}

2.1.4 注意:

C语⾔逻辑运算符还有⼀个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是保证的。如果左边的表达式满⾜逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。

int main()
{
    int a;
    scanf("%d",&a);
    if(a == 1 || a == 2 )
    {
        printf("a不是1就是2\n");
    }


    return 0;
}
int main()
{
    int a;
    scanf("%d",&a);
    if(50 < a && a < 100)
    {
        printf("成功一半了\n");
    }


    return 0;
}

 如果 && 前面的操作数为假,即 50<a为假,计算机就不会再去运算 a<100,整个表达式就被赋值为“假”,即0;同理 || 如果,其左操作数为真,整个表达式就是真,为1.短路的这种现象,看似添加了不少麻烦,实际正式因为它,计算机的运算的速度才大大提升。

当然,当短路遇到赋值运算,当然我们可能以为的变量的值就会改变,感兴趣的可以自己尝试。

三、循环结构

1.循环语句

1.1 while循环

while(表达式)
    语句; //如果循环体想包含更多的语句,可以加上⼤括号

if(表达式)
    语句;

上面就是while循环的语法结构,是不是和下面的if结构非常相似。但是,二者当然是有区别的,while是循环,当表达式为真时,就执行其控制的语句,执行完成后,再去判断表达式是否为真,只要为真,就会一直循环下去。那比如我们想把1到100,打印到屏幕上,就可以写成下面的样子

int main()
{
    int i = 1;
    while(i<=100)
    {
        printf("%d ",i);
        i = i + 1;
    }



    return 0;
}

特别要注意的的是,如果我们不设置i=i+1(i++),没有了限制条件,那么表达式一直为真,循环就一直执行下去,就造成了死循环。这在计算机中有时会产生很严重的损害,有一定的危险性。

1.2 for循环

相比于while循环,C语言中还有一种更常使用的循环,for循环,它的语法结构如下

for(表达式1; 表达式2; 表达式3)

表达式1⽤于循环变量的初始化;表达式2⽤于循环结束条件的判断;表达式3⽤于循环变量的调整

下面举个例子更能说明其用法

int main()
{
    int i = 1;
    for(i = 0;i <= 100;i++)
    {
        printf("%d ",i);
    }


    return 0;
}

 这也是一个从1打印到100的循环程序,其中i++是C语言的一种写法,就相当于i=i+1;(两者有区别,可能以后会有一篇专门介绍相关的一些知识,可能哦!)。

  ⾸先执⾏ 表达式1 初始化循环变量,接下来就是执⾏ 表达式2 的判断部分, 表达式2 的结果如果
>100,则循环结束;                                                                                                                         表达式2 的结果如果!=0则执⾏循环语句,循环语句执⾏完后,再去执⾏表 达式3 ,调整循环变量,然后再去 表达式2 的地⽅执⾏判断, 表达式2 的结果是否为0,决定循环是否继续。整个循环的过程中,表达式1初始化部分只被执⾏1次,剩下的就是表达式2、循环语句、表达式3在循环

我们可以看出,for循环会要求设置一个循环变量,这样就避免了前面while循环中潜在的危险,二者通常情况下可以相互转换,但也有各自的优势。比如,我们有一个能实时传递室内温度的函数fun,如果室内温度低于0度,发出警报,提醒人们屋内温度极低。如:

int main()
{
    int T = 1;
    T = fun();
    while(T < 0)
    {
        printf("警告,室内温度已经零下");//这里用打印代替,它也可以是一个发出蜂鸣函数
        T = fun();
        
    }



    return 0;
}

只要温度在零下 ,警报就不停止。那么我们用while循环就可以很好的解决,用for的话,就很棘手。

1.3 do while循环

C语言中还有一种于while循环类似的循环,它的基本语法结构如下:

do
语句;
while(表达式)

while 和 for 这两种循环都是先判断,条件如果满⾜就进⼊循环,执⾏循环语句,如果不满⾜就跳
出循环;
⽽ do while 循环则是先直接进⼊循环体,执⾏循环语句,然后再执⾏ while 后的判断表达式,表
达式为真,就会进⾏下⼀次,表达式为假,则不再继续循环。我们也可以举个打印1~100的例子

int main()
{
    int i = 1;
    do
    {
        printf("%d ", i);
        i = i + 1;

    }while(i<=100);

    return 0;
}

⼀般 do while 使⽤在循环体⾄少被执⾏⼀次的场景下,所以较少⼀些,但是存在即合理,肯定有一些地方能让它大放光彩!

1.4特别语法——goto语句

C语⾔提供了⼀种⾮常特别的语法,就是 goto 语句和跳转标号, goto 语句可以实现在同⼀个函数
内跳转到设置好的标号处。举个例子更能生动形象的写出它的使用方法:

int main()
{
    printf("我是第一行,哈哈哈\n");
    goto next; 
    printf("我是第二行哈哈哈\n");
next:
    printf("你高兴的太早了,只有我才是第二行\n");
    return 0;
}

这里再程序执行完第一个printf后,执行了goto语句,跳转到了其跳转标号 next:处,所以第二个printf就没有打印,利用goto语句也能实现循环。

int main()
{
    int i = 1;

c:
    if(i<=100)
    {
        printf("%d ",i);
        i++;
        goto c;
    }

    return 0;
}

要注意的是,跳转标号的命名规则于标识符差不多,但是跳转标号不能以下划线(_)开头。goto 语句如果使⽤的不当,就会导致在函数内部随意乱跳转,打乱程序的执⾏流程,所以我们的建
议是能不⽤尽量不去使⽤;它这样看起来是不是感觉有些鸡肋,但不要着急,下面在再介绍一些功能,就会发现它的独特用处 。

2. 循环的嵌套,break和continue语句

2.1break和continue语句

2.1.1break

我们在使用循环时,有时不必要将整个循环走完,只要出现了某些条件,我们就可以跳出循环,这时候我们就需要break的帮助了,比如:我们在打印1~100时,我们想在i= 47时就停下来,就可以这样写

int main()
{
    int i = 1;
    for(i = 0;i <= 100;i++)
    {
        printf("%d ",i);
        if(i==47)
            break;
        
    }


    return 0;
}

小伙伴们可以思考一下这个if(i==47)break;放在printf之前和之后,结果有什么区别,并试一试。这样,当i增加到47时,while循环就结束了,不用再递增到100;那么我们就可以利用它写一个判断一个数是不是素数的函数了(素数的因子只有1和它本身)

int main()
{
    int i = 1;
    int k = 0;
    scanf("%d",&k);
    for(i = 2;i < k;i++)
    {
        
        if(k%i==0)
        {
            printf("%d不是素数\n",k);
            break;
        }
        
    }
    if(i == k)
        printf("%d是素数\n",k);


    return 0;
}

只要从2到k-1,有一个数能被k整除,那么k就不是素数,就可以跳出循环的,而当其走完整个循环后,说明其是素数,i也增加到了k。

2. 1.1 continue语句

假如我们在打印1到100的要求又变了,如果遇到五的倍数,我们就跳过,不打印了,除了用if去处理,我们还可以用continue

int main()
{
    int i = 1;
    for(i = 0;i <= 100;i++)
    {
        if(i % 5 == 0)
            continue;

        printf("%d ",i);
    }


    return 0;
}

这样,当遇到五的倍数时,就执行continue语句,continue会跳过此次循环后面的语句,那就直接执行循环变量的调整,再去判断。但要注意的时,结合while循环时,如果操作不当,可能会引发问题

int main()
{
    int i = 1;
    while(i<=100)
    {
        if(i%5 == 0)
            continue;
        
        printf("%d ",i);
        i = i + 1;
    }



    return 0;
}

 

int main()
{
    int i = 1;
    while(i<=100)
    {
        //i++;//放在这里也可以但会导致跳过1的打印
        if(i%5 == 0)
        {
            i++;
            continue;
        }
        printf("%d ",i);
        
    }



    return 0;
}

 上面的程序,当i增加到5时,就会执行continue,那后面的i=i+1,也跳过了,这就会导致死循环!我们可以在continue前面添加i++来解决

2.2 循环的嵌套

前面说过分支是可以嵌套的,C语言中循环同样可以嵌套,比如我们可以用循环打印一个九九乘法表

int main()
{
	
	int i = 1, j = 1;
	for(i = 1;i<=9;i++)
	{
		for(j = 1;j<=i;j++)
		{
			printf("%d×%d=%d ",j,i,j*i);
		}
		printf("\n");
	}
	
	
	return 0;
}

注意:当循环循环嵌套时,break就只会跳出一层循环,所以当我们想一次跳出所有循环时,就可以使用前面的goto语句(这便是其独特作用之一)。

for(...)
{
    for(...)
    {
        for(...)
        {
            if(disaster)
            goto error;
        }
    }
}

error:
//..

好了,本节的C语言分支与循环就介绍到这里了,后续也会更新更多内容,可以关注小薇,跟小薇一起学习啊!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值