目录
一、语句
1. 什么是语句?
C语句可分为以下五类:
1. 表达式语句
2. 函数调用语句
3. 控制语句
4. 复合语句
5. 空语句
2. 控制语句:
1. 条件判断语句也叫分支语句:if语句、switch语句;
2. 循环执行语句:do while语句、while语句、for语句;
3. 转向语句:break语句、goto语句、continue语句、return语句。
二、分支语句
1.if语句
1.1例子:
1.2悬空else
else的匹配:else是和它离的最近的if匹配的。
2.switch语句
2.1 在switch语句中的 break
2.2 default子句
三、循环语句
1.while语句
1.1while语句中的break与continue
1.2总结:
2.for循环
2.1同样的例子:
2.2 break和continue在for循环中
2.3 for语句的循环控制变量
2.4 一些for循环的变种
2.5大坑题
3. do...while()循环
一、语句
1. 什么是语句?
C语句可分为以下五类:
1. 表达式语句
2. 函数调用语句
3. 控制语句
4. 复合语句
5. 空语句
2. 控制语句:
可分成以下三类:1. 条件判断语句也叫分支语句:if语句、switch语句;
2. 循环执行语句:do while语句、while语句、for语句;
3. 转向语句:break语句、goto语句、continue语句、return语句。
二、分支语句
1.if语句
语法结构:
1)单分支if
if ( 表达式 )语句 ;2)if else语句(双分支)if ( 表达式 )语句1 ;else语句2 ;3)if elseif else(多分支)if ( 表达式 1 )语句1 ;else if ( 表达式 2 )语句2 ;else语句 3 ;注意:如果表达式的结果为真,则语句执行。在C语言中如何表示真假?
0表示假,非0表示真。
如果条件成立,要执行多条语句,怎应该使用代码块。
这里的一对 { } 就是一个代码块。
1.1例子:
#include <stdio.h>
//代码1
int main()
{
int age = 0;
scanf("%d", &age);
if(age<18)
{
printf("未成年\n");
}
}
//代码2
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age<18)
{
printf("未成年\n");
}
else
{
printf("成年\n");
}
}
//代码3
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age<18)
{
printf("少年\n");
}
else if(age>=18 && age<30)
{
printf("青年\n");
}
else if(age>=30 && age<50)
{
1.2悬空else
有时会遇到这种代码,由于省略了{},或者没有对齐代码(缩进格式问题),导致对代码理解产生误解。
//适当的使用{}可以使代码的逻辑更加清楚。
//代码风格很重要
例子:
这个else到底与哪个if是匹配的?代码最终是什么结果?其实是第二个if,结果是什么也没输出。原因很简单:
else的匹配:else是和它离的最近的if匹配的。
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("hehe\n");
else//与上面最近的if进行匹配
printf("haha\n");
return 0;
}
其实上面的代码就等于这样
当a=0时,第一个if语句判断a==1表达式为假,不执行该语句。压根就没进去这个代码块,于是直接跳到return 0;结束该程序了。
#include <stdio.h> int main() { int a = 0; int b = 2; if(a == 1) { if(b == 2) { printf("hehe\n"); } else//与上面最近的if进行匹配 { printf("haha\n"); } } return 0; }
修改代码:
而我们真正想要的是这样
a==1的时候如果b==2打印hehe,否则a为其他值,打印haha
修改代码后,逻辑明显清晰了许多,所以养成良好的代码习惯很重要
#include <stdio.h> int main() { int a = 0; int b = 2; if(a == 1) { if(b == 2) { printf("hehe\n"); } } else { printf("haha\n"); } return 0; }
2.switch语句
比如:输入 1 ,输出星期一输入 2 ,输出星期二输入 3 ,输出星期三输入 4 ,输出星期四输入 5 ,输出星期五输入 6 ,输出星期六输入 7 ,输出星期日那我没写成 if...else if ...else if 的形式太复杂,那我们就得有不一样的语法形式。这就是 switch 语句。switch ( 整型表达式 ){// 语句项;case 整形常量表达式 :语句 ;}
2.1 在switch语句中的 break
每个case里的语句,需要适当的break,因为在switch语句里,是从上到下依次执行的,没有break代表着会一直往下执行,直至执行完最后一条switch里的语句。例子1:#include <stdio.h> int main() { int day = 1; 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; } return 0; }
没有break将得到这样的结果:所有语句执行了,全输出来了
例2:
所以我们的代码就应该这样实现了:#include <stdio.h> int main() { int day = 3; 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; }
2.2 default子句
例子: 当不匹配时,默认走了default语句int main() { int n = 0; scanf("%d", &n); switch (n) { case 1: case 2: case 3: printf("3以内\n"); break; default: printf("非3以内的数\n"); break; } return 0; }
三、循环语句
做一些重复往返的工作时,用循环语句
1.while语句
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)//循环判断条件,当表达式为真进入循环体,否则不进入循环;当进入循环后,条件不满足时,跳出循环
{
printf("%d ", i);
i = i+1;
}
return 0;
}
1.1while语句中的break与continue
//理解break和continue int main() { int i = 1; while (i <= 10) { //if (5 == i) // break;//1 2 3 4 //break结束整个循环,永久终止循环 if (5 == i) continue;//1 2 3 4 死循环 //跳过此次循环,忽略跳过continue后面的代码,重新回到该while循环判断表达式,是否进入下一个循环 printf("%d ", i); i++; } return 0; }
break最终结果:永久结束整个循环continue最终结果:
仔细观察,此时程序并没有结束,在4后死循环了
1.2总结:
1)break 在 while 循环中的作用:其实在循环中只要遇到 break ,就停止后期的所有的循环,直接终止循环。所以: while 中的 break 是用于 永久 终止循环的。2)continue 在 while 循环中的作用就是:continue 是用于终止本次循环的,也就是本次循环中 continue 后边的代码不会再执行,而是直接跳转到 while 语句的判断部分。进行下一次循环的入口判断。
2.for循环
for ( 表达式 1 ; 表达式 2 ; 表达式 3 )循环语句 ;for(初始化;判断;调整)语法表达式 1表达式 1 为 初始化部分 ,用于初始化循环变量的。表达式 2表达式 2 为 条件判断部分 ,用于判断循环时候终止。表达式 3表达式 3 为 调整部分 ,用于循环条件的调整。
2.1同样的例子:
#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; }
2.2 break和continue在for循环中
break最终结果:
continue最终结果:
2.3 for语句的循环控制变量
建议:1. 不可在 for 循环体内修改循环变量,防止 for 循环失去控制。2. 建议 for 语句的循环控制变量的取值采用 “ 前闭后开区间 ” 写法。// 前闭后开的写法for ( i = 0 ; i < 10 ; i ++ ){}// 两边都是闭区间for ( i = 0 ; i <= 9 ; i ++ ){}
2.4 一些for循环的变种
例如这样就死循环了
//代码1 for(;;) { printf("hehe\n"); }
2)省略初始化带来的问题
正常情况下打印3*3也就是9和hehe
//代码2 int i = 0; int j = 0; //这里打印多少个hehe? for(i=0; i<3; i++) { for(j=0; j<3; j++) { printf("hehe\n"); } }
当省略i=0和j=0,则只打印3次hehe
2.5大坑题
一次都不循环,因为k=0;这个判断条件=是赋值,而不是==判断是否相等,
所以此时表达式恒为假,不进入循环
//请问循环要循环多少次? #include <stdio.h> int main() { int i = 0; int k = 0; for(i =0,k=0; k=0; i++,k++) k++; return 0; }
3. do...while()循环
do循环语句 ;while ( 表达式 );
例子:
#include <stdio.h>
int main()
{
int i = 1;
do
{
printf("%d ", i);
i=i+1;
}while(i<=10);
return 0;
}
3.1do while循环中的break和continue
#include <stdio.h>
int main()
{
int i = 1;
do
{
if(5 == i)
break;
printf("%d ", i);
i=i+1;
}while(i<=10);
return 0;
}
#include <stdio.h>
int main()
{
int i = 1;
do
{
if(5 == i)
continue;
printf("%d ", i);
i=i+1;
}while(i<=10);
return 0;
}