笔试题:简述以下两个for循环的优缺点

// 第一个
for (i=0; i++;)
{
if (condition)
DoSomething();
else
DoOtherthing();
}优点:程序简洁缺点:多执行了N-1次逻辑判断,并且打断了循环“流水线”作业,使得编译器不能对循环进行优化处理,降低了效率。每一次循环里都有比较,增加了程序空间复杂度

// 第二个
if (condition)
{
for (i=0; i++;)
DoSomething();
}
else
{
for (i=0; i++;)
DoOtherthing();
}优点:循环的效率高,代码相比第一个复杂一点,但循环里没有比较,降低了空间复杂度。
缺点:程序不简洁

1.效率低但程序简洁
2.效率高但程序不简洁
1的程序比2多执行了N-1次逻辑判断。并且由于前者老要进行逻辑判断,打断了循环“流水线”作业,使得编译器不能对循环进行优化处理,降低了效率。如果N非常大,最好采用2的写法,可以提高效率。如果N非常小,两者效率差别并不明显,采用1的写法比较好,因为程序更加简洁。

一个是在for循环加入判断语句 使得循环不连续 增大运行时间
另一个是在判断后执行for循环 虽然没有打断循环连续 但代码增加 
如果是同样的逻辑的话 建议不在for循环中加判断

其实这个就是循环内层和外层的大小的问题,C/C++编程规范里面的

时间: 2024-11-06 07:32:39

笔试题:简述以下两个for循环的优缺点的相关文章

C语言笔试题精选1---求两个数之间较大的数,不使用if、while、switch、for、?:/以及任何比较语句

题目:求两个数a.b之间较大的数,不使用if.while.switch.for.?:/以及任何比较语句 #include <stdio.h> int min(int a, int b) { int d = a - b; int flag = ((unsigned int)d) >> 31; int array[] = {b, a}; return array[flag]; } int main(int argc, char *argv[]) { int i_min, a, b; s

阿里笔试题:求两个子序列的最大连续子序列

原题例如以下: 给定一个query和一个text,均由小写字母组成.要求在text中找出以相同的顺序连续出如今query中的最长连续字母序列的长度.比如.query为 "acbac",text为"acaccbabb",那么text中的"cba"为最长的连续出如今query中的字母序列,因此.返回结果应该为其长度3.请注意程序效率. 解题方法一: 和字符串匹配一样(http://blog.csdn.net/sinat_24520925/articl

笔试题:用两个栈实现队列

#include <iostream> #include <stack> using namespace std; template<typename T> class QUEUE { public: QUEUE(){} ~QUEUE(){} void APPEND(const T val) { while(st2.empty()==false) { //我们只用st2保存数据,st1作为中间交换桥梁. //首先将st2中的数据逆序保存在st1中. st1.push(s

笔试题:由两个栈构造min栈

#include <iostream> #include <stack> using namespace std; template<typename T> class Min { public: void PUSH(T val) { T temp = val; st1.push(val); if (st2.empty() == true) { st2.push(temp); st1.push(temp); } else { st2.pop(); while (st1.

C++笔试题经典的两个

//实现一个自己版本的string. #include <iostream> #include <string.h> using namespace std; class String { public: String(const char *s = "") { str = new char[strlen(s) + 1]; copy(str,s); } ~String() { if (str != NULL) { delete[]str; str = NULL;

嵌入式Linux C笔试题积累(转)

http://blog.csdn.net/h_armony/article/details/6764811 1.   嵌入式系统中断服务子程序(ISR) 中断是嵌入式系统中重要的组成部分,这导致了很 多编译开发商提供一种扩展—让标准C支持中断.具代表事实是,产生了一个新的关键字 __interrupt.下面的代码就使用了__interrupt关键字去定义了一个中断服务子程序(ISR),请评论一下这段代码的. __interrupt double compute_area (double radi

C,C++经典笔试题(答案)转自:http://blog.163.com/[email&#160;protected]/blog/static/377499702008230104125229/

一.请填写BOOL , float, 指针变量 与“零值”比较的 if 语句.(10分) 请写出 BOOL   flag 与“零值”比较的 if 语句.(3分) 标准答案:      if ( flag )      if ( !flag ) 如下写法均属不良风格,不得分. if (flag == TRUE) if (flag == 1 ) if (flag == FALSE) if (flag == 0) 请写出 float   x 与“零值”比较的 if 语句.(4分) 标准答案示例: co

去哪儿2015笔试题:寻找字符串的差异

去哪儿的一道笔试题. 给定两个字符串a,b:找出两个字符串中不一样的字符串.如存在于a而不存在于b,则将该字符输出,同时.加一个"-"标记:若存在于b而不存在于a,则输出该字符,同时以"+"标记.若是同时存在于a.b中,则不输出.假设字符串是由字母组成. 如: a="abc",b="aabcbc",则输出为"+a,+b,+c": a="abcde",b="bcdef"

两道笔试题的感触

今天做了两道笔试题,收益良多.有些题,你会发现,虽然并不难,但是却很容易没有思路或者出错,这都是源自平时的不求甚解.很多知识点,自以为已经掌握,其实只是管中窥豹,可见一斑.不要一味墨守成规,也要用于思考,很多东西既要知其然,也要知其所以然.我一直觉得了解和精通中间差着十万八千里,看来还有很长一段路要走.只有比别人更早.更勤奋地努力,才能尝到更加成功的滋味.哈哈,跑题了. 下面看一下两道笔试题.一.大概简单地说一下,求下面这段代码的结果. new Thread(new Runnable() { p