目录
分支语句 :
if
switch
循环语句 :
while
for
do while
1. 什么是语句?
C语言中由一个分号隔开的就是一条语句。例如:
printf("nihao\n");
;//这一行除了有一个分号其他什么都没有,这是空语句
2. 分支语句(选择结构)
如果你好好学习,校招时拿一个好
offer
。
如果你不学习,毕业等于失业,回家搬砖
这就是选择!
2.1 if语句
如果表达式的结果为真,则语句执行。
在C语言中如何表示真假?
0表示假,非0表示真。注意:负数也为真
语法结构:
if(表达式)
语句;
#include <stdio.h> //如果输入小于18的数,输出打印未成年。
int main()
{
int age = 0;
scanf("%d", &age);
if(age<18) //当输入的数小于18时条件为真,输出打印未成年。
{ //当输入的数大于等于18时条件为假,直接下一代码,这里直接执行return 0 ;
printf("未成年\n");
}
return 0 ;
}
//if后面只能跟一条有效语句,如果需要多条语句时可以加个{}把需要的语句新进大括号里。
if(表达式)
语句1;
else
语句2;
//如果输入小于18的数,输出打印未成年,输入大于等于18的数打印成年。
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age<18)
{
printf("未成年\n");
}
else
{
printf("成年\n");
}
return 0 ;
}
//多分支
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
/*如果输入小于18的数,输出打印未成年,输入大于等于18并且小于30的数输出打印青年,
输入大于等于30并且小于50的输出打印中年... */
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age<18)
{
printf("少年\n");
}
else if(age>=18 && age<30) //当输入的数大于等于18并且小于30时条件为真,输出打印青年。
{
printf("青年\n");
}
else if(age>=30 && age<50)
{
printf("中年\n");
}
else if(age>=50 && age<80)
{
printf("老年\n");
}
else
{
printf("老寿星\n");
}
return 0 ;
}
else的匹配:else是和它离的最近的if匹配的。
//适当的使用{}可以使代码的逻辑更加清楚。
//代码风格很重要
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1) //程序输出的结果为haha
{
if(b == 2)
{
printf("hehe\n"); //a等于零不等于一,为假,执行else语句。
}
}
else
{
printf("haha\n");
}
return 0;
}
2.2 switch语句
switch
(
整型表达式
)
{
语句项;
}
而
语句项
是什么呢?
//
是一些
case
语句:
//
如下:
case
整形常量表达式
:
语句
;
2.2.1 在switch语句中的 break
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d",&day);
switch(day)
{
case 1: //case 整形常量表达式: case 1+0 也是没有问题的;估计也没有人会这样写。
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n"); //最好在你想停止的case语句后面加上一条break语句。
break;
case 5:
printf("星期五\n");// case 语句遇到break 时才会停止;不懂下一个代码就懂了。
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期天\n");
break;
default:
printf("输入错误\n"); //尽量每个switch语句都放一条deafult语句,最多只能有一条;
break;
}
return 0; }
break
语句
的实际效果是把语句列表划分为不同的分支部分。
编程好习惯
在最后一个
case
语句的后面加上一条
break
语句。
(之所以这么写是可以避免出现在以前的最后一个
case
语句后面忘了添加
break
语句)。
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d",&day);
switch(day)
{
case 1:
case 2:
case 3: //当你输入1时,由于没有case 1:后没有跟break,所以会执行case 2 case 3...
case 4: //直到遇到break为止。
case 5:
printf("weekday\n");
break;
case 6:
case 7:
printf("weekend\n");
break;
default:
printf("输入错误\n");
}
return 0; }
2.2.2 default
子句
如果表达的值与所有的
case
标签的值都不匹配怎么办?
其实也没什么,结构就是所有的语句都被跳过而已。
程序并不会终止,也不会报错,因为这种情况在
C
中并不认为是个错误。
但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?
你可以在语句列表中增加一条
default
子句,把下面的标签
default:
写在任何一个
case
标签可以出现的位置。
当
switch
表达式的值并不匹配所有
case
标签的值时,这个
default
子句后面的语句就会执行。
所以,每个
switch
语句中只能出现一条
default
子句。
但是它可以出现在语句列表的任何位置,而且语句流会像执行一个
case
标签一样执行
default
子句。
编程好习惯
在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个 break 。
3.循环语句
3.1while循环
//while
语法结构
while
(
表达式
)
循环语句
;
执行过程:
第一步
:计算紧跟while后括号中表达式的值,当表达式的值为非0时,则接着执行while语句中都内嵌语句;当表达式值为0时,则跳过while语句,执行该while结构后的其他语句。
第二步:执行循环体内嵌语句。
第三步:返回去执行步骤1,直到条件不满足,即表达式的值为0时,退出循环,while循环结束。
例:在屏幕上打印
1-10
的数字。
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
printf("%d ", i);
i = i+1;
}
return 0;
}
3.1.1 while语句中的break和continue
//break 代码实例
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
break;
printf("%d ", i);
i = i+1;
}
return 0;
}
总结:
break在while循环中的作用:
其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。
所以:while中的break是用于永久终止循环的。
//continue 代码实例1
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5) //当i=5时跳过本次循环continue后面的代码,重新进入循环,i还是等于5,不断往复。
continue;
printf("%d ", i); //结果如下图,到4后光标一直闪。死循环了。
i = i+1;
}
return 0;
}
总结:
continue在while循环中的作用就是:
continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,
而是直接跳转到while语句的判断部分。进行下一次循环的入口判段
3.2 for循环
3.2.1 语法
for
(
表达式
1
;
表达式
2
;
表达式
3
)
循环语句
;
表达式
1
表达式
1
为
初始化部分
,用于初始化循环变量的。
表达式
2
表达式
2
为
条件判断部分
,用于判断循环时候终止。
表达式
3
表达式
3
为
调整部分
,用于循环条件的调整。
执行过程:
步骤一:先求表达式1的值
步骤二:求表达式2的值,若其值为真(非0),则执行for语句中指定的内嵌语句,然后执行下面步骤三,若其值为假(0),则退出循环,执行for语句一下的其他语句;
步骤三:求表达式3的值;
步骤四:重复执行步骤二。
使用for循环 在屏幕上打印1-10的数字。
#include <stdio.h>
int main()
{
int i = 0;
//for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/)
for(i=1; i<=10; i++) //for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议初学时
//省略,容易导致出现问题。
{
printf("%d ", i);
}
return 0;
}
3.2.2 break和continue在for循环中
我们发现在
for
循环中也可以出现
break
和
continue
,他们的意义和在
while
循环中是一样的。
但是还是有些差异:
//代码1
#include <stdio.h>
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
if(i == 5)
break;
printf("%d ",i);
}
return 0; }
for 遇到break,就停止后期所有循环,直接终止循环....输出结果为1234
//代码2
#include <stdio.h>
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
if(i == 5)
continue;
printf("%d ",i);
}
return 0; }
for 遇到continue,就停止本次循环,后重新i++后进行判断,输出结果为1234678910
for循环的嵌套:
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
for (i = 0; i < 10; i++)
{
for (j = 0; j < 10; j++)
{
printf("你好\n"); //一共打印100个你好。
}
}
return 0 ;
}
3.3 do...while()循环
do
循环语句
;
while
(
表达式
);
执行过程:
步骤一:先执行一次指定的循环体语句。
步骤二:执行完成后,判断while后面的表达式的值,当表达式的值为非0(真)时,程序流程返回,去重新执行循环体语句。
步骤三:如此反复,直到表达式的值等于零(假)为止,此时循环结束。
3.3.1 do
语句的特点
循环至少执行一次,然后判断循环条件是否成立。
#include <stdio.h>
int main()
{
int i = 10;
do
{
printf("%d\n", i);
}while(i<10);
return 0;
}
3.3.2 do while循环中的break和continue
#include <stdio.h>
int main()
{
int i = 5;
do
{
if(5 == i)
break;
printf("%d\n", i);
}while(i<10);
return 0;
}
#include <stdio.h>
int main()
{
int i = 2;
do
{
printf("%d\n", i);
i = i + 1;
if (5 == i) //当i=5时,执行continue,执行continue则跳过本次循环中continue后的代码。
continue; // 然后进行下一次循环的入口判段
printf("good time\n");
} while (i < 10);
return 0;
}
运行结果:
4. goto语句
C
语言中提供了可以随意滥用的
goto
语句和标记跳转的标号。
从理论上
goto
语句是没有必要的,实践中没有
goto
语句也可以很容易的写出代码。
这里不做展开。感兴趣的可以自己查一下。
本篇文章就到这里了,希望能给你带来帮助!