黑马程序员-C语言基础知识-流程控制

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

流程控制的三种结构

C语言中的流程控制有三种结构。
第一种是顺序结构,默认的流程结构,按照书写顺序执行每一条语句。
第二种是选择结构,对给定的条件进行判断,再根据判断结果决定执行哪一段代码。
第三种是循环结构,在给定条件成立的情况下,反复执行某一段代码。

选择结构(if)

选择结构(if)有四种写法:
一、
第一种结构:

if(条件)
{
语句1;
语句2;
····
}

如果条件为真,就执行后面的语句,否则不执行。
示例1:

#include <stdio.h>
int main()
{
    int mathscore = 89;
    if (mathscore >= 80)
    {
        printf("math = %d,数学成绩优秀\n", mathscore);
    }
    return 0;
}

示例1的运行结果为:math = 89,数学成绩优秀
二、
第二种结构:

if(条件)
{
语句1;
}
else
{
语句2;
}

如果条件成立就执行语句1,否则执行语句2。
示例2:

#include <stdio.h>
int main()
{
    int mathscore = 59;
    if (mathscore >= 60)
    {
        printf("math = %d,数学成绩及格\n", mathscore);
    }
    else
    {
        printf("math = %d,数学成绩不及格\n", mathscore);
    }
    return 0;
}

示例2的运行结果是:math = 59,数学成绩不及格
三、
第三种结构:

if(条件1)
{
语句1;
}
else if(条件2)
{
语句2;
}
····
else 
{
语句n;
}

示例3:

#include <stdio.h>
int main()
{
    int mathscore = 75;
    if(mathscore >= 80)
    {
        printf("math = %d,数学成绩优秀\n", mathscore);
    }
    else if(mathscore >= 60)
    {
        printf("math = %d,数学成绩及格\n", mathscore);
    }
    else
    {
        printf("math = %d,数学成绩不及格\n",mathscore);
    }
    return 0;
}

示例3的结果运行结果是:math = 75,数学成绩及格
四、
第四种结构:

 if (条件)
   语句1;
   语句2;

如果条件成立就执行语句1,语句2不属于此条件结构。
示例4:

#include <stdio.h>
int main()
{
    int mathscore = 85;
    if(mathscore >= 60)
    printf("math = %d,数学成绩及格\n", mathscore);
    return 0;
}

示例4的运行结果是:math = 85,数学成绩及格
五、
if使用注意:
1. 比较大小时,可以把常量值放在左边,变量值放在右边以避免错误。因为if(a==0)也容易被写成if(a=0),而这种情况,编译器并不会报错,推荐使用if(0==a)这种写法。
2. 注意赋值运算符,不要把=写成是==。
3. if(条件)后面不要加分号,这代表是一个空语句,后面的代码块将成为一个独立的代码块。比如,if(条件);{…..}。if(条件)跟的是空语句,后面的这个代码块会变成独立的代码块,与if(条件)无关。
4. 注意作用域的问题,如果要在if后面定义新的变量,则一定要使用大括号。
示例5:

if(10>6)
{
  int a;//a的作用域在代码块结束后失效
}
printf(“a=%d”,a);//编译器报错,找不到标识符a
if(10>6)
int a; //这种情况下报错,a的作用域不明确
printf(“a=%d”,a); //编译器报错,找不到标识符a

示例5展示了作用域不明的问题。
5. 随便挑一个数值也可以做条件。
示例6:

#include <stdio.h>
int main()
{
 if(0)
 {
    printf("假\n");
 }
 else
 {
    printf("真\n");
 }
 return 0;
 }

示例6的运行结果是:真

选择结构(switch)

一、
switch结构:
switch的用法:

Switch(值) //通常是变量
{
      Case 数值1:
           语句1Break;
      Case 数值2:
           语句2Break;
      Case 数值3:
           语句3Break;
      default :
           语句4Break;
}

该结构把条件语句中的值与数值1进行比较,若相等,则执行后面的所有语句,直到遇见break语句跳出整个switch结构,若前面的条件都不满足,则最终会执行default后面的语句。如果不写break语句,则后面的语句会接连执行,直到遇到break语句或者是全部语句执行完毕,这种情况我们称之为穿透。
示例7:

#include <stdio.h>
int main()
{
    int date = 5;
    switch (date)
    {
        case 1:
            printf("today is monday\n");
            break;
        case 2:
            printf("today is tuesday\n");
            break;
        case 3:
            printf("today is wednesday\n");
            break;
        case 4:
            printf("today is thursday\n");
            break;
        case 5:
            printf("today is friday\n");
            break;
        case 6:
            printf("today is saturday\n");
            break;
        case 7:
            printf("today is sunday\n");
            break;
        default:
            break;
    }
    return 0;
}

示例7的运行结果是:today is friday
二、
switch结构的使用注意:

Char c=‘A’;
Switch(c)
{
      Case ‘A’:
           语句1Break;
      Case  65//不能这样写,因为‘A’的ASCII值就是65,两条case语句一样会报错
            语句2Break;
      Case 数值3:
           int a=10;/*a的作用域不明确报错,如果要在case语句后面定义新的变量则要加{}*/
           Break;
      Default :
           语句4Break;
}

如果要在case后面的语句中定义变量,则必须使用大括号包住。
三、
if与switch对比:
1. if语句能够完成的功能,switch有时并不能够完成,比如,判断if(a>100)。
2. 在有些情况下,if语句和switch语句可以互换。
3. switch语句能完成的功能,if语句都可以完成。

循环结构(do-while)

do-while循环结构至少会被执行一次,在while后面的条件成立的情况下,括号里面的语句会不断的循环执行,什么时候条件不成立了什么时候循环结束。
do-while循环结构:

do
{
  语句
}while(条件)

示例8:

#include <stdio.h>
int main()
{
    int a = 1;
    do
    {
        a++;//a自增一次
    }while(a<1);//条件不成立循环结束
    printf("a = %d\n", a);
    return 0;
}

示例8的运行结果是:a = 2
在示例8中虽然变量a一开始就不满足while后面的条件,但是还是执行了一次括号里面的循环体,这说明do-while循环是先执行循环体中的内容再判断条件成不成立。

循环结构(while)

一、
while循环结构的写法:

While(条件)
{
语句;
}

先判断条件是否成立,如果成立则执行括号里面的语句,然后再判断条件是否成立如果成立再次执行括号里面的语句,如此反复循环直到条件不成立为止。
示例9:

#include <stdio.h>
int main()
{
    int a = 10;
    while(a > 0)
    {
        a--;
    }
    printf("a = %d\n", a);
    return 0;
}

示例9的运行结果是:a = 0
如果一开始条件不成立那么后面的循环体一次也不会执行。
二、
使用注意:
1> while(1){…..}是一个死循环。
2> while(a<10);{…}在条件后面加分号表示循环体是一个空语句,而非{}部分。
3> while条件语句后推荐使用{},否则只有第一条语句是循环体。
比如:while(条件) 语句1;语句2;
只有语句1是循环体的内容语句2不是。
4> 最简单的死循环 :while(1);
永远执行空语句,让程序崩溃。

循环结构(for)

一、
使用方法:

for(语句1,条件,语句2)
{
    循环体
}

语句1:一般为初始化语句 。语句2:一般为增量或减量语句(执行完循环体后再执行的语句)。for循环一开始就会执行语句1(整个for循环只会执行一次),下面判断条件是否成立,若成立,则执行一次循环体,然后执行语句2,再次判断条件是否成立,若条件不成立则结束循环,若条件成立则继续执行循环体。
for循环相较于while循环,在性能上for循环稍胜一筹,因为while循环只能使用外部的变量用于条件判断,而for循环可以自己定义变量用于条件判断,这个变量会随着for循环的结束被及时回收。
示例10:

#include <stdio.h>
int main()
{
    int sum = 0;
    for (int i = 1; i <= 10; i++)
    {
        sum += i;
    }
    printf("sum = %d\n", sum);
    return 0;
}

示例10利用for循环计算出了10以内的整数和,运行结果是:sum = 55
二、
for循环使用注意:
1. 不要随便在for语句后面写上分号,比如,for();{….} 这样for循环的循环体为空语句。
2. 定义变量的作用域不明确错误:

for(int i=0;i<5;i++)
int a=10; //编译器报错,变量作用域不明确

如果要在for循环体内定义变量则必须要加括号。
3. for循环中最简单的死循环写法:for(;;);
三、
for循环的嵌套使用:
for循环可以嵌套使用,下面利用嵌套for循环输出99减法表。
示例11:

#include <stdio.h>
int main()
{
    int i,j;//定义两个整型变量控制for循环
    for (i=1; i<=9; i++)//第一层for循环控制行数
    {
        for (j=1; j<=i; j++)//第二层for循环控制每行执行几次循环体即控制列数
        {
            printf("%d-%d=%d\t",i ,j, i-j);/*输出减数、被减数以及两数相减的差*/
        }
        printf("\n");//每行结束之后换行
    }
    return 0;
}

示例11的运行结果是:
1-1=0
2-1=1 2-2=0
3-1=2 3-2=1 3-3=0
4-1=3 4-2=2 4-3=1 4-4=0
5-1=4 5-2=3 5-3=2 5-4=1 5-5=0
6-1=5 6-2=4 6-3=3 6-4=2 6-5=1 6-6=0
7-1=6 7-2=5 7-3=4 7-4=3 7-5=2 7-6=1 7-7=0
8-1=7 8-2=6 8-3=5 8-4=4 8-5=3 8-6=2 8-7=1 8-8=0
9-1=8 9-2=7 9-3=6 9-4=5 9-5=4 9-6=3 9-7=2 9-8=1 9-9=0

break和continue

一、
break常用在switch结构(前面介绍不再敖述)和循环结构中,用在循环结构中它会跳出整个循环,也就是说可能在循环条件还成立的情况下循环被提前结束。
示例12:

#include <stdio.h>
int main()
{
    int sum = 0;
    for (int i = 1;i <= 10;i++)
    {
        sum += i;
        if (i == 5)
        {
            break;//如果i等于5则结束整个for循环
        }
    }
    printf("sum = %d\n", sum);//只计算了1~5之间的整数和,所以输出结果会是sum = 15
    return 0;
}

示例12的运行结果是:sum = 15
二、
continue用在循环结构中,它的作用是跳过当次循环,继续执行下一次循环。
示例13:

#include <stdio.h>
int main()
{
    int sum = 0;
    for (int i = 1;i <= 10;i++)
    {
        if (i == 5)
        {
            continue;//结束当次循环,下面的语句不会再执行,继续下一次循环
        }
            sum += i;
    }
    printf("sum = %d\n", sum);/*因为当i等于5时循环跳出,所以sum没有加5,其它10以内的正整数都加了,所以sum最后是50,输出是sum = 50*/
    return 0;
}

示例13的运行结果是:sum = 50

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值