C语言分支和循环

C语言分支语句和循环语句

TOP TIPS:

	分支语句:
		if 
		switch
	循环语句:
		while
		for
		do while
	goto语句

一、分支语句

1.if语句

语法结构:
1)//单分支
		if(表达式)
			语句;
		if(表达式)
			语句1;
		else
			语句2;
2)//多分支
		if(表达式)
			语句1;
		else if(表达式2)
			语句2;
		else
			语句3;
	只有一个选择可以执行!
3)代码块
	如果条件成立,要执行多条语句,应使用代码块!
		if(表达式)
		{
			语句列表1;
		}	
		else
		{
			语句列表2;
		}	
	一对{}就是一个代码块!
4)悬空else
	else遵循就近原则,else会找他最近的if进行匹配,无所谓是否是一个级的(除非有代码块分隔)
if书写形式的对比
int main()
{
	int x, y,condition,num=4;
	//代码1
	if (condition) {
		return x;
	}
	return y;
	//当condition成立return x,condition不成立则往下走return y;

	//代码2
	if (condition)
	{
		return x;
	}
	else
	{
		return y;
	}

	//代码3
	if (num = 5)//= 赋值 ==判断相等 永真
	{
		printf("呵呵\n");
	}

	//代码4
	if (5 == num)//当涉及常量和变量比较的时候,把常量放左边,从形式上更容易发现代码的问题,形式更优
	{
		printf("呵呵\n");
	}
	return 0;
	//代码2和代码4更好,逻辑更加清晰,不容易出错

2.switch语句

	switch语句也是一种分支语句,常常用于多分支的情况
switch(整型表达式)
{
	语句项;
}
1)语句项
//是一些case语句;
//如下:
case 整形常量表达式:
	语句;
2)在switch语句中的break
	在Switch语句中,我们没法直接实现分支,搭配break使用才能实现真正的分支
	break语句的实际效果是把语句列表划分为不同的部分

编程好习惯: 在最后一个case语句的后面加上一条break语句(之所以这么写是可以避免出现在以前的最后一个case语句后面忘了添加break语句)

3)default子句
	如果表达的值与所有的case标签的值都不匹配怎么办?
	其实也没什么,结构就是所有的语句都被跳过而已
	程序并不会终止,也不会报错,因为这种情况在c中并不认为是错误
	但是,如果你并不想忽略不匹配所有标签的表达式的值该怎么办呢?
	你可以在语句列表中增加一条default子句把下面的标签:
	default:
	写在任何一个case标签可以出现的位置
	当switch表达式的值并不匹配所有case标签的值时,这个default子句后面的语句就会执行
	所以,每个switch语句中只能出现一条default子句
	但是他可以出现在语句列表的任何位置,而且语句就会像贯穿一个case标签一样贯穿default子句

编程好习惯: 在每一个switch语句中都放一条default子句是一个好习惯,甚至可以在后边再加一个break

二、循环语句

1.while循环:

while(表达式)
	循环语句;
	int i=0;//初始化
	while(i<10)//判断
	{
		//
		i++;//调整
	}//while循环将初始化、判断、调整三部分放的比较分散,当进行查找修改时不够集中和方便


break在while循环中的作用: 其实在循环中只要遇到break,就停止后期的所有循环,直接终止循环。所以,while中的break是用于永久终止循环的。
continue在while循环中的作用: continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。

1)getchar
int	main()
{
	int ch = 0;
	//ctrl + z 默认系统输入了一个EOF         
	//EOF = end of file ->-1
	while (ch = getchar() != EOF)
	{
		putchar(ch);
	}
	return 0;
}
int	main()
{
	int ret = 0;
	int ch = 0;
	char password[20] = { 0 };
	printf("请输入密码:>");
	scanf("%s", password);//输入密码,并存放在password数组中
	//缓冲区还剩一个'\n'
	//读取一下'\n'
	while (ch = getchar() != '\n');
	{
		;
	}
	printf("请确认(Y/N):>");
	ret = getchar();//Y/N
	if (ret == 'Y')
	{
		printf("确认成功\n");
	}
	else
	{
		printf("放弃确认\n");
	}
	return 0;
}

3.for循环

1)语法
for(表达式1,表达式2,表达式3)
	循环语句;
	表达式1:初始化部分,用于初始化循环变量的;
	表达式2:条件判断部分,用于判断循环时候终止;
	表达式3:调整部分,用于循环条件的调整。

在这里插入图片描述
break和continue在for循环中的作用: 意义和在while循环中一样,只不过while循环中,调整语句在continue之后,所以调整语句会被跳过,从而进入死循环;而for循环调整语句不在continue之后,所以仍会继续判断,不会出现死循环

2)for语句的循环控制变量
	一些建议:
			1.不可在循环体内修改循环变量,防止for循环失去控制(I=5)
			2.建议for语句的循环控制变量的取值采用“前闭后开区间”写法
//10次循环/打印/元素
for(i=0;i<10;i++)//前闭后开:= ; <
	Tips:1.for循环的初始化、调整、判断都可以省略
		但是:
		for循环的判断部分,如果被省略,即判断条件就是:恒为正 		//for(;;)
			2.如果不是非常熟练,建议不要随便省略		//for(;i<10;i++) for(;j<10;j++)-->只会运行10次,因为j到10不会销毁
			3.判断非零即运行

4.do…while()循环

1)语法
	do
		循环语句;
	while(表达式);

在这里插入图片描述
特点: 循环至少执行一次,使用的场景有限,不经常使用

三、goto语句

	C语言中提供了可以随意滥用的goto语句和标记跳转的标号。
	从理论上goto语句是没有必要的,实践中没有goto语句也开业很容易的写出代码。
	但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程,例
如一次跳出两层或多层循环。
这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。

关机程序

int main()
{
	char input[20] = { 0 };
	//shutdown -s -t 60
	//shutdown -a
	//system()-执行系统命令的
	//#include <stdlib.h>
	system("shutdown -s -t 60");
again:
	printf("请注意,你的电脑将在一分钟后关机,如果输入:我是猪;就会取消关机\n请输入:>");
	scanf("%s", input);
	if (strcmp(input, "我是猪") == 0)//比较两个字符串-strcmp()
	{
		system("shutdown -a");
	}
	else
	{
		goto again;
	}
	return 0;
}

END TIPS:

	1)C语言是一门**结构化**的程序设计语言
		1、顺序结构
		2、选择结构
		3、循环结构
	2)什么是语句?
		C语言中由一个分号;隔开的就是一条语句
		;//单分号为一句空语句;
	3)输入缓冲区:输入函数接收到的值是放在输入缓冲区里面,然后再进行读取,scanf不会读取\n,可以用getchar函数读取刷新
	4)延迟函数:Sleep();//单位ms				
							头文件:#include  <windows.h>
	5)	执行系统命令的一个函数:system("");						system(“cls”)--清空屏幕
								头文件:#include <stdlib.h>
	6)sizeof函数在计算字符串数组时会记录'\0'!!!!!!!
int main()
{	if(18<=age<28);//执行顺序为 18<=age->0/1<28->1->条件满足 !!但是不符合我们想要执行的结果!
	return 0;
}

练习

1.if语句

1)判断一个数是否为奇数
2)输出1-100之间的奇数
	int i=1;
	while (i <= 100)
	{
		printf("%d\n", i);
		i += 2;
	}
	while (i <= 100)
	{
		if (i % 2 != 0)
			printf("%d", i);
		i++;
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值