C语言初级——分支和循环语句

目录

1.语句是什么

2.分支语句(选择结构)

1.if语句

1.1 if语句的语法结构

2.Switch语句 

2.1   Switch语句形式

2.2  break在switch中的作用

2.3 Switch语句的完整形式(default子句的作用)

2.4 Switch语句的其他写法

3.循环语句

3.1.while循环

3.1.1while语句结构 

3.1.2while执行流程图:

​编辑

3.1.3while常规用法

3.1.4 while语句中的break和continue 

3.1.5  while判断条件中getchar的用法

2.for循环

3.2.1 for循环语法

3.2.2 for循环中的break和continue 

3.2.3 一些for循环的变种

3.do.....while循环 

3.3.1do语句的语法 

3.3.2 do语句的执行流程 

4.go to 语句 


1.语句是什么

C语言语句可以分为5类

//一个分号隔开可以理解为一个语句

1.表达式语句:3+5;

2.函数调用语句:printf("haha");

3.控制语句

控制语句用于执行程序的执行流程,用于实现程序的各种结构方式(C语言支持三种结构:顺序结构、选择结构、循环结构),由特殊的语义定义符组成。

C语言有9种控制语句分为三类

a.条件判断语句也叫分支语句:if语句、switch语句

b.循环执行语句:do  while语句、while 语句、for语句

c.berak语句、goto语句、continue语句、return 语句。

4.复合语句

5.空语句

2.分支语句(选择结构)

1.if语句

1.1 if语句的语法结构

1.1.1

if(表达式) 如果表达式的值为真,语句就执行。0表示假,非0表示真

{

语句;   i

}

#include<stdio.h>
int main()
{
 int  h =1800;
if(h>1600)
{
printf("海拔很高");
}
return 0;
}

1,1,2

if(表达式)

{

语句1;

else

{

语句2;

}

建议if  else后面尽量加上{},区分代码块。
 

int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age >= 18)
	{
		printf("已经成年了\n");
	}
	else
	{
		printf("未成年\n");
	}
	return 0;
}

1.1.3

if(表达式1)

{

语句1;

}

else if(表达式2)

{

语句2;

}

else

{

语句3;

}

 

#include <stdio.h>
int main()
{
    int age = 0;
    scanf("%d", &age);
    if (age < 18)
    {
        printf("少年\n");
    }
    else if (age >= 18 && age < 30)
    {
        printf("青年\n");
    }
    else if (age >= 30 && age < 50)
    {
        printf("中年\n");
    }
    else if (age >= 50 && age < 80)
    {
        printf("老年\n");
    }
    else
    {
        printf("老寿星\n");
    }
}

2.Switch语句 

sitch是一种分支语句。用于多分支情况。

列如以下情况:

输入1,输出黑色周一 

输入2,输出橙色周二

输入3,输出绿色周三

输入4,输出灰色周四

输入5,输入红色周五

这种多分支情况,如果使用if......elseif....elseif的形式有些复杂,所以引入了Switch

2.1   Switch语句形式

2.1.1

switch(整型表达式)

{

        case  整型常量表达式:

                语句;

}//最初级

 2.1.2

switch(整型表达式)

{

        case  整型常量表达式:

                语句1;

            break;

        case  整型常量表达式:

                语句2;

            break;

}//初级写法:

选择第一个case,就执行语句1的相应功能,执行结束如果有break就直接跳出Switch循环,执行Switch后面的语句。

补充break在其他循环中的作用,在while,for等循环语句中,遇到break就会结束循环。

break和continue的对比和详解我放在了下一篇文章里,大家可以移步先看一下可以更好的理解这里Switch语句里面break的作用。

http://t.csdnimg.cn/lTgmH

2.2  break在switch中的作用

在 C语言 的 switch(开关语句)中,break 语句还可用来在执行完一个 case(分支)后立即跳出当前 switch 结构。

我们先来看看没有input的Switch效果实现是怎么样的。

我想要实现一个功能,如果选择1就启动游戏,如果选择0就退出游戏。

我们发现当我们选择1,游戏启动但是紧接着就关闭了游戏是不是因为执行case1过后,程序并没有给我们选择是要继续玩还是直接退出,反而直接执行了case2,直接结束了游戏(如果后面还有case是不是一样的会继续执行,那么分case的作用就没了,所以需要break来分开每个case功能,执行完一个case就结束Switch去判断dowhile) 

 执行完一个case就结束Switch去判断dowhile) 

加上break就完美实现了Switch功能。(编程好习惯在每一个case后加上break) 

大家可以试一下源码效果:

int main()
{
	int input = 0;
	do
	{
		printf("如果要启动原神就输入1,关闭原神就输入2,请选择:\n");
		scanf("%d",&input);
		switch (input)
		{
		case 1:
			printf("原神启动\n");
			break;
		case 0:
			printf("原神关闭\n");
			break;
		defult:
			printf("选择错误\n");
	
		}

	} while (input);//控制一直输入的外层循环,直到input等于01结束循环退出
	return 0;
}

2.3 Switch语句的完整形式(default子句的作用)

switch(整型表达式)

{

        case  整型常量表达式:

                语句1;

            break;

        case  整型常量表达式:

                语句2;

            break;

           default:

                语句3;

                break;

}

 我们思考一个问题:如果表达的值与所有的case标签都不匹配怎么办?列如上面的游戏代码,我们看看没有default,我们不选择1也不选择0会发生什么:

我们发现,程序正常的在运行,没有报错就是结构所有的语句都被跳过了而已。程序不会终止也不会报错。因为这种情况在C语言中不算是一个错误。如果不想忽略不匹配所有标签的表达式的值的时候该怎么办,写一个defult子句。

default;

可以写在任何一个case标签出现的地方,当Switch表达式的值不匹配所有的case标签时,这个defult句子后面的语句就会执行。所以每个Switch语句中只能出现一条default语句。但是default可以出现在任何位置,而且语句流会 像执行一个case语句一样执行default.

default放在任意位置没有影响。附上源码大家可以自行体验效果。

int main()
{
	int input = 0;
	do
	{
		printf("如果要启动原神就输入1,关闭原神就输入2,请选择:\n");
		scanf("%d",&input);
		switch (input)
		{
		default:
			printf("选择错误\n");
			break;

		case 1:
			printf("原神启动\n");
			break;
		case 0:
			printf("原神关闭\n");
			break;
	/*	default:
			printf("选择错误\n");
			break;*/
	
		}

	} while (input);//控制一直输入的外层循环,直到input等于01结束循环退出
	return 0;
}

2.4 Switch语句的其他写法

switch语句还可以实现这样的功能。

如果我想实现这样的功能:某几个选择做同一件事,另外几个选择做另外一件事或者实现不一样的功能的时候,就可以利用Switch语句这样的结构功能。

Switch(整型表达式)

{

case 整型常量表达式:

case 整型常量表达式:

case 整型常量表达式:

                语句1;

                break;

case 整型常量表达式:

case 整型常量表达式:

case 整型常量表达式:

                语句2;

                break;

}
 

例如:输入1-5.打印weekday

输入6-7打印weekend.

 附上源码大家体验效果:

int main()
{
	int day = 0;
	do
	{
		scanf("%d", &day);


		switch (day)
		{
		case 1:
		case 2:
		case 3:
		case 4:
		case 5:
			printf("weekday\n");
			break;
		case 6:
		case 7:
			printf("weenkend\n");
			break;
		default:
			printf("选择错误\n");
			break;

		}
	} while (day);
	return 0;
}

3.循环语句

 当同一件事需要重复做,列如上面代码中的重复输入,此时就需要引入循环语句。

3.1.while循环

3.1.1while语句结构 

while(表达式)

{

循环语句;(表达式为真(非0)就执行语句)

3.1.2while执行流程图:

3.1.3while常规用法

在屏幕上打印1-10数字 

3.1.4 while语句中的break和continue 

我们来看一下有break和无break的两段代码的执行结果来看看while语句中break的作用。同理看continue。

总结:break在循环中的作用

在循环中遇到break,就会停止后期所有的循环,直接结束循环。

while中的break:永久终止循环。

同理我们来看看continue。

循环打印5的原因就是continue后,直接结束了本次循环的后面语句开启下一轮的判断,由于没有++操作,i一直是5,所以死循环打印,

while中的comtinue 直接跳到1下一层循环的入口进行判断。

3.1.5  while判断条件中getchar的用法

看下面的一段关于while的代码

这段代码涉及到getchar函数的使用,我放在了另外一篇文章中进行详细讲解,大家可以根据链接移步。

 getchar函数详解

2.for循环

3.2.1 for循环语法

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

{

循环语句;

}
表达式1:

表达式1为初始化部分,用于初始化循环变量

表达式2 :

表达式2为条件判断部分,用于判断循环时终止。

表达式3:

表达式3为调整部分,用于循环条件的调整

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

 for循环执行流程:

进入程序。调用for循环

表达式1初始化循环变量

表达式2判断循环条件,为真就执行循环体代码打印1-10;

条件为假,就直接结束来到for循环下面代码。

循环结束执行表达式三,循环条件调整

然后再进行判断。

3.2.2 for循环中的break和continue 

大家可以移步这里。我在这篇博客中做了详细介绍。 

http://t.csdnimg.cn/lTgmH

3.2.3 一些for循环的变种

1.for( ; ;)

{
printf("");

}//for 循环中的初始化部分,判断部分,调整部分是可以省略的。初学伙伴不太建议这样用,容易出问题。初始化省略就什么也不做。判断部分省略就判断恒为真。

2.使用多余一个变量控制循环

int x,y;

for(x = 0,y = 0(可以为表达式甚至函数调用);x<2&&y<5;++x,++y)

{

printf("hehe\n");

}

  

3.do.....while循环 

3.3.1do语句的语法 

do

{

循环语句;

}

while(表达式);

3.3.2 do语句的执行流程 

4.go to 语句 

C语言提供了可以随意滥用的goto语句和标记跳转的标号

最常见的用法是终止程序在某些深度嵌套的结构的处理过程。例如:一次跳出一层或者多层循环。

多层循环使用break是达不到目的的,它只能从最内层循环退到上一层的循环。

int main()
{
	again:
	printf("11  ");
	goto again;
}

注意:goto 语句不能跨函数执行,只能在同一个函数比如main函数下面执行。

goto 语句真正适用的情况:

for(.....)

     for(......)

        {

          for(.....)

                {

                        if()

                                goto  error;
                 }  

          }

error:        

也正是因为goto语句可以滥用,导致程序结构复杂化,所以一般除非要跳出深度循环,在普通的练习中是不推荐使用的。 

 以上就是本期文章的内容。感谢大家批评指正。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值