while(1)和for(;;)两个死循环有什么区别

一般for(;;)性能更优
  1. for(;;)  
  2. {}
复制代码
这两个;; 空语句,编译器一般会优掉的,直接进入死循环
  1. while(1)  
  2. {}
复制代码

每循环一次都要判断常量1是不是等于零,在这里while比for多做了这点事。不过从汇编的角度来说,都是一样的代码。


另一种解释:

看VC生成的汇编码,for比while要快一些。for(;;)是直接跳转,while多了两条指令而已。
不过C++标准里并未规定编译器的实现方式,非VC平台以及以后新版的VC二者速度相比如何还未可知。而且说句实话,我蛮讨厌for(;;)代替while(true)的。不直观。我也不在乎这么丁点儿效率。至少我写的程序中没遇到需要优化到这种程度的代码。

1. 两种循环在构造死循环时的区别
用while构造死循环时,一般会使用while(TRUE)来构造死循环;而用for来构造死循环时,则使用for(;;)来构造死循环。这两个死循环的区别是:while循环里的条件被看成表达式,因此,当用while构造死循环时,里面的TRUE实际上被看成永远为真的表达式,这种情况容易产生混淆,有些工具软件如PC-Lint就会认为出错了,因此构造死循环时,最好使用for(;;)来进行。
2. 两种循环在普通循环时的区别
对一个数组进行循环时,一般来说,如果每轮循环都是在循环处理完后才讲循环变量增加的话,使用for循环比较方便;如果循环处理的过程中就要将循环变量增加时,则使用while循环比较方便;还有在使用for循环语句时,如果里面的循环条件很长,可以考虑用while循环进行替代,使代码的排版格式好看一些。

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
面试题,是纸上写的,发现了些错误,回来改进了下。写纸上和写计算机里并编译成功完全是两个效果。 开始没太多字符串操作,很繁琐、难点也多,后逐渐改进。 典型问题1: sizeof()局限于栈数组 char a[] = "asd213123123"; 形式,并且这种不能用'\0'判断是否结束(这种判断方式能很方便加在while条件中用于判断越界——b != '\0')。 如果是字符串常量: char *b = "dasadafasdf"; 这种情况,sizeof()就废掉了! 总之: 对号入座,前者sizeof、后者strlen~!不过sizeof(a)和strlen(b)还有另外一个区别,strlen不计算'\0',而sizeof要计算(前提是sizeof()不针对char指针) 典型问题2: 用什么来暂存并输出结果?还是只是记录下来相关位置——这是我底下未完成版本1想到的思路——用一个count[sizeof(A)]数组记录下A每个位置作为起点所能和B达到的最大重合,最后判断查找数组中最大值,此时目标子字符串的起点下标(i)和 i 对应的长度(counter[i])都有了。 这是针对不知道字符串大小并且不占用额外空间的做法,需要非常繁琐的操作,要加很多标记,越界判断也会有些麻烦(结合优势么,用字符串常量而不是栈空间中的字符数组,有'\0'——就好判断了!) (关于空间的占用,如果要用一个和字符串a一样长的数组counter来计录a中各起点对应与b最大重合子字符串,这个数组也要和a一样长,空间上也不合适,除非情形很特殊,a短b长,不然不如直接malloc()一个堆空间来储存当前最长“子字符串”,并实时更新) 先放一个改完编译测试成功的。 release1 //题目:要求比较A字符串(例如“abcdef"),B字符串(例如(bdcda)。找出重合度最大的子字符串,输出(根据OJ经验,输>出结果对即可) #include #include #include main(){ char *A = "abcderfghi"; char *B = "aderkkkkkabcd"; int i,j,c = 0,count = 0; unsigned int maxSeg = 0; int max = strlen(A) > strlen(B) ? strlen(A) : strlen(B); char* final = (char*)malloc(sizeof(char) * (max + 1)); final[max] = '\0'; for(i = 0;A[i] != '\0';i++){ for(j = 0;B[j] != '\0';j++){ while(A[i + c] == B[j] && A[i+c] != '\0' && B[j] != '\0'){ count++; c++; j++; }                         if(count > maxSeg){                                 strncpy(final,(A + i),count);                                 maxSeg = count;                         } count = 0; c = 0; } } printf("%s\n",final); free(final); } 这是能将就用的第一个版本~!关于结束符'\0'能否影响free()的使用,觉得是完全不用操心的,因为malloc的大小是系统来保存的,删除时候系统来接手就完了,而'\0'结束符只是针对一些常规字符串操作,比如printf()用%s控制输出时~! 新难点:找到的子字符串同时一样长怎么办?那我这只能叫做”第一个最长的重合字符串“用两块空间来存储?三
《计算机基础与程序设计》作业题(一) (课程代码:02275) 一、单项选择题 1.I/O设备指的是计算机的(  B ) A.存储设备 B.输入和输出设备 C.控制器 D.运算器 2.具有只读功能的内存储器是指( A  ) A.ROM B.RAM C.硬盘 D.CD-ROM 3.十进制数-5在八位的微机内的存储形式是( D  ) A.00000101 B.10000101 C.11111010 D.11111011 4.C语言源程序的基本单位是( B  ) A.过程 B.函数 C.子程序 D.语句 5.设有int p,q;以下不正确的语句是(  D ) A.p *=3; B.p/=q; C.p+=3; D.p&&=q; 6.若有定义:int a[10];则数组元素的下标的下限和上限分别是( C  ) A.0和1 B.1和9 C.0和9 D.1和10 7.下列说法不正确的是( C  ) A.一个源程序文件由一个或多个函数组成 B.一个C程序由一个或多个源程序文件组成 C.一个C程序以函数为独立的编译单位 D.一个C程序必须有一个main( )函数 8.在C语言中,确定函数返回值的类型由( D  ) A.return语句中的表达式类型决定 B.调用该函数的主函数类型决定 C.调用函数时临时决定 D.定义函数时所指定的函数类型决定 9.若有以下定义和语句,且0 i<10,则对数组元素地址的正确表示是( D  ) int a [ ]={0,1,2,3,4,5,6,7,8,9},*p; p=a; A.&(a+1) B.a++ C.&p D.&p[i] 10.若有以下说明: char s[10]="ABCDEFGH",*p=s; 不能表示字符C的是( B  ) A.s[2] B.s[3] C.s['c'-'a'] D.*(p+2) 11.若有下列程序段,欲使a=2,b=3,对应正确的数据输入方法是(其中<CR>表示换行 ) ( A  ) int a,b scanf("%d%d",&a,&b); A.2<CR> B.a=2 b=3<CR> 3<CR> C.a=2,b=3<CR> D.2,3<CR> 12.设有说明 int x=0,y=2; 则执行 if(x=0) y=1+x; else y=x-1; 后,变量y的值是(  A ) A.-1 B.0 C.1 D.2 13.下列位运算符中,表示按位异或操作的是(  C ) A.~ B. C.^ D.& 14.下列各个位运算符的优先级从左到右依次升高的是( C  ) A.>> & ~ B. >> & ~ C. & >> ~ D.~ & >> 15.设有说明:int u=1,v=3;则表达式u<<= v的值是(  D ) A.0 B.1 C.3 D.8 16.如果文件存储的是数据在内存中存放的字节形式,则该文件是( B  ) A.ASCII文件 B.文本文件 C.二进制文件 D.设备文件 17.下列运算符中优先级最低的是(  D ) A.> B.! C.% D.= = 18.如果在程序中要使用系统提供的函数sqrt,则需要书写的编译预处理命令是( B   ) A.#include<stdio. h> B.#include<math. h> C.#include<string.h> D.#include<malloc.h> 19.设有说明:int x=12,y=3;则x¦y的值是( D  ) A.0 B.3 C.12 D.15 20.测试文件是否结束函数的函数名是( A  ) A.feof B.EOF C.eof D.FEOF 二、多项选择题 21.存储在下列哪些设备中的信息可以长期保存?(  BCDE ) A.RAM B.ROM C.硬盘 D.软盘 E.光盘 2.设有说明:int u=1,v=5;则下列表达式的值为1的有( AE ) A.u&v B.v>>2 C.u^u D.u¦v E.(u<<3)/5 23.下列循环将会产生死循环的有(ACDE ) A.while(1); B.do{ }while(0); C.do{ }while(1); D.for(k=1;k>―10;k+ +); E.for(k=1;k=10;k+ +,k――); 25.设有说明:int x=1,y=2,z=3;则下面表达式的值为0的有( ACDE) A.x&y&z B.x¦y¦z C.x^x+y^y D.z>>y E.x&0xff00 5.下面基本结构和特性中符合结构化程序设计的要求的有(ABCE ) A.选择结构 B.循环结构 C.顺序结构 D.各结构之间只有一个入口,至多两个出口 E.各结构之间只有一个入口,一个出口 三、简答题 1、简述C语言标准库函数strcpy 的格式(或函数原型)与功能。 函数名: strcpy
《计算机基础与程序设计》作业题(一) (课程代码:02275) 一、单项选择题 1.I/O设备指得就是计算机得( B ) A.存储设备 B.输入与输出设备 C.控制器 D。运算器 2。具有只读功能得内存储器就是指( A ) A.ROM B。RAM C。硬盘 D.CD-ROM 3.十进制数-5在八位得微机内得存储形式就是( D  ) A。00000101 B.10000101 C.11111010 D.11111011 4.C语言源程序得基本单位就是( B  ) A.过程 B。函数 C.子程序 D.语句 5。设有int p,q;以下不正确得语句就是( D ) A.p *=3; B.p/=q; C.p+=3; D.p&&=q; 6.若有定义:int a[10];则数组元素得下标得下限与上限分别就是( C  ) A.0与1 B.1与9 C。0与9 D.1与10 7.下列说法不正确得就是( C ) A。一个源程序文件由一个或多个函数组成 B.一个C程序由一个或多个源程序文件组成 C.一个C程序以函数为独立得编译单位 D。一个C程序必须有一个main( )函数 8。在C语言中,确定函数返回值得类型由( D  ) A。return语句中得表达式类型决定 B。调用该函数得主函数类型决定 C.调用函数时临时决定 D.定义函数时所指定得函数类型决定 9.若有以下定义与语句,且0 i<10,则对数组元素地址得正确表示就是( D  ) int a [ ]={0,1,2,3,4,5,6,7,8,9},*p; p=a; A.&(a+1) B.a++ C.&p D.&p[i] 10。若有以下说明:  char s[10]="ABCDEFGH",*p=s; 不能表示字符C得就是( B  ) A.s[2] B.s[3] C.s['c'—'a'] D。*(p+2) 11.若有下列程序段,欲使a=2,b=3,对应正确得数据输入方法就是(其中〈CR〉表 示换行) ( A )   int a,b scanf("%d%d",&a,&b); A.2〈CR> B.a=2 b=3<CR>   3<CR> C.a=2,b=3<CR> D.2,3<CR〉 12.设有说明 int x=0,y=2; 则执行 if(x=0) y=1+x; else y=x—1; 后,变量y得值就是( A ) A。-1 B.0 C.1 D。2 13.下列位运算符中,表示按位异或操作得就是( C ) A.~  B。 C.^   D。& 14。下列各个位运算符得优先级从左到右依次升高得就是( C  ) A.>〉 & ~  B. >〉 & ~   C。 & 〉〉 ~   D。~ & >> 15.设有说明:int u=1,v=3;则表达式u<<= v得值就是( D ) A.0  B.1    C.3  D。8 16.如果文件存储得就是数据在内存中存放得字节形式,则该文件就是( B ) A.ASCII文件 B.文本文件 C.二进制文件    D。设备文件 17.下列运算符中优先级最低得就是( D ) A。〉     B。!  C。%  D。= = 18。如果在程序中要使用系统提供得函数sqrt,则需要书写得编译预处理命令就是( B ) A。#include〈stdio、 h> B.#include<math、 h> C.#include<string、h> D.#include〈malloc、h> 19.设有说明:int x=12,y=3;则x¦y得值就是( D ) A。0 B。3 C.12 D.15 20.测试文件就是否结束函数得函数名就是( A  ) A。feof B。EOF C。eof D。FEOF 二、多项选择题 21。存储在下列哪些设备中得信息可以长期保存?( BCDE ) A.RAM B.ROM C。硬盘   D。软盘  E.光盘 2、设有说明:int u=1,v=5;则下列表达式得值为1得有( AE ) A.u&v   B.v〉〉2  C.u^u D.u¦v   E。(u〈<3)/5 23。下列循环将会产生死循环得有(ACDE ) A。while(1);     B.do{ }while(0);  C.do{ }while(1);   D.for(k=1;k>―10;k+ +); E。for(k=1;k=10;k+ +,k――); 25.设有说明:int x=1,y=2,z=3;则下面表达式得值为0得有( ACDE) A.x&y&z B.x¦y¦z C.x^x+y^y D。z>>y E.x&0xff00 5、下面基本结构与特性中符合结构化程序设计得要求得有(ABCE ) A.选择结构  B.循环结构   C。顺序结构 D。各结构之间只有一个入口,至多两个出口 E.各结构之间只有一个入口,一个出口

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值