《C 语言分支与循环全攻略:从基础语法到实战应用》

目录

1. if 语句

2. 操作符--关系操作符 条件操作符 逻辑操作符

2.1 关系操作符

2.2 条件操作符

2.3 逻辑操作符

练习 判断是否为闰年

短路

3. switch语句

4. while 与 do while 循环

continue 与 break :

练习 倒序输出

练习 计算位数

练习 关机与循环

5. for 循环

练习 打印1~100之间3的倍数并且求和

练习 输出100~200之间的素数


前言: c语言是一门结构化语言 其中的结构指的就是 顺序结构 选择结构 逻辑结构

1. if 语句

形式如下  


#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
int main()
{
	int a=0, b=1;
	if (a)
	{
		;
	}
	else if (b)
	{
		;
	}
	else
	{
		;
	}
	return 0;
}

其中 a b为判断条件  {  }内为执行语句 

通过以上相关知识点 我们可以试着写出 用if判断是奇数还是偶数

使用if判断是奇数还是偶数的代码如下

用if 判断 是正数还是负数

在if else语句中有一点需要注意 那就是else是遵循就近原则 既会与最近的if 形成组合 如下

由于if(a==1)并不满足 因此不执行if(b==2)

若需要上面的if 与 else匹配 需要 { }   如下

2. 操作符--关系操作符 条件操作符 逻辑操作符

2.1 关系操作符

如果需要表达     0<a<10 在c语言中需要使用&&符号  &&表示并且   而||为或者

2.2 条件操作符

三目操作符

找两个数其中的较大值时 

把xy其中较大值赋给a   需要用到  ? 与 :   

?前为真 则输出x   ?前为假 则输出y      可以用来替换简单的if语句

2.3 逻辑操作符

&&:并且    ||:或者 

&& 表示需要同时满足才成立 此时返回值为1

当其中有一个为假时 返回0

||  表示满足其一既可  返回值为1

当其中两个都为假时才返回0

!:取反

如图 if语句中 条件为真时执行 而加入! 表示取反 此时a为假时执行

练习 判断是否为闰年

短路

1. 基本概念

逻辑短路是编程语言(如C、C++、Java、Python等)中逻辑运算符(&& 和 ||)的一种优化行为:

  • &&(与):若左侧为假,直接跳过右侧计算(整体必为假)。
  • ||(或):若左侧为真,直接跳过右侧计算(整体必为真)。
2. 为什么需要短路?
  • 效率提升:避免不必要的计算。
  • 安全性:防止潜在错误(如空指针访问)。

小结 :

逻辑运算符的特点是从左往右进行计算 因此才会出现这种情况

例如 :

a&&b  假如a为假 那就不需要对b进行运算了 

a||b    假如a为真  那就不需要对b进行运算了

3. switch语句

基本格式如下

switch()
{
   case 0:
     {  }
   case 1:
     {  }
   default:
     {  }
}

例如

让我们试着运行以下  按正常情况应该输出余数是2才对

而结果是case 2之后的语句全部都运行了 这是因为当满足case2他不会跳出switch语句

此时我们需要使用break关键字来跳出switch 如下

这样就运行成功了 

注意项 :

1  case之后跟数字必须有空格  并且使用 :

2  switch(num)  其中num必须为整型 可以是int  char  因为char本质上也是整型 但不可以是浮点数

3  每一个case语句后面必须跟一个break; 这样才能跳出switch语句

4 break的使用取决于是否需要跳出switch语句

5 default是所以case都不匹配时 执行default选项的语句

6  default 的位置不固定 可以放在case之前 但后面需要跟上break; 才能跳出switch

下面让我们来试着写出打印今天是星期几的代码

假如输入1 则打印今天是星期一 其他同理

#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
int main()
{
	int input;
	scanf("%d", &input);
	switch (input)
	{
	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;
    default:
	    printf("输入错误\n");
	}

现在我们修改一下  1~5打印工作日  6~7打印周末

#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
int main()
{
	int input;
	scanf("%d", &input);
	switch (input)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("今天是工作日\n");
		break;
	case 6:
	case 7:
		printf("今天是周末\n");
		break;
    default:
	    printf("输入错误\n");
	}

相信你也想出来了 当1~5打印相同时 我们可以删去多余打印部分与多余break

这样case1~5就会输出最后case5打印的今天是工作日  6~7同理

4. while 与 do while 循环

while循环 格式如下

int main()
{
	while (1) //1是判断条件
	{


//执行语句


	}
	return 0;
}

do   while循环 格式如下

int main()
{
	do
	{

          //执行语句

	} while (1);//1是判断条件
	return 0;
}

do while 与 while 循环的区别在于  do while 会先执行一次在判断循环条件

而while是先判断在执行  假如条件为假 则一次都不执行

continue 与 break :

而循环语句内 我们就会涉及 continue 与 break 

continue ; 表示跳出此次循环 进入下一次循环 

break ;  表示跳出循环体

我们可以通过以下代码来理解 continue 与 break 

break示例

循环条件是 1  无限循环 但循环体内有break 当满足 if (i = 9)时 执行break; 跳出循环

continue示例

当满足条件  if (i%3==0) 时 执行 continue 跳出此次循环 不在打印i的值 因此3的倍数都不打印

  if (i == 20)满足时 跳出循环 表示当i==20时  跳出循环体

练习 倒序输出

输入一个数字 然后倒序输出 例如 输入1234 输出4321  代码如下

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

键盘录入input 

使用while循环  循环条件为input != 0 

第一个打印的数字为input的个位数

因此第一步使用input来对10取余 这样就会得到个位

第二步  将input除以10赋给input本身  这样个位就被省略掉了  剩下的在组成一个新数字

再重复第一步 既重新进入循环 当input==0 时 跳出循环 打印完毕


练习 计算位数

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

运行结果如下 ;

练习 关机与循环

#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
#include<stdlib.h>
int main() 
{
	char input[50];
	printf("请输入我是大笨蛋 否则电脑将在一分钟内关机\n");
	system("shutdown -s -t 60");
	while (1)
	{
		scanf("%s", input);
		if (strcmp(input, "我是大笨蛋") == 0)
		{
			printf("恭喜你输入正确 成功取消\n");
			system("shutdown -a");
		}
		else 
		{
			printf("输入错误 请重新输入\n");
		}
	}
}

解释如下

键盘录入input的值 与answer进行比较 使用strcmp关键字 

若相等则退出循环 若不相等则打印    输入错误  请重新输入   再次进入循环

  1. 参数说明

    • -s:表示关机(shutdown)。
    • -t 60:设置倒计时为 60 秒(默认单位是秒,可修改数字调整时间)。
    • 其他常用参数:
      • -r:重启(reboot)
      • -a:取消关机(abort)
      • -f:强制关闭所有程序(force)

5. for 循环

基本格式如下

#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
int main()
{
	// for (表达式1; 表达式2; 表达式3)
	{
        //循环体
		//表达式1 是初始化语句
		//表达式2 是判断语句
		//表达式3 是调整语句
	}
	return 0;
}

理解for循环执行顺序

表达式1->表达式2->循环体->表达式3->表达式2->循环体->表达式3---------

先初始化 在判断 然后进入循环体 在执行调整语句 在判断

若判断为假 则跳出循环 判断为真则再次进入循环

下面 使用for循环打印 1~10 

注 : 初始化语句只会被执行一次

练习 打印1~100之间3的倍数并且求和

代码如下 

#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
int main()
{
	int output=0;
	 for (int i=1; i<100; i++)
	{
		 if (i % 3 == 0)
		 {
			 output = output + i;
			 printf("%d  ", i);
		 }
	}
	 printf("\n1~100之间3的倍数之和为%d",output);
	return 0;
}

   运行结果如下:

 解析 :

1 使用for循环 在1~100之间进行  

2 循环体中 使用if语句 对3的倍数进行剔除 满足3的倍数的进行打印 并且将值进行累加赋给output

3 退出循环体后 将output的值进行打印

练习 输出100~200之间的素数

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

解释如下:

1.其中用到 了循环的嵌套 第一层循环是为了100~200的依次进行判断

2.第二层循环是为了让100~200的每一个数单独进行判断 从2~sqrt(i)分别进行整除

如果能整除 则flag=0;不是素数  若不能 则flag依旧=1 是素数

sqrt(i)表示对i进行开方 目的是为了提升代码运行效率

3.在第二层循环结束后 在第一层循环最后 判断flag的值 判断是否打印

运行结如下:

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    打赏作者

    阿方猛敲c嘎嘎

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

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

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

    打赏作者

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

    抵扣说明:

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

    余额充值