C语言是结构化的程序设计语言
1.顺序结构
2.选择结构 if、switch
3.循环结构 while、for、do while
一、什么是语句
控制语句
用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,
C
语言有九种控制语句。
可分成以下三类:
1. 条件判断语句也叫分支语句:
if
语句、
switch
语句;
2.
循环执行语句:
do while
语句、
while
语句、
for
语句;
3. 转向语句:
break
语句、
goto
语句、
continue
语句、
return
语句。
二、分支语句(选择结构)
1.if语句
语法结构:
单分支
if
(
表达式
)
语句
;
int main()
{
int age=0;
scanf("%d",&age);
if(age>=18)
printf("成年\n");
}
双分支
if
(
表达式
)
语句
1
;
else
语句
2
;
int main()
{
int age=0;
scanf("%d",&age);
if(age>=18)
printf("成年\n");
else
printf("未成年\n");
}
多分支
if(表达式1)
语句1;
else if(表达式2)
语句
2
;
else
语句
3
;
int main()
{
int age=0;
scanf("%d",&age);
if(age<18)
{
printf("未成年\n");
printf("好好学习\n");
}
else if(age>=18&&age<30)
printf("青少年\n");
else if(age>=30&&age<50)
printf("中年\n");
else if(age>=50&&age<80)
printf("中老年\n");
else
printf("老年\n");
}
如果表达式的结果为真,则语句执行。
在C语言中如何表示真假?
0表示假,非0表示真。
1)悬空else
int main()
{
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
}
什么都不打印,下面的if、else匹配
改正
//适当的使用{}可以使代码的逻辑更加清楚。
//代码风格很重要
int main()
{
int a = 0;
int b = 2;
if(a == 1)
{
if(b == 2)
{
printf("hehe\n");
}
}
else
{
printf("haha\n");
}
}
打印haha
2)if书写形式的对比
int test2()
{
int a=0;
if(a)return 1;
elae return 0;
}
int test1()
{
int a=0;
if(a)
return 1;
return 0;
}
int main()
{
int ret1=test1();
int ret2=test2();
printf("ret1=%d\n",ret1);//0
printf("ret2=%d\n",ret2);//0
}
int main()
{
int num = 1;
if(num=5) //赋值
{
printf("hehe\n");//hehe
}
}
3)练习
eg1. 判断一个数是否为奇数
int main()
{
int n=0;
scanf("%d",&n);
if(n%2==1)
{
printf("奇数\n");
}
}
eg2. 输出1-100之间的奇数
int main()
{
int i=1;
while(i<=100)
{
if(i%2==1)//对i进行判断
printf("%d ",i);
i++;
}
}
2.switch语句
switch语句也是一种分支语句,常常用于多分支的情况。
输入1,输出星期一
输入2,输出星期二
输入3,输出星期三
输入4,输出星期四
输入5,输出星期五
输入6,输出星期六
输入7,输出星期日
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;
}
}
写成 if...else if ...else if 的形式太复杂,那我们就得有不一样的语法形式,这就是switch 语句。
switch ( 整型表达式 ){语句项;}//语句项 是一些 case 语句:// 如下:case 整型常量表达式 :语句 ;
1)在switch语句中的 break
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d",&day);
switch(day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("weekday\n");
break;
case 6:
case 7:
printf("weekend\n");
break;
}
}
break语句的实际效果是把语句列表划分为不同的分支部分。
编程好习惯
在最后一个
case
语句的后面加上一条
break
语句。(可以避免出现在以前的最后一个 case
语句后面忘了添加
break
语句)。
2)default子句
default
: 写在任何一个 case
标签可以出现的位置。 当 switch
表达式的值并不匹配所有
case
标签的值时,这个
default
子句后面的语句就会执行。 所以,每个switch
语句中只能出现一条
default
子句。 但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case
标签一样执行
default
子句。
编程好习惯
在每个
switch
语句中都放一条
default
子句是个好习惯,甚至可以在后边再加一个
break
。
3)练习
#include <stdio.h>
int main()
{
int n = 1;
int m = 2;
switch (n)//1
{
case 1:
m++;//m=3
case 2:
n++;//n=2
case 3:
switch (n)//2
{//switch允许嵌套使用
case 1:
n++;
case 2:
m++;//m=4
n++;//n=3
break;//跳出自己的switch
}
case 4:
m++;//m=5
break;
default:
break;
}
printf("m = %d, n = %d\n", m, n);//m=5,n=3
}
三、循环语句
1.while循环
int main()
{
while(1)
printf("hehe\n");
}
//while 语法结构while ( 表达式 )循环语句 ;
在屏幕上打印1-10的数字。
int main()
{
int i = 1;
while(i<=10)
{
printf("%d ", i);
i = i+1;
}
}
1) while
语句中的
break
和
continue
//break 代码实例
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
break;
printf("%d ", i);//1 2 3 4
i = i+1;
}
}
总结:break在while循环中的作用:
其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。 while中的break是用于永久终止循环的。
//continue 代码实例1
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
continue;
printf("%d ", i);//1 2 3 4死循环
i = i+1;
}
}
总结
: continue在while循环中的作用就是:
continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行, 而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。
//代码1
#include <stdio.h>
int main()
{
int ch = 0;
while ((ch = getchar()) != EOF)
{
putchar(ch);
}
}
这里的代码适当的修改是可以用来清理缓冲区的.
int main()
{
char ch = '\0';
while ((ch = getchar()) != EOF)
{
if (ch < ‘0’ || ch > ‘9’)
continue;
putchar(ch);
}
}
//这个代码的作用是:只打印数字字符,跳过其他字符
2 .for循环
1 )语法
for ( 表达式 1 ; 表达式 2 ; 表达式 3 )循环语句 ;
表达式
1
表达式
1
为
初始化部分
,用于初始化循环变量的。
表达式
2
表达式
2
为
条件判断部分
,用于判断循环时候终止。
表达式
3
表达式
3
为
调整部分
,用于循环条件的调整。
使用
for
循环 在屏幕上打印
1-10
的数字
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
printf("%d ", i);
}
}
2)break和continue在for循环中
break
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
if(i == 5)
break;
printf("%d ",i);//1 2 3 4
}
}
continue
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
if(i == 5)
continue;
printf("%d ",i);//1 2 3 4 6 7 8 9 10
}
}
int main()
{
int i = 0;
for(i=1; i<=10;)
{
if(i == 5)
continue;
printf("%d ",i);//1 2 3 4死循环
i++;
}
}
3)for语句的循环控制变量
a. 不可在for 循环体内修改循环变量,防止 for 循环失去控制。
b. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
int i = 0 ;// 前闭后开的写法for ( i = 0 ; i < 10 ; i ++ ){}// 两边都是闭区间for ( i = 0 ; i <= 9 ; i ++ ){}
4)一些for循环的变种
int main()
{
for(;;)//for循环的判断部分省略了,就意味着判断恒为真
{
printf("hehe\n");
}
}
int main()
{
int i = 0;
int j = 0;
//这里打印多少个hehe?
for(i=0; i<10; i++)
{
for(j=0; j<10; j++)
{
printf("hehe\n");//100个
}
}
}
int main()
{
int i = 0;
int j = 0;
//这里打印多少个hehe?
for(; i<10; i++)
{
for(; j<10; j++)//第二次及以上循环式j由于没有初始化始终为10
{
printf("hehe\n");//10个
}
}
}
//使用多于一个变量控制循环
int main()
{
int x, y;
for (x = 0, y = 0; x<2 && y<5; ++x, y++)
{
printf("hehe\n");
}
}