【C 语法篇】三. C语言的流程控制

目录

前言:

1.顺序结构

        1.1 printf( )输出

        1.2 scanf( )输入

2.选择结构

        选择

        2.1 if

                1) if 最简单的用法

                2) if 的范围问题

                3) if···else···的用法

                4)if···else if···else···的用法

                5)if 常见问题解析

        2.2 switch

3.循环结构

        循环

                3.1 for

                        1)格式

                        2)执行的流程【重点】

                                <1>单个 for 循环的使用

                                 <2>多个 for 循环的嵌套使用

                                <3>范围问题

                                <4>举例【求1~100的和】

        3.2 while

                        1)格式

                        2)执行流程

                        3)while 与 for 的比较

        3.3 do while

                1)格式

                2)执行流程

        3.4 break 语句

        3.5 continue 语句


前言:

        流程控制是学习C语言的第一个重点,它分为顺序结构选择结构循环结构

什么是流程控制?

        简单来说就是程序执行代码的顺序

1.顺序结构

        顺序结构是最基础简单的,只有简单的输入输出

        1.1 printf( )输出

                printf( ) 的作⽤是将参数⽂本输出到屏幕。

#include<stdio.h>
int main()
{
    printf("hello world!");
    return 0;
}

      

  

printf( ) 是在标准库的头⽂件 stdio.h 定义的。使⽤这个函数之前,必须在源码⽂件头部引⼊这个头⽂件。

        1.2 scanf( )输入

                scanf( ) 函数⽤于读取⽤⼾的键盘输⼊

        当我们有了变量,我们需要给变量输⼊值就可以使⽤ scanf 函数,如果需要将变量的值输出在屏幕上的时候可以使⽤ printf 函数。

#include <stdio.h>
int main()
{
     int score = 0;
     printf("请输⼊成绩:");
     scanf("%d", &score);
     printf("成绩是:%d\n", score);
     return 0;
}

        scanf() 原型定义在头⽂件 stdio.h scanf( ) 的语法跟 printf( ) 类似。

//注意:变量前⾯必须加上 & 运算符(指针变量除外),因为 scanf() 传递的不是值,⽽是地址, 即将变量 i 的地址指向⽤⼾输⼊的值。 如果这⾥的变量是指针变量(⽐如字符串变量),那就不⽤加 & 运算符。

2.选择结构

        选择

                定义:某些代码可能执行,也可能不执行,有选择地执行某些代码。

                分类:ifswitch

        2.1 if

                1) if 最简单的用法

if (表达式)
    语句;

     功能:表达式成⽴(为真),则语句执⾏,表达式不成⽴(为假),则语句不执⾏ 。

// 在C语⾔中,0为假,⾮0表⽰真,也就是表达式的结果如果是0,则语句不执⾏,表达式的结果如果不是0,则语句执⾏。

                2) if 的范围问题

if(表达式)
    语句A;
    语句B;

if 默认只能控制语句A的执行与否,无法控制语句B的执行与否;或者说语句B一定执行。

if(表达式)
{    
    语句A;
    语句B;
}

此时 if 可控制语句A和语句B。 

 由此可见:if 只能控制一个语句的执行与否,如果想控制多个语句,就要把这些语句用{}括起来。

                3) if···else···的用法

if(表达式)
    语句A;
else
    语句B;

// 默认在 if else 中默认都只控制⼀条语句

                4)if···else if···else···的用法

if (表达式1)
    语句A;
else if (表达式2)
    语句B;
else if (表达式3)
    语句C;
else
    语句D;
// 如果有多个 if else ,可以记住这样⼀条规则, else 总是跟最接近if 匹配

                5)if 常见问题解析

//空语句的问题
if (9 > 6) ;
//等价于
if (9 > 6)
    ;    //这是一个空语句
if (表达式1)
    语句A;
else
    语句B;
//这是正确的


if (表达式1);
    语句A;
else
    语句B;
//这是错误的
if (表达式1)
    语句A;
else if (表达式2)
    语句B;
else if (表达式3)
    语句C;
else
    语句D;
//即使表达式1和2都成立,也只执行A语句
if (表达式1)
    语句A;
else if (表达式2)
    语句B;
else if (表达式3)
    语句C;
//这样写语法没问题,但是逻辑上有漏洞
if (表达式1)
    语句A;
else if (表达式2)
    语句B;
else if (表达式3)
    语句C;
else (表达式4)        //7行
    语句D;
//这样写是错误的,正确的写法:1.去掉7行的(表达式4)
//                          2.在else后加if
if (表达式1)
    语句A;
else if (表达式2)
    语句B;
else if (表达式3)
    语句C;
else (表达式4);
    语句D;
//这样写语法没错,但逻辑不对
/*
    else (表达式4);
        语句D;
等价于
    else 
        (表达式4);
    D;
*/

        2.2 switch

除了 if 语句外,C语⾔还提供了 switch 语句来实现分⽀结构。 switch 语句是⼀种特殊形式的 if...else 结构,⽤于判断条件有多个结果的情况。它把多重的 else if 改成更易⽤、可读性更好的形式。
switch(表达式)    //表达式类型应为整数类型
{
    case 常量 1 :语句 1        //case和常量之间必须有空格
    case 常量 2 :语句 2        //常量必须是整型常量表达式
        :    :    :
        :    :    :
    case 常量 n :语句 n
    default :    语句 n+1
}

//每⼀个 case 语句中的代码执⾏完成后,需要加上 break ,才能跳出这个switch语句

// switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满⾜实际需求的就可以。 不过我们通常是把 default 语句放在最后处理的.

3.循环结构

        循环

                定义:某些代码会被重复执行

                分类: forwhiledo while

                3.1 for

                        1)格式

for (表达式1; 表达式2; 表达式3)
    语句;
//表达式1用于循环变量的初始化,表达式2用于循环结束条件的判断,表达式3用于循环变量的调整

                        2)执行的流程【重点】

                                <1>单个 for 循环的使用

⾸先执⾏ 表达式 1 初始化循环变量,接下来就是执⾏ 表达式 2 的判断部分, 表达式 2 的结果如果
==0,则循环结束; 表达式 2 的结果如果!=0则执⾏循环语句,循环语句执⾏完后,再去执⾏表达式3 ,调整循环变量,然后再去 表达式 2 的地⽅执⾏判断, 表达式 2 的结果是否为0,决定循环是否继续。
整个循环的过程中,表达式1初始化部分只被执⾏1次,剩下的就是表达式2循环语句表达式3在循环。
                                 <2>多个 for 循环的嵌套使用
for (表达式1; 表达式2; 表达式3)    //1
    for (表达式4; 表达式5; 表达式6)    //2
        语句A;        //3
        语句B;        //4
//整体是两个语句,1 2 3 是第一个语句
//4是第二个语句
for (表达式1; 表达式2; 表达式3)
    for (表达式4; 表达式5; 表达式6)
        {
            语句A;
            语句B;
        }
//整体是一个语句
for (表达式1; 表达式2; 表达式3)
    for (表达式4; 表达式5; 表达式6)
        {
            语句A;
            语句B;
            for (表达式7; 表达式8; 表达式9)
                C;
        }
//整体是一个语句
                                <3>范围问题

for 默认只控制一条语句,如果想控制多个语句,就要把这些语句用{}括起来。

                                <4>举例【求1~100的和】
#include <stdio.h>
int main()
{
	int i, n = 100, sum = 0;
	for (i = 1; i <= 100; i++)
	{
		sum += i;
	}
	printf("%d", sum);
	return 0;
}

        3.2 while

                        1)格式

while (表达式)
    语句;

                        2)执行流程

⾸先上来就是执⾏判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执⾏循环语
句,语句执⾏完后再继续判断,是否进⾏下⼀次判断。

                        3)while 与 for 的比较

forwhile 可以相互转换。但是 for 的逻辑性更强,更不易出错。

for (表达式1; 表达式2; 表达式3)
    语句A;

//等价于

表达式1;
while (表达式2)
{
    语句A;
    表达式3;
}

        3.3 do while

                1)格式

do
{
    语句;
}while(表达式);
while for 这两种循环都是先判断,条件如果满⾜就进⼊循环,执⾏循环语句,如果不满⾜就跳
出循环;⽽ do while 循环则是先直接进⼊循环体,执⾏循环语句,然后再执⾏ while 后的判断表达式,表达式为真,就会进⾏下⼀次,表达式为假,则不再继续循环。
// do···while 并不等价于 for 也不等价于 while。主要用于人机交互。

                2)执行流程

do while 循环中先执⾏图上的“语句”,执⾏完语句,在去执⾏“判断表达式”,判断表达式的
结果是!=0,则继续循环,执⾏循环语句;判断表达式的结果==0,则循环结束。所以 do while 语句中循环体是⾄少执⾏⼀次的 ,这是 do while 循环⽐较特殊的地⽅。

        3.4 break 语句

break 的作⽤是⽤于永久的终⽌循环,只要 break 被执⾏,直接就会跳出循环,继续往后执
⾏。
// break 如果用于循环是用来终止循环,如果用于 switch 则是用于终止 switchbreak 不能直接用于 if ,除非 if 属于循环内的一个子句。
//例子:

for (i = 0; i < 3; ++i)
{
    if (3 > 2)
        break;    //break虽是if内部的语句,但是它终止的是外部的for循环
    printf("hello");    //永远不会输出

}

在多层循环中,break 只能终止最里面包含它的那个循环。

//例子:
for(i = 0; i < 3; i++)
{
    for(j = 1; i < 4; j++)
        break;    //break只能终止离它最近的循环
}

在多层 switch 嵌套中,break 只能终止离它最近的 switch

//例子:
#include <stdio.h>
int main()
{
	int x = 1, y = 0, a = 0, b = 0;
	switch (x)	//第一个switch
	{
	case 1:
		switch (y)	//第二个switch
		{
		case 0:
			a++;
			break;	//终止第二个switch
		case 1:
			b++;
			break;	//终止第二个switch //13,16行二选一执行
		}
		b = 100;
		break;		//终止第一个switch
	case 2:
		a++;
		b++;
		break;		//终止第一个switch //19,23行二选一执行
	}
	printf("%d %d\n", a, b);
	return 0;
}

        3.5 continue 语句

continue 的作⽤是跳过本次循环 continue 后边的代码,判断是否需要执行下次循环,在 for 循环和 while 循环中有所差异的。
//例子:
for (表达式1; 表达式2; 表达式3)
{
    语句A;
    语句B;
    continue;//如果执行该语句,则执行完该语句后,会执行表达式3,C和D都会被跳过去,C和D不会被执行
    语句C;
    语句D;
}
//例子:
while (表达式)
{
    语句A;
    语句B;
    continue;//如果执行该语句,则执行完该语句后,会执行表达式,C和D都会被跳过去,C和D不会被执行
    语句C;
    语句D;
}

  • 51
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

CPU烧掉的小白

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

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

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

打赏作者

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

抵扣说明:

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

余额充值