
大概了解
首先,我们先了解下。在C语言里,什么是分支和跳转。
首先分支,就像是你玩一个款游戏,游戏里有个主线任务,做这个主线任务,是让你了解整个游戏的故事和背景(当然,你们做主线任务是为了经验和游戏币)。
再做一个主线任务时,游戏的NPC会突然给你两个选择,第一个选择是救女友,另有一个任务是救父亲。(应该没有那么脑残的游戏公司会这样做,会挨骂。)。
不管哪个任务都会影响接下来的任务,也有可能游戏开放商会把结局都设为一样,只是分支过程不一样。这就是分支的大概解释。
而跳转,这种就是游戏任务的过程中,都是在一个大地图进行跑来跑去。但是,地图越大,占用的电脑内存就越大,所以游戏开发商就会把另外的地图弄在另一个地方,可能这句话你们不理解。就是说,游戏的副本。这个玩过游戏的都知道吧。他会给你切换画面跳转到另一个地方,就是这个副本进行打怪打BOSS。这个副本,就是从游戏本来的界面,跳转到副本界面。这就是跳转的大概解释。
————————————————————————————
分支,在C语言都有:
if判断语句(也叫如果)
大概救这三个,首先 我们说说if:
int a=10,b=9,max=0;
if(b<a)
{
max=a;
}
这段呢,可以说,如果b小于a,那么max最大值是a;
if else判断语句(也叫如果……再如果)
而if else:
int a=10,b=9,max=0;
if(a<b)
{
max=b;
}
else
{
max=a;
}
这段就是,如果a小于b,第一个if分支判断不成立,不成立它就不执行,再跳到else,得到最大值是a;
if else 也可以这样:
int a = 10, b = 9, c = 8, max = 0;
if (a < b)
{
max = b;
}
else if (a < c)
{
max = c;
}
else if (b < c)
{
max = c;
}
else if (c < b)
{
max = b;
}
else if (c < a)
{
max = a;
}
if else可以一直这样顺序判断分支下去,直到判断正确为止,但这里面有一个问题,为什么得出的答案是b而不是a?因为我们刚才说了,顺序判断正确后,if判断分支就结束。哪怕后面在怎么对,也是结束在正确的第一个判断。
那如何能让他得出最正确的答案呢?
逻辑运算判断
那就是逻辑运算判断:&&,||,!=
这三个的分别叫法是,与,或,非。
我们先来了解 与 &&
int a = 10, b = 9, c = 8, max = 0;
if (a < b && c < b)
{
max = b;
}
else if (a < c && b < c)
{
max = c;
}
else if (b < a && c < a)
{
max = a;
}
与逻辑运算,是两个一起做判断,如果两个都正确,那答案就是这个。如果两个判断中,一个对,但另一个错,这个答案就不成立,就跳过继续下一个判断。
就比如上面这段的解释就是:如果a小于b与c小于b判断,a小于b不成立,这个就直接跳过不成立,在继续判断下一个。在如果a小于,c与b小于c判断,a小于c,不成立,这个在跳过,继续下一个判断。在如果b小于a与c小于a判断,b小于a成立与c小于a成立,答案就是这个判断。
然后就是 或 ||
if (c>b | | c>a)
{
max = c;
}
else if (b > a | | b > c)
{
max = b;
}
else if (a > b | | a > c)
{
max = a;
}
这个肯能会有人会说,答案不对,不应该是a吗?,真正的答案是a没错,但这个或运算符就是如果两个判断里,有一个对,就成立,就不管另一个对不对,哪怕另一个不对,这个答案它也成立。
我们解释下上面的逻辑,如果c大于b或c大于a判断,c大于b不成立,c大于a也不成立,继续下一个判断。在如果b大于a或b大于c判断,b大于a不成立,但b大于c成立,答案得出,判断分支全部结束。这个b就是答案了。正如我们刚才所说,这个分支判断,是顺序判断下来,哪里对了,就到哪里。
在然后是 非 !=
int password = 456123, input = 0;
while (input != password)
{
scanf_s("%i", &input);
printf("密码错误,重新输入\n");
}
printf("密码正确\n");
这个假装是一个密码登录判断,如果你输入的input不是456123,就一直循环让你重复输入,直到你输入的是456123正确之后,跳出循环。这个只是简单的密码输入逻辑判断,真正没人这么做。。。。
逻辑运算符,还有一个也很常用,而且它的逻辑运算速度更快,准,狠。
我暂且称它为 如果,则 ?:
int a = 10, b = 9,max = 0;
max=a<b?a:b;
我们先不说答案,我们先解释下这个逻辑语句a<b?a:b;。意思是:如果a小于b?成立的话则是a:不成立的话则是b;
好了,我们再来说说答案,a小于b成立吗?不成立,不成立的话,就跳到b。所以max是b;如果按正常思维来说,a才是最大值,但我们是在了解C语言逻辑判断,没人跟你谈什么是最大值。。。。逻辑,,逻辑。。逻辑!!重要事情说三遍。
————————
跳转,逻辑跳转
最后,我们说说分支跳转。
说到跳转,我们要先了解一个类似循环switch。
int num = 0, num1 = 0, mid = 10;
scanf_s("%i%i", &num, &num1);
if (num && num1 > 10)
{
return main();
}
switch (num + num1)
{
case 10:
printf("数字10\n");
case 20:
printf("数字20\n");
case 15:
printf("数字15\n");
default:
printf("其他数\n");
}
这一段我们要注意个,switch类似一个开关,你选择几,他就跳到几。那我们在这里设置了输入两个数字。两个数字都不能大于10,比如,我们随便输入两个5.得出的答案是10,第一个case 10:的答案,(注意,这个case的代码是case 空格 在一个常量数字,一定要常量,不能做判断也不能做计算,再然后一个:冒号)
但有没有发现,我们得出的第一个答案后,第二个,第三个答案也跟着跳出来了?这是因为switch也算是一个循环,如果没有一个关键因素来断停的话,他就会把答案一股脑儿都发出来,这时就用到了。
break,是switch的黄金搭档。如果我们子上面的switch设置一下:
int num = 0, num1 = 0, mid = 10;
scanf_s("%i%i", &num, &num1);
if (num && num1 > 10)
{
return main();
}
switch (num + num1)
{
case 10:
printf("数字10\n");
break;
case 20:
printf("数字20\n");
break;
case 15:
printf("数字15\n");
break;
default:
printf("其他数\n");
break;
}
这下可以了,直接得到答案后就断停,不在继续一股脑儿乱发出来。
再来说说 continue;
int num = 0;
while (num < 10)
{
num++;
if (num == 5)
{
continue;
}
printf("%i\n", num);
}
有木有发现,5不见了?因为continue的原因,如果num在循环到5时,num就会判断和5相等,直接跳过,继续下一个。
除了break和continue,还有goto等,但只要break和continue就可以,因为goto这些属于不安全因素,不学也罢,若想了解,可以先做个简单点的代码试一试。