C语言-if基本语法

C语言是一门结构化的程序设计语言
支持三种结构:

  • 顺序结构:正常的从头写到尾
  • 选择结构:if语句;switch语句
  • 循环结构:while循环;for循环;do-while循环

if

if语句的语法形式:

if(表达式)
   语句

表达式成立(为真),则语句执行,表达式不成立(为假),则语句不执行
在C语言中,0为假,非0为真,不论是负数,正数还是任何数,只要是非0就为真,是0就为假
例子:输入一个整数,判断是否为奇数

int main()
{  
   int num=0;//创建一个整形变量num给它初始化
   //输入
   scanf("%d,&num");//输入一个数放到num里面去
   //判断(如果为奇数,就打印奇数,如果不是奇数,就不打印)
   if(num%2==1)//奇数除以2余1,所以取模,模为1就为奇数
      printf("奇数\n");
   return 0;
}

当键盘输入为10时,发现不打印任何东西,因为10%2==0,不等于1,此时这个表达式为假,所以语句不会执行
运行结果
重新运行,键盘输入11时,则会打印出奇数。因为11%2等于1在这里插入图片描述
if表达式中判断为0,语句执行的情况
当把if表达式中改动一下
在这里插入图片描述
发现表达式最后等于0也执行下面的代码。
这是因为这是判断等于0,编译器认为这个是正确的,判断结束后返回的是1
所以只有单独写的时候,0为假,非0为真


if…else…

继上面的例子,如果一个数不是奇数,那就是偶数了,如果任意一个整数,我们要清楚的判断是奇数还是偶数怎么表示呢?
这就需要用到if…else…语句了,语法形式如下:

if(表达式)
  语句1
else
  语句2

例子
此时10%2不等于1,则会执行else语句,打印偶数。
所以,利用if…else…不论是奇数还是偶数,程序都能应付的过来
在这里插入图片描述
练习
输入一个年龄,>=18岁就输出:成年,否则就输出:未成年
输入20,可打印出成年
在这里插入图片描述
输入12,可打印未成年
在这里插入图片描述


分支中包含多条语句

在 if 或 else 中包含多条语句

在上例中,当年龄大于等于18时,不仅仅打印“成年”,再使它打印一条“可以谈恋爱了”这条语句,使 if 中包含多条语句,此时这两句语句都由if语句来控制
在这里插入图片描述
此时报错,因为:默认情况下 if 或 else 后面只能跟一条语句,如果想它们包含多条语句,则需要给它们一对大括号。
此时则运行成功在这里插入图片描述
而在 else 后面再填一句“不能谈恋爱
在这里插入图片描述
会发现 else 语句下的不能谈恋爱也被打印了
因为因为这条语句压根没受 else 约束,根本就不是 else 里面的,格式像这样:
当板块1 if 执行完后,板块2 else 不被执行,接着板块3按顺序就被执行了
在这里插入图片描述
所以,即使是在else里面,也得加上大括号,此时程序就没有问题了
在这里插入图片描述
所以:
如果 if 或 else 后面只跟一条语句,则不需要大括号;如果后面跟多条语句,则需要加大括号(代码块/程序块/复合语句)


嵌套if

在 if…else…语句中,else可以与另一个 if 语句连用,构成多重判断
比如要求输入一个整数,判断输入的整数是0,还是整数或负数
也就是要判断三种情况:0,整数,负数
前面的 if…else…只有两种情况,所以此题可以写成嵌套
在这里插入图片描述
以上格式可以简化写成:
在这里插入图片描述
可以理解为把选中的那段代码嵌套在最前面那个 else 里,在选中的代码中又分为大于0小于0
练习1
输入一个整数,如果是正数(大于0),再判断是奇数还是偶数,并输出;如果不是正数则输出:非正数

int main()
{
	int num = 0;
	//输入
	scanf("%d",&num);
	if (num > 0)//判断大于0后还得判断是奇是偶,所以用大括号,大括号里有两种情况
	{
		//判断奇数还是偶数
		if (num % 2 == 0)
			printf("偶数\n");
		else
			printf("奇数\n");
	}
	else
	{
		printf("非正数\n");
	}
	return 0;
}

练习2
输入一个人的年龄
如果年龄<18岁,打印“少年”
如果年龄在18岁至44岁打印“青年”
如果年龄在45岁至59岁打印“中老年”
如果年龄在60岁至89岁打印“老年”
如果90岁以上打印“老寿星”

int main()
{
	int age = 0;
	//输入
	scanf("%d",&age);
	if (age < 18)//小于,等于18已判断
		printf("少年\n");
	else//大于,等于18的情况全在这个逻辑中
	{
		if (age <= 44)//小于,等于44判断了,else全为大于44
			printf("青年\n");
		else//大于44全在这个逻辑中
		{
			if (age <= 59)//小于,等于59判断了,else全为大于59
				printf("中老年\n");
			else//大于59全在这个逻辑中
			{
				if (age <=89)//小于,等于89判断了,剩下90以上全在else里
					printf("老年\n");
				else
					printf("老寿星\n");

			}
		}
	}

	return 0;
}

简写版:

int main()
{
	int age = 0;
	//输入
	scanf("%d",&age);
	if (age < 18)//小于,等于18已判断
		printf("少年\n");
	else if (age <= 44)//大于18,小于等于44的判断了,else全为大于44
			printf("青年\n");
		else if (age <= 59)//大于44,小于等于59判断了,else全为大于59
				printf("中老年\n");
			else if (age <=89)//大于59,小于等于89判断了,剩下90以上全在else里
					printf("老年\n");
				else
					printf("老寿星\n");
	return 0;
}

悬空else问题

如果有多个 if 和 else,可以记住这样一条规则,else总是跟最接近的 if 匹配
读以下代码看最后程序运行的结果是什么?

#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;
}

这段代码最后什么也没有输出
错误想法:
a为0,b为2,a不为1,所以执行else打印“haha”
因为 else 总是和它最接近的 if 匹配,所以else与第二个 if 匹配。

在这里插入图片描述
框起来的if…else…才是一对,但是它们要运行的话,就必须得进到94行代码里,但是a=0,并不为1,所以没进到94行代码里,方框里的代码不执行,程序到最后什么也没有输出
正确格式应该是:

#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;
}

所以平时的代码格式也很重要,推荐书:《高质量的C-C++编程》

那么如何让第一个 if 与 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;
}

直接在 if 后面加一个大括号,将它们隔开

在这里插入图片描述
这样程序运行 haha 就被打印出来了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值