# 二维数组引用整个索引，而不是C中的单个单元格2D array referencing whole index, not individual cell in C

``````#include <stdio.h>
#include <math.h>

#define total 10.  /*total iterations*/
#define walk 5  /*total # of steps in a walk*/
#define lambda 1.0 /*step size*/
#define binsize 0.1
/*current chosen values are for bug checking simplicity*/

main()
{
float range = walk*lambda*2.; /*2 times max range, all positive*/
int n,prob,i,k,j,placex,placey,bins;
double valuex,valuey, a; /*value starts at half range so all values are +*/
bins=(range/binsize);

int bin[bins][bins];
for(i=0;i<=bins;i++) /*zero out bin*/
{
for(j=0;j<=bins;j++)
{
bin[i][j]=0;
}
}

for(k=0;k<total;k++)
{
valuex=range/2.;
valuey=range/2.;

for(n=1;n<=walk;n++)
{
prob= rand(4) % 100+1;
if(prob<=25)
{
valuex=valuex+pow(lambda,n);
}
else if(prob>25 && prob<=50)
{
valuex=valuex-pow(lambda,n);
}
else if(prob>50 && prob<=75)
{
valuey=valuey+pow(lambda,n);
}
else if(prob>75)
{
valuey=valuey-pow(lambda,n);
}
}

placex=floor(valuex/binsize+0.5);
placey=floor(valuey/binsize+0.5);

bin[placex][placey]=++bin[placex][placey];

printf("%d %d %d\n",placex,placey,bin[placex][placey]); /* for bug checking. it prints the bin numbers where the value should go and then the value of that element.*/
}

for(i=0;i<=bins;i++)
{
for(j=0;j<=bins;j++)
{
a=bin[i][j]/total;
//printf("%lf %lf %lf\n",i*binsize-range/2.,j*binsize-range/2.,a); /*format for input into IGOR*/
}
}
}
``````

## 1 个回复1

### ===============>>#1 票数：0

``````#include <stdio.h>
#include <math.h>

#define total 10.  /*total iterations*/
#define walk 5  /*total # of steps in a walk*/
#define lambda 1.0 /*step size*/
#define binsize 0.1
/*current chosen values are for bug checking simplicity*/

main()     {
float range = walk * lambda * 2.; /*2 times max range, all positive*/
int n, prob, i, k, j, placex, placey, bins;
double valuex, valuey, a; /*value starts at half range so all values are +*/

bins = (range / binsize);

int bin[bins][bins];

/*zero out bin*/
for(i = 0; i < bins; i++) {
for(j = 0; j < bins; j++)
bin[i][j] = 0;
}

for(k = 0; k < total; k++) {
valuex = range / 2. - 1;
valuey = range / 2. - 1;

for(n = 1; n <= walk; n++) {
prob = rand(4) % 100 + 1;
if(prob<=25)
valuex += pow(lambda, n);
else if(prob <= 50)
valuex -= pow(lambda, n);
else if(prob <= 75)
valuey += pow(lambda, n);
else
valuey -= pow(lambda, n);
}

placex = floor(valuex / binsize + 0.5);
placey = floor(valuey / binsize + 0.5);
bin[placex][placey] += 1;

printf("%d %d %d\n", placex, placey, bin[placex][placey]); /* for bug checking. it prints the bin numbers where the value should go and then the value of that element.*/
}

for(i = 0; i < bins; i++) {
printf("\n");
for(j = 0 ;j < bins; j++) {
if (bin[i][j] == 0)
printf("  ");
else
printf("%d ", bin[i][j]);
a = bin[i][j] / total;

}
}
}
``````