分支和循环(上)

分支和循环(上)

  • 一、if语句
    • 1、语法形式:
    • 2、嵌套if
  • 二、操作符
    • 1、关系操作符
    • 2、条件操作符
    • 3、逻辑操作符:&&、//、!
  • 三、switch语句
  • 四、while循环
  • 五、for循环
  • 六、do-while循环
  • 七、 break和continue语句
  • 八、循环的嵌套
  • 九、goto语句
  • 十、 总结

一、if语句

1、语法形式:

if(表达式);//表达式: 真:非0,假:0
语句;

==是判断相等, =是赋值。
在这里插入图片描述
if…else…语句

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

分支中包含多条语句:if…else…语句中加多条语句需要用{ }括起来。

2、嵌套if

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

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

第二种:

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

悬空else问题:else与最近的if连用 。

二、操作符

1、关系操作符

大于 : >
小于 : <
大于等于 : >=
小于等于 : <=
相等 : ==
不相等 : != ,a >= b关系表达式
常用于判断真假:真 1 , 假 0

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

注:多个关系运算符不宜连用

int a = 3;
int b = 20;
int c = 5;
int main()
{
if(a < b < c)//这个括号里应该改为(a < b && b < c)
{
printf("hehe\n");//这里会判断a < b为真(1),1 < c所以打印hehe
}
else
{
printf("haha\n");//改后就会打印haha
}
}

2、条件操作符

三目操作符又叫条件操作符,形式如下:

exp1 ? exp2 : exp3

注:如果exp1为真,exp2计算,exp3不算。
如果exp1为假,exp3计算,exp2不算。

示例如下:

int main()
{
int a = 0;
int b = 0;
scanf("%d%d",&a,&b);
int m = 0;
	if(a > b)//这里到最后的代码可以改为:  m = (a > b ? a : b);
	{
		m = a;
	}
	else
	{
		m = b;
	}
printf("%d",m);
return 0;
}

3、逻辑操作符:&&、//、!

:为逻辑取反运算符(改变单个表达式的真假)。
[并且]&&:逻辑与运算符(两侧表达式都为真,则为真)。
[或] ||:逻辑或运算符(一侧表达式为真,则为真)。

a!a
非零(真)0(假)
0(假)1(真)

注:我们一般建议变量要初始化:int a = 0;
如果一个局部变量不初始化,它的值是随机值。
一个全局变量不初始化,它的值是零。

短路:如果左边表达式满足就不算右边的表达式,这种情况称为“短路”。
短路运算法则:这种仅仅根据左侧操作结果能知道整个表达式的结果,不再对右求值,这叫做短路计算。
短路运算法则:
对于&&,左为0(假),右边就不再执行,整体假。
对于 ||,左结果不为0(真),无需执行右边,整体真。

三、switch语句

形式:

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

注意:switch后的expression必须是整形表达式
case后的值,必须是整型常量表达式。

if语句与switch语句的对比:
用if语句写:

#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语句写:

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

注:case后有空格。
每个case代码执行完成后,需加break。

switch语句中的break:我们在运用break时,要注意使用的语境,可根据所给的特定环境来合理使用break。
使用示例:

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

switch语句中的default:我们借助上述示例

#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");
break;
}
return 0;
}

我们可以看出来加上default后这个程序将更加的完善,在输入错误信息时,程序会提醒我们输入错误,这样做就会很好的避免用户输入无效信息而无法判别。
switch语句中case和default的逻辑顺序:没有顺序要求,但一般放最后处理的。

四、while循环

while循环语法结构:

while(表达式)
	语句;

在这里插入图片描述
练习1:打印数字1~10。

#include <stdio.h>
int main()
{
int i = 1;//循环变量的初始化
while(i <= 10)//判断
{
printf("%d\n",i);
i++;//调整
}
return 0;
}

练习2:输⼊⼀个正的整数,逆序打印这个整数的每⼀位。

#include <stdio.h>
int main()
{
int n = 0;
scanf("%d",&n);//123
while(n)
{
printf("%d",n % 10);//取最后一位
n = n / 10;//去最后一位
}//输出:321
return 0;
}

五、for循环

语法形式:

for(表达式1;表达式2;表达式3)
	语句;

表达式1 —— 初始化部分
表达式2 —— 判断部分
表达式3 —— 调整部分
在这里插入图片描述
练习:打印数字1~10。

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

六、do-while循环

语法形式:

do
	语句;
while(表达式);

在这里插入图片描述
练习:打印数字1~10。

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

注:循环体至少进行一次,do-while循环先执行后判断。

七、 break和continue语句

break的作用是用于永久的终止循环,只要break被执行,直接就跳出循环,继续往后执行。
continue的作用是跳过本次循环continue后边的代码,在for循环和while循环中有所差异的。
1、for循环的初始化、判断、调整三个部分是可以省略的。
2、for循环的判断部分如果省略的话,意味着判断恒成立。

八、循环的嵌套

练习:找出100~200之间的素数,并打印在屏幕上。
(注:素数又称质数,只能被1和本身整除的数字,偶数一定不是素数。)

#include <stdio.h>
#include <math.h>
int main()
{
int i = 0;
int count = 0;
for(i = 101;i < 200;i+=2)
{
//判断i是否是素数
//产生2~i-1之间的数字
int flag = 1;//假设i是素数
int j = 0;//假设 m = a * b,a和b中至少有一个数字是<=√m
for(j = 2;j <=sqrt(i);j++)//sqrt是开平方函数,包含头文件<math.h>
{
if(i % j ==0)
{
flag = 0;//不是素数
break;
}
}
if(flag ==1)
{
printf("%d ",i);//101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199
count++;
}
}
printf("\ncount = %d\n",count);//21
return 0;
}

九、goto语句

C语言提供了一种非常特别的语法,就是goto语句和跳转标号,goto语句可以实现在同一个函数内跳转到设置好的标号处。
示例如下:

#include <stdio.h>
int main()
{//next:这里会成为结果2
printf("hehe\n");
goto next;
printf("哈哈\n");
next://这里可以自己命名,这里是结果1
printf("呵呵\n");
//输出hehe和呵呵
return 0;
}

结果①:hehe 呵呵
结果②:hehe 无限死循环
尽量少的使用goto语句,在多层循环的代码中,如果要快速逃出使用goto就会非常的方便。

十、 总结

本章内容较多,我会分为上下两个小节来给大家讲解,上半节我们讲解了if语句、三大操作符(关系操作符、条件语句、逻辑操作符)、switch语句、while循环、for循环、do-while循环、循环嵌套以及goto语句,这些内容会让我们了解不少分支和循环的知识,如有讲解不全望给建议!希望能对你们有帮助。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值