| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2442 人关注过本帖
标题:一个怎么从最内循环跳出的问题
只看楼主 加入收藏
经典记忆
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2012-7-19
结帖率:16.67%
收藏
已结贴  问题点数:14 回复次数:7 
一个怎么从最内循环跳出的问题
题目是这样的:
定义一个数组data,它包含100个double类型的元素,编写一个循环,将以下的数值顺序存储到数组的对应元素中:

1/(2*3*4) 1/(4*5*6) 1/(6*7*8) ... up to 1/(200*201*202)
我是这样写的:
#include <stdio.h>
int main(void)
{
    int n = 0;
    int i = 0;
    int j = 0;
    int k = 0;
    double data[100];
   
    for(n=0;n<100;n++)
    {
      for(i=0;i<=200;i+2)
      {
        i=i+2;
        for(j=1;j<=201;j+2)
        {
          j=j+2;
          for(k=2;k<=202;k+2)
          {
            k=k+2;
            data[n]=1/i*j*k;
               
          }
              
        }
      }
    }
    for(n=0;n<100;n++)
      printf("\n第%d数是%f",n+1,data[n]);
     getchar();
     getchar();
     return 0;
}
除了用这么多循环外,我实在想不出什么好办法,假如一定要使用这些循环的话,要怎么才能执行过data[n]=1/i*j*k;转到
for(n=0;n<100;n++)这里,开始n=1的循环?

           
搜索更多相关主题的帖子: include 元素 
2012-08-11 19:55
qdg008
Rank: 2
等 级:论坛游民
帖 子:9
专家分:10
注 册:2011-8-25
收藏
得分:2 
    int n = 0;
    int i = 2;
    int j = 3;
    int k = 4;
    double data[100];

    for(n=0;n<100;n++,i+=2,j+=2,k+=2)
    {
       data[n]=1.0/(i*j*k);
    }
2012-08-11 20:54
经典记忆
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2012-7-19
收藏
得分:0 
谢谢
2012-08-11 22:08
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:2 
其实楼主就写:data[n]=1.0 / (i*(i+1)*(i+2)); 也行,干嘛都要用变量。

学数列的时候,没有学过通项这个概念吗?


[ 本帖最后由 pangding 于 2012-8-11 23:30 编辑 ]
2012-08-11 23:29
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:2 
假如一定要使用这些循环的话,要怎么才能执行过data[n]=1/i*j*k;转到
for(n=0;n<100;n++)这里,开始n=1的循环?


多重循环跳转的最快捷的办法是goto,这是goto发挥特长的地方,也是结构化编程语言保留goto的原因。如果局限于结构化编程语法,就需要在每层循环中设置标志逻辑,当需要直接跳转时令标志为真,退出本层循环,返回外层,如此一层一层返回,这是很麻烦和复杂的,这种情形下的结构化语法反而不及goto来的清晰。

一般地,结构化编程不鼓励同一段代码有三重及以上的循环逻辑,此时最佳的处理办法是分解函数,把内层循环置于函数中。也就是说,当你的代码写出三重循环甚至更多的时候,就需要注意了,这意味着代码设计不良。

授人以渔,不授人以鱼。
2012-08-12 01:19
水古奇影
Rank: 2
等 级:论坛游民
帖 子:16
专家分:78
注 册:2011-5-16
收藏
得分:2 
楼主要再认真思考一下题目,找出更好的方法来实现算法,嵌套四个for和四个变量的话,时间复杂度和空间复杂度都是指数增长,楼主要多看看算法和数据结构
2012-08-12 08:21
zhangqi_gsts
Rank: 6Rank: 6
来 自:甘肃天水
等 级:侠之大者
威 望:1
帖 子:227
专家分:457
注 册:2011-3-27
收藏
得分:2 
goto,或者就是添加标记量
2012-08-17 08:58
zyj0021
Rank: 1
等 级:新手上路
帖 子:3
专家分:2
注 册:2007-5-7
收藏
得分:2 
循环太多了,人都看花了!理解也费劲,

观察单项 1.0 / (2n*(2n+1)*(2n+2))

写个递归函数更简单些

n=1,data[n] = 1.0 / (2n*(2n+1)*(2n+2))
n>1,data[n] = data[n-1] * 1.0 / (2n*(2n+1)*(2n+2))




[ 本帖最后由 zyj0021 于 2012-8-17 09:26 编辑 ]
2012-08-17 09:22
快速回复:一个怎么从最内循环跳出的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.040194 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved