C语言的语句与控制流——循环语句

C语言萌新入门学习记录屎

第005章——循环语句(while,do-while,for,goto)


循环语句

  • C语言萌新入门学习记录屎
  • 循环的作用
  • 一、当循环(while)
    • 1.语法格式
    • 2.举例
  • 二、for循环
    • 1.语法
    • 2.举例
  • 三、直到型循环(do-while)
    • 1.语法格式
    • 2.举例
    • 猜数字游戏
  • 四、goto语句
    • 1.语法格式
    • 2.举例
  • 总结


循环的作用

C语言中的循环语句的作用是为了使同一个事物具有相同的操作,这可以大大减少程序的复杂性,能够提高程序的运行效率


一、当循环(while)

先判断后执行,所以会有对循环体一次也不执行的情况。
C语言的语句与控制流——循环语句_第1张图片

1.语法格式

while (条件表达式)
{
	循环语句;
}

如果判断while循环的条件表达式一直为非0(真),那么循环体不会停止。在while 循环中,break用于永久的终止循环;continue的作用是跳过本次循环(就是跳过continue后面的代码),直接去回到判断部分(判断条件表达式),看是否需要进入下一次循环。

2.举例

//求小于10的奇数和
int main()
{
	int i,sum = 0;//初始化
    i = 1;
    while(i < 10)//判断部分
    {
        sum = sum + i;
        i += 2;//调整部分
    }
    printf("%d\n",sum);//25
    return 0;
}

循环控制变量:在表达式中出现的变量为循环控制变量(此例中的 i )。
注意: ①循环控制变量必须有正确的初值;②在循环体内要有改变它的语句(例如:i += 2);③i < 10为条件表达式,也为循环结束条件,若没有则最终会形成死循环。④若while循环不加{ },那么只会执行第一条语句。

二、for循环

当我们使用while循环时,会发现它的初始化部分,判断部分,调整部分很分散,我们在这三部分中充盈代码块的同时,也使得代码看起来繁琐,不易查找,所以就有了for循环。
C语言的语句与控制流——循环语句_第2张图片

1.语法

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

你可以把for循环的表达式1看为初始化部分,表达式2为判断部分,表达式3为调整部分。先执行初始化部分(表达式1),给循环变量赋初始值,只执行一次;再进行判断部分,如果设循环体执行n次,那么表达式2要执行n+1次; 然后执行循环语句;最后才执行表达式3,如果设循环体执行n次,那么表达式3也要执n次。

2.举例

//计算1-10之间数之和。
int main()
{
    int i = 0;//可以直接写成int i,sum = 0;
    int sum = 0;
    for (i=1; i<=10; i++) 
    {
        sum=sum+i;
    }
    printf("%d\n",sum);
    return 0;
}

或者这样写也是没有问题的:

//计算1-10之间数之和。
int main()
{
    int i = 0;
    int sum = 0;
    for (i=1; i<=10; i++) sum=sum+i;
    printf("%d\n",sum);
    return 0;
}

当然这三个表达式是根据你的需求使用,可以省略其中一个、两个甚至全部省略,但是要保留 " ; "

int main()
{
    for ( ; ; )//判断部分的省略——判断部分恒为真
    {
        printf("死循环\n");
    }
    return 0;
}

省略的同时,也会给我们带来一些问题:

int main()
{
    int i = 0;
    int j = 0;
    for (; i < 3; i++)//for1
    {
        for (; j < 3; j++)//for2
        {
            printf("你猜我会被打印多少次?\n");

        }
    }
    return 0;
}

结果是

你猜我会被打印多少次?
你猜我会被打印多少次?
你猜我会被打印多少次?

你是不是以为会被打印9次?我们来仔细分析一下,第一次进入for1:i = 0,0<3;进入for2:j = 1…for2循环3次,得到 j = 3,然后再返回到for1,此时 i = 1,1<3;但是不进入for2循环,因为 j 是在循环外赋值,未重新赋值归0,此时 j 仍然=3,j < 3条件不成立,for2循环不进行,所以最后只打印了 i = 0时的三次。
C语言的语句与控制流——循环语句_第3张图片如果想打印9次,就应该改为:

int main()
{
    int i = 0;
    int j = 0;
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 3; j++)
        {
            printf("你猜我会被打印多少次?\n");

        }
    }
    return 0;
}

for循环也可以多个变量进行

int main()
	{
	int x,y;
	for (x = 0,y = 0; x < 2 && y < 5; ++x,y++)
	{
		printf("我循环了几次?\n");//循环了两次哦!
	}
	return 0;
}

++x,x++是一样的啊,只不过一个是先++再赋值给x,一个是先赋值给x,再++

三、直到型循环(do-while)

C语言的语句与控制流——循环语句_第4张图片

1.语法格式

do
{
	循环语句;
}while (表达式);

do-while会先执行循环语句,然后再判断表达式是否为真,如果为真则继续循环;如果为假,则终止循环。do 语句特点:循环至少执行一次。
do-while循环与while循环的不同:do-while先执行,后判断;while先判断,后执行

2.举例

int main()
{
    int i = 1;
    int sum = 0;
    do
    {
        sum = sum + i;
        i+=2;
    } while (i <= 10);
    printf("%d\n",sum);//25
}

猜数字游戏

写个简单的猜数字游戏:
用do-while来写就可以实现先玩,再判断,一把过不了,就来下一把。

#include 
void game()//游戏函数
{
    int ret = rand()%100 + 1;//%100的余数是0-99,然后+1,范围就是1-100
    int num = 0;//猜的数字
    while(1)
    {
        printf("请输入数字:>");
        scanf("%d",&num);
        if (num > ret)
        {
            printf("猜大了!\n");
        }
        else if (num < ret)
        {
            printf("猜小了!\n");
        }
        else
        {
            printf("恭喜你,猜对了!\n");
            break;
        }
    }
}
int main()
{
    int button = 0;
    srand((unsigned int)time(NULL));
    do
    {
        printf("1.开始玩游戏 0.退出游戏");
        printf("请选择:>");
        scanf("%d",&button);
        switch (button)
        {
        case 1:
            printf("开始游戏\n");
            game();
            break;  
        case 0:
            printf("退出游戏\n");
            break;
        default:
            printf("输入无效\n");
            break;
        }
    } while(button);
    return 0;
}

四、goto语句

C 语言中的 goto 语句允许把控制权无条件转移到同一函数内的被标记的语句。正是由于它可以随意跳转,使得程序混乱,被人摒弃。 goto 语句一个好处就是可以保证程序存在唯一的出口,避免了过于庞大的 if嵌套。return是将整个函数返回,不在继续函数。break只能跳出单层循环,而goto可以从多重循环中直接跳出到循环外面,不需要写很多break。
C语言的语句与控制流——循环语句_第5张图片

1.语法格式

向后跳转

label://冒号
	语句;
goto label;

这样也是对的:(向前跳转)

goto label;
	语句;
label:

2.举例

可以实现从循环体内跳转到循环体外,但不能从循环体外转入体内。 相当于是给循环语句一个标签 flag,然后利用goto语句,又跳转回到了标签flag。
你甚至可以把它理解成一个,你写了一个叫flag的云存档,编译器从上之下扫描,扫描到你的flag里循环的内容了,然后存档,你后期要用就用goto语句读档调用flag。 使用 goto 语句只能 goto 到同一函数内,而不能从一个函数里goto到另外一个函数里。

int main()
{
    int i = 1;
    int sum = 0;
    flag:
        if (i <= 10)
        {
            sum += i;
            i++;
            goto flag;
        }
    printf("%d\n",sum);//55
    return 0;
}

总结

以上就是今天记录的内容,本文仅仅简单介绍了C语言中循环语句的使用,和内层运用逻辑。希望对大家有所帮助,如果上文内容有些个人理解误导了大家,就…就…就怎么呢,就指正一下吧,毕竟这就是个小白学习记录是吧。(求生欲:小白专属)

你可能感兴趣的:(c语言,c++,算法)