C语言中的语句分为三种结构:
1.顺序结构
2.选择结构 :if 、 switch 、 case 等等
3.循环结构 : while 、 for 、 do while 等等
本章主要讲 : 分支语句:if 、 switch
循环语句 :while 、 for 、 do while 、
goto语句
C语句可分为以下五类:
1.表达式语句 2.函数调用语句 3.控制语句 4.复合语句 5.空语句
本章后面介绍的是控制语句
C语言中有九种控制语句,可分为以下三类:
1.条件判断语句也叫分支语句 :if 语句、switch 语句;
2.循环执行语句 : do while 语句 、while 语句、for 语句;
3.转向语句 :break 语句、goto 语句、continue 语句、return 语句;
语法结构:
1 . if (表达式)
语句;
//如果表达式为真,则执行语句;
2 . if (表达式)
语句 1;
else
语句 2;
//如果表达式为真,则执行语句 1;如果表达式为假,则执行语句 2;
3 . if(表达式1)
语句 1;
else if(表达式2)
语句 2;
else
语句 3;
// if 嵌套语句,如果表达式 1 为真,则执行语句 1;
如果表达式 1为假,则会执行表达式 2,
在此基础上,如果表达式 2 为真,则执行语句 2 ,
如果表达式 2 为假,则执行语句3.
#include
int main()
{
int age = 0;
scanf("%d",&age);
if(age < 18 )
printf("未成年\n");
else
pintf("成年\n");
return 0
}
如果给出的数字小于18,系统会给出未成年,如果给出的数字大于18,系统会给出成年。
# if 表达式后面执行的语句如果只有一条语句的话,是可以不使用大括号的。
#include
int main()
{
int age = 0;
scanf("%d",&age);
if(age < 18 )
{
printf("未成年\n");
}
else if(18 <= age < 30) //18 <= age && age < 30
{
pintf("青年\n");
}
else
{
printf("老年\n");
}
return 0
}
在此代码中,输入20,系统会给出青年,输入40,系统也会给出青年,原因是当输入40时,18<=40 是成立的,此时18<=40 会变为1,整条18 <= age < 30代码会变为1<30,此时代码也成立,所以输入40,系统会给出青年。如果想要正确判断,代码 18 <= age < 30 应该改为
18<=age&&age<30,此时输入40,系统会给出老年。
#include
int text()
{
int a =0;
scanf("%d",&a);
if(a > 5)
return 1 ;
else
return 2;
printf("hehe\n");
}
int main()
{
int ret = text();
printf("ret");
return 0;
}
这个代码其实是没有机会输入 hehe 的,因为不管 a 是否大于5,所得的值都会被 return 带出函数,根本不会执行到 printf("hehe\n");
0 表示假,非 0 表示真。
#include
int main()
{
int a = 0;
int b = 0;
if(a == 1)
if(b ==2)
printf("hehe\n);
else
printf("haha\n);
return 0;
}
这个代码最终输出结果为空语句,因为 a = 1 这个表达式为假,所以不进入内部语句,而 else 总是跟离他最近的 if 语句进行搭配,所以 else 也不进行执行,所以在写代码的时候一定要注意排版,如果想让 if 跟 else 远距离匹配,可以在 if 内部的语句加上{}。
// 1.(等号)
#include
int main()
{
int a = 0;
if(a == 1)
printf("haha\n);
return 0;
}
//此时不会打印 haha
// 2.(赋值)
#include
int main()
{
int a = 0;
if(a = 1)
printf("haha\n);
return 0;
}
// 此时打印 haha
// 因为赋值完之后,式子成立=1,会执行if内部语句
// 所以为了避免这种错误代码一般写成常量在左边,变量在右边,这样不会搞成赋值语句,可以避免错误
#include
int main()
{
int a=0;
scanf("%d",&a);
if(a % 2 == 1)
printf("奇数\n");
else
printf("偶数\n");
return 0;
}
语法结构
switch ( 整型表达式 )
{
语句项;
}
语句项是一些 case 语句,例:
case 整型常量表达式;
语句;
#include
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")
}
return 0;
}
default 是默认的意思,当你输入的值没有与相应的case匹配时,会跳转到 default 语句。
case 只负责进入语句,没有其他含义,所以需要 break 语句来打破,如果没有 break ,当输入 5时,系统会给出 星期五 星期六 星期日(此处省略换行)。
case 后面必须加整型常量表达式。
while(表达式)
语句;
while 语句先判断表达式,如果表达式为真,则执行语句后再回到表达式重新判断,以此类推,直到表达式不成立为止,如果中途想要退出循环,需要用 break 来打破循环,如果只是想跳过某部分循环体,可以使用 continue 语句,当代码执行到 continue 语句时,会跳过 continue 后面的循环部分,直接回到表达式开始重新判断循环。
用 while 循环打印数字1-10
#include
int main()
{
int a = 0 ;
while( a <= 10 )
{
printf (" %d ",a);
a++;
}
return 0;
}
for(表达式1;表达式2;表达式3)
循环语句;
表达式 1 是循环的初始化部分,表达式 2 是循环的判断部分,表达式 3 是循环的调整部分
用 for 循环打印 1 - 10
#include
int main()
{
int i = 0;
for ( i = 1 ; i <= 10 ; i++ )
{
printf ( "%d" , i );
}
return 0;
}
建议:1.不可在 for 循环体内修改循环变量,防止 for 循环失去控制。
2.建议for语句的循环变量的取值采用 “ 前闭后开区间 ” 写法。
int i =0
for( i = 0 ;i < 10 ; i++ )
{
}
for循环变量的值在[ 0,10),为左闭右开,此时区间内有十个数,10 具有更好的代表意义,可以避免代码混乱。
do
循环语句;
while(表达式);
使用 do while 循环打印 1 - 10
int main()
{
int i = 1;
do
{
printf ( " %d ",i);
i++;
}
while ( i <= 10);
return 0;
}