程序控制结构
1. 三种基本结构
- 顺序结构
- 选择结构
- 循环结构
2. 关系,逻辑,条件的相关语句
关系运算符
六个: < <= == > >=
注:在C语言中,==表示相等,=表示赋值,勿混淆
关系表达式
在C语言中,用 1 表示表达式为真,用 0 表示表达式为假
如:
- 表达式: 8>4 为真,值为1
- 表达式: 0==1 为假,值为0
这里引入一种语句: 条件运算符
写为:?:
如:
int a, b, x;
scanf("%d %d", &a, &b);
x = a > b ? a : b;
上述语句表示:
若a>b,则x=a,反之,则x=b
逻辑运算符
三个: ! && ||
分别表示:非,与,或
逻辑表达式
对于 ! 表达式,会对该表达式求值,以该值的否定为结果
对于 && 表达式,会对两侧表达式分别求值,只有两侧表达式值均为1时,整个表达式值才为1,否则均为0
对于 || 表达式,会对两侧表达式分别求值,只有两侧表达式值均为0时,整个表达式值才为0,否则均为1
短路特性(重点关注)
逻辑表达式求值时,只有系统判定必须计算下一个运算符才能得出表达式的值时,才会进行计算 (多绕的慌啊)
举个例子:
int a, b, c, x;
scanf("%d %d %d", &a, &b, &c);
x = a && b && c;
当上述例子输入时,第一个数值(即a的值)输入0时,则不会计算b && c这一部分的值,而会直接将x的值赋值为0
3. 顺序结构程序设计
自上而下,逐行运行
主要由以下部分组成:
- 赋值语句
- 复合语句
- 函数调用语句
赋值,函数调用在前面的章节已经有过叙述,这里仅对复合语句做简要说明
复合语句指一组语句,可以由 {} 框在中间
4. 选择结构程序设计
选择结构需要利用此前的关系,逻辑表达式来阐述条件
两种常用语句: if ; switch
if 语句
有三种形式:
- if:条件成立后执行
- if-else:条件成立则执行if后的语句,反之则执行else后的语句
- else-if:用于增加if-else中的条件个数
最完备的一种情况:
if(条件1){
表达式1;
}
else if(条件2){
表达式2;
}
...
else(条件n){
表达式n;
}
switch 语句
用于实现多分支选择结构
switch(variable){
case E1:
...
...
break;
case E2:
...
...
break;
...
default:
...
}
简而言之,通过对variable(即变量)的值进行判断从而决定要执行的语句
当variable==E1时,执行case E1中的语句
后续同理
如果variable的值不等于其中的任意一个case,则执行default中的语句
注:
- 执行语句时,只有遇到 break 或 } 才会终止,故这里推荐在每一个case后均加上break
- default并不是必须的,如果不加default,则variable不符合要求时不会执行任何语句
- variable不仅仅可以是数值,也可以是字符形式
5. 循环程序结构设计
与选择结构类似地,同样需要利用关系、逻辑表达式进行条件的阐述
常用语句: while ; for ; do-while
while 语句
while(condition){
...
...
}
即:当condition为真(即condition非零)时,执行while内语句,执行完毕后重新判断condition,直至condition为假
注:
当执行语句时遇到诸如 break ; return ; goto 之类的语句时,会跳出while循环
for 语句
for(expr1 ; expr2 ; expr3){
...
...
}
这里需要做出一点说明:
- expr1 表示初始条件
- expr2 表示需要满足的条件
- expr3 表示每次执行完一次语句后要做出的改变
给出一例方便理解:
for(i=0;i<=50;i++){
...
...
}
上述语句表示:i 的初始值为0;每次执行完语句后 i 自增1,直到 i 大于五十时结束循环
注:
- for结构中每个表达式都可以省略,但分号不可省略
- for结构和while结构可以互相转化,下属while语句与上述for语句等价
expr1; while(expr2){ ... ... expr3; }
- 特殊语句同样可以跳出for循环,如 break ; goto ; return 等
do-while 语句
do{
...
...
}while(condition);
与 while 的区别在于这种语句会先将语句执行一遍再判断
循环中的常见问题
- 循环可以相互嵌套,但一般不超过三层(会极大降低运行效率)
- 一般不用浮点数对循环进行控制,原因是浮点数存在误差,容易增减循环次数
以上
这篇博文就到这里~