CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

break与if——爱恨别离两相知

楼主ScorpioZZR(小天使)2003-08-03 17:45:08 在 C/C++ / C语言 提问

接过上贴:http://expert.csdn.net/Expert/topic/2103/2103389.xml?temp=.6260034  
   
  我再问一个break   不是可以跳while   /for/switch这些吗?可是,以下程序居然写在if后面??  
  见程序中注释,break如果移到下一个花括弧后就错了。可是为什么呢?  
  照道理说,如果break只是用来跳出for的,那么写在if内和if外都是从for里跳出来的,可为什么……却会有区别??  
  谁能解释一下?  
   
   
  #include   "stdio.h"  
   
  main()  
  {  
  int   a[11]={1,4,6,9,13,16,19,28,40,100};  
  int   temp1,temp2,number,end,i,j;  
  printf("array   a:\n");  
  for(i=0;i<10;i++)  
  printf("%5d",a[i]);  
  printf("\n");  
  printf("Insert   data:");  
  scanf("%d",&number);  
  end=a[9];  
  if   (number>end)  
  a[10]=number;  
  else  
  {  
  for(i=0;i<10;i++)  
  {  
  if   (a[i]>number)  
  {  
  temp1=a[i];  
  a[i]=number;  
  for(j=i+1;j<11;j++)  
  {  
  temp2=a[j];  
  a[j]=temp1;  
  temp1=temp2;  
  }  
  break;/*注意这个break! */  
  }/*为什么break不写在这个括号后面??*/  
  }  
  }  
  printf("Now   ,array   a:\n");  
  for   (i=0;i<11;i++)  
  printf("%6d",a[i]);  
  } 问题点数:10、回复次数:13Top

1 楼titi_lima(titilima(李马)的马甲.net)回复于 2003-08-03 17:48:19 得分 0

写在那里就会成为循环体必经的一部分了,所以循环第一次就会跳出。Top

2 楼ScorpioZZR(小天使)回复于 2003-08-03 17:51:13 得分 0

不懂~~能不能具体点说?Top

3 楼titi_lima(titilima(李马)的马甲.net)回复于 2003-08-03 17:54:24 得分 3

/*   如你所见,i的for循环   */  
  for(i=0;i<10;i++)  
  {  
  /*   先执行if的这一段   */  
  if   (a[i]>number)  
  {  
  temp1=a[i];  
  a[i]=number;  
  for(j=i+1;j<11;j++)  
  {  
  temp2=a[j];  
  a[j]=temp1;  
  temp1=temp2;  
  }  
  break;/*注意这个break! */  
  }/*为什么break不写在这个括号后面??*/  
  /*   如果break写在这里,那么执行完if就会继续执行这一句,那么这个循环体(i的for循环)就会在break的作用下结束了   */  
  }Top

4 楼loyyer(我爱C++)回复于 2003-08-03 17:59:49 得分 0

同意楼上!Top

5 楼cjnet(孤星剑)回复于 2003-08-03 18:00:57 得分 0

就是那样的。Top

6 楼ScorpioZZR(小天使)回复于 2003-08-03 18:07:09 得分 0

那为什么不是写在j的for循环里呢?——如果break只能跳出for而不是if的话,那么写在if内外都一样的吧?  
  我就是奇怪,break怎么也能跳出if而不是for/while这种??Top

7 楼ScorpioZZR(小天使)回复于 2003-08-03 18:08:27 得分 0

titi_lima:  
  干脆你再解释清点算了,我把10都给你。  
  明晚结贴Top

8 楼titi_lima(titilima(李马)的马甲.net)回复于 2003-08-03 18:12:42 得分 2

这里的break并不是跳出if(虽然它的确是跳出了if),它的目的是当if的条件满足后跳出for(也就是说,它的执行对象是for而不是if),你应该理解一下这个排序算法的思想和流程。Top

9 楼loyyer(我爱C++)回复于 2003-08-03 18:19:27 得分 0

同意楼上Top

10 楼gernal_dn()回复于 2003-08-03 18:54:19 得分 3

if   (number>end)  
  a[10]=number;  
  else  
  {  
  for(i=0;i<10;i++)  
  {  
  if   (a[i]>number)  
  {  
  temp1=a[i];  
  a[i]=number;  
  for(j=i+1;j<11;j++)  
  {  
  temp2=a[j];  
  a[j]=temp1;  
  temp1=temp2;  
  }  
  break;/*注意这个break! */  
  }/*为什么break不写在这个括号后面??*/  
  }  
  }  
  ==========  
  temp1=a[i];  
  [i]=number;  
  for(j=i+1;j<11;j++){...}  
  break;  
  这四句是平行的,break   是跳出前一个循环for(i=0;i<10;i++),而if   (a[i]>number)是跳出的条件。  
  break不是跳出if,而是跳出for.  
   
  Top

11 楼Mephisto_76((望美人如梦))回复于 2003-08-03 19:04:38 得分 1

你用for语句是干什么的呢?就是让它循环执行一系列的操作,以达到我们的目标。如果在这一系列的操作过程中达到了我们设定的条件的话,可能我们的目标就达到了,这时候再循环下去只是浪费时间或者造成错误的结果。而判断目标是否达到的办法就是用if语句。所以在if语句里做了一系列的处理就应该义无返顾的来一个break跳出循环。在外边用的话就是不管条件达不达到,执行一次循环中的操作就跳出了,这显然是不对的,与愿望相反。Top

12 楼bobob(静思)回复于 2003-08-03 19:22:11 得分 1

放到if后面,只是为了在满足某个条件后跳出for,而不是跳出if!  
   
  Top

13 楼ScorpioZZR(小天使)回复于 2003-08-03 22:27:20 得分 0

谢谢大家,非常开心,看过你们的回复我明白了,提前结贴,不过我分不多没照顾到的下次补偿Top

相关问题

  • to love_hate(爱恨交加)
  • 放分过年,暂时别离CSDN!
  • <觉悟人生>之[爱恨情仇]
  • 我对Java不是很熟悉, 现有 6个英文术语, 相知道中文的说法.
  • 各位我以前是用VC++的,我相知道在C++ BUILDER中WINDOWS API支持多少,WINSOCKETS API能直接使用吗?
  • 各位大侠!相知道怎样可以看到sql 2000存储过程中的代码?高分必定相送!
  • 我怎么了,我不知道!心活在寂寞深渊爱恨两端我就快要崩溃!!!!!!!!!!!!!!
  • 还在上学的小弟弟小妹妹,送给你们一首我写的散文诗《九月,一个惊心动魄的别离》,希望开心,呵。。。
  • (xiaoya317(小雅||别离,是为了重聚·····))我朋友的qq被人盗了,请问那位能提供一个8位的号码。高分酬谢!
  • page break and printing

关键词

  • 语句
  • 跳出
  • 达到
  • break
  • number
  • 条件
  • temp
  • 目标

得分解答快速导航

  • 帖主:ScorpioZZR
  • titi_lima
  • titi_lima
  • gernal_dn
  • Mephisto_76
  • bobob

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo