C语言中的分支和循环

首先,c语言是结构化程序设计语言,分为三种结构,分别是顺序结构、选择结构、循环结构。接下来我会详细的讲讲~

顺序结构只要你逻辑不出错,一步一步往下走就行了,我们重点讲的是选择结构和循环结构,一般用if、switch来实现选择,用for、while、do while来实现循环

1.if语句

在c语言中,0为假,非0为真;也就是说表达式的结果为0,则语句不执行

我们来举个例子:输入一个整数,判断是不是偶数

#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int n;
	printf("请输入一个整数:");
	scanf("%d", &n);
	if (n % 2 == 0)
	{
		printf("是偶数!\n");
	}
	return 0;
}

当输入5时if语句不执行,可自己敲着试试~

if不执行那么会执行什么呢?下面引出了else

1.2 else

如果一个数不是偶数,那么就会是奇数,可以通过if else来演示,我们在原代码上加个else就能达到目的了,else是否则的意思

#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int n;
	printf("请输入一个整数:");
	scanf("%d", &n);
	if (n % 2 == 0)
	{
		printf("是偶数!");
	}
	else {
		printf("是奇数!");
	}
	return 0;
}

1.3 分支中包含多条语句

默认if else只能控制单条语句

#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int n;
	printf("请输入一个整数:");
	scanf("%d", &n);
	if (n % 2 == 0)
	{
		printf("是偶数!\n");
	}
	else 
    {
		printf("是奇数!\n");
	}
	printf("无问要记得学习");
	return 0;
}

可以看到无论是那条语句,无问要记得学习都会被输出;if或者else只会控制一条语句,为了规范的表达,建议if语句的代码用大括号{}

1.4 嵌套if

即有多个判断条件的时候可以用else if

那么如何实现if的嵌套呢?

举个例子:13-17为青少年,18-40为青年,41-65为中年,65以上为老年

#include<stdio.h> 
int main()
{
	int age;
	scanf("%d", &age);
	if (age >= 13 && age <= 17)
	{
		printf("青少年");
	}
    
	else if (age >=18 && age <= 40) 
	{
		printf("青年");
	}
	else if (age > 40 && age <= 65) 
	{
		printf("中年");
	}
	else
	{
		printf("老年");
	}
	return 0;
}

对于年龄的界定我们不讨论,只是想说可以用else if来做多个判断

1.5 悬空else问题

如果有多个if和else,else总是与它最近的且没有配对的if配对

如果想使用多个,大括号就很重要了

2.关系操作符

C语言用于比较的表达式,称为“关系表达式”,使用的运算符为关系运算符

主要有 >大于运算符,<小于运算符,>=大于等于运算符,<=小于等于运算符,==相等运算符

!=不等于运算符;注意编写的时候>=之间是没有空格的,==为关系运算符,=为赋值运算符

关系表达式通常返回0或1;分别表示假和真;

3.条件操作符

也叫三目运算符,需要接受三个操作数;三目操作符会让代码行少一些,但是注意过于复杂还是不建议使用,读者的阅读性不好;

三目操作符的运用:两个数中谁最大的问题

意思是a>b吗如果大于就printf a,否则printf b

#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int a, b;
	scanf("%d %d", &a, &b);
	int m = a > b ? a : b;
    printf("%d", m);
}
4. 逻辑操作符

&& 与 (并且的意思)口诀:全真才真,一假则假

|| 或    口诀:有真则真

!非  为取反运算符,比如a为非0,那么!a为0

下面是例子~判断是不是闰年

#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int year;
	scanf("%d", &year);
	if (year % 4 == 0 && year % 10 != 0 || year % 400 == 0)
	{
	    printf("是闰年");
    } 
	else
	{
		printf("不是闰年");
	}
        return 0;
}

5.switch语句

switch 语句是⼀种特殊形式的 if...else 结构,⽤于判断条件有多个结果的情况。它把多重 的 else if 改成更易⽤、可读性更好的形式。

switch的用法和case,break搭配,注意格式switch()里的是mark必须是整型表达式;case后的必须是常量表达式 ,break为跳出switch语句,为了程序的健壮性,记得加上defalut

例子:分数对应的等级(50分以下为E,60~70为D,以此类推)

#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main ()
{ 
    int score,mark;
    
    printf("Input score:");
    scanf("%d",&score);
    mark=score>=0&&score<=100?score/10:-1;
    switch(mark)
	{  
	  case 0:
	  case 1:
	  case 2:
	  case 3:
	  case 4:
	  case 5:
	  printf("grade:E\n");
	  break;
	
	  case 6:
		printf("grade:D\n");
		break; 
		case 7:
		printf("grade:C\n");
		break;
		case 8:
		printf("grade:B\n");
		break;
		case 9:
		printf("grade:A\n");
		break;
		default :printf("Input error\n");
			
		 
	}
	   return 0;
}
练习:输入一个1~7的数字,打印出对应的星期几

6.while循环

和if语句差不多,都是while(表达式)为真就执行{}里的语句,区别就是while可以循环

while循环的执行流程是,如果表达式为真就进入循环,一直反复,直到为假就跳出循环

打印出1~10的数字

#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int n=1;
	while (n<=10) 
	{
		printf("%d ", n);
		n++;
	}
	return 0;
}

7.for循环

for 循环是三种循环中使⽤最多的,for循环的语法形式为for(初始化表达式;判断表达式;转化表达式)

用for循环在屏幕上打印1~10的值


#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int n=0;
	for(n=1;n<=10;n++)
	{
		printf("%d ", n);
	}
	return 0;
}

对比来看,for语句更集中

8. do while循环

根据流程图来看,do while循环至少执行了一次,while和for都是先判断;

注意:while()后面要加分号

接下来看下这个代码 

输入一个数,判断有多少位

#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int n;
	int count = 0;
	scanf("%d", &n);
	do
	{
		count++;
		n = n / 10;
	} while (n);

	printf("%d\n", count);

	return 0;
}

do while 适用于至少做了一次的场景,比如上面的代码,输入0也是一位 

9.break和continue语句

break为跳出本循环,continue为继续循环,而不进行continue后的语句

while和for的continue有差别,我们以打印1~10的数字为例

#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int n = 1;
	while (n <= 10)
	{
		if (n == 6)
		continue;
		printf("%d ", n);
		n++;
	}
	return 0;
}

打印的结果为1 2 3 4 5  陷入死循环

for循环呢?

#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int n = 0;
	for (n=1;n <= 10;n++)
	{
		if (n == 6)
			continue;
		printf("%d ", n);
		
	}
	return 0;
}

答案是不打印6。因为continue不执行下面的语句,去到n++;为真又进入循环 

do while 和while循环一样陷入死循环

10. 循环的嵌套

就是for while do while三种循环一起用

比如计算100~200中的素数

素数:2~i-1之间有数字能整除i,则i不是素数,如果都不能整除,则i是素数。

可以通过试除法,比如9就用2~8去整除9,发现3能整除,那么就不是素数

这里我们引入一个变量flag,判断的标志

看代码~

#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int i=0;
	for (i = 100; i <= 200; i++)
	{
		int flag = 1;//假设i是素数;
		int j = 0;
		for (j = 2; j <i; j++)
		{
			if (i % j == 0)
			{
				flag = 0;//不是素数
				break;
			}
		}
		if (flag == 1)
		{
			printf("%d ", i);
		
		}
	}
	return 0;
}

也可以加上count看循环了多少次和素数的个数

11. goto语句

C语⾔提供了⼀种⾮常特别的语法,就是 goto 语句和跳转标号, goto 语句可以实现在同⼀个函数 内跳转到设置好的标号处。

比如循环打印无问要记得学习

#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
again:
printf("无问要记得学习\n");
goto again;
return 0;
}

goto语句尽量不要使用;因为多次跳转会让程序的执行混乱;但在某些特定情景下,使用挺方便

比如在多个循环里,要跳出循环用break就会快点,用break要跳几次

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值