if语句
C语言中,0表示假,非0表示真
如
#include<stdio.h>
int main()
{
int i=(3>5);
printf("%d",i);
return 0;
}
输出结果为0,也就是假命题
而若把括号内改成真命题,输出的值一般为1
#include<stdio.h>
int main()
{
int a=0;//初始化变量是个好习惯
scanf("%d",&a);//取地址不能忘!!!(我差点又忘了)
if(0==a%3)
printf("a为3的倍数");
else
printf("a不为3的倍数");
return 0;
}
0==a%3
这里,0放在左边是为了在漏掉一个等号时系统会自动报错0==a%3
的本质是非零数,也就是真- 排版要美观,因为else在确定对应的if时遵从就近原则
- if和else默认只控制一条语句,除非用大括号括起来就可以控制多条
注意:括号里面不能进行连续运算,容易出问题!!
if(a<b<c)
这段代码的执行顺序是,先a和b比较输出0或1(判断真假)再与c比较
如果此时abc分别为2,1,3
则是先ab比较因为a>b,为假命题,输出值为0
然后0与c比较,0<c,为真命题,输出值为1
逻辑操作符
为避免以上问题,应使用逻辑操作符&&
改成if(a<b && b<c)
- &&:与
- ||:或
- !:逻辑取反运算符,假改真真改假
短路现象:系统从左到右读,若前面的式子已经可以判断整体的真假就不会再读下去
switch语句
#include<stdio.h>
int main()
{
int a=0;
scanf("%d",&a);
switch(a%3)
case 0:printf("是3的倍数");
break;//这里如果没有break,程序会一直下去打印出下面的内容
case 1:
case 2:printf("不是3的倍数");
break;
default:printf("error");
return 0;
}
- 这里的case算是判断的入口,如果没有break会一直滑下去
- switch里是一个参数,而且必须为整型
- case后必须是一个确定的数,也必须为整型
- default和else功能相近
- case和default没有顺序要求
while循环
#include<stdio.h>
int main()
{
while(1)
printf("hello world");
return 0;
}
与if语句不同,while语句可以实现循环
所以以上代码结果就是死循环的打印hello world
#include<stdio.h>
int main()
{
while(1)
{
printf("hello world");
break;
}
return 0;
}
使用break可以跳出该循环,只输出一个hello world
while和if一样只能控制一条语句,需要多条时需要大括号
while循环的逻辑是:
执行完while循环的语句后,若没有break或continue,继续返回while判定处,执行循环的语句;
如果遇到break直接跳出循环;
如果遇到continue,跳过之后的语句回到while处,继续执行循环的语句。
for循环
for循环格式如下:
for(语句1;语句2;语句3)
- 语句1用于循环变量初始化
- 语句2用于确定变量的取值范围
- 语句3表示对变量的操作
- 三个语句要用分号分隔开
#include<stdio.h>
int main()
{
int i=0;
for(i=1;i<=100;i++)//记住是分号!!
{
if(0==i%3)
printf("%d ",i);//打印1-100内3的倍数
}
return 0;
}
- 同样的,for只能控制一条语句,需要多条语句要加大括号
与while语句对比:
#include<stdio.h>
int main()
{
int i=1;//初始化
while(i<=100)//取值范围
{
if(0==i%3)
printf("%d ",i);
i++;//对变量的操作
}
return 0;
}
do while循环
本质上是先执行后判断,格式为
do
语句
while(条件)
for和while语句都是先判断后执行,但是do while不同。它是至少执行一次的。
#include<stdio.h>
int main()
{
int a=1;
do
{
if(0==a%3)
printf("%d ",a);
a++;
}
while(a<=100)
return 0;
}
同样的do后面的语句需要用大括号括起来
break和continue语句
- 在switch语句中:break用于终止程序继续往下,防止输出不需要的内容
- 在while循环中:break用于跳出当前循环,continue用于跳过当前循环continue后面的代码
#include<stdio.h>
int main()
{
int i=1
while(i<=10)
{
printf("%d ",i);
if(i=5)
break;
}//注意需要大括号,不过把上面if两行放到while前面就不用(因为while只控制一条语句)
return 0;
}
以上代码运行到i=5时跳出循环,只输出1 2 3 4
break放在前面后面都是一样的结果
#include<stdio.h>
int main()
{
int i=1
while(i<=10)
{
if(i=5)
continue;
printf("%d ",i);
}
return 0;
}
以上结果是打印完1 2 3 4 后陷入死循环
#include<stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
printf("%d ", i);
if (i == 5)
continue;
i++;
}
return 0;
}
以上结果是打印完1 2 3 4 后陷入打印5 的死循环
#include<stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
i++;
if (i == 5)
continue;
printf("%d ", i);
}
return 0;
}
以上结果是打印2 3 4 6 7 8 9 10 11
而continue放在最后面是无法起到任何效果的
- 在for循环中,break的作用也是跳出循环,而continue的作用就是跳过该循环后面的语句直接回到for的第三个语句,即对变量的调整语句
#include<stdio.h>
int main()
{
int i=0;
for(i=1;i<=10;i++)
{
if(5==i)
continue;
printf("%d ",i);
}
return 0;
}
以上结果是1 2 3 4 6 7 8 9 10 ,5被跳过了
对比二者区别,continue在while循环当中是跳过之后语句回到while处,而for循环中是跳过之后语句回到for括号中的第三个语句
goto语句
#include<stdio.h>
int main()
exit:
printf("hello world");
goto exit;
return 0;
}
以上代码的结果是循环打印hello world
- goto语句像一个传送门,可以传到想去的语句
- 有时嵌套多层的语句中可以通过goto语句快速返回最外层的语句
- 但如果使用不当容易造成代码混乱