1. 语句
C语句可分为以下五类:1. 表达式语句;2. 函数调用语句;3. 控制语句;4. 复合语句;5. 空语句。
C语言是“结构化”的程序设计语言,通过控制语句来解决由“顺序”、“选择”、“循环”构成的单一/多样的结构。
主要为控制语句,控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成。其主要分为三类:分支语句、循环语句、转向语句。
1.1 分支(选择)语句:
分支语句可分为: if, switch
If:
语法结构:
//1单分支:
if(表达式) //表达式为真(非0),执行下面语句
语句;
//2双分支:
if(表达式) //表达式为真,执行下面语句1
语句1;
else //表达式为假,执行下面语句2
语句2;
//3多分支 :
if(表达式1) //表达式1为真,执行下面语句1
语句1;
else if(表达式2) //表达式2为真,执行下面语句2
语句2;
else //表达式1&2为假,执行下面语句3
语句3;
注意:
if只会执行一个语句,if、else执行多个语句时需使用{};else是与离它最近的if相匹配。
//if:
//单分支
#include <stdio.h>
int main()
{
int a = 10;
if (a < 20) //表达式为真(非0),执行下面语句
{
printf("good!");
}
return 0;
}
//双分支
#include <stdio.h>
int main()
{
int age = 0;
printf("请输入你的年龄:\n");
scanf("%d", &age);
if (age < 18) //表达式为真(非0),执行下面语句
{
printf("未成年!");
}
else //表达式为假,执行下面语句
{
printf("成年!");
}
return 0;
}
//多分支
#include <stdio.h>
int main()
{
int age = 0;
printf("请输入你的年龄:\n");
scanf("%d", &age);
if (age < 15)
printf("儿童!");
else if(age >=15 && age<18)
printf("少年!");
else if (age >= 18 && age < 26)
printf("青年!");
else if (age >= 26 && age < 36)
printf("壮年!");
else if (age >= 36 && age < 56)
printf("中年!");
else if (age >= 56 && age < 81)
printf("老年!");
else
printf("长寿!");
return 0;
}
switch:
switch常用于多分支语句
语法结构:
switch(整型表达式) //决定switch的入口,即:从case几开始执行
{
case 整形常量表达式1:
语句1;
break; //结束执行
case 整形常量表达式2:
语句2;
break;
default: //所有case都不满足时执行
语句3;
break;
}
注意:
switch从起始case从上至下执行,遇见case才结束;switch为整型表达,式,case为整形常量表达式;switch允许嵌套使用。
//switch:
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
switch (n) //n必须为整型表达式,决定switch的入口,即:从case几开始执行
{
case 1: //caseh后面必须为整形常量表达式
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break; //结束switch
case 6:
case 7:
printf("休息日\n");
break;
default: //case都不满足时,执行default
printf("输入错误\n");
}
return 0;
}
1.2 循环语句:
循环语句分为:while, for, do while
while:
语法结构: //表达式为真,执行循环;每次循环都要进行表达式判断,表达式为假,跳出循环。
while(表达式)
循环语句;
注意:
while中的break是用于永久终止循环的。continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接跳转到while语句的判断部分,进行下一次循环的入口判断。
//while:
#include <stdio.h>
int main()
{
int i = 0;
while (i <= 20) //表达式为真,执行循环;每次循环都要进行表达式判断,表达式为假,跳出循环。
{
i++;
if (11 == i)
break; //break:终止语句循环
if (5 == i)
continue; //continue:终止本次循环(本次循环中continue后边的代码不会再执行),
//直接跳转到while语句的判断部分,进行下一次循环的入口判断.
printf("%d ", i);
}
return 0;
}
getchar:
//清理缓冲区:
#include <stdio.h>
int main()
{
int ch = 0;
while ((ch = getchar()) != EOF) //获取一个字符,利用getchar可以清除缓存区,特别是'\0'
putchar(ch); //打印字符
return 0;
}
for:
语法结构:
for (表达式1; 表达式2; 表达式3)
循环语句;
表达式1:为初始化部分,用于初始化循环变量的。
表达式2:为条件判断部分,用于判断循环时候终止。(判断部分如果省略,则意味这判断会恒成立)
表达式3:为调整部分,用于循环条件的调整。
//for:
#include <stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 10; i++) //for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/)
{
printf("%d ", i);
}
return 0;
}
注意:
1. 初始化部分只执行一次。
2. 跟while中一样,for的break是用于永久终止循环的;continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接跳转到for语句的调整部分。
3. 不可在for 循环体内修改循环变量,防止 for 循环失去控制,应在调整部分修改。
4. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
do while:
do while: 先循环,后判断(至少循环一次)
语法结构:
do
循环语句;
while(表达式);
//do while:
#include <stdio.h>
int main()
{
int i = 1;
do
{
printf("%d ", i);
i++;
}
while (i <= 10);
return 0;
}
注意:
do while的break是用于永久终止循环的;continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接跳转到while语句的判断部分。
1.3 转向语句:
转向语句: break, goto, continue, return
goto:
语法结构:
表达式:
goto 表达式;
可以随意滥用的 goto语句和标记跳转的标号。其最常见的用法就是终止程序在某些深度嵌套的结构的处理过程。
//goto:
#include <stdio.h>
int main()
{
int a=0;
int i = 0;
for (i = 0; i < 10; i++)
{
printf("%d ", i);
if (i==10)
goto again;
}
again:
printf("");
return 0;
}
注意:goto不能跨函数跳转。