流程控制2【重点】

复习多个for循环嵌套

举例1

# include <stdio.h>

int main(void)
{
	int i, j;

	for(i = 0; i < 3; ++i)
		for(j = 2; j < 5; ++j)
			printf("hh\n");
		printf("aa\n");

	return 0;
}
/*
推测输出结果:
i=0——i<3成立——j=2——j<5成立
——输出hh——++j,j=3——j<5成立
——输出hh——++j,j=4——j<5成立
——输出hh——++j,j=5——j<5不成立
——++i,i=1——i<3成立——j=2
——j<5成立——输出hh——++j,j=3
——j<5成立——输出hh——++j,j=4
——j<5成立——输出hh——++j,j=5
——j<5不成立——++i,i=2——i<3成立
——j=2——j<5成立——输出hh——++j,j=3
——j<5成立——输出hh——++j,j=4
——j<5成立——输出hh——++j,j=5
——j<5不成立——++i,i=3——i<3不成立
——输出aa
故最终输出结果为:
hh
hh
hh
hh
hh
hh
hh
hh
hh
aa
*/

推测输出结果与实际输出结果一致!

举例2

# include <stdio.h>

int main(void)
{
	int i, j;

	for(i = 0; i < 3; ++i)
		printf("bb\n");
		for(j = 2; j < 5; ++j)
			printf("hh\n");
		printf("aa\n");

	return 0;
}
/*
推测输出结果:
i=0——i<3成立——bb——++i,i=1
——i<3成立——bb——++i,i=2
——i<3成立——bb——++i,i=3
i<3不成立——j=2——j<5成立——
hh——++j,j=3——j<5成立——
hh——++j,j=4——j<5成立——
hh——++j,j=5——j<5不成立——
aa
故最终输出结果为:
bb
bb
bb
hh
hh
hh
aa
*/

推测输出结果与实际输出结果一致!

举例3

# include <stdio.h>

int main(void)
{
	int i, j;

	for(i = 0; i < 3; ++i)
	{
		printf("aa\n");
		for(j = 2; j < 5; ++j)
		{
			printf("bb\n");
			printf("cc\n");
		}
		printf("dd\n");
	}
	return 0;
}
/*
推测输出结果:
aa	bb	cc	bb	cc	bb	cc	dd 
aa	bb	cc	bb	cc	bb	cc	dd
aa	bb	cc	bb	cc	bb	cc	dd

*/

推测输出结果与实际输出结果一致!

--------------------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------------------

while循环

1.执行流程

格式:

        while(表达式)

                语句

2.与for的相互比较

用for循环求1+2+3+....+100的值

# include<stdio.h>

int main(void)
{
	int i;
	int sum = 0;

	for(i = 1; i <= 100; i++)
		sum += i;
	
	printf("sum = %d\n",sum);

	return 0;
}

用while循环求1+2+3+....+100的值

# include<stdio.h>

int main(void)
{
	int i = 1;
	int sum = 0;

	while(i <= 100)
	{
		sum += i;
		i++;

	}
	printf("sum = %d\n",sum);

	return 0;
}

注意:for和while可以相互转化,在逻辑上等价,但是建议使用for

for(1;2;3)

        A;

等价于:

1;

while(2)

{

       A;

        3; 

}

3.while举例

举例1:从键盘输入一个数字,如果该数字是回文数,则返回yes,否则返回no(回文数:正着写和倒着写都一样,如:121,12321)

/*
从键盘输入一个数字,如果该数字是回文数,则返回yes,
否则返回no(回文数:正着写和倒着写都一样,
如:121,12321)
*/

# include<stdio.h>

int main(void)
{
	int val; //存放待判断的数字
	int sum = 0;
	int m;
	printf("请输入您需要判断的数字:");
	scanf("%d",&val);

	m = val;
	while (m)
	{
		sum = sum * 10 + m % 10;
		m /= 10;
	}
	
	if(sum == val)
		printf("yes!\n");
	else
		printf("No!\n");

	return 0;
}

举例2: 从键盘输入一个数字,判断是否属于菲波拉契序列(1    2    3    5    8    13    21    34)

/*
		菲波拉契序列
		1	2	3	5	8	13	21	34
*/

# include<stdio.h>

int main(void)
{
	int n;
	int f1, f2, f3;
	int i;
	f1 = 1;
	f2 = 2;

	printf("请输入您需要的序列");
	scanf("%d",&n);

	if(1 == n)
	{
		f3 = 1;
	}
	else if(2 == n)
	{
		f3 = 2;
	}
	else
	{
		for(i = 3; i <= n; ++i)
		{
			f3 = f1 + f2;
			f1 = f2;
			f2 = f3;
		}
	}
	printf("%d\n",f3);

	return 0;
}

4.什么时候使用while,什么时候使用for

        没法说,用多了自然而然就知道了。只可意会不可言传

---------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------

do ...  while

1. 格式:

       do

        {

        ......

        }  while(表达式)

主要用于人机交互,do...while不等价于for,也不等价于while

2.举例:一元二次方程

#include<stdio.h>
#include<math.h>
int main(void)
{
	double a,b,c;
	double delta;
	double x1,x2;
	char ch;
	do
	{
		printf("请输入一元二次方程的三个系数:\n");
		printf("a= ");
		scanf("%lf",&a);

		printf("b= ");
		scanf("%lf",&b);

		printf("c= ");
		scanf("%lf",&c);

		delta = b * b - 4 * a * c;

		if(delta > 0)
		{
			x1 = (-b + sqrt(delta)) / (2 * a);
			x2 = (-b - sqrt(delta)) / (2 * a);
			printf("有两个解,x1 = %lf,x2 = %lf\n",x1,x2);
		}
		else if(delta == 0)
		{
			x1 = x2 = (-b) / (2 * a);
			printf("有唯一解,x1 = x2 = %lf\n",x1,x2);
		}
		else
		{
			printf("无实数解\n");
		}
		printf("您想继续吗(Y/N)?");
		scanf(" %c",&ch); //%c前面必须加一个空格,原因略
	} while('y' == ch || 'Y' == ch);
	return 0;
}

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

switch

用途:多个分支的选择

#include <stdio.h>

int main(void)
{
	int val;

	printf("请输入您要进入的楼层");
	scanf("%d",&val);

	switch(val)
	{
	case 1:
		printf("1层开!\n");
		break;
	case 2:
		printf("2层开!\n");
		break;
	case 3:
		printf("3层开!\n");
		break;
	default:
		printf("没有盖到这一层");
	
	}
	return 0;
}

注意:switch内部执行:case1/2/3是程序的入口,val来找到程序入口,进入之后从上往下顺序执行每个语句,见到break才会停止跳出整个程序。break终止switch

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

break和continue

break:

break如果用于循环是用来终止循环;

break如果用于switch,则是用于终止switch

break不能直接用于 if,除非 if属于循环内部的一个字句

例子:

for(i = 0; i < 3; ++i)
{
    if (3 > 2)
        break;    //break虽然是if内部的语句,但break终止的确是外部的循环
    printf(“嘿嘿!\n”)

}

在多层循环中break只能终止距离最近的for循环

# include<stdio.h>

int main(void)
{
	int i,j;

	for(i = 0; i <3; ++i)
	{
		for(j = 1; j < 4; ++j)
			break;	//终止当前的距离最近的for循环
		printf("同志们好!\n");
	}

	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值