首页 > 其他分享 >4.分支和循环(上)

4.分支和循环(上)

时间:2024-11-09 18:49:26浏览次数:3  
标签:语句 int else 运算符 循环 printf main 分支

文章目录


引言

C语言是一门结构化的程序设计语言

  • 顺序结构
  • 选择结构( if 语句 / switch 语句 )
  • 循环结构(while 循环 / for 循环 / do while 循环)

一、if语句

1.1 if

if语句的语法形式如下:

if(表达式)   //真
    语句      //假
//c语言中0表示假,非0表示真

例子: 输入一个整数,判断是否为奇数

int main()
{
	int num = 0;
	scanf("%d", &num);//输入
	if (num % 2 == 1)//判断(数值相等需要用==)
	printf("%d 是奇数\n", num);//输出
	return 0;
}

下面我们通过流程图结构分分析此题
在这里插入图片描述

1.2 else

如果一个数不是奇数,那就是偶数了,如果任意一个整数,我们要清楚的判断是奇数还是偶数怎么表示呢?
这里需要 if…else… 语句

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

例子: 输入一个整数,判断是否为奇数,如果是奇数打印时奇数,否则打印偶数

int main()
{
	int num = 0;
	scanf("%d", &num);//输入
	if (num % 2 == 1)//判断
	printf("%d 是奇数\n", num);//输出
	else
		printf("%d 是偶数\n", num);
	return 0;
}

练习: 输入一个年龄,>=18岁就输出:成年,否则就输出:未成年

int main()
{
  int age = 0;
  scanf("%d",&age);
  if(age>=18)
     printf("成年人\n")
  else
     printf("未成年\n")
  return 0 ;
}

1.3 分支中包含多条语句

默认在if和else语句中默认都只控制一条语句,比如:

int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age >= 18)
		printf("成年\n");
		printf("可以谈恋爱了\n");
    return 0;
}

上面的代码,你会发现输入的值不管时>=18还是<18,"可以谈恋爱了"都会打印在屏幕上
在这里插入图片描述

if 语句只能控制一条语句,就是 printf(“成年了\n”);对于 printf(“可以谈恋爱了\n"),是单独存在的,不管if语句的条件真假,都会被执行
如果我们要同时控制两条语句,怎么办呢?需要使用{ }将代码括起来,else后也可以跟上大括号。如下:

int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age >= 18)
	{
		printf("成年\n");
		printf("可以谈恋爱了\n");
	}
	else
	{
		printf("未成年\n");
		printf("不可以早恋\n");
	}
	return 0;
}

1.4 if语句的嵌套

if…else… 语句中,else可以与另一个if语句连用,构成多重判断。


比如:要求输入一个整数,判断输入的整数是0,还是正数或者负数。请看如下代码:

int main()
{
	int num = 0;
	scanf("%d", &num);
	if (num == 0)
	printf("num 是0\n");
	else
	{                //大括号可以去掉
		if (num > 0)
		   printf("num 是正数\n");
		else
	       printf("num 是负数\n");
	}
	return 0;
}

我们可以为此简化if…else…,代码如下:

int main()
{
	int num = 0;
	scanf("%d", &num);
	if (num == 0)
		printf("num 是0\n");
	else  if (num > 0)
	    printf("num 是正数\n");
	else
		printf("num 是负数\n");
	return 0;
}//简化

练习:
在这里插入图片描述

int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age < 18)
		printf("少年\n");
	else if (age >= 18 && age <= 44)
		printf("青年\n");
	else if (age > 44 && age <= 59)
		printf("中老年\n");
	......
	return 0;
}

1.5 悬空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不等于1,那么就会执行haha。但是当你执行代码,输出的结果为:空。
这是因为悬空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;
}

或者如果我们希望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;
 }

只要带上适当的大括号,代码的逻辑就会更加的清晰,所以大家以后在写代码的时候要注意括号的使用,让代码的可读性更高。

二、关系操作符

C语⾔用于比较的表达式,称为“关系表达式”(relationalexpression),⾥⾯使用的运算符就称为“关系运算符”(relationaloperator),主要有下面6个。

  • > 大于运算符
  • < 小于运算符
  • = 大于等于运算符
  • <= 小于等于运算符
  • == 相等运算符
  • != 不相等运算符

关系表达式通常返回0或1,表示真假。
C语言中,0表示假所有非零值表示真。比如20>12 返回1;12>20 返回0.

int main()
{
	int a = 3;
		if (a == 3)
			printf("hehe\n");
	return 0;
}

注意相等运算符 ==(判断) 与赋值运算符 = 是两个不一样的运算符,不要混淆。


另一个需要避免的错误是:多个关系运算符不宜连用。
比如:我们输入⼀个年龄,如果年龄在18岁~36岁之间,我们输出青年。

#include <stdio.h>
 int main()
 {
    int age = 0;
    scanf("%d", &age);
    if(18<=age<=36)
 {
     printf("⻘年\n");
 }
 return 0;
}

当我们输入10的时候,依然输出青年。这是因为表达式18<=10为假,所以18<=的结果是0,在拿0和36比较,0<=36为真,所以打印了青年。
那么可以使用 && 操作都来实现这道题的要求。

#include <stdio.h>
 int main()
 {
    int age = 0;
    scanf("%d", &age);
    if(18<=age && age<=36)  //逻辑操作符 &&
 {
     printf("⻘年\n");
 }
 return 0;
}

三、条件操作符

条件操作符也叫三目操作符,需要接受三个操作符的,形式如下:

1. exp ? exp2 : exp3  //三目操作符
2. 3+5//双目操作符
3. a++, -a //单目操作符

练习1: 使用条件操作符表示下面代码的逻辑

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

改造后:

int main()  //三目操作符
{
	int a = 0;
	int b = 0;
	scanf("%d", &a);
    b = (a > 5 ? 3 : -3);
	printf("%d\n", b);
	return 0;
}

练习2: 使用条件表达式实现找两个数中较大值。

int main()
{
	int a = 0;
	int b = 0;
	int m = 0;
	scanf("%d %d", &a, &b);
	m = (a > b ? a : b);
	printf("%d\n", m);
	return 0;
}

四、逻辑操作符:&&,|| ,!

逻辑运算符提供逻辑判断功能,用于构建复杂的表达式。主要有以下的三个运算符。

  • ! :逻辑取反运算符(改变单个表达式的真假)
  • && :逻辑与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。
  • ||:逻辑或运算符,就是或者的意思(两侧至少有一个表达式为真,则为真,否则为假)。

注:c语言中,0 为假,非0 为真。

4.1 逻辑取反运算符 !

a!a
非00
01
int main()
{
	int a = 9;
	printf("%d\n", !a);  //打印结果为0(假)
	return 0;
}

4.2 逻辑与运算符 &&

aba&&b
非0非01
非000
0非00
000

比如:我们说月份6月到9月,是夏季,那使用代码怎么体现呢?

int main()
{
	int month = 0;
	scanf("%d", &month);
	if (month >= 6 && month <= 9)
	printf("夏季\n");
	return 0;
}

4.3 逻辑或运算符

aba II b
非0非01
非001
0非01
000

比如:一年中月份是12月或者1月或者2月是冬天,那么我们如何使用代码体现呢?

int main()
{
	int month = 0;
	scanf("%d", &month);
	if (month==3 || month==9 || month == 12)
		printf("冬季\n");
	return 0;
}

4.4 练习:闰年的判断

输入一个年份year,判断year是否是闰年
闰年的判断规则:
1.能被4整除并且不能被100整除是闰年
2.能被400整除是闰年

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

4.5 短路

c语言逻辑运算符还有⼀个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是保证的。

如果左边的表达式满足逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为短路。

if(month>=3 &&month<=5)
if(month == 12 || month==1 || month == 2)

像这种仅仅根据左操作数的结果就能知道整个表达式的结果,不再对右操作数进⾏计算的运算称为短路求值


下面我们举几个例子,大家来练习一下:

int main()
{
	int i = 0, a = 0, b = 2, c = 3, d = 4;
	i = a++ && ++b && d++;//短路
	printf("a=%d\n b=%d\n c=%d\n d=%d\n", a, b, c, d);
	return 0;
}
//输出结果为 1 2 3 4
int main()
{
    int i = 0, a = 0, b = 2, c = 3, d = 4;
    i = a++ && ++b && d++;

    //i = a++||++b||d++;
    printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
    printf("i = %d\n", i);
    return 0;
}
//输出结果为 1 2 3 4 i=0
int main()
{
    int i = 0, a = 1, b = 2, c = 3, d = 4;
    i = a++ && ++b && d++;
    printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
    printf("i = %d\n", i);
    return 0;
}
//输出结果为 2 3 3 5 1
int main()
{
    int i = 0, a = 1, b = 2, c = 3, d = 4;
    //i = a++ && ++b && d++;

    i = a++ || ++b || d++;

    printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
    printf("i = %d\n", i);
    return 0;
}
//输出结果为:2 3 3 4 1

五、switch语句

除了if语句外,c语言还提供了switch语句来实现分支结构。
switch语句是一种特殊形式的if…else… 结构,用于判断条件有多个结果的情况。

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

5.1 if语句和switch语句的对比

练习:输入任意一个整数值,计算除3之后的余数

if语句

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语句

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

上述代码中,我们需要注意的点

  • case和后边的数字之间必须有空格
  • 每一个case语句中的代码执行完成后,需要加上break,才能跳出这个switch语句

5.3 switch语句中的default

在使用switch语句的时候,我们经常可能遇见一种情况,比如switch后表达式中的值无法匹配代码中的case语句的时候,这时候就要在switch语句中加入default子句。

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

就比如打印星期的练习,如果day的输入不是1~7的值,如果我们要提示:输入错误,则可以这样完成代码:

int main()
{
	int month = 0;
	scanf("%d", &month);
	switch (month)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("工作日\n");
		break;
	case 6:
	case 7:
		printf("休息日\n");
		break;
	default:      //默认语句  一般情况下默认放在最后
		printf("输入错误\n");
		break;
	}
	return 0;
}

2024/11/9 end

标签:语句,int,else,运算符,循环,printf,main,分支
From: https://blog.csdn.net/weixin_64957584/article/details/143635115

相关文章

  • 前端代码分析题(选择题、分析题)——JS事件循环分析
     Promise其实也不难-CSDN博客Promise的执行顺序分析Promise对象的执行是异步的,但其执行器函数内部的代码是立即执行的,而then方法注册的回调函数则是在Promise状态改变后执行的。constmyPromise=newPromise((resolve,reject)=>{console.log('A');console.......
  • Python之判断循环语句
    python中的语句一、if语句(1)单分支:格式:if判断条件执行语句块1else:执行语句块2备注:判断条件if中可以使用比较运算符>,<,!=,==,>=,<=在学习自动化中也可以用if语句断言,案例1:a=10ifa!=10:print("你中奖了")else:print("谢谢惠顾")案例2:name=input("账号:")ifn......
  • 分支语句【if】 pk 【switch】
    一、if语句有三种形式:①if(表达式)   语句inta=5;if(a>0)puts("大于0");② if(表达式)    语句   else    语句  ​ inta=5; if(a>0) puts("大于0"); else puts("小于等于0");​③ if(表达式)        ......
  • GIT我们为什么需要分支
    分支的作用和重要性分支是在一个仓库的不同版本中同时开发的秘诀;使用合适的分支管理策略,能加速您和团队的研发效率;仓库通常有一个默认的master分支,我们从master拉出特性分支来开发新功能,然后再合入master分支。分支基本操作以下命令行需要您在Git客户端执行,不知如何安装Git客户......
  • 实验05多重循环---7-07 百钱买百鸡问题
    公鸡每只5元,母鸡每只3元,小鸡1元3只,而且鸡必须整只买。100元钱买100只鸡(每一种鸡都要有),公鸡、母鸡、小鸡各多少只?请编写程序给出各种购买方案。输入格式:输入为一个正整数n,表示要求输出前n种可能的方案。方案的顺序,是按照公鸡只数从少到多排列的。输出格式:显示前n种方案......
  • c语言学习10循环结构
    循环结构让程序多次执行,反复执行Whiledowhile for1While循环格式While(表达式){循环体;}当表达式为真时,while执行。另:非0即真死循环while(1)例:水仙花数在100-999中找到所有水仙花数,并打印;个位的三次方+十位的三次方+百位的三次方=本身1将数据遍历inta=10......
  • day03 运算符-分支语句
    今日内容运算符分支语句教学目标能够知道哪些运算中发生了隐式转换能够知道如何对数据进行强转能够使用自增自减运算符并知道在前在后的区别能够使用关系运算符完成数据的比较能够掌握不同逻辑运算符的运算规则能够掌握三元运算符的格式和执行流程能够运用小扩号......
  • 深度学习:循环神经网络(RNN)详解
    循环神经网络(RNN)详解**循环神经网络(RecurrentNeuralNetwork,RNN)**是一类能够处理序列数据的神经网络,其设计使得网络可以在每个时间步上保留先前时间步的信息。RNN通过在时间步之间共享参数,能够建模输入序列中元素的时序依赖关系。由于其递归结构,RNN在自然语言处理、语音......
  • 循环内外将变量声明了两次的后果
    在以下代码中,for 循环内部有一个新的 inti=0; 声明,这导致了一个新的局部变量 i 被创建,它和外部的 i 变量是不同的。因此,外部 i 的值在循环中不会被改变,因为循环内部的操作是在新的局部变量 i 上进行的。以下是原始代码:为了修复这个问题,你应该移除 for 循环内部......
  • C语言 循环高级
    时间:2024.11.6一、学习内容1、无限循环无限循环:循环永远停不下来注意点:无限循环因为永远停不下来,所以下面不能再写其他的代码了2、break跳转控制语句:在循环的过程中,跳到其他语句上执行 #include<stdio.h>intmain(){ intcount=0; inti;//利用for循环去......