| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 764 人关注过本帖
标题:[讨论]子程序的定义问题
只看楼主 加入收藏
xuyandemen
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-11-3
收藏
 问题点数:0 回复次数:9 
[讨论]子程序的定义问题

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

int rgauss(n,a,b)
int n;
double a[],b[];
{
int *js,L,i,j,k,is,p,q;
double d,t;
js=malloc(n*sizeof(int));
L=1;
for (k=0;k<=n-2;k++)
{ d=0.0;
for (i=k;i<=n-1;i++)
for (j=k;j<=n-1;j++)
{t=fabs(a[i*n+j]);
if (t>d){d=t; js[k]=j; is=i; }
}
if (d+1.0== 1.0) L=0;
else
{ if (js[k]!=k)
for (i=0;i<=n-1;i++)
{p=i*n+k; q=i*n+js[k];
t=a[p];a[p]=a[q];a[q]=t;
}
if (is!=k)
{ for(j=k;j<=n-1;j++)
{ p=k*n+j; q=is*n+j;
t=a[p]; a[p]=a[q]; a[q]=t;
}
t=b[k]; b[k]=b[is]; b[is]=t;
}
}
}
if (L==0)
{free(js); printf("fail\n");
return (0);
}
d=a[k*n+k];
for (j=k+1;j<=n-1;j++)
{ p=k*n+j; a[p]=a[p]/d; }
b[k]=b[k]/d;
for (i=k+1; i<=n-1;i++)
{for (j=k+1;j<=n-1;j++)
{p=i*n+j;
a[p]=a[p]-a[i*n+k]*a[k*n+j];
}
b[i]=b[i]-a[i*n+k]*b[k];
}
}
d=a[(n-1)*n+n-1];
if (fabs(d)+1.0==1.0)
{ free(js); printf("fail\n");
return (0);
}
b[n-1]=b[n-1]/d;
for (i=n-2;i>=0;i--)
{t=0.0;
for(j=i+1; j<=n-1;j++)
t=t+a[i*n+j]*b[j];
b[i]=b[i]-t;
}
js[n-1]=n-1;
for(k=n-1; k>=0;k--)
if(js[k]!=k)
{ t=b[k]; b[k]=b[js[k]]; b[js[k]]=t; }
free(js);
return (1);


上面是我在做数值方法是看到的一个高斯消元的消元过程程序,在开头
(
int rgauss(n,a,b)
int n;
double a[],b[];
)
里,int n;为什么要放在int rgauss(n,a,b)和double a[],b[];之间啊?


搜索更多相关主题的帖子: 子程序 定义 include int math 
2006-11-03 22:44
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 

这是以前C语言函数的写法(旧标准)
返回值类型 function(参数名字列表)
参数类型 变量1;
参数类型 变量2;
……


对不礼貌的女生收钱......
2006-11-04 16:14
xuyandemen
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-11-3
收藏
得分:0 
2006-11-05 19:21
xuyandemen
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-11-3
收藏
得分:0 
上面那位高手,请问,可以把int n; double a[],b[];放在int rgauss(n,a,b)前面吗?
2006-11-05 19:24
baxia
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2006-3-10
收藏
得分:0 
这样写就可以了:
int rgauss(int n,double a[],double[])

[此贴子已经被作者于2006-11-5 19:51:02编辑过]

2006-11-05 19:50
baxia
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2006-3-10
收藏
得分:0 
int rgauss(n,a,b)
int n;
double a[],b[];
是一种很古老的写法
2006-11-05 19:51
C语言学习者
Rank: 4
等 级:贵宾
威 望:13
帖 子:1278
专家分:0
注 册:2006-9-26
收藏
得分:0 

int n;
double a[],b[];
是不是全局变量。


谁有强殖装甲第二部,可以Q我460054868
2006-11-05 20:13
baxia
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2006-3-10
收藏
得分:0 
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int c,d;
int rgauss(n,a,b)
int n;
double a[],b[];
{
//函数体;
}
c,d是全局变量 而 n ,a[],b[] 是rgauss()函数的局部变量
2006-11-05 20:16
C语言学习者
Rank: 4
等 级:贵宾
威 望:13
帖 子:1278
专家分:0
注 册:2006-9-26
收藏
得分:0 
这种写法少见.

谁有强殖装甲第二部,可以Q我460054868
2006-11-05 20:21
xuyandemen
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-11-3
收藏
得分:0 

int n;
double a[],b[];
放在里面如:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int c,d;
int rgauss(n,a,b)
{
int n;
double a[],b[];
……
}
可以吗?
2006-11-06 19:49
快速回复:[讨论]子程序的定义问题
数据加载中...
 
   



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

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