分支和循环(上)
- 一、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语句,这些内容会让我们了解不少分支和循环的知识,如有讲解不全望给建议!希望能对你们有帮助。