前言:文章若是有错误,欢迎大家指导,也希望大家能够理解。
引言:C语言中语句可分为5种:空语句,表达式语句,函数调用语句,复合语句,控制语句。在初识C语言中我们已经介绍过空语句,表达式语句,函数调用语句,复合语句了。今天我们就一起来学习最后的控制语句吧。
1 分支语句
分支语句包括2种:if语句
,switch语句
。
.if语句
的表达形式:
if(表达式)//如果表达式为真,则执行代码块里面的语句,否则不执行
{
语句
}
代码示例
#include<stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d %d",&a,&b);
if(a>b)
{
printf("a>b\n");
}
return 0;
}
运行结果
3 2
a>b
.else
在上述代码中,如果输入的a小于b又该如何呢。让我们来看看if.....else语句
。
#include<stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d %d",&a,&b);
if(a>b)
{
printf("a>b\n");
}
else
{
printf("a<b\n");
}
return 0;
}
运行结果
4 5
a<b
a与b之间的关系也并不是只有这两种情况,接下来就让我们看一下if...else if...else
语句吧。适用于多种情况的判断。
#include<stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d %d",&a,&b);
if(a>b)
{
printf("a>b\n");
}
else if(a==b)//C语言中,==用来判断两个数之间是否相等
{
printf("a=b\n");
}
else
{
printf("a<b\n");
}
return 0;
}
运行结果
5 5
a=b
需要注意的是:
.
这些语句如果不使用大括号,默认控制一条语句。要想控制多条语句,必须使用大括号。
#include<stdio.h>
int main()
{
int age = 0;
scanf("%d",&age);
if(age>=18)
printf("可以谈恋爱了\n");
printf("不可以早恋哦\n");
return 0;
}
运行结果
18
可以谈恋爱了
不可以早恋哦
可以看到这并不是我们想要的结果。
.else
总是与离它最近的if语句
匹配。
#include<stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a==1)
{
printf("heihei\n");
}
if(b==2)
{
printf("haha\n");
}
else
{
printf("hehe\n");
}
return 0;
}
运行结果
haha
.switch语句
也适用于多分支
形式:
switch(expresssion)
{
case value1:statment
break;
case value2: statment
break;
default :statment
break;
}
注意:
.expression
必须为整型表达式。
.value
必须为整型常量表达式。
.
每一个case
语句后面都要加上break
才可以跳出switch语句
。根据具体情况,break
可加可不加。
.
每一个case
和后边的数字必须有一个空格。
.case语句和default语句
位置是任意的。通常将default 语句
放在最后。
上面代码中根据expression
的值,找到相应的case
分支,如果找不到,就执行default
语句。
#include<stdio.h>
int main()
{
int day = 0;
scanf("%d",&day);
switch(day)
{
case 1:printf("星期一\n");
break;
case 2:printf("星期二\n");
break;
case 3:printf("星期三\n");
break;
case 4:printf("星期四\n");
break;
case 5:printf("星期五\n");
break;
case 6:printf("星期六\n");
break;
case 7:printf("星期天\n");
break;
default :printf("输入错误\n");
break;
}
return 0;
}
运行结果
3
星期三
2 关系运算符
C语言中用于比较的表达式叫做关系表达式,表达式里面的运算符就叫做关系运算符,包括大于(>)
,等于(==)
,小于(<)
,大于等于(>=)
,小于等于(<=)
,不等于(!=)
。
关系表达式通常返回0或1,用来表示真假。
.
注意以下几点:
.
相等运算符(==)
与赋值运算符(=)
是不一样的。
.
关系运算符不宜连用。
#include<stdio.h>
int main()
{
int age = 0;
scanf("%d",&age);
if(18<=age<=30)
{
printf("青年\n");
}
return 0;
}
运行结果
45
青年
这种写法是错误,应该这样去写。
#include<stdio.h>
int main()
{
int age = 0;
scanf("%d",&age);
if(age>=18&&age<=30)
{
printf("青年\n");
}
else
{
printf("壮年\n");
}
return 0;
}
运行结果
45
壮年
3 条件操作符
条件操作符也叫做三目操作符。形式:表达式1?表达式2:表达式3,如果表达式1为真,那么表达式2计算出的结果为最终执行结果,否则,表达式3的结果为最终结果。
#include<stdio.h>
int main()
{
int a = 3;
int b = 2;
int max = a > b? a: b;
printf("%d\n",max);
return 0;
}
运行结果
3
4 逻辑操作符
逻辑操作符包括与(&&)
,或(||)
,逻辑取反操作符(!)
。
.&&
就是并且的意思,两侧结果都为真,则为真,否则为假。
.||
就是或者的意思,只要有一个结果为真,则为真,否则为假。
.!
改变表达式的真假。
#include<stdio.h>
int main()
{
int age = 18;
if(!age)
{
printf("我要谈恋爱\n");
}
else
{
printf("年龄不够,你还想谈恋爱\n");
}
return 0;
}
运算结果
年龄不够,你还想谈恋爱
接下来,我们实现一个判断闰年的程序。
闰年的判断规则是:
(1)能被4整除不能被100整除
(2)能被400整除
满足一个条件就可以了。
#include<stdio.h>
int main()
{
int year = 0;
scanf("%d",&year);
if((year%4==0&&year%100!=0)||(year%400==0))
{
printf("%d年是闰年\n",year);
}
return 0;
}
运行结果
2000
2000年是闰年
注意:
在逻辑操作符中有一个特殊的情况:短路情况
。
C 语言逻辑运算符有一个特点,它总是先对左侧的表达式求值,再对右侧的表达式求值。如果仅仅根据左侧的表达式的结果就能知道整个表达式的结果,不再对右侧表达式进行运算的情况叫做短路
。
#include<stdio.h>
int main()
{
int i = 0,a = 0,b = 2,c = 3,d = 4;
i = a++ && ++b && d++;
printf("a=%d\nb=%d\nc=%d\nd=%d\n",a,b,c,d);
return 0;
}
运行结果
a=1
b=2
c=3
d=4
5 循环语句
C语言中有三种循环语句:while语句
,for语句
,do...while语句
。
.while语句
的形式
while(表达式)//表达式为真,进入循环,否则循环结束
语句//如果要控制多条语句,要加上大括号,否则默认控制一条语句
#include<stdio.h>
int main()
{
int i = 0;
while(i<=10)
{
printf("%d ",i);
i++;
}
return 0;
}
运行结果
0 1 2 3 4 5 6 7 8 9 10
让我们来做一个小小的练习吧。
输入一个整数,逆序打印这个整数的每一位。
#include<stdio.h>
int main()
{
int m = 0;
scanf("%d",&m);
while(m)
{
printf("%d ",m%10);//先打印这个数的最低位
m/=10;//再去掉这个数的最低位,一次循环结束,进行下一次循环的判断
}
return 0;
}
运行结果
4 3 2 1
.for
语句的形式:
for(初始化部分;判断部分;调整部分)
语句//判断部分为真,则执行语句
打印1-10之间的数字
#include<stdio.h>
int main()
{
int i = 0;
for(i = 1;i <= 10; i++)
{
printf("%d ",i);
}
return 0;
}
运行结果
1 2 3 4 5 6 7 8 9 10
while
和for
语句都是先判断,条件满足就进入循环,do...while
语句是先进入循环体,执行循环语句,再执行while里面的判断表达式。
#include<stdio.h>
int main()
{
int i = 1;
do
{
printf("%d ",i);
i++;
}while(i<=5);
return 0;
}
运行结果
1 2 3 4 5
do...while
循环至少循环一次。
做一个小练习吧。
输入一个数,判断这个数是几位数?
#include<stdio.h>
int main()
{
int n = 0;
int i = 0;
scanf("%d",&n);
do
{
i++;//数字至少是一位数,所以上来我们就i++一次
n/=10;//再不断的去掉最低位
}while(n);
printf("%d\n",i);
return 0;
}
运行结果
1234
4
6 break语句
有的时候,我们需要提前结束程序,这是很常见的。就让我们来了解一下break
的功能吧。
break
语句可以用来提前终止循环的,并且是永久终止的,只能跳出一层循环。
#include<stdio.h>
int main()
{
int i = 0;
while(i<=10)
{
if(i==5)
{
break;
}
printf("%d ",i);
i++;
}
return 0;
}
运行结果
0 1 2 3 4
我们将上面的代码做一个小小的改动,看看会有什么不一样的烟火呢?
#include<stdio.h>
int main()
{
int i = 0;
while(i<=10)
{
i++;
if(i==5)
{
break;
}
printf("%d ",i);
}
return 0;
}
运行结果
1 2 3 4
看吧,将代码做一点小小的改动,它就会有翻天覆地的变化。所以我们一定要仔细阅读代码。
7 continue语句
了解了break
语句之后,我们来看一下缩小版的continue
语句吧。
continue
语句的作用是跳过本次循环continue
后面的代码,执行下一次循环。
#include<stdio.h>
int main()
{
int i = 0;
while(i<=10)
{
if(i==5)//当i==5时,会跳过后面的代码,因此i++没有机会被执行
//i一直为5,程序会陷入死循环
{
continue;
}
printf("%d ",i);
i++;
}
return 0;
}
运行结果
0 1 2 3 4
让我们来欣赏一下“双胞胎”之间是否有什么区别呢?
#include<stdio.h>
int main()
{
int i = 0;
while(i<=10)
{
i++;
if(i==5)//当i==5时,依然会跳过后面的代码,但是i++可以被执行
{
continue;
}
printf("%d ",i);
}
return 0;
}
运行结果
1 2 3 4 6 7 8 9 10 11
注意:
一定要注意,使用continue
的时候,调整部分是在continue
之前还是之后。位置不同往往会造成意想不到的后果。
8 循环的嵌套
我们已经了解了循环语句,让我们通过一个小练习来提高我们对于循环语句的理解。
打印100-200之间的素数
#include<stdio.h>
#include<math.h>
int main()
{
int i = 0;
for(i=101;i<200;i+=2)
{
int j = 0;
int flag = 1;//假设i是素数
for(j=2;j<=sqrt(i);j++)//sqrt是一个库函数,用来求一个数的平方根,需要包含头文件math.h
{
if(i%j==0)
{
flag=0;//如果i不是素数,则flag=0
break;
}
}
if(flag)
{
printf("%d ",i);
}
}
return 0;
}
运行结果
代码分析:一个整数总能拆成两个正数相乘,其中至少有一个整数是小于等于这个数的平方根的。
举例分析:16=4*4=2*8=1*16
9 goto语句
goto
语句可以用来跳出多层循环,也可以实现在同一个函数内跳转到设置好的标号处。
goto
语句也可以理解为一种特殊的循环。(自己理解的)
我们来实现一个关机程序。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
again:
printf("请注意,你的电脑将在一分钟后关机,如果想要取消关机,请输入罗大侠是我爸爸\n");
system("shutdown -s -t 60");//系统执行命令,需要包含头文件stdlib.h
char ch[20]={0};
scanf("%s",ch);
if(strcmp(ch,"罗大侠是我爸爸")==0)//strcmp是一个库函数,需要包含头文件string.h,两个字符串的比较不能使用==
{
system("shutdown -a");
}
else
{
goto again;
}
return 0;
}
这里就不展示结果了,有兴趣的小伙伴可以自己尝试一下。
结语:今天的文章分享到此结束,感兴趣的朋友为小编点赞吧。万分感谢。
标签:语句,main,int,循环,printf,include,表达式,分支 From: https://blog.csdn.net/2402_84532723/article/details/140583398