目录
1. 什么是语句?
2. 分支语句
2.1 if语句
2.1.1 悬空else
2.2 switch语句
3. 循环语句
3.1 while循环
3.1.1 while循环中的break和continue
break
continue
3.2 for循环
【练习题】
3.3 do...while()循环
4.goto语句
5. 练习
首先C语言是一种结构化的程序设计语言,是人与计算机之间进行交流的一种语言。
C语言支持三种结构:
- 顺序结构
- 选择结构
- 循环结构
顺序结构:步骤1->步骤2->步骤3...(按照顺序进行 一步一步地有序执行)
循环结构:一般会用在,我们循环往复的执行事件上。
C语言语句可以分为:
其中分支和循环属于控制语句
C语言控制语句有:
在C语言,0表示假,非零表示真
//语法
if(表达式) //表达式为真,就执行下面的语句
语句;
if(表达式) //表达式为真,就执行语句1
语句1;
else //表达式为假,执行语句2
语句2;
#include
int main()
{
int age = 0; //初始化变量
scanf("%d",&age);
if(age < 18)
{
printf("未成年");
}
else
{
printf("成年了!"); //age >= 18
}
return 0;
}
注意:if语句是一种分支语句,可以实现单分支,也可以实现多分支
//多分支
if(表达式1)
{
语句1;
}
else if(表达式2)
{
语句2;
}
else
{
语句3;
}
易错提醒:
#include
int main()
{
int age = 0;
scanf("%d",&age);
if (age<18)
{
printf("少年");
}
else if(18<=age<30) //注意此代码
{
printf("青年");
}
else if (age>=30&&age<50)
{
printf("中年");
}
else
{
printf("老年");
}
}
else if(18<=age<30)
此条语句是先判断 18<=age 再判断age<30
如果18<=age为真 (1),1<30也为真,语句执行
更正:else if(age>=18&&age<30)
当保持代码状态顺序不变的情况下,进行代码简化
#include
int main()
{
int age = 0;
scanf("%d",&age);
if (age<18)
{
printf("少年");
}
else if(age<30)
{
printf("青年");
}
else if (age<50)
{
printf("中年");
}
else
{
printf("老年");
}
}
else是和它距离最近的if匹配的
#include
int main()
{
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
不留心看的话:是打印 haha,其实真正结果是什么都不打印
要打印haha的正确代码为
#include
int main()
{
int a = 0;
int b = 2;
if(a == 1)
{
if(b == 2)
{
printf("hehe\n");
}
}
else
{
printf("haha\n");
}
return 0;
}
switch语句也是分支语句的一种,常用于多分支的情况
switch(表达式)
{
case 整型常量表达式:
语句;
break; //实际效果是把语句划分为不同的分支部分
case 整型常量表达式:
语句;
break;
.....
default:
语句;
break;
}
注意:
switch(表达式)
这里的表达式,只能是 short、char、int、long整数、枚举
不能是:float、double
case语句后一般放整型结果的常量表达式或者枚举类型,枚举类型也可以看成是一个特殊的常量
当表达式的值与case的值都不匹配,则执行default的语句
switch语句中的default子句可以放在任意位置,一般case最好放在default之前
#include
int main()
{
int n = 0;
scanf("%d", &n);
switch (n)
{
case 1:
printf("吃饭\n");
case 2:
printf("睡觉\n");
case 3:
printf("打豆豆\n");
default:
printf("编程!!!");
}
return 0;
}
注意这里没有break,当键盘输入1时
加入break
#include
int main()
{
int n = 0;
scanf("%d", &n);
switch (n)
{
case 1:
printf("吃饭\n");
break;
case 2:
printf("睡觉\n");
break;
case 3:
printf("打豆豆\n");
break;
default:
printf("编程!!!");
break;
}
return 0;
}
键盘输入1
case的连贯使用:当要求
1. 输入1-5,输出的是“weekday”;
2. 输入6-7,输出“weekend”
int main()
{
int day = 0;
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("weekday\n");
break;
case 6:
case 7:
printf("weekend\n");
break;
}
return 0;
}
当某一事件我们需要执行多次。c语言中while,可以实现循环
【例】打印 数字 1-10
#include
int main()
{
int i = 1;
while(i<=10)
{
printf("%d ", i);
i = i+1;
}
return 0;
}
查看下方代码的输出
#include
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
break;
printf("%d ", i);
i = i + 1;
}
return 0;
}
结果输出为
总结:break在while循环中 的作用,直接终止循环,后面的循环不再继续进行。
查看下方代码的输出
#include
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
continue;
printf("%d ", i);
i = i + 1;
}
return 0;
}
输出:1 2 3 4 进入死循环
【例】判断输出结果
#include
int main()
{
int i = 1;
while (i<=10)
{
i = i + 1;
if (i==5)
continue;
printf("%d ",i);
}
return 0;
}
易错处,输出结果容易看成: 2 3 4 6 7 8 9 10
但是结果为:2 3 4 6 7 8 9 10 11
因为while循环中i<=10,后面有i= i+1;
总结:continue在while循环中的作用为:终止本次循环,即本次循环后边的代码不会再执行,而是直接跳转到while语句的判断部分,进行下一次循环的入口判断
for(表达式1;表达式2;表达式3)
语句;
例:用for循环输出1-10
#include
int main()
{
int i = 0;
for (i =1;i<=10;i++)
{
printf("%d ",i);
}
return 0;
}
for循环里面也可以有break和continue语句
#include
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
if (i == 5)
break;
printf("%d ", i);
}
return 0;
}
结果为:1 2 3 4
一些for循环的变种
#include
int main()
{
for (;;)
{
printf("666 ");
}
return 0;
}
for循环里面的表达式有时是可以省略的。但是判断部分省略会一直循环下去【不建议省略】
#include
int main()
{
int i = 0;
int j = 0;
for (i = 0;i<3;i++)
{
for (j = 0; j < 3;j++)
{
printf("6 ");//一共打印9个6
}
}
return 0;
}
这是嵌套循环
#include
int main()
{
int i = 0;
int j = 0;
for (;i<3;i++)
{
for (; j < 3;j++)
{
printf("6 ");//一共打印3个6
}
}
return 0;
}
结果:6 6 6
因为两个for循环里面都没有初始化部分,当最里面的循环 j等于3的时候(打印完三个6),之后再进入循环时条件不满足了。
//请问循环要循环多少次?
#include
int main()
{
int i = 0;
int j = 0;
for (i = 0, j = 0; j = 0; i++, j++)
j++;
return 0;
}
结果是:一次也不循环
因为判断部分 j = 0;就是 j 赋值为零,即为假,循环就进不去。
do
循环语句;
while(表达式);
do...while()循环是先执行一次,再进行判断。如果表达式为真,接着执行循环语句,直到条件不满足停止。
goto语句最常用的场所就是 终止程序在某些深嵌套的结构
因为在多层循环中,跳到某层循环中,一个break是达不到的。而goto语句可以做到。
//goto语句运用
#include
int main()
{
int i = 0;
int error = 1;
for (i = 0; i < 3;i++)
{
for (int j = 0; i < 3; i++)
{
for (int k = 0; k < 3; i++)
{
goto end1;//跳转标记
}
}
}
end1://所跳转的位置
if (error)
{
printf("hh");
}
return 0;
}
执行结果:
建议尽量少使用goto语句
1. 计算n 的阶乘
//计算n的阶乘
#include
int main()
{
int n = 0;
int ret = 0;
while (~scanf("%d",&n))//实现多组输入
{
int i = 0;
ret = 1;
for (i = 1; i <= n;i++)
{
ret *= i;
}
printf("%d\n",ret);
}
return 0;
}
2. 计算1-10之间阶乘的和
#include
int main()
{
int i = 0;
int sum = 0;
int ret = 1;
for (i = 1; i <= 10;i++)
{
ret *= i;
sum += ret;
}
printf("%d",sum);
return 0;
}
输出结果为: