1、变长数组
C99 标准
C99之前,数组的大小不能使用变量;
但在C99中引入了变长数组的概念,
这时候数组的大小是可以使用变量的,
但是数组不能初始化;
2、什么是语句
C语句可分成以下五类:
1、表达式语句
2、函数调用语句
3、控制语句
4、复合语句
5、空语句
下面解决介绍一下控制语句
控制语句用于控制程序的执行流程,
以实现程序的各种结构方式 (C语言支持三种结构:顺序结构、选择结构、循环结构),
它们有特定的语句定义符组成,C语音有九种控制语句。可以分成以下三类:
1.条件判断语句也叫分支语句:if语句、switch语句;
2. 循环执行语句:do while语句、while语句、for语句;
3. 转向语句:break语句、goto语句、continue语句、return语句。
3、C语言的一些介绍
C语言是一门结构化的程序设计语言
C语言支持三种结构
1、顺序结构
2、选择结构
3、循环结构
4、分支语句(选择结构)
如果你好好学习,校招时拿一个好offer,走上人生巅峰。
如果你不学习,毕业等于失业,回家卖红薯。
这就是选择!
4.1 if 语句
if 语句的语法结构:
//单分支
if(表达式)
语句;
//双分支
if(表达式)
语句1;
else
语句2;
//多分支
if(表达式1)
语句1;
else if(表达式2)
语句2;
else if(表达式3)
语句3;
……
else
语句n;
补充 悬空else语句:
//代码1
int main()
{
//else 会跟离它最近的 if 语句结合
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
上面的代码1 可以写成下面的 代码2
//代码2
int main()
{
//else 会跟离它最近的 if 语句结合
int a = 0;
int b = 2;
if(a == 1)
{
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
}
return 0;
}
上面的 代码1 和 代码2 的结果是一样的,都是在控制台上什么都不输出!
4.2 switch语句
switch语句也是一种分支语句。
常常用于多分支的情况。
- 语法
switch(整型表达式)
{
case 1://case 和 1 之间是有空格的哦
语句项;
case 2://case 和 2 之间是有空格的哦
语句项;
……
case n://case 和 n 之间是有空格的哦
语句项;
default :
语句项;
}
提示
- default语句的位置可以随意, 但最好还是放到最后(具体的要结合题意来)
case 决定入口
break 决定出口
break语句 的实际效果是把语句列表划分为不同的分支部分。
下面举一个栗子来了解 switch 语句的用法
比如:
输入1,输出星期一
输入2,输出星期二
输入3,输出星期三
输入4,输出星期四
输入5,输出星期五
输入6,输出星期六
输入7,输出星期日
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
printf("星期一\n");
break;//跳出switch语句
case 2:
printf("星期二\n");
break;//跳出switch语句
case 3:
printf("星期三\n");
break;//跳出switch语句
case 4:
printf("星期四\n");
break;//跳出switch语句
case 5:
printf("星期五\n");
break;//跳出switch语句
case 6:
printf("星期六\n");
break;//跳出switch语句
case 7:
printf("星期天\n");
break;//跳出switch语句
//当在控制台输入的数字不在上面的 1 ~ 7 之间的话,执行 default语句
default:
printf("选择错误\n");
break;//跳出switch语句
}
return 0;
}
输出结果
-
在控制台输入1
-
在控制台输入2
-
在控制台输入8
补充:
如果在一个switch语句中没有break语句,
即使 case 语句有满足switch(整型表达式)中的整型表达式,
还是会执行switch语句中的default 语句。
下面举一个栗子
int main()
{
int num = 2;
switch (num)
{
case 1:
num++;
case 2:
num++;
case 3:
num++;
default :
num++;
}
printf("num = %d\n", num);
return 0;
}
输出结果是:
5、循环语句
C语言中的循环语句的使用频率比较
for 循环 > while 循环 > do while 循环
5.1 、while循环
我们已经掌握了,
if 语句:if (条件) { 语句; }
当条件满足的情况下,if语句后的语句要么执行,否则不执行。
但是这个语句只会执行一次。
由于我们发现生活中很多的实际的例子是:同一件事情我们需要完成很多次。
那我们怎么做呢?
C语言中给我们引入了:while语句,可以实现循环。
- 语法
while(表达式)
{
循环语句;
}
下面举一个栗子
//使用 while 循环在屏幕上打印 1~10 的数字
int main()
{
//定义一个初始变量 n = 1
int n = 1;
while (n <= 10)
{
//每次循环,打印对应的 n 值
printf("%d ", n);
// n 自增 1
n++;
}
return 0;
}
- 输出结果
- break语句在while循环中的作用
break在while循环中只要遇到 break,
就停止后期的所有的循环,直接终止循环。
所以:while中的break是用于永久 终止循环的。
- continue语句在while循环中的作用
continue是用于终止 本次循环 的,
也就是本次循环中continue后边的代码 不会再执行,
而是直接跳转到while语句的判断部分,进行下一次循环的入口判断。
5.2 、for 循环
我们已经知道了while 循环,
但是我们为什么还要一个for 循环呢?
首先来看看for循环的语法:
- 语法:
for(表达式1;表达式2;表达式3) { 循环语句; }
表达式1
表达式1为 初始化部分,用于初始化循环变量的。
表达式2
表达式2为 条件判断部分,用于判断循环是否终止。
表达式3
表达式1为 调整部分,用于循环条件的调整。
下面举一个栗子
//使用for循环在屏幕上打印 1~10
int main()
{
//定义一个迭代循环变量 i
int i = 0;
for (i = 1; i <= 10; i++)
{
//每次循环,打印对应的 i 值
printf("%d ", i);
}
return 0;
}
输出结果
break和continue在for循环中的意义
我们发现在for循环中也可以出现break和continue,
它们的意义和在while循环中是一样的。
但是还是会有一些差异的
5.3 、do while循环
- 语法
do
{
循环语句;
}while(表达式);//分号不要忘记了哦!!!
下面举一个栗子
//使用do while循环在屏幕上打印 1~10
int main()
{
//定义一个迭代循环变量 i
int i = 1;
do
{
//每次循环,打印对应的 i 值
printf("%d ", i);
// i 自增 1
i++;
} while (i <= 10);
return 0;
}
输出结果
- 特点
循环至少执行一次,使用的场景有限,所以不是经常使用。
6、getchar、putchar 函数的一些介绍
- getchar、putchar只针对字符
ch = getchar();//读取一个字符,并且赋值给变量 ch
putchar(ch);//输出一个字符到屏幕上
7、scanf 、printf 函数的一些介绍
scanf 按照指定的格式,输出数据
printf 按照指定的格式,输出数据
补充 这里的格式即是 对应的占位符
如:%d 、%f、 %s 等等
(具体的占位符的介绍,请翻看我之前发的博客的初识C语言3)
8、strcmp函数
判断两个字符串是否相等,
要使用strcmp函数,不能直接使用 ==(这里是两个等于号!!!)
如果第一个字符串小于第二个字符串,返回 <0 的数字
如果第一个字符串大于第二个字符串,返回 >0 的数字
如果第一个字符串等于第二个字符串,返回 0
(需要引入头文件 #include<stdlib.h> 和 #include<string.h>
9、goto语句(goto语句只能在同一个函数内部跳转,不能跨函数跳转!!!)
C语言中提供了可以随意滥用的goto语句和标记跳转的标号。
从理论上goto语句是没有必要的,
实践中没有goto语句也可以很容易的写出代码。
但是某些场合下,goto语句还是用得着的,
最常见的用法就是终止程序在某些深度嵌套的结构的处理过程。
例如:一次跳出两层或多层循环
多层循环这种情况使用break是达不到目的的
它只能从最内层循环退出到上一层的循环。
而 goto语句 就可以完成!!!
- goto语言真正适合的场景如下:
//第一层
for(……)
{
//第二层
for(……)
{
//第三层
for(……)
{
if(disaster)
goto error;
}
}
……
}
error:
if(disaster)
//处理错误情况
补充说明 goto语句在C语言中的使用频率不高!!!