C语言包括三种基本结构:顺序结构、分支结构、循环结构。
其实不只是C语言,很多编程语言都支持这三种基本结构。
1、顺序结构: 程序由上往下一路执行下来。
参考代码:
#include
int main()
{
printf("Code 1\n");
printf("Code 2\n");
// other code ...
printf("Code n\n");
return 0;
}
运行结果:
Code 1
Code 2
Code n
2、分支结构: 根据设定的条件让程序执行时选择不同的语句执行。其中,包含 if 和 switch 两种语句。
2.1、if 可以与 else if 和 else 搭配,参考代码:
#include
int main()
{
int a = 10;
// 单个if语句
if(a >= 10)
{
printf("1: a >= 10\n");
}
// if与else搭配
if(a >= 10)
{
printf("2: a >= 10\n");
}
else
{
printf("3: a < 10\n");
}
// "if"、"else if"与"else"搭配:
// "if"必须要有,"else if"语句可以没有或者有多个,"else"可以没有
if(a > 10)
{
printf("4: a > 10\n");
}
else if(10 == a)
{
printf("5: a == 10\n");
}
else
{
printf("6: a < 10\n");
}
return 0;
}
运行结果:
1: a >= 10
2: a >= 10
5: a == 10
注意:C语言中规定if-else的配对原则是else字句与其之前最近的未被配对的if结合。 例如以下代码:
#include
int main()
{
int x = 0;
int y = 1;
if(x)
if(!x)
y = 10;
else
y = 0;
printf("y = %d\n", y);
return 0;
}
输出的结果是:
y = 1
结果或许不是你想要的,这是因为else是与其之前最近未被配对的if结合,它不像Python一样靠缩进(Tab键)来确定配对关系。
以上代码的的搭配关系实际效果是:
#include
int main()
{
int x = 0;
int y = 1;
if(x)
{
if(!x)
y = 10;
else
y = 0;
}
printf("y = %d\n", y);
return 0;
}
其实为避免发生类似错误,根据实际情景,可适量使用花括号“{ }”来将语句包含起来,不仅关系明确,还方便以后需求进行增加或减少某些代码。
2.2、switch选择结构
参考代码:
#include
int main()
{
int x = 1;
switch(x)
{
case 0:
printf("x = 0\n");
break;
case 1:
printf("x = 1\n");
break;
case 2:
printf("x = 2\n");
break;
default:
printf("x = 其他\n");
break;
}
printf("switch语句结束!\n");
return 0;
}
输出结果:
x = 1
switch语句结束!
注意:
① 由于存在数据的精度问题,switch的参数不能为实型;
② 每个条件后面需要检查是否需要break语句,否则不会跳出switch语句直至执行到break语句或switch执行完毕。当然,break语句不是必须的,反而有时故意不加上break来实现预想效果。
③ 末尾最好加上default语句,即使不需要处理任何事情。如果不加上别人看你的代码还有可能以为你忘记了哈哈。
例如以下代码:
#include
int main()
{
int x = 1;
switch(x)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日");
break;
case 6:
case 7:
printf("周末\n");
break;
default:
printf("错误\n");
break;
}
return 0;
}
输出结果:
工作日
3、循环结构: 通常用来处理重复处理某段代码。C语言中包含三种常见用法和一种不推荐的goto:
① for循环
for(语句1; 语句2; 语句3)
{
语句4;
// 其他代码
}
for语句执行的顺序是:1243 243 243 2(不符合条件跳出)
语句1通常用来做某些初始化,可以省略,但后面分号“;”不可以省略;
语句2起到判断作用,如果为真执行方括号“{}”里面的语句,假则退出循环;
语句3通常用来更新条件;
语句4是循环执行的代码;
② while循环(先判断后执行)
while(判断条件)
{
// 需要重复处理的代码
}
③ do-while循环(先执行一次之后再判断)
do{
// 需要重复处理的代码
}while(判断条件);
例如以下代码:
#include
int main()
{
int x = 0;
int y = 0;
int z = 0;
for(x = 0; x < 3; x++)
{
printf("for循环\n");
}
while(y < 3)
{
printf("while循环\n");
y++; // 别忘了更新y的值
}
do{
printf("do-while循环\n");
z++; // 别忘了更新z的值
}while(z < 3); // 别忘了有分号“;”
return 0;
}
运行结果:
for循环
for循环
for循环
while循环
while循环
while循环
do-while循环
do-while循环
do-while循环
注意:使用循环的时候记得更新条件,也就是上面更新x, y, z的值,否则可能一直循环执行不跳出。
④ goto
goto语句的争论比较激烈。它是无条件跳转语句,正是因为它的限制很弱,它的功能就很强大,不过它使得代码的可读性就变差,所以很久以前就有人主张去掉goto语句。
例如以下代码:
#include
int main()
{
int i = 0;
label:
i++;
if(i < 3)
{
printf("i = %d\n", i);
goto label; // 跳到label处执行
}
return 0;
}
运行结果:
i = 1
i = 2
其实这三种结构不只是C语言中的语法,大多数编程语言都支持,如C++、Java等等,只不过是语法可能会稍微不一样,但原理性的东西都一样。