流程控制if

一、什么是流程控制

程序代码执行的顺序

二、流程控制的分类

(一)顺序执行

(二)选择执行
1.定义:
某些代码可能执行,也可能不执行,有选择的执行某些代码
2.分类:
(1)if(比switch重要的多)
《1》if最简单的用法
①格式:if(表达式) 语句;
②功能:如果表达式为真,执行语句;表达式为假,不执行语句

/*
时间:2020年1月
编辑人:pinkowonote
功能:\
目的:if最简单的用法
*/
# include <stdio.h>
int main(void)
{
	/*表达式逻辑值为1(代表真)语句执行,
	表达式逻辑值为0(代表假)语句不执行*/
	if (3>2)
		printf("AAAA\n");
	if (3)
		printf("BBBB\n");
	if (0)
		printf("CCCC\n");
	if (0 == 0)
		printf("DDDD\n");
	
	return 0;
}
/*
在VS_2013中输出结果是:
------------------------
AAAA
BBBB
DDDD
------------------------
*/

《2》if的范围问题(重要)
●没有大括号,if范围就是离自己最近的那一条语句
①格式1:
if(表达式)
语句A;
语句B;
●if默认只能控制A的执行或不执行,无法控制B的执行或不执行,B一定会执行。

/*
时间:2020年1月
编辑人:pinkowonote
功能:\
目的:if的范围问题
*/
# include <stdio.h>
int main(void)
{	
	/*都会输出,没有大括号,if范围就是离自己最近的
	那一条语句*/
	/*无论第二个语句是否属于if,都会输出【因为表达式为真
	且第一个语句执行完一定会顺序执行第二个语句】*/
	if (3>2)
		printf("AAAA\n");
	printf("BBBB\n");

	/*根据执行结果可知第二个语句不属于if*/
	if (1>2)
		printf("CCCC\n");
	printf("DDDD\n");
	
	return 0;
}
/*
	在VS_2013中输出结果是:
-------------------------------
AAAA
BBBB
DDDD
-------------------------------
	总结:if默认是只能控制一个语句的执行或不执行
*/

②格式2:
if(表达式)
{
语句A;
语句B;
}
●if默认只能控制一个语句的执行或不执行,如果想控制多个语句的执行或不执行,就必须把这些语句用{ }括起来。

/*
时间:2020年1月
编辑人:pinkowonote
功能:\
目的:if的范围问题
*/
# include <stdio.h>
int main(void)
{	
	if (3 > 2)
	{
		printf("AAAA\n");
		printf("BBBB\n");
	}

	printf("FFFF\n");

	if (1 > 2)
	{
		printf("CCCC\n");
		printf("DDDD\n");
	}
	
	printf("EEEE\n");
	
	return 0;
}
/*
在VS_2013中输出结果是:
------------------------
AAAA
BBBB
FFFF
EEEE
------------------------
*/

《3》if……else……的用法
●scanf等类似的函数已经不太安全,要想保证程序的安全性,建议以后采用_s结尾的安全版本——>scanf_s

/*
时间:2020年1月
编辑人:pinkowonote
功能:\
目的:if…… else……的用法
*/
# include <stdio.h>
int main(void)
{	
	int i, j;
	
	printf("请用户输入i,j的值,中间用空格隔开:");
	/*error C4996: 'scanf': This function or 
	variable may be unsafe. Consider using 
	scanf_s instead. To disable deprecation, 
	use _CRT_SECURE_NO_WARNINGS. See online 
	help for details.*/
	/*scanf等类似的函数已经不太安全,要想保证
	程序的安全性,建议以后采用_s结尾的安全版本
	——>scanf_s*/
	scanf_s("%d %d",&i,&j);
	
	if (i > j)
		printf("i大于j\n");
	else
		printf("i小于j\n");
	
	return 0;
}
/*
	在VS_2013中输出结果是:
--------------------------------
请用户输入i,j的值,中间用空格隔开:
9 2
i大于j
--------------------------------
	结论:2009年郝斌老师说明
	文件名为:if……else……
	或者是文件名内有“.”,需要在文件名后缀加.c
	否则文件会出现问题
*/
/*
时间:2020年1月
编辑人:pinkowonote
功能:\
目的:if…… else……的用法
*/
# include <stdio.h>
int main(void)
{
	/*if……else……第一个语句*/
	/*if不含有大括号只能控制离它最近的一条语句*/
	if (3 > 2)
		printf("AAAA\n");
	/*否则,除if情况之外的所有情况*/
	/*else不含有大括号只能控制离它最近的一条语句*/
	else
		printf("BBBB\n");
	/*第二个语句*/
	printf("CCCC\n");
	
	return 0;
}
/*
	在VS_2013中输出结果是:
--------------------------------
AAAA
CCCC
--------------------------------
*/

●输出暂停用pause:system(pause);
●alt + F4关闭

《4》if……else if……else……的用法
①格式:
if(1)
语句A;
else if(2)
语句B;
else if(3)
语句C;(能执行语句C,说明1、2都不成立,3成立。顺序执行,不管语句C后面是否成立都不执行)
else
语句D;

/*
时间:2020年1月
编辑人:pinkowonote
功能:\
目的:if……else if……else……的用法
*/
# include <stdio.h>
int main(void)
{
	double delta = -1;

	if (delta > 0)
		printf("有两个解\n");
	/*printf("哈哈\n");添加了这个语句后出错*/
	//否则,除if情况之外的所有情况
	else if (delta == 0)
		printf("有一个解\n");
	else
		printf("无解!\n");
	
	return 0;
}
/*
	在VS_2013中输出结果是:
--------------------------------
无解!
--------------------------------
*/

《5》C语言对真假的处理
非零是真
零是假
真用1表示
假用0表示
《6》if举例——求分数的等级
100~90优秀
90~80良好
80~60及格
60~0不及格

/*
时间:2020年1月
编辑人:pinkowonote
功能:\
目的:if举例——求分数的等级
*/
# include <stdio.h>
int main(void)
{
	float score; 
	
	printf("请输入您的考试成绩:");
	scanf_s("%f", &score);

	if (score > 100)
		printf("做梦!\n");
	else if (score >= 90 && score <= 100)
		printf("优秀\n");
	else if (score >= 80 && score < 90)
		printf("良好\n");
	else if (score >= 60 && score < 80)
		printf("及格\n");
	else if (score >= 0 && score < 60)
		printf("不及格!请继续努力!\n");
	else /*不需要再输入(score < 0),因为else包含之前
	表达式之外的所有情况!*/
		printf("您输入的成绩过低,请不要过于自卑!\n");

	return 0;
}
/*
	在VS_2013中输出结果是:
--------------------------------
请输入您的考试成绩:65
及格
--------------------------------
*/

《7》if的常见问题解析——对任意三个数字进行排序

/*
时间:2020年1月
编辑人:pinkowonote
功能:程序 = 算法 + 语言
	编写代码完成:a最大值,b中间值,c最小值
目的:if的常见问题解析——对任意三个数字进行排序
*/
# include <stdio.h>
int main(void)
{
	int a, b, c;
	/*临时变量:temporary adj. 暂时的,临时的
	(temporary variable临时变量)*/
	int t;
	/*平均数: average number */
	double avg = (a + b + c) / 3; 

	printf("请输入三个整数,中间以空格分隔数字:");
	/*郝斌老师逗号之后加了空格,应该是为了代码
	规范性吧!*/
	/*这里%d之间就算没有空格,输入时也可以加空格*/
	/*这里一定要记住加上取地址符!*/
	scanf_s("%d%d%d",&a, &b, &c);
	
	/*【算法1】:若a > b,a与c比较:a > c则输出a;
	a < c则输出c否则,b与c比较:b > c则输出b;
	b < c则输出c
	缺点:如果变量过多,计算量很大*/
	/*这种比大小也就是排序问题:a和b比较,
	哪个变量值大就放在第1个;
	a和c比较,哪个变量值大就放在第1个,假设a最大。
	b再和c比较,哪个变量值大就放在第2个,……*/
	if (a < b)
	{
		t = a;
		a = b;
		b = t;
	}
	if (a < c)
	{
		t = a;
		a = c;
		c = t;
	}
	if (b < c)
	{
		t = b;
		b = c;
		c = t;
	}

	printf("由【算法1】可得:%d %d %d\n", a, b, c);

	/*【算法2】:取a、b、c的平均值avg,将a、b、c分别
	和avg比较*/
	/*未完成*/
	if (a < avg && b < avg)
	{

	}
	if (a < avg && c < avg)
	{

	}
	if (b < avg && c < avg)
	{

	}
	
	return 0;
}
/*
	在VS_2013中输出结果是:
--------------------------------

--------------------------------
*/

《8》if的常见问题解析——if空语句问题
①格式1:
if(3 >2)
等价于
if(3 > 2)
; //这是一个空语句

/*
时间:2020年1月
编辑人:pinkowonote
功能:
目的:if的常见问题解析——if空语句问题
*/
# include <stdio.h>
int main(void)
{	
	/*if(3 > 2)之后加一个分号“;”,这就是空语句
	(分号之前回车空格无所谓)*/
	/*if(表达式)中表达式成立可以执行空语句;
	表达式不成立就不执行空语句*/
	/*有了分号后,if后执行的就只有空语句,
	printf(AAAA)和printf(BBBB)都不属于if了,
	A和B都是直接输出*/
	if (3 > 2)//;
		printf("AAAA\n");
	
	printf("BBBB\n");
	
	return 0;
}
/*
	在VS_2013中输出结果是:
--------------------------------
AAAA
BBBB
--------------------------------
*/

②格式2:
if(表达式1);
A;
else
B;

/*
时间:2020年1月
编辑人:pinkowonote
功能:
目的:if的常见问题解析——if空语句问题
*/
# include <stdio.h>
int main(void)
{	
	/*加上分号有错误:error C2181: 没有匹配 
	if 的非法 else*/
	if (1 > 2)//;
		printf("哈哈哈哈哈哈哈哈!\n");
	else
		printf("嘿嘿!窝窝头,一块钱四个!\n");
	
	return 0;
}
/*
	在VS_2013中输出结果是:
--------------------------------
嘿嘿!窝窝头,一块钱四个!
--------------------------------
*/

《9》if的常见问题解析——if表达式成立时的输出语句问题
①格式1:
if(表达式1)
A;
else if(表达式2)
B;
else if(表达式3)
C;
else
D;

/*
时间:2020年1月
编辑人:pinkowonote
功能:
目的:if的常见问题解析——if表达式成立时的输出语句问题
*/
# include <stdio.h>
int main(void)
{	
	if (3 > 2)
		printf("AAAA\n");
	else if(3 > 1)
		printf("BBBB\n");
	else
		printf("CCCC\n");
	
	return 0;
}
/*
	在VS_2013中输出结果是:
--------------------------------
AAAA
--------------------------------
	if(表达式1)
	A;
else if(表达式2)
	B;
else if(表达式3)
	C;
else
	D;
	总结:即便表达式1和表达式2都成立,也只会执行A语句
*/

②格式2:
if(表达式1)
A;
else if(表达式2)
B;
else if(表达式3)
C;
这样写不会出错但是逻辑上有漏洞!
100~90优秀
90~80良好
80~60及格
60~0不及格

/*
时间:2020年1月
编辑人:pinkowonote
功能:\
目的:if举例——求分数的等级
*/
# include <stdio.h>
int main(void)
{
	float score; 
	
	printf("请输入您的考试成绩:");
	scanf_s("%f", &score);

	if (score > 100)
		printf("做梦!\n");
	else if (score >= 90 && score <= 100)
		printf("优秀\n");
	else if (score >= 80 && score < 90)
		printf("良好\n");
	else if (score >= 60 && score < 80)
		printf("及格\n");
	else if (score >= 0 && score < 60)
		printf("不及格!请继续努力!\n");
		
	return 0;
}
/*
	在VS_2013中输出结果是:
--------------------------------
请输入您的考试成绩:-9
--------------------------------
	总结:没有错误,但屏幕上没有反映,
	证明没有else(表达式);这条语句
	不会出错但是逻辑上有漏洞!
*/

③格式3:
if(表达式1)
A;
else if(表达式2)
B;
else if(表达式3)
C;
●这样写是不对的,就像在 《6》if举例——求分数的等级 中写的代码一样:else包含了上述表达式之外的所有情况,不需要再在写else后写表达式!
●else要么把(表达式4)去掉,要么在else后加if。既然写了表达式,就要在else后加if

else(表达式4)
D;

④格式4:
if(表达式1)
A;
else if(表达式2)
B;
else if(表达式3)
C;
●等价于
else
(表达式4);
D;
逻辑上不通

else (表达式4);
D;

/*
时间:2020年1月
编辑人:pinkowonote
功能:
目的:if的常见问题解析——if表达式成立时的输出语句问题
*/
# include <stdio.h>
int main(void)
{	
	if (3 > 2)
		printf("AAAA\n");
	else if(2 > 5)
		printf("BBBB\n");
	/*无实际意义,但是语法不会出错,逻辑上是错误的*/
	else(5 > 10);
		printf("CCCC\n");
	/*等价于
	else
		(5 > 10);
		printf("CCCC\n");
	逻辑上不通*/
	
	return 0;
}
/*
	在VS_2013中输出结果是:
--------------------------------
AAAA
CCCC
--------------------------------
*/

(2)switch

(三)循环执行
1.定义:
2.分类:
(1)for
(2)while
break
Continue

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值