目录
1.分支语句(选择结构)
1.1 if语句
语法结构
单分支:
if(表达式)
语句;
双分支:
if(表达式)
语句1;
else
语句2;
多分支:
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
如果表达式结果为真,则语句执行.
如果条件成立,要执行多条语句,应该使用代码块{}.
注意:
1.else的匹配:else是和它离得最近的if配对
2.if语句的表达式中 常量放左边更易发现错误
3. 0表示假,非0表示真
1.2 switch语句
语法结构
switch(整形表达式)
{
语句项;
}
语句项是一些case语句
eg:
case 整形常量表达式:
语句;
1.2.1 在switch语句中的break
在switch语句中,没有办法实现直接分支,搭配break使用才能实现真正的分支
break语句的实际效果是把语句列表划分为不同的分支部分
编程好习惯:在最后一个case语句的后面加上一条break语句.
注:switch语句中表达式的类型只能是整形和枚举类型
1.2.2 default子句
每个switch语句中只能出现一条default子句,但它可以出现在语句列表的任何位置(没有顺序要求),而且语句流会像执行一个case标签一样执行default子句
2. 循环语句
while for do while
2.1while循环
语法结构:
while(表达式)
{
循环语句;
}
2.1.1while语句中的break和continue
1. break在while循环中的作用:永久终止循环
#include<stdio.h>
int main()
{
int i =1;
do
{
if (i == 6)
break;
printf("%d ", i);
i++;
} while (i <= 10);
return 0;
}
此代码的打印结果是 1 2 3 4 5
2. continue在while循环中的作用:用于终止本次循环.也就是本次循环中的continue后面的代码不会再执行,而是直接跳转到while语句的判断部分,开始进行下一次循环的入口判断
#include<stdio.h>
int main()
{
int i =1;
do
{
if (i == 6)
continue;
printf("%d ", i);
i++;
} while (i <= 10);
return 0;
}
此段代码的打印结果是 1 2 3 4 5 ...死循环
2.2 for循环
语法结构
for(表达式1;表达式2;表达式3)
{
循环语句;
}
表达式1: 为初始化部分,用于初始化循环部分
表达式2: 为条件判断部分,用于判断循环是否终止
表达式3: 为调整部分,用于循环条件的调整
注:for循环的判断部分省略时,就意味着此判断恒为真.
建议:
1.不可在for循环内修改循环变量,防止for循环失去控制
2.建议for语句的循环控制变量的取值采用"前闭后开区间"写法
2.2.1 for循环中的break和continue
for循环中也可以出现break和continue,他们的意义和在while循环中是一样的
2.2.2 一些for循环的变种
1.for循环中的初始化部分,判断部分,调整部分省略
导致无限循环打印"呵呵"
int main()
{
for(;;)
{
printf("呵呵\n");
}
return 0;
}
2.初始化部分省略
第一次进入循环时,第二个for循环打印10个"呵呵",j=10.
因为省略了初始化部分,所以第二个for循环将不再打印
int main()
{
int i = 0;
int j = 0;
for (; i < 10; i++)
{
for (; j < 10; j++)
{
printf("呵呵\n");
}
}
return 0;
}
3.使用多余一个变量控制循环
仅打印两个"呵呵"
int main()
{
int x, y;
for (x = 0, y = 0; x < 2 && y < 5; ++x, y++)
{
printf("呵呵\n");
}
return 0;
}
2.2.3 for循环练习
int main()
{
int i = 0;
int k = 0;
for (i = 0, k = 0; k = 0; i++, k++)
{
k++;
printf("呵呵");
}
return 0;
}
此段代码无打印结果,因为条件判断语句中的"="是赋值,并非判断,所以循环0次
2.3 do...while()循环
2.3.1 表达式
do
循环语句
while(表达式);
2.3.2 do语句的特点
循环至少执行一次,使用的场景有限,所以不经常使用
3. goto语句
goto语句不能跨函数跳转
C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。
从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。
但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程
goto语言真正适合的场景如下:
for(...)
for(...)
{
for(...)
{
if(disaster)
goto error;
}
}
…
error:
if(disaster)
// 处理错误情况
4. 关于getchar putchar
4.1 getchar 获取一个字符
int main()
{
int ch = getchar();
putchar(ch);
return 0;
}
4.2 putchar 打印一个字符(%s)
int main()
{
int ch = 0;
while ((ch = getchar()) != EOF)
{
putchar(ch);
}
return 0;
}
当需要输入多组数据时
while(scanf("%d",&ch)!=EOF)
while(scanf("%d",&ch)==1)
while(~scanf("%d",&ch))
两个字符串的比较应该使用"strcmp",而不是"=="
eg: strcmp(password,"abcd")==0;