| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 776 人关注过本帖
标题:sos c语言程序,函数调用过程怎么处理
只看楼主 加入收藏
apple_wlr
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-6-4
收藏
 问题点数:0 回复次数:3 
sos c语言程序,函数调用过程怎么处理

各位高手,帮帮小妹,周三前帮我搞定阿,不然我会死的很惨!!
以下程序总有问题,帮忙修改一下 M值大概都在-1到+1之间
#include<stdio.h>
#include<math.h>
#include<stdlib.h>

int initia(int c[][20],int n)
{
int i,j;
randomize();
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
c[i][j]=random(100); /*随机数产生*/
if (c[i][j]>=50)
c[i][j]=1;
else
c[i][j]=-1;
printf("%4d",c[i][j]); /*产生+1一1的随机矩阵*/ +1代表向上-1向下
}
}
return;
}

int sweep(int m[][20],int np1,int ndmn,int ds_mtx[][20]) /*子程序sweep调用*/
{
int msi[22][22]={0},i,j; sweep是对整个矩阵的扫描,判断向上向下是否要改变
double r,e,x,de;
for(i=1;i<np1;i++)
for(j=1;j<np1;j++)
{
msi[i][j]=m[i-1][j-1];
}
for(i=1;i<=ndmn;i++)
for(j=1;j<=ndmn;j++)
{
if(i==1) msi[i-1][j]=msi[ndmn][j]; /*实现周期性条件*/
if(i==ndmn) msi[i+1][j]=msi[1][j];
if(j==1) msi[i][j-1]=msi[i][ndmn];
if(j==ndmn) msi[i][j+1]=msi[i][1];
de=-2*msi[i][j]*(e*(msi[i-1][j]+msi[i+1][j]+msi[i][j-1]+msi[i][j+1])); /*构型选取*/
r=exp(-de);
x=random(100)/100;
if(r>1||x<=r) /*构型比较* r>1||x<=r时改变方向/
msi[i][j]=-1*msi[i][j];
}
for(i=1;i<=ndmn;i++)
for(j=1;j<=ndmn;j++)
ds_mtx[i-1][j-1]=msi[i][j]; /*放到结果矩阵中*/
return;
}
main()
{
int i,j,p,q,f,g,h,a,n=20,ntherm=20,nskip=5,nens=100,ngroup=100;
int ms[][20]={0},msj[][22]={0};
double e,E,M,Ts,Tb;
initia(ms,n); /*初始化矩阵*/ /* 这里好像有问题*/
e=0.3;
for(p=1;p<=40;p++)
{
for(q=1;q<ntherm;q++)
{
sweep(ms,n+1,n,ms); /*子程序sweep调用*/ /*先去掉开始的几个矩阵*/

}
for(a=1;a<=ngroup;a++) /*开始循环*/
{
for(f=1;f<=n;f++)
for(g=1;g<=n;g++)
{
msj[f][g]=ms[f-1][g-1];
}
for(i=1;i<=n;i++) /*实现周期性条件*/
for(j=1;j<=n;j++)
{
if(i==1) msj[i-1][j]=msj[20][j];
if(i==20) msj[i+1][j]=msj[1][j];
if(j==1) msj[i][j-1]=msj[i][20];
if(j==20) msj[i][j+1]=msj[i][1];
Ts+=msj[i][j]*(msj[i-1][j]+msj[i+1][j]+msj[i][j-1]+msj[i][j+1]); /*用来求E,M*/
Tb+=msj[i][j];
}
for(h=0;h<=nskip;h++) 每隔nskip次取一个矩阵
{
sweep(ms,n+1,n,ms); /*子程序sweep调用*/
}
E+=(-e*Ts);
M+=Tb;
}
E=E/nens; /* 求平均值*/
M=M/nens;
printf("%8.4",e); /* e的值总为0,有问题*/
printf("%8.4",E);
printf("%8.4",M);
e+=0.01;
}
}

搜索更多相关主题的帖子: c语言 sos 函数 
2006-06-04 09:59
myajax95
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:30
帖 子:2978
专家分:0
注 册:2006-3-5
收藏
得分:0 
这程序什么功能?

http://myajax95./
2006-06-04 13:23
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 

这位“小妹”请你公布最初那个正确的Fortran程序,因为种种迹象表明,你好像是在Fortran的基础上楞想把它改成C语言的版本,而你的功力又明显不足。只要有了正确的Fortran程序,我承诺在“周三”前帮你搞定。


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-06-04 14:43
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 

/*
目前代LZ改动到此(仍有问题)
运行环境VC++6.0
*/
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>

int initia(int c[][20],int n)
{
int i,j;
srand(time(NULL));
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
c[i][j]=rand();
if(c[i][j]>=32767/2)
c[i][j]=1;
else
c[i][j]=-1;
printf("%4d",c[i][j]);
}
return 0;
}

int sweep(int m[][20],int np1,int ndmn,int ds_mtx[][20])
{
int msi[22][22]={0},i,j;
double r,x,de,e=2.718281828459;//原无初值
for(i=1;i<np1;i++)
for(j=1;j<np1;j++)
{
msi[i][j]=m[i-1][j-1];
}
for(i=1;i<=ndmn;i++)
for(j=1;j<=ndmn;j++)
{
if(i==1) msi[i-1][j]=msi[ndmn][j];
if(i==ndmn)msi[i+1][j]=msi[1][j];
if(j==1) msi[i][j-1]=msi[i][ndmn];
if(j==ndmn)msi[i][j+1]=msi[i][1];
de=-2*msi[i][j]*(e*(msi[i-1][j]+msi[i+1][j]
+msi[i][j-1]+msi[i][j+1]));
r=exp(-de);
x=rand()/32767.0;
if(r>1||x<=r)
msi[i][j]=-1*msi[i][j];
}
for(i=1;i<=ndmn;i++)
for(j=1;j<=ndmn;j++)
ds_mtx[i-1][j-1]=msi[i][j];
return 0;
}
main()
{
int n=20,ntherm=20,nskip=5,nens=100,ngroup=100;
int i,j,p,q,f,g,h,a;
int ms[20][20]={0},msj[22][22]={0};
double e,E,M,Ts,Tb;
initia(ms,n);
e=0.3;
for(p=1;p<=40;p++)
{
for(q=1;q<ntherm;q++)
{
sweep(ms,n+1,n,ms);
}
for(a=1;a<=ngroup;a++)
{
for(f=1;f<=n;f++)
for(g=1;g<=n;g++)
{
msj[f][g]=ms[f-1][g-1];
}
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(i==1)msj[i-1][j]=msj[20][j];
if(i==20)msj[i+1][j]=msj[1][j];
if(j==1)msj[i][j-1]=msj[i][20];
if(j==20)msj[i][j+1]=msj[i][1];
Ts+=msj[i][j]*(msj[i-1][j]+msj[i+1][j]
+msj[i][j-1]+msj[i][j+1]);
Tb+=msj[i][j];
}
for(h=0;h<=nskip;h++)
{
sweep(ms,n+1,n,ms);
}
E+=(-e*Ts);
M+=Tb;
}
E=E/nens;
M=M/nens;
printf("e=%8.4lf\n",e);
printf("E=%8.4lf\n",E);
printf("M=%8.4lf\n",M);
e+=0.01;
}
}


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-06-04 14:51
快速回复:sos c语言程序,函数调用过程怎么处理
数据加载中...
 
   



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

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