C语言的结构有顺序结构、选择结构、循环结构。我们可以使用if、switch
实现分支结构,使用for、while、do while实现循环结构。
一、if语句
1.1if
if(表达式)
语句
表达式成立(为真),语句执行。反之不执行。
1.2 else
if(表达式)
语句1
else
语句2
1.3分支中包含多条语句
默认if和else语句中默认都只控制一条语句
if()
{
语句1
语句2
}
else
{
语句1
语句2
}
1.4嵌套if
在if else语句中,else可以与另一个if语句连用,构成多重判断
1.5悬空else
else和if就近原则,即else总是跟最接近的if匹配
二、关系操作符
>, <, >=,<=
==:判断相等
!=:判断不相等
关系表达式通常返回0或1
eg.
int main()
{
int r=6>5;
printf("r=%d\n",r);
return 0;
}
运行结果:1
i<j<k不支持连用,应从左向右依次
eg.
int main()
{
int i=8;
int j=10;
int k=9;
if(i<j<k)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
运行结果为:hehe
解析:
i=8,j=10,因为8<10,所以i<j为真,则i<j这一式子为1,。
1再和k=8比,1<j,则打印hehe
三、逻辑操作符:&&,||,!
!:逻辑取反运算符(改变单个表达式的真假)
&&:与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。
||:或运算符,就是或者的意思(两侧至少有一个表达式为真,则为真,否则为假)。
3.1短路
C语言逻辑运算还有一个特点,它总是先对左侧的表达式求值,在对右边的表达式求值。
如果左边的表达式满足逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。
四、switch语句
4.1
switch语句是一种特殊形式的if...else结构,用于判断有多个结果的情况。
switch(expression){
case value1:statement
case value2:statement
default:statement
}
根据表达式expression不同的值,执行相应的case分支。如果找不到对应的值,就执行default分支注:
1.switch后的expression必须是整型表达式。
2.case后的值,必须是整型常量表达式。
3.根据需求在每个分支后加上 break,再加上分号。
#include <stdio.h>
int main()
{
int day=0;
scanf("%d",&day);
switch(day)
{
case1:
case2:
case3:
case4:
case5:
printf("工作日\n");
break;
case6:
case7:
printf("休息日\n");
break;
default:
print("输入错误,请输入1-7的数字\n");
}
return 0;
}
4.2switch语句中的case和default的顺序问题
没有顺序要求,通常把default子句放在最后处理
五、while循环
5.1if和while的对比
if(表达式)
语句;
while(表达式)
语句;//如果循环体想包含更多的语句,可以加上大括号
if后边条件满足,打印一次
while后边条件满足,死循环的打印
5.2打印1-10
#include <stdio.h>
int main()
{
int i=1;
while(i<=10)
{
printf("%d",i);
i++;
}
return 0;
}
5.3打印逆序数
#include <stdio.h>
int main()
{
int n=0;
scanf("%d",&n);
while(n) //1
{
printf("%d",n%10);
n=n/10;
}
return 0;
}
六、for循环
6.1语法形式
for(表达式1;表达式2;表达式3)
语句; //如果循环体想包含更多的语句,可以加上大括号
表达式1:用于循环变量的初始化
表达式2:用于循环体结束条件的判断
表达式3:用于循环变量的调整
6.2打印1-10
#include <stdio.h>
int main()
{
int i=0;
for(i=1;i<=10;i++)
{
printf("%d",i);
}
return 0;
}
七、do-while循环
7.1语法形式
do
语句;
while(表达式);
7.2打印1-10
int main()
{
int i=1;
do
{
printf("%d",i);
i++;
}while(i<=10);
return 0;
}
八、break和continue语句
break的作用是永久的终止循环,只要break被执行,直接跳出循环,继续往后执行
continue的作用是跳过本次循环continue后面的代码,在for循环和while循环中有所差异的
九、循环的嵌套
循环支持嵌套
判断i是否是素数(只能被1和本身整除 ):
使用2——i-1之间的数字去试除i
如果i被整除了,不是素数
如果2——i-1之间没有数字可以整除i,是素数
#include <stdio.h>
int main()
{
int i=0;
for(i=100;i<=200;i++)
{
int j=0;
int flag=1;//假设i是素数
for(j=2;j<=i-1;j++)
{
if(i%j==0)
{
flag=0;
break;
}
}
if(flag==1)
{
printf("%d",i);
}
}
return 0;
}
十、goto语句
goto语句可以实现在同一个函数内跳转到设置好的标号处。
goto end 直接跳到end所在的地方
#include <stdio.h>
int main()
{
printf("hehe\n");
goto end;
printf("haha\n");
end:
printf("跳过haha的打印,直接来到这里\n");
return 0;
}