《C语言—循环和分支结构(上)》

57 阅读5分钟

《C语言—循环和分支结构(上)》


前言

// C语言是结构化的程序设计语言,结构指的是 顺序,选择,循环,三种结构,我们可以使用 if--else,switch实现选择结构,使用while,for,do_while实现循环结构,下面让我们一起来学习一下这些知识吧

一、if-else

1语法形式:
  if( 表达式 )
     语句1
  else
    语句2
   注:表达式成立(为真),执行绑定的语句,不成立 (为假),if语句不执行,执行else语句。

2.例题.输入一个数判断是否为奇数
#include <stdio.h>
int main()
{
	int num;
	scanf("%d", &num);

	if (num % 2) //奇数模上2不等于0
		printf("%d是奇数",num);
	else
		printf("%d不是奇数",num);
	return 0;
}

//执行结果如下 .在这里插入图片描述 3.分支中包含多条语句 默认if和else语句均只控制一条语句,如需多条语句需要加上*{ }* 例:

#include <stdio.h>
int main()
{
	int age;
	scanf("%d", &age);

	if (age >= 18)
	{
		printf("成年了\n");
		printf("可以谈恋爱了\n");
	}
	return 0;
}

//运行结果 在这里插入图片描述

二、嵌套if

// 在if-else结构中else可以与if语句连用构成嵌套判断 例题:输入一个数判断是0,还是正数,或者是负数

#include <stdio.h>
int main()
{
	int nums;
	scanf("%d", &nums);

	if (nums == 0)
		printf("0");
	else if (nums > 0)
		printf("%d是正数", nums);
	else
		printf("%d是负数",nums);
	return 0;
}

在这里插入图片描述 // 相信到了这里你已经对if-else语句有了一个基本的理解让我们来完成一道练习

输⼊⼀个⼈的年龄 如果年龄<18岁,打印"少年" 如果年龄在18岁⾄44岁打印"⻘年" 如果年龄在45岁⾄59岁打印"中⽼年" 如果年龄在60岁⾄89岁打印"⽼年" 如果90岁及以上打印"⽼寿星"

答案 :(不唯一此解法只是鄙人一看到此题的第一想法,如大家有更好的解法可以分享讨论)

#include <stdio.h>
int main()
{
	int age;
	scanf("%d", &age);

	if (age < 18)
		printf("少年\n");
	else if (age >= 18 && age <= 44)
		printf("青年\n");
	else if (age >= 45 && age <= 59)
		printf("中老年\n");
	else if (age >= 60 && age <= 89)
		printf("老年\n");
	else
		printf("老寿星\n");
	return 0;
}

在这里插入图片描述

三.悬空if的问题

 在这里我们只需要记住一点:else只与**最近**的if匹配
    在这里我们来看一个这样的问题
    
#include <stdio.h>
int main()
{
	int a = 0;
	int b = 2;

	if (a == 1)
		if (b == 2)
			printf("yes\n");
	else
		printf("no\n");
	return 0;
}

// 许多初入门的同学可能觉得这个代码运行输出no,但我们运行起来看一下 在这里插入图片描述 我们发现这个代码运行起来并没有我们想要的结果,这便是我们前面讲到的else总是与最近的if匹配

以下是修正后的代码可以更加直观帮助我们理解

#include <stdio.h>
int main()
{
	int a = 0;
	int b = 2;

	if (a == 1)
	{
		if (b == 2)
			printf("yes\n");
		else
			printf("no\n");
	}
	return 0;
}

这两段代码实际上是等价的,希望看完后能帮助刚才困惑的读者同学们理解 ,下面这段代码加上大括号后可读性更强,因此为了防止代码出现歧义,我们可以合理的使用大括号。

四.关系操作符

C语言中常见的关系操作符也称关系表达式一共有六个 • > ⼤于运算符 • >= ⼤于等于运算符 • <= ⼩于等于运算符 • == 相等运算符 • != 不相等运算符 注:1.关系表达式通常返回0或1表示真假 2.多个关系运算符不宜连用 3.C语言中等号为==而数学中的=在C中是赋值的意思


五.条件操作符

1.条件操作符也叫三目操作符语法形式如下: expt1? exp2 : exp3 例:(以下两段代码为一个意思方便理解)

#include <stdio.h>
int main()
{
	int a = 0;
	int b = 2;
	scanf("%d", &a);
	if (a > 5)
		b = 1;
	else
		b = 3;
	printf("%d", b);
	return 0;
}

//改造后
#include <stdio.h>
int main()
{
	int a = 0;
	int b = 2;
	scanf("%d", &a);
	int c = a > 5 ? 1 : 3;
	printf("%d", c);
	return 0;
}

六.逻辑操作符 :&&, || , !

注:在C语言中非0为真,0为假

  1. !:逻辑取反(改变表达式真假1 -> 0 或者0 -> 1)
  2. ||: 逻辑或
  3. &&:逻辑与 !!!重点 (1) || 与 &&比较 ||的使用(只要一个为真则为真) 在这里插入图片描述 &&的使用(同时为真才为真) 在这里插入图片描述 综合练习时间 例:判断一个数是否为闰年 参考:(笔者写法)
#include <stdio.h>
int main()
{
	int year = 0;
	scanf("%d", &year);

	if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0))
		printf("%d是闰年\n", year);
	else
		printf("%d不是闰年\n",year);

}

运行结果 在这里插入图片描述 !!! 注意点: 短路问题 对于 && 和 ||:只要前面一个为真后面是否为真不用判断

7.switch语句

除了if语句还有switch可以来实现分支结构 7.1语法形式:

switch (expression) {
 case value1: statement
 case value2: statement
 default: statement

expression: 必须是整形表达式 value:必须是整形常量表达式

例题:计算一个数模3之后的余数

#include <stdio.h>
int main()
{
	int nums = 0;
	scanf("%d", &nums);

	switch (nums % 3)
	{
	case 0 :
		printf("余数是:%d", nums % 3);
		break;
	case 1:
		printf("余数是:%d", nums % 3);
		break;
	case 2:
		printf("余数是:%d", nums % 3);
		break;
	}
}

运行结果

在这里插入图片描述 注意: (1)case 和后面的数字之间有空格 (2)每一个case后面必须跟上break才能跳出switch语句 7.2 switch语句中的breakdefault 我们还是看上面那段代码

 #include <stdio.h>
int main()
{
	int nums = 0;
	scanf("%d", &nums);

	switch (nums % 3)
	{
	case 0 :
		printf("余数是:%d\n", 0);
	case 1:
		printf("余数是:%d\n", 1);
		break;
	case 2:
		printf("余数是:%d\n", 2);
		break;
	}
}

执行结果 在这里插入图片描述 验证了每一个case后面必须跟上break才能跳出switch语句

最后让我们来看看default

#include <stdio.h>
int main()
{
	int nums = 0;
	scanf("%d", &nums);

	switch (nums)
	{
	case 0 :
		printf("%d\n", 0);
		break;
	case 1:
		printf("%d\n", 1);
		break;
	case 2:
		printf("%d\n", 2);
		break;
	default:
		printf("%d\n", nums);
		break;
	}
}

运行结果: 在这里插入图片描述

注:如果不满足case里面的情况就会进入default 注:default和case的顺序根据自己代码习惯就OK了

总结:这篇主要讲解了分支结构,关于循环结构等下一篇在继续给大家介绍,这也是笔者第一篇博客,可能写的也比较不好,如有什么不足也请大家指正,谢谢大家在这里插入图片描述

,下期见