目录
1.前言
c语言是结构化的程序语言,这里的结构化指的是顺序结构,分支结构,循环结构,c语言能够实现这三种语言。我们可以使用if和switch语句实现分支结构,for、while和do while实现循环结构,接下来我们就通过本篇文章进行深入学习。
本章重点
本篇文章主要对if语句,关系操作符,条件操作符,逻辑操作符,switch语句;for、while、do while循环;break,continue语句;go to语句等等进行介绍
2.if语句
2.1if 语句
形式如下:
if(表达式)
语句;
表达式为真,则执行语句,其中0为假,非0为真
2.2else
语句形式如下:
if(表达式)
语句;
else
语句;
例子:输入年龄,如果小于18则输出未成年,如果大于18则输出已成年
int main
{
int age = 0;
scanf("%d",&age);
if(age<18)
printf("未成年");
if(age>=18)
printf("已成年");
}
if语句只能控制一条语句,如果要输出两条语句该怎么办呢?其实只要在后面加入{ }就可以解决。如下:
int main
{
int age = 0;
scanf("%d",&age);
if(age<18)
{
printf("未成年");
printf("不可以谈恋爱");
}
if(age>=18)
{
printf("已成年");
printf("可以谈恋爱");
}
}
一般习惯性的在输入if语句后就直接加入大括号{}
2.3嵌套if
在if else语句中,else中与另一个if语句连用,构成多重判断。
例子:输入一个数判断输入的整数是0还是整数或者负数
if(a==0)
{
printf("是0");
}
else
//以下是嵌套
{
if(a>0)
printf("是正数");
else
printf("是负数");
}
2.4悬空else问题
悬空else问题就是else总是跟最近的一条if匹配,接下来通过下面的代码进行讲解
int a = 1;
int b = 2;
if(a==1)
if(b==2)
printf("hehe");
else
printf("haha");
return 0;
那么上述结果是多少呢?else与最近的if匹配就是hehe
3.关系操作符
c语言中用于比较的表达式,称为“关系表达式”,里面使用的运算符就是关系运算符,主要有以下6个
大于符号 >
小于符号 <
大于等于符号 >=
小于等于符号 <=
相等运算 ==
不相等运算 !=
注意==与=的使用:==表示判断是否相等,=表示是否相等
另一个需要注意的是关系操作符号不能连用,如果要表达a<b<c那么应该写成a<b&&b<c
4.条件操作符
之前我们已经学习了单目和双目操作符了,其实条件操作符就是三目操作符
形式如下:返回连个数中的较大值
//exp1?exp2:exp3如果exp1为真那么执行exp2,为假就执行exp3
//返回两个数中的较大值
int a=0;
int b=2;
scanf("%d %d",&a,&b);
int m = a>b?a:b
printf("%d",m);
5.算数逻辑操作符
算数逻辑提供逻辑判断功能,用于构造更赋值的表达式,主要有以下3个:
逻辑取反运算 !
与运算 &&
或运算 ||
5.1与 或运算
与运算&&:只要有一条语句是假,那么整个表达式就是假
或运算||:只要有一条语句是真,那么整个表达式就是真
短路:如果左边的表达式不成立就不用计算右边的表达式
例子:判断闰年,规则 1.能被4整除并且不能被100整除 2.能被400整除
int year= 0;
scanf("%d",&year);
if(year%4==0&&year%100!=0||year%400==0)
{
printf("%d是闰年",year);
}
else
{
printf("%d不是闰年",year);
}
6.switch语句
除了if语句外,c语言中还提供了switch语句来实现分支语句。switch语句是一种特殊的if…else结构,用于判断条件有多个结果的情况。
形式如下:
switch(expression)
case value1:statement
case value2:statement
default:statement
switch后面的语句必须是整型表达式,字符也属于
case后面的值,必须是整型常量表达式
int a =0;
scanf("%d",&a)
switch(a%3)
{
case 1: //case和1之间有空格!!!一定要有
printf("余数是1");
break;
case 2:
printf("余数是2");
break;
case 0:
printf("能被整除");
break;
}
6.1switch语句中的break
试想,如果上面的式子,中没有break,会出现什么情况呢?
测试一下:输入8
我们发现本来应该输出余数是2;但多了一行。原因是switch语句中使用break才能跳出switch语句,如果某一个case语句没有break2,代码会继续往下执行,直到遇到break才结束。所以在switch语句中使用break是非常重要的。
6.2switch语句中的default
当switch后表达式的值无法匹配代码中的case语句时,这时候要不就不处理,要不就得switch中加入default语句,case和default语句是没有顺序要求的,但通常放在最后。
格式如下:
switch(expression)
case value1:statement
case value2:statement
default:statement
7.while循环
c语言中有3种循环语句,while就是其中一种,接下来介绍while循环
格式如下:
while(表达式)
语句;
while语句的执行流程
表达式的值为0,循环直接结束,非0,进行语句。
例子1:在屏幕在打印1~10
int i =1;
while(i<=10)
{
printf("%d",i);
i++;
}
例子2:输入一个正整数,逆序打印
int main()
{
int n = 0;
scanf("%d",&n);
while (n)
{
int a = n % 10;
printf("%d", a);
n = n / 10;
}
return 0;
}
8. for循环
格式如下:
for(表达式1;表达式2;表达式3)
语句;
表达式1:初始化
表达式2:判断
表达式3:调整
例子1:在屏幕上打印1~10
int main()
{
int i;
for (i = 1; i <= 10; i++)
{
printf("%d",i);
}
return 0;
}
for循环和while对比
9.do-while循环
格式如下:
do
语句;
while(表达式);
在do while语句中循环体是至少执行一次的,只是比较特别的地方
例子1:在屏幕在打印1~10
int main()
{
int i=1;
do
{
printf("%d", i);
i++;
} while (i <= 10);
return 0;
}
例子2:输入一个正整数,计算这个数是几位数
int main()
{
int a = 0;
int count = 0;
scanf("%d",&a);
do
{
a = a / 10;
count++;
} while (a);
printf("这个数是%d位",count);
return 0;
}
10.continue和break
continue的作用:可以帮助我们跳过某一次循环continue以后的代码,直接到循环的判断部分,进行下一次循环。
break的作用:永久中止循环,只要执行了break就跳出循环。
对比while循环和for循环中continue的区别
11.循环嵌套
前面学习了三种循环,这三种循环往往会嵌套在⼀起才能更好的解决问题,就是我们所说的:循环嵌套,这⾥我们就看⼀个例⼦。
练习:找出100~200之中的素数(只能被1和本身整除)
int main()
{
int i = 100;
for (i = 100; i <= 200; i++)
{
//100~200的数
int j = 0;
int a = 1;//假设为素数
for (j = 2 ; j <i ; j++)
{
if (i % j == 0)
{
a = 0;
break;//如果某一个值能被整除就跳出
}
}
if (a==1)
{
printf("%d ",i);
}
}
return 0;
}
12.goto 语句
C语⾔提供了⼀种非常特别的语法,就是goto语句,goto语句可以实现在同一个函数内跳转到设置好的标号处。
int main()
{
printf("hehe\n");
goto next:
printf("haha\n");
next:
return 0;
}
但值得注意如果语句如果使⽤的不当,就会导致在函数内部随意乱跳转,打乱程序的执⾏流程,所以我们尽量不要使用多次。
13.总结
本篇文章我主要对if语句,关系操作符,条件操作符,逻辑操作符,switch语句;for、while、do while循环;break,continue语句;go to语句进行了介绍,但依然有没有涉及的地方,感兴趣的同学可以去看看其他博主的文章来学习。
下章预告:猜数字游戏