首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

两个For循环不同访问模式能不能写到同一个函数中

2013-01-07 
两个For循环不同访问方式能不能写到同一个函数中?fun1(){......for(i0iMAXi++){for(j0jMAX2j++){.

两个For循环不同访问方式能不能写到同一个函数中?
fun1()
{
......
for(i=0;i<MAX;i++)
{
  for(j=0;j<MAX2;j++)
  {
  ......
  }
}
......
}

fun2()
{
......
for(i=MAX;i>0;i--)
{
  for(j=0;j<MAX2;j++)
  {
  ......
  }
}
......
}

fun3()
{
......
for(i=MAX;i>0;i--)
{
  for(j=MAX2;j>0;j--)
  {
  ......
  }
}
......
}

我的Fun1到Fun8都只有For里面的条件不一样,其它地方代码完全一样.
有没有办法只写一个函数就行了?比如宏定义之类的去代替两个For() ?
前提是宏定义能不能随着变量动态改变的?
[解决办法]

#define funx(offset_x, offset_y) do{\
  int i, j;                          \
  for(i=0; i<MAX; i+=offset_x;) {                          \
     for(j=0; j<MAX2; j+=offset_y;) {                       \
       /* do something you want */                 \
     }                       \
  }                          \
} while(0);

#define fun1() funx(1, 1)
#define fun2() funx(-1, 1)

这样试试
[解决办法]
将for循环里结束条件提出来,设为函数的参数不就行了?!
[解决办法]
看你传的参数类型,进行重载就是,可以用继承等方式
[解决办法]
funX( int M )
{
......
for(i=0;i<MAX;i++)
{
  for(j=0;j<MAX2;j++)
  {
      switch(M)
      {
       case 0:..........; break;
       case 1:..........;break;
       case 2:..........等等
      }
  }
}
......
}


[解决办法]
对不起,没看清楼主的意思就盲目回帖了。
[解决办法]
引用:
C/C++ code

#define funx(offset_x, offset_y) do{\
  int i, j;                          \
  for(i=0; i<MAX; i+=offset_x;) {                          \
     for(j=0; j<MAX2; j+=offset_y;) {        ……



这样可以???  
[解决办法]
#include"stdio.h"
#include"conio.h"

#define MAX 10
#define _FOR_I_(off_x,off_y,off_z)  for(i = off_x; i<off_y; i+=off_z)
#define _FOR_J_(off_x,off_y,off_z)  for(j = off_x; j>off_y; j+=off_z)

int fun();

int main(int argc,char *argv[])
{
int num = 0;

num = fun();
printf("%d\n",num);

return 0;
  
}
 
int fun()
{
int i = 0;
int j = 0;
int sum = 0 ;
_FOR_I_(0,MAX,1)
_FOR_J_(MAX,0,-1)
sum = sum+i;
return sum;
}


这个可以,如果你想把#define _FOR_I_(off_x,off_y,off_z)  for(i = off_x; i<off_y; i+=off_z)
#define _FOR_J_(off_x,off_y,off_z)  for(j = off_x; j>off_y; j+=off_z)

定位一个宏的话,可以讲for中间的判断条件也定义为宏
[解决办法]
那倒要看你.......是什麼
[解决办法]
将循环里面的语句定义成宏更好!
[解决办法]

foo(iStart, iEnd, jStart, jEnd)
{
    ...
    i = iStart;
    j = jStart;
    while (iStart != iEnd)
    {
        while (jStart != jEnd)
        {
            ...
            if (jStart < jEnd)
                j++;
            else
                j--;
        }
        if (iStart < iEnd)
            i++;
        else
            i--;
    }
    ...
}
foo(0, MAX, 0, MAX2);
foo(MAX, 0, 0, MAX2);
foo(MAX, 0, MAX2, 0);


[解决办法]
#include"stdio.h"
#include"conio.h"

#define MAX 10
#define _FOR_I_(off_x,off_y,off_z)  for(i = off_x; i<off_y; i+=off_z) 
#define _FOR_J_(off_x,off_y,off_z)  for(j = off_x; j>off_y; j+=off_z)

#define  _FOR_R_(M,N) do{\
for(int k=0; k<N; ++k){M+=k;}\
}while();

int fun();

int main(int argc,char *argv[])
{
int num = 0;

num = fun();
printf("%d\n",num);

return 0;
  
}
 
int fun()
{
int i = 0;


int j = 0;
int sum = 0 ;
_FOR_I_(0,MAX,1)
_FOR_J_(MAX,0,-1)
sum = sum+i;
return sum;
}

热点排行