浅析C语言分支循环结构

浅析C语言分支循环语句

(C语言小白浅浅总结一下分支循环语句,本篇博客如有错误请各位大佬评论区指正)

一,分支语句

  1. if语句
  2. if…else语句
  3. switch语句

二,循环语句

  1. for循环
  2. while循环
  3. do…while循环
  4. 循环中的嵌套(练习)
  5.循环中的break和continue语句

分支语句 \color{red}{分支语句} 分支语句

1.if语句
语法结构

1 if(表达式)
2     语句;

表达式为真(非0)语句执行;表达式为假(0)语句不执行。

//举例 输入一个整数,判断是否为奇数
#include<stdio.h>
int main()
{
int num=0;
scanf("%d",&num);
if(num%2==1)/*等价于if(num%2),若num是奇数num%2为1(真),语句执行;
若num是偶数num%2为0(假),语句不执行*/
printf("%d是奇数\n",num);
return 0;
}

拓展👀:嵌套if

//要求输⼊⼀个整数,判断输⼊的整数是0,还是正数或者负数
#include<stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	if (n == 0)
		printf("输入的值是0\n");
	else
	{
	     if (n > 0)
			  printf("输入的值是正数\n");
	     else
			  printf("输入的值是负数\n");
    }
	return 0;
}
//以上代码也可以转换成如下代码
#include<stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	if (n == 0)
		printf("输入的值是0\n");
	else if (n > 0)
			printf("输入的值是正数\n");
	else
			printf("输入的值是负数\n");
	return 0;
}
 练习:
1.输⼊⼀个⼈的年龄
2.如果年龄 < 18岁,打印"少年"
3.如果年龄在18岁⾄44岁打印"⻘年"
4.如果年龄在45岁⾄59岁打印"中⽼年"
5.如果年龄在60岁⾄89岁打印"⽼年"
6.如果90岁及以上打印"⽼寿星"
#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age < 18)
		printf("少年\n");
	else //>=18
	{
		if (age <= 44)
			printf("青年\n");
		else//>=45
		{
			if (age <= 59)
				printf("中老年\n");
		    else//>=60 
		    {
			if (age <=89)
				printf("老年\n");
			else//>=90
				printf("老寿星\n");
		    }
		}
	}
	return 0;
}

2.if…else语句
语法结构

1 if(表达式)
2    语句13  else
4    语句2
//举例 判断一个整数是否为奇数,如果是奇数打印奇数,否则打印偶数
#include<stdio.h>
int main()
{
	int num = 0;
	scanf("%d", &num);
	if (num % 2 == 1)
		printf("%d是奇数\n", num);
	else
		printf("%d是偶数\n", num);
	return 0;
}

注意⚠️:If/else后有多条语句时要用{}将其括起来形成程序块/代码块/复合语句
拓展👀:悬空else
注意⚠️:else总是跟最接近的if匹配

//举例 
#include<stdio.h>
int main()
{
	int a = 0;
	int b = 2;
	if (a == 1)
		if (b == 2)
			printf("hehe\n");
		else//此处的else与临近的if匹配
			printf("haha\n");
	return 0;//只有满足a==1这一条件才会进入下面的if,else选择语句
	//故此代码运行后什么都不打印
}
#include<stdio.h>
int main()
{
	int a = 0;
	int b = 2;
	if (a == 1)
	{
		if (b == 2)
			printf("hehe\n");
    }
    else//此时else与第一的if匹配,代码运行后会打印出haha
			printf("haha\n");
	return 0;
}

3.switch语句
语法结构

1  switch (expression)   {
2  case value1: statement
3  case value2: statement
4  default: statement
5  }

📒:•switch后面的expression必须是整形表达式(字符也算是整型,字符有其对应的ASCII码值)
   •case后面的值必须是整型常量表达式
   •case和后面的数字之间必须有空格
   •每一个case语句中的代码执行完成后,需加上break,才能跳出这个switch语句
   •switch 后边的 expression 的结果不是 value1 ,也不是 value2 的时候,就会执⾏ default ⼦句。在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满⾜实 际需求的就可以。 不过我们通常是把 default ⼦句放在最后处理的。

延伸👀:if语句与switch语句的对比

/*用if语句输入一个数,判断其是否整除3,若能整除输出整除了,余数是0;
若不能整除,输出其余数*/
#include<stdio.h>
int main()
{
    int n = 0;
    scanf("%d", &n);
    if (n % 3 == 0)
        printf("整除了,余数是0\n");
    if (n % 3 == 1)
        printf("余数是1\n");
    if(n%3==2)
        printf("余数是2\n");
    return 0;
}
//也可以这样写
#include<stdio.h>
int main()
{
    int n = 0;
    scanf("%d", &n);
    if (n % 3 == 0)
        printf("整除了,余数是0\n");
    else if (n % 3 == 1)
        printf("余数是1\n");
    else
        printf("余数是2\n");
    return 0;
}
/*用switch语句输入一个数,判断其是否整除3,若能整除输出整除了,余数是0;
若不能整除,输出其余数*/
#include<stdio.h>
int main()
{
    int n = 0;
    scanf("%d", &n);
    switch (n % 3)
    {
    case 0:
        printf("整除了,余数是0\n");
        break;
    case 1:
        printf("余数是1\n");
        break;
    case 2:
        printf("余数是2\n");
        break;
    }
    return 0;
}

/*练习:输⼊⼀个1~7的数字,打印对应的星期⼏
例如:
输⼊:1 输出:星期⼀
输⼊:2 输出:星期⼆
输⼊:3 输出:星期三
输⼊:4 输出:星期四
输⼊:5 输出:星期五
输⼊:6 输出:星期六
输⼊:7 输出:星期天*/
#include<stdio.h>
int main()
{
    int day = 0;
    scanf("%d", &day);
    switch (day)
    {
    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;
    }
    return 0;
}
 /*练习:输⼊1-5,输出的是“⼯作⽇”;
   输⼊6-7,输出“休息⽇”*/
#include<stdio.h> 
int main()
{
    int day = 0;
    scanf("%d", &day);
    switch (day)
    {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        printf("工作日\n");
        break;
    case 6:
    case 7:
        printf("休息日\n");
        break;
    }
    return 0;
} 
循环语句 \color{red}{循环语句} 循环语句

1.while循环
语法结构

1 while(表达式)
2  语句;//如果循环体想包含更多的语句,可以加上⼤括号  
//举例 在屏幕上打印1~10的值
#include<stdio.h>
int main()
{
	int i = 1;//初始化部分
	while (i <= 10)//判断部分
	{
		printf("%d\n", i);
		i++;//调整部分
	}
	return 0;
}

延伸👀:if和while的对比

#include<stdio.h>
int main()
{
	while(1)
		printf("hehe\n");//只打印一个hehe
	return 0;
}
#include<stdio.h>
int main()
{
	while(1)
		printf("hehe\n");//会陷入死循环
	return 0;
}
/*练习:输⼊⼀个正的整数,逆序打印这个整数的每⼀位
例如:
输⼊:1234,输出:4 3 2 1
输⼊:521,输出:1 2 5*/
#include<stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	while (n)
	{
		printf("%d ",n % 10 );//输出最后一位
		n /= 10;//去掉最后一位
	}
	return 0;
}

2.for循环
for 循环是三种循环中使⽤最多的, for 循环的语法形式如下:

1 for(表达式1; 表达式2; 表达式3)
2             语句;//如果循环体想包含更多的语句,可以加上⼤括号

表达式1:初始化部分 表达式2:判断部分 表达式3:调整部分
for循环的初始化,判断,调整三个部分是可以省略的。初始化部分省略:循环中无法初始化循环变量,可能导致循环变量未被正确初始化而造成意外行为。 判断部分省略:循环条件无法被判断,导致无法退出循环,造成无限循环。 调整部分省略:循环中无法对循环变量进行调整,可能导致循环变量无法按预期进行调整而造成意外行为。 因此,虽然 for 循环中的初始化部分、判断部分、调整部分是可以省略的,但是不建议全部省略,否则可能会导致程序无法正常工作或者产生意外行为。

//举例
#include<stdio.h>
int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)/*分别是第一步(初始化);第二步(判断);
	第四步(调整)*/
	{
		printf("%d ", i);//第三步
	}
	return 0;
}

3.do-while循环
在循环语句中 do while 语句的使⽤最少,它的语法如下:

1 do
2  语句;
3 while(表达式)

while和 for这两种循环都是先判断,如果满⾜条件就进⼊循环,执⾏循环语句,如果不满⾜就跳出循环;⽽do while循环则是先直接进⼊循环体,执⾏循环语句,然后再执⾏ while 后的判断表达式,表达式为真,就会进⾏下⼀次,表达式为假,则不再继续循环。

//举例
#include<stdio.h>
int main()
{
	int i = 1;
	do
	{
		printf("%d ", i);
		i++;
	} while (i <= 10);
	return 0;
}
/*练习:输⼊⼀个正整数,计算这个整数是⼏位数?
例如:
输⼊:1234 输出:4
输⼊:12 输出:2*/
int main()
{
	int n = 0;
	scanf("%d", &n);
	int cnt = 0;
	do
	{
		n /= 10;//依次去掉末位
		cnt++;
	} while (n);//当n=0时循环结束
	printf("%d\n", cnt);
	return 0;
}

4.循环中的嵌套(练习)

/*练习
找出100~200之间的素数,并打印在屏幕上。
注:素数⼜称质数,只能被1和本身整除的数字
*/
int main()
{
	int i = 0;
	int count = 0;
	for (i = 100; i <= 200; i++)
	{
		int flag = 1;/*不能写到for循环外面,
		如果写到for循环外面就会在i = 100第一次循环的时候赋值为0,
		之后就一直是0了,在for循环内初始化flag,
		不论上次循环结果如何,再次进入循环时flag初始值都是1*/
		int j = 0;
		for (j = 2; j <=i-1; j++)
		{
			if (i % j == 0)//证明i有除1和它本身之外的因子,不是素数
				flag = 0;
				break;//直接跳出循环,不再进行
		}
		if (flag==1)
		{
			printf("%d ", i);
			count++;
		}
	}
	printf("\ncount=%d\n", count);
	return 0;
}
#include<stdio.h>
#include<math.h>
int main()
{
	int i = 0;
	int count = 0;
	for (i = 101; i <= 200; i+=2)//素数不可能是偶数,在奇数中寻找效率更高
	{
		int flag = 1;
		int j = 0;
		for (j = 2; j <=sqrt(i) ; j++)
		//sqrt() 用来求给定值的平方根,其头文件是#include<stdio.h>,
		//i==sqrt(i)*sqrt(i)==(小于sqrt(i)的数)*(大于sqrt(i)的数),
		//因此只需在小于sqrt(i)的范围内查找即可,可提高运算效率
		{
			if (i % j == 0)
				flag = 0;
			break;
		}
		if (flag == 1)
		{
			printf("%d ", i);
			count++;
		}
	}
	printf("\ncount=%d\n", count);
	return 0;
}

5.循环中的break和continue语句
• break的作⽤是⽤于永久的终⽌循环,只要 break 被执⾏,直接就会跳出循环,继续往后执⾏。
• continue的作⽤是跳过本次循环 continue 后边的代码,在 for 循环和 while 循环中有所差异的。
📚 while循环中的break和continue

//while循环中的break
#include<stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
			break;//符合i==5的条件后就停止,不再进入循环
		printf("%d ", i);
		i++;
	}
	return 0;
}
//while循环中的continue
#include<stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
			continue;
			/*当符合条件i==5时continue会跳过后面的程序,
			当再次进入循环时由于无法进行i++的调整,
			一直符合条件i==5<10,所以就会陷入死循环*/
		printf("%d ", i);
		i++;
	}
	return 0;
}
//while循环中的continue(将上面代码中的调整部分i++换下位置)
#include<stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		i++;
		if (i == 5)
			continue;
			/*当符合条件i==5时continue会跳过后面的程序,
			当再次进入循环时先进行i++的调整,一直有i>5
			直到不符合条件i<=10循环结束*/
		printf("%d ", i);
	}//输出结果是2 3 4 6 7 8 9 10 11
		return 0;
}

📚for循环中的break和continue

//for循环中的break
#include<stdio.h>
int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
			break;//符合i==5的条件后就停止,不再进入循环
		printf("%d ", i);//打印出1 2 3 4 
	}
	return 0;
}
//for循环中的continue
#include<stdio.h>
int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
			continue;
			/*当符合条件i==5时continue会跳过后面的程序,
			再次进入循环时进行i++的调整,一直有i>5
			直到不符合条件i<=10循环结束*/
		printf("%d ", i);//输出结果为1 2 3 4 6 7 8 9 10
	}
	return 0;
}

📚do while循环中的break和continue

//do while循环中的break
#include<stdio.h>
int main()
{
	int i = 1;
	do
	{
		if (i == 5)
			break;//符合i==5的条件后就停止,不再进入循环
		printf("%d ", i);
		i++;
	} while (i <= 10);
	return 0;//打印出1 2 3 4
}
//do while循环中的break
#include<stdio.h>
int main()
{
	int i = 1;
	do
	{
		if (i == 5)
			continue;
			/*当符合条件i==5时continue会跳过后面的程序,
			当再次进入循环时由于无法进行i++的调整,
			一直符合条件i==5<10,所以就会陷入死循环*/
		printf("%d ", i);
		i++;
	} while (i <= 10);
	return 0;//打印出1 2 3 4死循环
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

engrave行而不辍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值