C语言----分支和循环(一)

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

人生处处面临选择 ,好好努力学习将来将会拿到一个好offer,否则如果家里有矿回家继承家产,否则毕业回家卖红薯;

在C语言中,分支语句有两种: if 和 switch 。

1.1if 分支语法

(1)单分支

if( 表达式)

{

        语句;
}

(2)多分支

if ( 表达式1 )

{

扫描二维码关注公众号,回复: 15683504 查看本文章

        语句1;
}

else  if( 表达式2 )

{

        语句2;
}

else

{

        语句3;

}

代码演示:

#include<stdio.h>

int main()
{
    int age = 0;
    scanf("%d", &age);
    if (age >0)
    {
        if (age >= 18 && age <= 35)
        {
            printf("青年!\n");
        }
        else if (age < 18)
        {
            printf("未成年!\n");
        }
        else if (age > 35 && age <= 55)
        {
            printf("中年!\n");
        }
        else
        {
            printf("老年!\n");
        }
    }
    else
    {
        printf("输入年龄有误!!!\n");
    }
    return 0;
}

代码解释以及运行结果:

注意的是:if 中的表达式在C语言中 0 表示假,非 0 表示真 !而且,if 条件成立,执行的是 if 下面的一对花括号中的内容(代码块);

1.2悬空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;
}

 我猜您的答案是:haha !

OK,我们一起来看看结果:

啊!!!,居然什么都没有打印!why? 不要把慌,我们 一起来分析一下:

 改正风格后的代码为:

#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(a == 1)容易写成 if (a = 1) 这样就是赋值了,建议写成:if (1 == a )这样即使写错,编译器也不会赋值,且容易找到错误! 

OK,举个例子练习一下:

#include <stdio.h>

//输入一个数判断是否是奇数
int main()
{
	int a = 0;
	scanf("%d", &a);
	if (a % 2 == 1)
	{
		printf("%d\n", a);
	}
	else
	{
		printf("不是奇数");
	}
	return 0;
}

2.switch语句

switch 也是一种分支结构 常常用于多分支的情况!若果if else ....if else...过多时,选择用switch!

switch语法

switch ( 整型表达式 )

{

        语句项;

}

这里的语句项是:一些 case 语句;------> case 整型表达式 : 语句 ;

举个栗子(输入几输出相应的星期几):

#include <stdio.h>

int main()
{
	int n = 0;
	scanf("%d", &n);
	switch (n)
	{
		if (n >= 1 && n <= 7)
		{
			case 1:
				printf("周一\n");
			case 2:
				printf("周二\n");
			case 3:
				printf("周三\n");
			case 4:
				printf("周四\n");
			case 5:
				printf("周五\n");
			case 6:
				printf("周六\n");
			case 7:
				printf("周天\n");
		}
		else
		{
			printf("输入无效数据!\n");
		}
	}
	return 0;
}

是否正确呢?我们分别用3 和 5来测试一下,是否会输出周三和周五?

 唉,这里的结果好像和我们的期待的结果好像不一样啊!为什么呢?

这里就不得不说一下break 这个关键字了!break即结束;也就是说我们上面输入一个数输出相应的周几后应该停止(结束)而不是继续执行!

那我们我代码修改后如下:

#include <stdio.h>

int main()
{
	int n = 0;
	scanf("%d", &n);
	switch (n)
	{
		if (n >= 1 && n <= 7)
		{
			case 1:
				printf("周一\n"); 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;
			case 7:
				printf("周天\n"); break;
		}
		else
		{
			printf("输入无效数据!\n");
		}
	}
	return 0;
}

我们再来看看结果:

 现在符合要求了!但观察上面代码会发现一开始保证输入的有效数据是用了if  else 这样貌似有点   麻烦有没有好一点的解决方案呢?这里就调到到了switch 中的空一个关键字:default  默认的;当数据不符合case 中的每一个是就会走默认;

上面代码优化:

#include <stdio.h>

int main()
{
	int n = 0;
	scanf("%d", &n);
	switch (n)
	{
		case 1:
			printf("周一\n"); 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;
		case 7:
			printf("周天\n"); break;
		
		default: printf("输入数据无效!!!\n");
	}
	return 0;
}

运行结果:

 多次测试无bug !

注意:default不加时,当匹配不到相应的case标签时就会自动跳过,也不会报错!如果你不想忽略不能与case匹配的标签时,就可以加上! 另外,case 和 default的位置可以随的没有强制的要求!!!上面栗子告诉我们要养成好的编程习惯在非必要场合下都加上break!

并且 当case 后面遇到 break 时才会停止!

代码演示(输入1----5 上课, 6- 7 休息):

#include <stdio.h>

int main()
{
	int n = 0;
	scanf("%d", &n);
	switch (n)
	{
		case 1:
		case 2:
		case 3:
		case 4:
		case 5:
			printf("上课\n"); 
			break;
		case 6:
		case 7:
			printf("休息\n"); 
			break;
		default: printf("数据输入有效!\n");
	}
	return 0;
}

选择结构是可以嵌套的!例如一开始保证数据有效的switch中的if else,下面我们再来看一个栗子(switch嵌套switch):

代码演示:

#include <stdio.h>

int main()
{
	int m = 1;
	int n = 2;
	switch (m)
	{
		case 1 :
			m++;
		case 2 :
			switch (m)
			{
				case 1 :
					n--;
				case 2 :
					m++;
					n++;
					break;
			}
		case 3 : 
			m--; 
			break;
		default: break;

	}
	printf("n = %d  m = %d", n, m);
	return 0;
}

运行结果和代码解释:

 这就是switch嵌套的典型栗子!!!

猜你喜欢

转载自blog.csdn.net/m0_75256358/article/details/130441270