速通分支与循环


在这里插入图片描述

一 分支语句

 1.if语句
 2.关系操作符
 3.条件操作符
 4.逻辑操作符
 5.switch语句

二 循环语句

  1.while
  2.for 
  3.do while
  4.continue与 break(用与循环中的效果)
  5.goto语句

三 综合练习


前言

C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构选择结构循环结构。仔细想想其实我们生活也是这样的。
通过这个我相信你肯定能对if switch用于分支,while for do-while用于循环能更深理解


分支语句

1. if语句

if(表达式)
  语句 1
else
  语句2
  在c语言中0表示假,非0表示真,如果表达式为假就不执行,如果为真就执行,在这里如果为真就执行语句1 反正则执行语句2

例题 输入一个数,判断是奇数还是偶数

#include<stdio.h>
int main()
{
	int num = 0;
	scanf("%d", &num);
	if (num % 2 == 1)
	{
		printf("是奇数\n");// if规定后面只能跟一条语句,如果多条语句必须要大括号。
	}
	else
	{
		printf("是偶数\n");
	}
	return 0;
}

嵌套if else(if与else是相匹配的)
例题 从键盘输入一个数判断其是正数,还是负数,还是0

#include<stdio.h>
int main()
{
	int num = 0;
	scanf("%d", &num);
	if (num > 0)
	{
		printf("正数\n");
	}
	else if (num < 0)
	{
		printf("负数\n");
	}
	else
	{
		printf("零\n");
	}
	return 0;
}

2. 关系操作符

主要有6个 >,<,<=,>=,==(一个=是赋值两个=才是判断相等),!=(不等于)
关系操作符通常返回01通常与if while结合运用

3. 条件操作符(三目操作符)

   exp1 ? exp2 : exp3
    如果exp1为真,返回exp2,反之返回exp3

例题 使⽤条件表达式实现找两个数中较⼤值。

#include<stdio.h>
int main()
{
 int a = 0;
 int b = 0;
 scanf("%d %d", &a, &b);
 int max = a > b ? a : b;
 printf("%d\n", max);
 return 0;
}
//但这个用if  else语句也可以写,因此如果特别复杂的话不建议使用这个
#include<stdio.h>
int main()
{
 int a = 0;
 int b = 0;
 int max = 0;
 scanf("%d%d", &a, &b);
 if (a > b)
 {
 	max = a;
 }
 else
 {
 	max = b;
 }
 printf("%d\n", max);
 return 0;
}

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

&& :逻辑与运算符 两侧表达式都为真才为真
||:逻辑或运算符 两侧表达式一个为真就为真
!:逻辑取反运算符 用于改变其真假
c语言中 0表示假 ,非0 表示真

例题 如果我们说⽉份是3⽉到5⽉,是春天,输入一个数判断断
注意:这里千万不可以写成 3 =<month<=5(这是错的),这样它会从左到右判断,然后返回0或1后在进行后面判断,逻辑错误

#include<stdio.h>
int main()
{
	int month = 0;
	scanf("%d", &month);
	if (month >= 3 && month <= 5)
	{
		printf("是春天\n");
	}
	else
	{
		printf("不是春天\n");
	}
	return 0;
}

例题 输入月份判断是不是冬天(1,2,12),这里用到了逻辑或||

#include<stdio.h>
int main()
{
   int month = 0;
   scanf("%d", &month);
   if (month == 1 == month == 2 || month == 12)
   {
   	printf("是冬天\n");
   }
   else
   {
   	printf("不是冬天\n");
   }
   return 0;
}

5. switch语句

switch (expression) {
case value1: statement 
case value2: statement 
...
default: statement
 
先进行expression判断,寻找case分支,如果没找到则执行default

注意 这里对case和default顺序没有要求,但一般放最后或开始
注意expression中必须是整形表达式(char 字符也是整形家族的)
case 后面必须是整形常量表达式
例题 输入星期几,判断是休息日 还是工作日

  #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;
  default:
  	printf("输入错误\n");
  }
  return 0;
}

这个代码中的break是非常重要的,如果没有,则会导致找到分支以后并不会跳出去,后面的语句全部执行,结果出错 (例如下面代码)
这明显不是自己想要的结果,所以break是很重要的

循环语句

1. while循环

  while(表达式)
   语句;

⾸先上来就是执⾏判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执⾏循环语句,语句执⾏完后再继续判断,是否进⾏下⼀次判断

练习 输⼊⼀个正的整数,逆序打印这个整数的每⼀位
输⼊:1234,输出:4 3 2 1
想要得到最低为数直接让%10得到了最后一位,然后再让其/10把求出的哪一位去掉,不断循环

#include <stdio.h>
int main()
{
       int n = 0;//初始化
       scanf("%d", &n);
       while(n)//判断
     {
      printf("%d ", n%10);
      n /= 10;//调整
    }
      return 0;
}

2. for循环(一般用于循环次数却定的情况)

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

表达式1:初始化
表达式2:判断
表达式3:调整
首先执行初始化,然后执行判断,如果符合条件进入循环体,然后进入调整,一直进行下去知道不符合表达式2后跳出循环(整个过程中表达式1只被执行一次,但表达式2,循环体和表达式3在循环进行
练习 计算1-100之间3的倍数之和

#include<stdio.h>
int main()
{
   int i = 0;
   int sum = 0;
   for (i = 1;i <= 100;i++)
   {
   	if (i % 3 == 0)
   	{
   	sum = sum + i;
   	}
   }
   printf("%d\n", sum);
   return 0;
}
//小优化,减少循环次数,代码执行效率更高
#include<stdio.h>
int main()
{
   int i = 0;
   int sum = 0;
   for (i = 3;i < 100;i+=3)
   {
   	sum = sum + i;
   }
   printf("%d\n", sum);
   return 0;
}

3. do-while循环

do 
   语句;
while(表达式);

do-while循环时限执行循环体语句,在进行判断,而while和for循环使用时先判断在执行,所以do-while循环至少执行一次循环体,(这种特质在有些代码中有妙用,但有时候可能带来不便,这个要自己斟酌,选择最合适的循环类型)
练习 输⼊⼀个正整数,计算这个整数是⼏位数(这个用do -while才更为准确)

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

如果使用while循环时输入0则结果明显不对,所以do-while有自己的特性
在这里插入图片描述

4. break和continue语句

while循环中的break和continue
break是跳出整个循环,结束循环,而continue是结束本次循环在while和for循环中又说差异,下面是一些例子
while循环下的
在这里插入图片描述
下面这个明显死循环了,因为i=5后跳过了i++,一直执行判断,一直为真
在这里插入图片描述
for循环下的
在这里插入图片描述
下面这个结果明显与while有区别
在这里插入图片描述

5 goto语句

它可以跳转到自己标记好的位置
例如下面的代码,直接跳过haha,当然自己也不能随意使用,可能会导致代码混乱
如果在多层循环中可以使用goto跳出循环
在这里插入图片描述

综合练习

1 输⼊⼀个⼈的年龄

如果年龄<18岁,打印"少年"
如果年龄在18岁⾄44岁打印"⻘年"
如果年龄在45岁⾄59岁打印"中⽼年"
如果年龄在60岁及以上打印"⽼年"

#include<stdio.h>
int main()
{
	int age = 0;
	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 
	{
		printf("老年\n");
	}
	return 0;
}

2 打印1000-2000年之间的润年

闰年规则

  1. 能被4整除并且不能被100整除是闰年
  2. 能被400整除是闰年
#include<stdio.h>
int main()
{
	int i = 0;
	int count = 0;//统计有多少润年
	for (i = 1000;i <= 2000;i++)
	{
		if ((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0))
		{
			printf("%d ", i);
			count++;
		}
	}
	printf("\n%d",count);
	return 0;
}

3分析下面程序运行结果

C语⾔逻辑运算符还有⼀个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是
保证的。
如果左边的表达式可以确定这个逻辑运算符的条件是还是,就不再对右边的表达式求值。这种情况称为“短路
**&&只要有一个为假就为假,||只要有一个为真就为真
在这里插入图片描述
分析 :这个的话a是后置++(先使用后加加)所以判断从左到右,第一个为假,后面直接不算了,只有a进行了++操作
那如果我把
&&换成||**呢

分析 :这里的话a为假,根据逻辑||的特性,继续往下算,++b为2了为真,逻辑表达式的值确定为真了,就不会往下算了

4 编写程序数一下 1到 100 的所有整数中出现多少个数字9

自己要注意99中有两个9

#include<stdio.h>
int main()
{
	int i = 0;
	int count = 0;
	for (i = 1;i <= 100;i++)
	{
		if (i % 10 == 9)
		{
			count++;
		}
		if (i / 10 == 9)//因为99中有两个9所以不用或者来写
		{
			count++;
		}
	}
	printf("%d\n", count);
	return 0;
}

5 在屏幕上输出9*9乘法口诀表

在这里插入图片描述

用到双重for循环

#include<stdio.h>
int main()
{
	int i = 0;
	int j = 0;
	for (i = 1;i <= 9;i++)//控制行数
	{
		for (j = 1;j <= i;j++)//控制一行打印几个
		{
			printf("%d*%d=%-2d ",j,i,i*j );//%-2d是让其站两个字符左对齐,%d默认是右对齐,
		}
		printf("\n");
	}
	return 0;
}

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

到这里就结束,希望这对大家有所帮助,欲知后事如何请提,请听下回分解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值