一、什么是C语言?
C语言是一门 结构化 的程序设计语言。
二、C语言有哪些结构?
在我们生活中有三种结构:
1.顺序结构:从开始一直到结束,按部就班的完成任务;
2.选择结构:开始后会面临多种情况需要进行判断,做出选择,每个选择都可能产生不同的结果;
3.循环结构:开始后会因为某些原因,需要一只重复去做一件事,除非中途出现了其它的情况不得不停止,否则会一直持续到完成某种条件才能停止。
三、语句
(一)什么是语句?
在C语言中,由一个分号";"隔开的,就是一条语句
1.分类:
C语句可分为以下五类:
(1)表达式语句;(2)函数调用语句;(3)控制语句;(4)复合语句;(5)空语句;
本篇介绍的是控制语句。
2.控制语句:
定义:用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,C语言有九种控制语句。
分类:
1.条件判断语句也叫分支语句:if语句、switch语句;
2.循环执行语句:do while语句、while语句、for语句;
3.转向语句:break语句、goto语句、continue语句、return语句。
(二)分支语句
在C语言中,选择结构的体现就是选择语句,也叫分支语句。在初识C语言中我们有提到过,如果你选择……你就能……;否则,你就会……;这个就是选择!当然有时候我们的选择不一定只有两种,可能还会出现三种及以上的情况,这些都是选择。下面我们来介绍一下在计算机里是如何描述这些选择的。
if语句:
//if语句语法结构;
//单if语句;
if (表达式)//表达式结果为真,则执行语句,否则,不执行;
{
语句;
}
//if ……else语句;
if (表达式)//表达式结果为真,则执行语句1;
{
语句1;
}
else//表达式结果不为真,则执行语句2;
{
语句2;
}
//if……else if……else多分支语句;
if (表达式1)//表达式1结果为真,则执行语句1;
{
语句1;
}
else if (表达式2)//表达式2结果为真,则执行语句2;
{
语句2;
}
else//表达式1/2结果都不为真,则执行语句3;(注:可以省略)
{
语句3;
}
练习:输出1~100之间的奇数;
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int main()
{
for (int i = 1; i <= 100; i++)
{
if (i % 2 == 1)//判断i/2的余数是否为1,建议写成(1 == i % 2);
{
printf("奇数:%d\n", i);//输出1~100之间的奇数;
}
/* else
{
printf("偶数:%d\n", i);//输出1~100之间的偶数;
}*/
}
return 0;
}
补充知识点:
1.在C语言中判断真假:0为假,非0为真;
2.在if语句中判断对象有3个及以上的话,不能直接写为a>b>c这种形式,因为此时计算机的运行顺序是先判断啊a>b,结果为真则判断1>c,这里的1就是a>b的判断结果,结果为假,则判断0>c,这里的0就是a>b的结果,所以我们应该采用逻辑操作符来进行描述,如:a>b && b>c;
3.判断对象如果是变量和常量之间的判断,建议写成常量判断变量,如i == 5可以将这个表达式写成5 == i;
4.在if语句中,如果判断为真时,执行的语句只有一项,则代码块也就是大括号{}可以省略,有多项执行语句时,需要加上代码块,如:
//单个语句需要执行;
if (condition)//condition——条件
语句1;
//多个语句需要执行;
if (condition)
{
语句1;
语句2;
……
}
建议大家不管是要执行一个语句还是执行多个语句,都要加上代码块,养成良好的编码习惯;
5.在if语句中,else遵循就近原则,这里的就近是指离else最近的且未被搭配的if进行搭配:
//else遵循就近原则
if (condition1)//在此情况下,没有对应的else与之搭配;
if (condition2)//在此情况下,下面的else与之搭配;
语句1;
else//在此情况下,else与第二个if搭配;
语句2;
这种结构叫做if嵌套,将第二个if语句嵌套在第一个if语句内,这里我们举例来进一步理解:
这里我们可以看到,第一个else与第二个if在同一列,第二个else与第一个if在同一列,这个语句翻译过来就是:如果在满足a>b的前提下,还满足b>c,则打印min=c,如果在满足a>b的前提下不满足b>c,则打印min=b;如果不满足a>b的前提,则打印无法判断。
6.在多分支语句中,else可以省略:
//多分支语句可以省略else
//双分支语句
if (condition)
{
语句1;
return 0;
}
语句2;
//三分支及以上语句1
if (condition1)
{
语句1;
return 0;
}
else if (condition2)
{
语句2;
return 0;
}
语句3;
//三分支及以上语句2
if (condition1)
{
语句1;
}
else if (condition2)
{
语句2;
}
这里我们举几
个例子分别来验证一下:
双分支语句:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int main()
{
int x = 3, y = 2;
if (x > y)
{
printf("max=%d\n", x);
return 0;
}
printf("max=%d\n", y);
return 0;
}
这里我们可以看到,此时if语句正常执行,else被省略。下面我们来看看多分支语句:
多分支循环1:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int main()
{
//比较三个数的大小
int a = 2, b = 1, c = 3;
if (a > b && b > c)
{
printf("max=%d\n", a);
printf("a>b>c");
return 0;
}
else if (a > c && c & b)
{
printf("max=%d\n", a);
printf("a>c>b");
return 0;
}
else if (b > a && a > c)
{
printf("max=%d\n", b);
printf("b>a>c");
return 0;
}
else if (b > c && c > a)
{
printf("max=%d\n", b);
printf("b>c>a");
return 0;
}
else if (c > a && a > b)
{
printf("max=%d\n", c);
printf("c>a>b");
return 0;
}
printf("max=%d\n", c);
printf("c>b>a");
return 0;
}
这里我们可以看到,程序正常比较三个数的大小,并且最后一种可能也没有因为省略了else而打印,下面我们再来看最后一种情况:
这里我们是把最后一种情况用else if来表示出来,最后并未使用else,程序正常比较3个数的大小。
现在我们来对可以省略else的情况做个总结:
1.在多分支语句中,如果执行语句里带有转向语句如return语句,则不满足判断条件需要执行else语句时,else可以省略;
2.在多分支语句中,在不需要用到else判断条件的情况下,可以省略else。