分支和循环(上)

在C语言的学习过程中,我们不难发现分支和循环是我们写代码的一个重要部分,我们可以使用if、switch实现分支,用for、while、do while实现循环。那么接下来我们来研究研究这些结构都是如何使用的吧~

1.if语句

首先,if语句是用来判断真假的,如果表达式为真,if执行后面管控的的代码;如果表达式为假,则不执行。在C语言中,0为假,非零为真。

if语句的基本形式

#include <stdio.h>
int main()
{
    if(表达式)
        语句;
    return 0;
}

举个简单点的例子吧-----判断整数的奇偶性,打印偶数

#include <stdio.h>
int main()
{
	int a = 0;
	scanf("%d", &a);//输入数据
	if (a % 2 == 0)//进行判断
		printf("%d是偶数\n", a);//条件成立,打印偶数
	return 0;
}
2、else语句

在判断奇偶性过程中,一个数不是奇数就是偶数,那么此时我们就会用到else,else语句就说明了另外一种存在情况,譬如:一个整数它不是正整数就是负整数,把她转换代码如下:

#include <stdio.h>
int main()
{
    int a = 0;
    scanf("%d",&a);//输入一个整数
    if(a>0)//判断正负
        printf("正整数\n");
    else//不是正的,就是负的
        printf("负数\n");
    return 0;
}

又譬如判断奇数和偶数

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int num=0;
    scanf("%d",&num);
    if(num%2==0)
        printf("%d是偶数\n",num);
    else
        printf("%d是奇数\n",num);
    return 0;
}

3.分支中包含多条语句

在C语言中,我们默认if语句和else语句都只管控一条语句。下面举个栗子吧~

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int money=0;
    scanf("%d",&money);
    if(money>10)
        printf("可以买钢笔了\n");
        printf("可以买零食了\n");
    return 0;
}

 

你可以发现,无论我输入的数据是多少,“可以买零食”这句话都会被打印在屏幕上,那么这是为什么呢?-----这是因为if语句只管控一条语句,就从上面这个例子看,if语句只管控“可以买钢笔” 这一条语句,else语句也是一样的道理。

那么如何解决这个问题呢?----这句需要大括号({})了

加上else语句

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int money=0;
    scanf("%d",&money);
    if(money>10)
    {
     printf("可以买钢笔了\n");
     printf("可以买零食了\n");
    }
    else
    {
     printf("不可以买钢笔了\n");
     printf("不可以买零食了\n");
    }
    return 0;
}

 4.if与else配对问题 

在C语言,if和else配对,构成if-else语句,方便我们写代码。那if和else是怎样配对的呢?通常else语句总是和与之较近的if语句进行配对,不妨看个栗子吧~

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	int a = 10;
	int b = 5;
	if (a == 8)
		if (b == 5)
			printf("hehe\n");
		else
			printf("haha\n");
	return 0;

分析一下:第一个if语句不成立,按理说应该转到else语句,让屏幕打印haha,但事实上,屏幕上什么都没打印,这是因为else是与第二条if语句进行配对。那又有同学疑惑,第二条if语句成立,不应该打印hehe吗?为什么屏幕上也没有打印?-----这是因为第1条if语句不成立,它管控的语句就不执行,既然没有执行,当然就不会打印了。

5.if的嵌套

在C语言中,处理某些问题时,1条if语句可能不能准确的解决问题,这时候就需要多条if语句,此时就会涉及到if语句的嵌套。譬如判断先判断一个数是正是负?在判断是奇是偶?

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
	int num = 0;
	scanf("%d", &num);
	if (num > 0)
	{
		if (num % 2 == 0)
			printf("%d是偶数\n", num);
		else
			printf("%d是奇数\n", num);
	}
	else
		printf("%d是负数\n");

	return 0;
}

5.关系操作符

顾名思义就是判断两个数之间的大小关系的

> 大于;

< 小于;

== 等于;

!= 不等于;

判断两个数之间的大小,如果为真返回1,为假返回0;一般和if-else或者while循环搭配使用

6.三目操作符

三目操作符是一种条件操作符,一般有三个操作数,一般结构为

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    exp(表达式)?a:b;

    return 0;
}

如果表达式为真,计算结果为a;表达式为假,计算结果为b。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int a=10;
    int b=5;
    int c=a>b?a:b;
    printf("%d\n",c);
    return 0;
}

 同时,利用上述代码可以判断两个数中的最大值。

7.逻辑操作符

逻辑操作符分为以下三种

!--逻辑取反操作符(改变逻辑真实性,真的变为假,假的变为真);

&&--逻辑与操作符(两边条件同时为真才为真;有一个为假则为假);

||--逻辑或操作符(有一个为真则为真;同时为假才为假);

 先来介绍一下逻辑与操作符,举个例子--判断在18~36之间的为青年

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int age = 0;
    scanf("%d",&age);
    if(18<age && age<=36)
        printf("青年\n");
    return 0;
}

看到这里,有同学就有点疑问了?为什么不直接写18<=age<=36?

接下来让我们通过代码分析,不这样写的原因。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int age = 0;
    scanf("%d",&age);
    if(18<=age<=36)
        printf("青年\n");
    return 0;
}

此时你会发现,输入12屏幕上也会打印青年,这是因为18与12比较时为假,比较的结果范围值是0,0再与36比较成立,就会打印青年。所以在比较时,通常不连着比较,避免此类错误的发生。

下面再来介绍||--逻辑或操作符

通过一个例子来了解操作符-----判断是否是冬季

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
	int month = 0;
	scanf("%d", &month);
	if (month == 12 || month == 1 || month == 2)
		printf("冬季\n");
	else
		printf("不是冬季\n");
	return 0;
}

表达式只要满足其中一个,就会打印。逻辑或只要满足其中一个条件,就为真。

再来介绍一下逻辑取反操作符!

! a
a---真
a---假
8.switch语句

switch语句和if语句的用法相似,先来看switch语句的基本格式

switch(表达式)
{
    case value1: statement;
    case value2: statement;
    case value3: statement;
}

在使用switch语句时要注意的点:

第一:表示必须为整形表达式;

第二:case后面要跟整形常量值。

根据表达式算出的结果,跳转到相应的case语句,执行相应的代码程序。

举个例子,打印星期一~星期日

#include <stdio.h>
int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
		printf("星期1\n");
	case 2:
		printf("星期2\n");

	case 3:
		printf("星期3\n");
	
	case 4:
		printf("星期4\n");
		
	case 5:
		printf("星期5\n");
		
	case 6:
		printf("星期6\n");
	
	case 7:
		printf("星期日\n");
		
	default:
		printf("输入错误\n");
	}
	return 0;
}


输入1,你会发现屏幕上打印星期一~星期日,那么导致这样的结果的原因是什么呢?

这是因为在使用switch语句时,switch语句也是有分支效果的,要使用break跳出该语句,才能得到自己预期的效果。如果没有break语句,那么代码一直往后执行,一直到代码结束。

#include <stdio.h>
int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
		printf("星期1\n");
		break;
	case 2:
		printf("星期2\n");
		break;
	case 3:
		printf("星期3\n");
		break;
	case 4:
		printf("星期4\n");
		break;
	case 5:
		printf("星期5\n");
		break;
	case 6:
		printf("星期6\n");
		break;
	case 7:
		printf("星期日\n");
		break;
	default:
		printf("输入错误\n");
	}
	return 0;
}

每条语句后面加上break后,就能打印正确的结果。看到上面有同学提出疑问,这个default是什么东西?

9.default语句

在switch语句中,根据表达式会有相应的case语句,但是当我们输入一个值,却找不到相应case语句,此时default就发挥了作用,就会提示我们输入的数据并不正确或者找不到对于的case语句。这就是default的作用。

同时default语句的顺序是没有特定要求的,但是我们通常把它放在最后面,这样码代码时候看着美观。

  • 27
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值