bit课程笔记(5)

分支和循环语句

C语言是一门结构化的程序设计语言。

 语句:C语言中由一个分号;隔开的就是一条语句。

分支语句(选择结构)

if语句

1.语法结构:

①if(表达式)//当if括号中为真时一定执行语句,例if(1)

        语句;

②if(表达式)

        语句1;

   else

        语句2;

③多分支

if(表达式1)

    语句1;

else if(表达式2)

   语句2;

else

语句3;

2.语句部分如果要执行多条语句应使用代码块

{

...

}

3.常见错误:悬空else

#include <stdio.h>
int main()
{
	int a = 0;
	int b = 2;
	if (a == 1)
		if (b == 2)
			printf("hehe\n");
	else
			printf("haha\n");
	return 0;
}

上段代码不能通过if与else对齐来判断,当没有{},if与else就近匹配,所以上段代码不打印出任何东西。

若要使第一个if与else匹配

#include <stdio.h>
int main()
{
	int a = 0;
	int b = 2;
	if (a == 1)
	{
		if (b == 2)
			printf("hehe\n");
	}
	else
		printf("haha\n");//最终打印haha
	return 0;
}

4.涉及常量和变量相等,最好将常量放在==左边,形式更优。便于发现和减少将==写成=的错误,                                                                                                                                            

#include <stdio.h>
int main()
{
	int num = 1;
	if (5== num)//若为=,则代码不能成功运行
	{
		printf("hehe\n");//最终什么也没打印
	}
	return 0;
}

 如果将本段代码改为if(num=5)括号内为赋值语句,恒为真,代码依旧能成功运行,不易查找错误。 

switch语句

switch语句常用于多分支的情况。

1.语法结构

switch(整型表达式)

{

语句项;

}

语句项是一些case语句,例

case 整型常量表达式:

语句;

2.

例1

#include <stdio.h>
int main()
{
	int day;
	scanf("%d",&day);
		switch (day)
		{
		case 1:
			printf("星期一\n");
			break;//在switch语句中没法直接实现分支,搭配break使用方可实现真正的分支。case如入口,break如出口。
		case 2:
			printf("星期二\n");
			break;
		case 3:
			printf("星期三\n");
			break;
		case 4:
			printf("星期四\n");
			break;
		case 5:
			printf("星期五\n");
			break;
		case 6:
			printf("星期六\n");
			break;
		case7:
			printf("星期日\n");
			break;
		}
	return 0;
}

例2

#include <stdio.h>
int main()
{
	int day;
	scanf("%d",&day);
		switch (day)
		{
		case 1://说明case后面的break不一定要加上
		case 2:
		case 3:
		case 4:
		case 5:
			printf("工作日\n");
			break;
		case 6:
		case7:
			printf("休息日\n");//在最后一个case后依旧加上break方便未来添加case
			break;
		default://如果前面的case都没有进去,进入default,default的位置没有严格的限制,通常放到最后
			printf("输入错误\n");
			break;
		}
	return 0;
}

循环语句

while循环

1.语法结构

while(表达式)

循环语句;

2.continue        终止循环中本次循环continue后面的代码,直接跳转到循环判断部分,判断是否进行下一次循环。

break        停止后期所有的循环,直接终止循环。(break是永久终止循环)

for循环

1.语法结构

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

循环结构;

表达式1:初始化部分(用于初始化循环变量)

表达式2:条件判断部分(用于判断循环啥时停止)

表达式3:调整部分(用于循环条件的调整)

2.

int i=0;//循环变量的初始化
while(i<10)//循环变量的判断
{
...;
i++;//循环变量的调整
}

while循环中由于风格的原因,循环的三个必要条件很可能偏离得较远,从而不方便查找修改。

而for循环不存在此问题,因而使用频率更高。

3.

#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)//当i==5,执行continue后,跳过了printf和i++,未进行调整,陷入了死循环
			continue;
		printf("%d", i);
		i++;
	}
	return 0;
}
#include <stdio.h>
int main()
{
	int i;
	for(i=1;i<=10;i++)
	{
		if (i == 5)//执行continue后跳到i++,依然能够进行调整
			continue;
		printf("%d", i);
	}
	return 0;
}

4.for语句的循环控制变量

①不可在for循环体内修改循环变量,防止for循环失去控制。

#include <stdio.h>
int main()
{
	int i;
	for (i = 1; i <= 10; i++)
	{
		if (i = 5)//进入for循环直接赋值5,打印出haha,hehe后+1,进入下一次循环再次直接被赋值5,陷入死循环,所以不能修改循环变量。
		printf("haha\n");
		printf("hehe");
	}
	return 0;
}

②建议for语句的循环控制变量采取前闭后开的写法

for(i=0;i<10;i++)

i=0是前闭区间,i<10是后开区间。

从而能清晰的表示10次循环,10个元素,10次打印...但不绝对需要前闭后开,只是建议。

5.

#include <stdio.h>
int main()
{
	for (;;)//for循环的初始化,调整,判断都可以省略,但是for循环的判断部分如果被省略,则判断条件恒为真
	{
		printf("haha\n");
	}
	return 0;
}

不建议随意省略

#include <stdio.h>
int main()
{
	int i = 0;
	int j = 0;
	for (; i < 10; i++)
	{
		for (; j < 10; j++)//因为j没有初始化,当i=2时,j依旧为10,无法进入循环
		{
			printf("haha\n");//最终打印出10个haha
		}
	}
	return 0;
}

 6.

#include <stdio.h>
int main()
{
	int i = 0;
	int j = 0;
	for (i=0,j=0;j=0; i++,j++)//条件判断部分是赋值语句,零为假,非零为真。此时j=0,不进入循环。
		j++;
	return 0;
}

若条件判断部分改为j=1,或其他非0数字,则陷入死循环。

do-while循环

1.语法结构

do

循环语句;

while(表达式);

以打印1~10为例

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

2.特点:循环至少执行一次,使用场景有限,所以不经常使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值