语句、分支和循环详解
一、C语句概述
- 一个C语言程序中由若干个函数组成,每个函数的函数体是由声明部分和执行部分组成。
int main(void)//函数的头部
{
int i = 0;//声明部分,不是语句
if(){}//语句
printf();//语句
}
- 一个程序是由若干个源文件程序组成,一个源文件程序是由头文件、预处理、全局变量和若干个函数组成,一个函数由若干个语句和若干个声明部分组成。
图片:
- C语句可以大致分为五类:分支与循环语句、库函数调用语句、表达式语句、复合语句、空语句。
1.1 分支与循环语句
- 分支与循环语句也称为控制语句,用于完成一定的控制功能。
分支与循环语句大致分为九种:if-else语句、switch语句、break语句、continue语句、goto语句、while语句、do-while语句、for语句、return语句。
1.2 函数调用语句
- 函数调用语句由函数名、实际参数和分号组成。
一般形式为:函数名();
printf();
strlen();
scanf();
time();
rand();
1.3 表达式语句
- 表达式语句一般由表达式组成。
一般形式为:表达式;
x = i + j;
1.4 复合语句
- 复合语句是由大括号将多个语句包括起来。
一般形式为:
{
语句1;
语句2;
…
…
}
{
x = y + z;
printf("%d\n",x);
}
1.5 空语句
- 只有分号“;”的语句为空语句
一般形式为:;
- 空语句为什么不执行的语句。
二、程序的基本结构
- 程序一般分为三种基本结构:顺序结构、选择结构、循环结构。
2.1 顺序结构
- 顺序结构是按照先后顺序逐步完成程序任务。
2.2 选择结构
- 选择结构是进行判断和分支。
2.3 循环结构
- 循环结构,同时也是重复结构,在一定条件下反复执行某一部分的程序。
三、结构中的常见操作符
3.1 关系运算符
- 关系运算符是主要用于比较,关系运算符所在的关系表达式为关系表达式。
关系运算符:
1.< 小于运算符
2.> 大于运算符
3.<= 小于等于运算符
4.>= 大于等于运算符
5.== 相等运算符
6.!= 不相等运算符
- 关系表达式中,一般返回0或1表示真假。在C语言中0表示假,非0表示假。
3.2 条件运算符(三目运算符)
- 条件运算符,也称三目运算符或者三元运算符。
- 条件运算符在执行时,如果exp1为真,执行exp2,如果exp1为假,执行exp3。
一般形式为:exp1?exp2:exp3
- 条件运算符可以作为if- else语句的一种便捷方式。
3.3 逻辑运算符
- 逻辑运算符提供了更加复杂的逻辑判断功能。
逻辑非运算符:!
逻辑与运算符:&&
逻辑或运算符:||
- 逻辑非运算符用于改变单个表达式的真假。
- 逻辑与表达式用于并且(并集),逻辑与表达式的左右俩侧都为真,则为真,有一个或着一个以上假则为假。
- 逻辑或表达式用于或者(交集),逻辑或表达式的左右俩侧都为假,则为假,有一个或者一个以上真则为真。
逻辑运算符与与其他运算符的先后顺序为:逻辑非运算符 > 算数运算符 > 关系运算符 > 逻辑与运算符 > 逻辑或运算符 > 赋值运算符
四、if-else语句
4.1 单分支if语句
格式:
if(运算符)
{
语句;
}
- 单分支if语句在if运算符判断结束后,如果为真,进入if语句;如果为假,跳过语句。
int i = 0;
scanf("%d",&i);
if(i>10)//5真15假
{
i = 50;
}
4.2 双分支if-else语句
格式:
if(运算符)
{
语句;
}
esle
{
语句;
}
- 双分支if-else语句在if运算符判断结束后,如果为真,进入if语句;如果为假,进入else语句
//判断俩个数的最小值
int a = 3;
int b = 18;
int min = 0;
if (a > b)
min = b;
else
min = a
4.3 多分支if-else-if语句
格式:
if(运算符1)
{
语句;
}
else if(运算符2)
{
语句;
}
else
{
语句;
}
//写代码将三个整数数按从大到小输出。
#include<stdio.h>
int main(void)
{
int a = 0;
int b = 0;
int c = 0;
scanf("%d %d %d", &a, &b, &c);
if (a > b)
{
if (b > c)
printf("%d %d %d", a, b, c);
else if(c>a)
printf("%d %d %d", c,a, b);
else
printf("%d %d %d", a,c, b);
}
else //b>a
{
if (a > c)
printf("%d %d %d", b, a, c);
else if (c>b)
printf("%d %d %d", c, b, a);
else
printf("%d %d %d",b,c,a);
}
return 0;
}
- 多分支if-else-if语句在if运算符1判断结束后,如果为真,进入if语句;如果为假,执行if运算符2,在if运算符2判断结束后,如果为真,进入else-if语句,如果为假,进入else语句。
五、switch语句
- switch语句也是分支语句的一种,不同于if-else的判断,switch执行的是选择。
一般形式为:
switch(表达式)
{
case 常量表达式1:
语句1;
case 常量表达式1:
语句2;
…
…
default:
语句n;
}
- 表达式一般为整形常量表达式,case后面的常量表达式应该与switch对应。
- 在执行case选择时,如果case都没有满足条件,编译器会执行default语句。default和case的顺序可以更换。
- 在执行switch语句时,一般会搭配break使用,后文会提到。
#include<stdio.h>
int main(void)
{
int imput = 0;
ptintf("********* 1.进入 *********\n");
ptintf("********* 0.退出 *********\n");
scanf("%d",&imput):
switch(imput)
{
case 1:
printf("进入\n");
break;
case 0
printf("退出\n");
break;
default:
printf("输入错误\n");
break;
}
return 0;
}
六、循环辅助break和continue
- break语句和continue语句可以根据循环体中的测试结果来忽略一部分循环内容,甚至结束循环。
6.1 break语句
- break语句仅在switch语句和循环语句中使用。执行break语句会之间跳出循环,执行循环下一个语句。
一般形式为:
break;
6.2 continue语句
- continue在执行时会逃过本次循环下面的语句,执行下一次循环。
一般形式为:
continue;
七、goto语句
- goto语句是一种传送语句,一般不建议使用,而且是谨慎使用。
一般形式为:
goto part;
part:
if()
{,,,
if()
{...
if()
{
...
goto palce;
}
}
}
place:
八、while循环语句
- while循环语句是一种先判断再执行的语句,属于“当型”循环结构。
一般形式为:
while(表达式)
{
语句;
}
#include<stdio.h>
//打印1-10的数字
int main(void)
{
int i = 1;
while(i<=10)
{
printf("%d\n",i):
i++;
}
return 0;
}
九、do-while循环语句
- do-while循环语句是一种先循环后执行的语句,属于是“直到型”循环结构。
一般形式为:
do
{
语句;
}while(表达式);
#include<stdio.h>
//打印1-10的数字
int main(void)
{
int i = 1;
do
{
printf("%d\n",i);
i++;
}while(i<10);
return 0;
}
十、for循环语句
- for循环在C语言中是经常被使用的一个语句。
一般形式为:
for(表达式1;表达式2;表达式3)
{
语句;
}
- 表达式1是初始化部分,用于初始化循环变量;表达式2是条件判断语句,用于判断循环的结束;表达式3是调整语句,用于循环的调整。
-
//1到 100 的所有整数中出现多少个数字9
#include<stdio.h>
int main(void)
{
int i = 0;
int cet = 0;
for (i = 1; i <= 100; i++)
{
if (i/10 == 9)
cet++;
if (i % 10 == 9)
cet++;
}
printf("%d", cet);
return 0;
}