C中的逻辑控制语句其实还是基本的那么几个,与python相比,多了switch语句和goto语句.作为pythoner这部分其实没啥可讲,这边只列出形式.
for(exp1;exp2;exp3){
代码块
}
- exp1 一般是变量初始化,注意变量需要先声明,标准c语言不允许在exp1中直接声明变量,但其实很多编译器已经支持这种写法
- exp2 用于判断是否停止循环,如果为为true则执行下面的代码块,否则不执行并且语句结束
- exp3 如果exp2为true,则在执行完代码块后执行exp3,然后进入下一循环
while(exp){
代码块
}
- exp 判断其是否为真,如果是则循环结束,否则进入代码块执行,然后进入下一循环
do{
代码块
}while(exp);
- 先执行do中代码块
- 在判断while中表达式,如果为真则循环结束,否则继续循环执行do中代码
和python中一样,我们也可以用break和contiue来中断循环.规则也相同
例: 牛顿法求2开根
python版本
EPS = 0.00001
a = 2
X = a/2.0
lastX = 0
while(abs(X - lastX) > EPS ):
lastX = X
X = (lastX+float(a/lastX))/2
print(X)
1.4142135623746899
C版本:
#include <stdio.h>
#include <math.h>
const double N = 2.0;
double sqrt_my(double a,double EPS){
double x,last_x;
x = a/2;
do{
last_x = x;
x = (last_x + a/last_x)/2;
}while(fabs(last_x - x) > EPS);
return x;
}
int main(void){
printf("根号2是%lf\n",sqrt_my(N,0.0001));
return 0;
}
if(exp1){
代码块
}else if(exp2){
代码块
}else{
代码块
}
这个和python的差不多
switch在python中被去掉了,主要也是因为它与if语句功能重复,不过swtich还是有用的,可以让代码看起来干净不少
switch(exp){
case 常量表达式1:
语句组1
break;
case 常量表达式2:
语句组2
break;
case 常量表达式3:
语句组3
break;
default:
语句组4
}
case是可以贯通的,如果case下面没有break,则它会穿到下一个break之上的位置才执行结束.
goto就厉害了,这个体现了c对底层的支持,它表示无条件跳转,用法是用label:
标记要跳转的位置,然后goto label
就可以了
这个语句是汇编语言的常用语句,用好了很牛,用烂很烂,建议不要滥用.
大致有这么两个使用场景:
多层循环嵌套代码会很难以维护,这时候可以考虑使用goto.
#include <stdio.h>
#include <math.h>
int complex_loop(void){
for (int i=1;i<100;i++){
for(int j=1;j<100;j++){
if(i*j==200){
goto outA;
}
}
}
goto outB;
outA: return 1;
outB: return 2;
}
int main(void){
printf("结果是%d\n",complex_loop());
return 0;
}
结果是1
这种尤其在异常处理时比较好用.
int func(){
int res = 0;
if(!){
goto func_return_fail;
}
if(!func_step2()){
goto func_return_fail;
}
func_return_normal:
UnlockSomething();
return res;
func_return_fail:
res = -1;
UnlockSomething();
return res;
}