C语言中的条件赋值语句和if——else语句执行效率比较,哪一个效率高些,坐等高手解惑

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中的条件赋值语句和if——else语句执行效率比较,哪一个效率高些,坐等高手解惑相关的知识,希望对你有一定的参考价值。

比如说下面语句:
if(EngSB_flag==1) EngSB_count++;

else EngSB_count=0;
这是采用的if——else结构写的,现在由于执行效率问题,我想优化一下,于是改成下面所示的条件赋值语句:
EngSB_count=EngSB_flag ? (EngSB_flag+1):0;

两者的效果一样,所以就想问问哪一种形势的执行效率高一些,谢谢!

一、条件语句和if else的效率一样
二、x++的效率比x=x+1要高,只是理论上,实际现在的机器性能很好,这个差异一般无法体现

综上所述,你上面的语句,用if else的效率要高。追问

谢谢你,再问一下,貌似所有的条件赋值语句都可以用if else替换,如果if else好些的话,为什么还存在条件赋值这个语法呢,这个条件赋值存在的意思是什么呢?我想它肯定有它特定的意义。

追答

一、再次强调,一般情况下,条件语句与if的效率相同,我任何时候没有说过if的高
二、条件语句表达简单

三、这个效率的差异没必要计较

参考技术A 比如说下面语句:
if(EngSB_flag==1) EngSB_count++;

else EngSB_count=0;
这是采用的if——else结构写的,现在由于执行效率问题,我想优化一下,于是改成下面所示的条件赋值语句:
EngSB_count=EngSB_flag ? (EngSB_flag+1):0;

两者的效果一样,所以就想问问哪一种形势的执行效率高一些,谢谢!
参考技术B 下面说了,我来做任务。。 参考技术C 可以看看生成的汇编代码,再分析,估计生成的代码都是一样的。不过这种优化优化不了多少,可能编译器已经给你优化了,还是想想在其他地方优化或者其他方法优化吧

C语言判断和循环介绍

一.判断介绍

判断是C语言最常用的语法之一,判断是满足某种条件时,执行对应语句的一种语法结构。

下面介绍工作中最常用的几种类型的判断语句

语句介绍使用场景
if由一个布尔表达式后跟一个或多个语句组成。需要满足某种单个条件时,执行的语句。
if…else一个 if 语句加上可选的 else 语句。满足if条件时执行一种语句,不满足if条件时执行的另一种语句。
if…else if…else一个 if 语句加上可选的 else if 语句,再加上else 语句。存在三种及三种以上条件时需要执行对应的语句,最后的else是所有条件都不满足时,需要执行的语句。
switch语句一个 switch 语句由一个switch表达式满足表达式case执行的语句和一个default执行语句组成。存在三种以上不同的变量条件时,执行符合表达式case的后面的语句当表达式的值与所有case后面的常量表达式的值都不相等时,执行default后面的语句

二.实例演示

if…else
判断一个数是否是正数

#include <stdio.h>
bool IfPositiveNumber(int x);
bool IfPositiveNumber(int x)

	if (x > 0) 
		printf("这个数为正数! \\n");
		return true;
	
	printf("这个数不是正数! \\n");
	return false;


int main()

	if (IfPositiveNumber(-1))
		printf("条件为真! \\n");
	else
		printf("条件为假! \\n");
	return 0;

if…else if…else

int main()

	int a = 0;
	if(a>0)
		printf("这个数是正数! \\n");
	else if(a<0)
		printf("这个数是负数! \\n");
	else
		printf("这个数是0! \\n");
	return 0;

三.switch语句介绍

为什么要使用switch语句?

语句结构可读角度:
1、switch语句是多分支选择语句.用来实现多分支选择结构.if语句只有两个分支可供选择,而实际问题中常常要用到多分支的选择。
2、这些都可以用嵌套的if语句来外理(if else if else),但如果分支较多,则嵌套的if语句层数多,程序沉余长而且可读性降低.C语言提供switch语句直接外理多分支选择。

如何使用switch语句?
switch语句格式:

switch (表达式)

	case '常量表达式 1':	
		语句 1
	case '常量表达式 2':	
		语句2
	...
	case '常量表达式 n':	
		语句n
	default:
		语句 n+1

switch使用注意点
先看一个例子
举例:

int main()

	char grade = 'B';
	switch (grade)
	
		case 'A':
			printf("85-100\\n");
		case 'B':
			printf("70-84\\n");
		case 'C':
			printf("60-69\\n");
		case 'D':
			printf("<60\\n");
		default:
			printf("error\\n");
	

这是一个根据等级来输出分数区间的例子。

注意点:
(1) switch括号内的"表达式",允许它为任何类型
(2) 当表达式的值与某一个case后面的常量表达式的值相等时,就执行此case后面的语句,若所有的case中的常量表达式的值都没有与表达式的匹配的,就执行default后面的语句。
(3) 每一个case的常量表达式的值必须互不相同,否则就会出现互相矛盾的现象。
(4) 各个case和default的出现次序不影响执行结果。例如,可以先出现"default: …",再出现"case ‘C’: …",然后是"case ‘A’: …"
(5) 重要:执行完一个case后面的语句后,流程控制转移到下一个case继续执行."case常量表达式"只是起语句标号作用,并不是在该处进行条件判断.在执行swith语句时,根据switch后面表达式的值找到匹配的入口标号,就从此标号开始执行下去,不再进行判断。

所以,以上的结果是

若想执行符合的语句后就停止执行,需要加上break。

char grade = 'B';
	switch (grade)
	
		case 'A':
			printf("85-100\\n");
			break;
		case 'B':
			printf("70-84\\n");
			break;
		case 'C':
			printf("60-69\\n");
			break;
		case 'D':
			printf("<60\\n");
			break;
		default:
			printf("error\\n");
	

四.循环介绍

循环在各种语言中的使用也是非常多,主要的用途在于处理大量数据、遍历、长稳运行(重复运行)等等。
在C语言中,可以使用三种循环方式

语句说明
for多次执行一个语句,简化写代码的次数。
while当while中的条件为真时,反复执行while中的语句,直到条件语句不再符合。
do…while在循环主体的结尾进行条件判断,其余和while类似。

for循环

int main()

	for (int i = 0; i < 100; i++)
	
		if (i % 2 == 0)
			printf("i=%d\\n",i);
	
	return 0;

注意:for 循环头部中的三个表达式可以省略一个或多个。这意味着 for 循环头部最短的形式是:for ( ; ; )

while

int main()

	int i = 0;
	while (i < 100)
	
		if (i % 2 == 0)
			printf("i=%d\\n", i);
		i++;
	
	return 0;

注意:
一般来说,当循环内有计数器或索引变量需要被初始化,并且在每次循环时需要调整它们的值时,最好使用 for 循环,而不是 while 循环。

do…while

int main()

	do
	
		if (i % 2 == 0)
			printf("i=%d\\n", i);
		i++;
	 while (i < 100);
	return 0;

注意:
1.do…while格式中,在最后的while()后要加上;
2.在控制表达式被第一次计算之前,循环体语句会首先被执行一次与 while 和 for 循环不同,do…while 循环会确保循环体语句至少执行一次。如果控制表达式的值为 true,那么另一次循环就会继续;如果是 false,则循环结束。

以上三个例子都是输出100以内的偶数。

感谢阅读!!!

以上是关于C语言中的条件赋值语句和if——else语句执行效率比较,哪一个效率高些,坐等高手解惑的主要内容,如果未能解决你的问题,请参考以下文章

R语言中的if else语句

C语言里面if 和else的用法?

c语言中if语句条件为赋值语句

if else语句,条件语句,执行的数序

求一些C语言if嵌套语句算法题

C语言速查手册:分支语句(Decision Making)