用高斯列主无消去法解线性方程组
带C运行成功原代码 我改VB的时候不会用函数就成了下面的样子了(出错提示类型不匹配(程序中有标注))  如果大哥们方便就全按C帮小弟改一下吧
VB
rivate Sub Command3_Click()
Dim icount As Integer, i As Long, j As Long, k As Long, p As Long, flag As Integer
 Dim sum As Single
Dim a() As Single, l() As Single, x() As Single, ark As Integer '定义数组
ReDim a(10, 11), l(10, 10), x(10)
p = 100
icount = CInt(Text1.Text)k = 0 '初始化
For i = 1 To icount
For j = 1 To icount + 1
 a(i, j) = CSng(Text2(k).Text)
 a(i, j) = p * a(i, j)
k = k + 1
Next j
Next i
 For k = 1 To icount - 1
   ark = Abs(a(1, k))  For i = k To icount '比校系数大小的函数
    
    If Abs(a(i)(k)) > ark Then'出错提示类型不匹配
    
      ark = Abs(a(i)(k))
      flag = i
     Else
       End If
      Next i
    If ark = 0 Then              '判断方程是否为线性方程,即是否合法
    
      Magbox "此方程组不合法"
    
    Else
    End If
    If flag = k Then
       Else
          For i = 1 To icount + 1 '交换行
             a(0)(i) = a(flag)(i)
         Next i
          For i = 1 To icount + 1
          a(flag)(i) = a(k)(i)
           Next i
          For i = 1 To icount + 1
           a(k)(i) = a(0)(i)
           Next i
         For i = k + 1 To icount
         For j = k + 1 To icount + 1
        a(i)(j) = a(i)(j) - a(k)(j) * a(i)(k) / a(k)(k)
          Next j
          Next i
      End If
   Next k
   x(icount) = a(icount)(icount + 1) / a(icount)(icount)
   For k = icount - 1 To 1
   
     sum = 0
     For j = k + 1 To icount
     
       sum = sum + a(k)(j) * x(j)
     Next j
       x(k) = (a(k)(icount + 1) - sum) / a(k)(k)
          k = k - 1
    Next k
    For i = 1 To icountText3 = Text3 & "X" & CStr(i) & "=" & Format(x(i), "0.00000") & "     "
    
End Sub
C
#include<math.h>
#include<stdio.h>
#define NUMBER 20
#define Esc   0x1b
#define Enter 0x0dfloat A[NUMBER][NUMBER+1] ,ark;
int flag,n;
exchange(int r,int k);
float max(int k);
message();main()
{
   float x[NUMBER];      /*此数组用于存放方程解*/
   int r,k,i,j;
   char celect;
   clrscr();
   
   printf("\n\n用Gauss列主元消元法解线性方程组");
   printf("\n\n1.解方程组请按Enter.");
   printf("\n\n2.退出程式请按Esc.");
   celect=getch();
   if(celect==Esc)
     exit(0);
   printf("\n\n 输入方程组的维数:n=");
   scanf("%d",&n);
     printf(" \n\n现在输入系数矩阵A和向量b:");
   for(i=1;i<=n;i++)
   {
    printf("\n\n请输入a%d1--a%d%d系数和向量b%d:",i,i,n,i); 
         /*实现将每一行中的系数和向量一次性输入,数之间用空格格开,输完后回车确定*/    for(j=1;j<=n+1;j++)     /*将刚才输入的数存入数组*/
    scanf("%f",&A[i][j]);
   }
   for(k=1;k<=n-1;k++)                       
   {
    ark=max(k);
    if(ark==0)                /*判断方程是否为线性方程,即是否合法*/
    {
      printf("\n\n此方程组不合法!");message();    
    }
    else if(flag!=k)
     exchange(flag,k);
     for(i=k+1;i<=n;i++)
     for(j=k+1;j<=n+1;j++)
     A[i][j]=A[i][j]-A[k][j]*A[i][k]/A[k][k];
   }
   x[n]=A[n][n+1]/A[n][n];
   for( k=n-1;k>=1;k--)
   {
     float me=0;
     for(j=k+1;j<=n;j++)
     {
       me=me+A[k][j]*x[j];
     }
       x[k]=(A[k][n+1]-me)/A[k][k];
   }
   for(i=1;i<=n;i++)
   {
     printf(" \n\nx%d=%f",i,x[i]);
   }
   message();
}exchange(int r,int k)         /*交换行的矩函数*/
{
  int i;
  for(i=1;i<=n+1;i++)
    A[0][i]=A[r][i];
  for(i=1;i<=n+1;i++)
    A[r][i]=A[k][i];
  for(i=1;i<=n+1;i++)
    A[k][i]=A[0][i];
}float max(int k)           /*比校系数大小的函数*/
{
  int i;
  float temp=0;
  for(i=k;i<=n;i++)
    if(fabs(A[i][k])>temp)
    {
      temp=fabs(A[i][k]);
      flag=i;
    }
  return temp;
}message()                                       /*实现菜单选择的函数*/
{
  printf("\n\n 继续运算按 Enter ,退出程式按 Esc!");
  switch(getch())
  {
   case Enter: main();
   case Esc: exit(0);
   default:{printf("\n\n不合法的输入!");message();}
  }
}

解决方案 »

  1.   

    Abs(a(i)(k))写错了,应该是Abs(a(i,k))吧
      

  2.   

    仔细看看,你下面还有很多a(i)(k)要改呢,呵呵
      

  3.   

    给了 提示 溢出错误
    Private Sub Command3_Click() '2
    Dim icount As Integer, i As Long, j As Long, k As Integer, p As Long, flag As Integer
     Dim sum As Single
    Dim b(10, 11) As Single, x(10) As Single, ark As Single '定义数组
    'ReDim b(10, 11), x(10)
    p = 100
    icount = CInt(Text1.Text)k = 0 '初始化
    For i = 1 To icount
    For j = 1 To icount + 1
     b(i, j) = CSng(Text2(k).Text)
     b(i, j) = p * b(i, j)
    k = k + 1
    Next j
    Next i
     For k = 1 To icount - 1
       ark = 0  For i = k To icount '比校系数大小的函数
        
         If Abs(b(i, k)) > ark Then
          
          ark = Abs(b(i, k))
          flag = i
         Else
           End If
          Next i
        If ark = 0 Then              '判断方程是否为线性方程,即是否合法
        
          MsgBox "此方程组不合法"
        
        Else
        
        If Not flag = k Then
        
              For i = 1 To icount + 1 '交换行
                 b(0, i) = b(flag, i)
             Next i
              For i = 1 To icount + 1
              b(flag, i) = b(k, i)
               Next i
              For i = 1 To icount + 1
               b(k, i) = b(0, i)
               Next i
             For i = k + 1 To icount
             For j = k + 1 To icount + 1
            b(i, j) = b(i, j) - ((b(k, j) * b(i, k)) / b(k, k))
              Next j
              Next i
          End If
          End If
       Next k
        x(icount) = b(icount, icount + 1) / b(icount, icount)(溢出错误)   For k = icount - 1 To 1
       
         sum = 0
         For j = k + 1 To icount
         
           sum = sum + b(k, j) * x(j)
         Next j
           x(k) = (b(k, icount + 1) - sum) / b(k, k)
              k = k - 1
        Next k
        For i = 1 To icountText3 = Text3 & "X" & CStr(i) & "=" & Format(x(i), "0.00000") & "     "
        Next i
    End Sub
      

  4.   

    你看看发生溢出的时候 icount,x(icount),b(icount,icount+1),b(icount,icount)的值分别是什么
      

  5.   

    For i = 1 To icount
    For j = 1 To icount + 1
     b(i, j) = CSng(Text2(k).Text)
     b(i, j) = p * b(i, j)
    k = k + 1
    Next j
    Next i
    这段可能有问题,因为如果icount=10那么k就可能达到10×11=110。难道你的text2控件数组有100多个??!!
      

  6.   

    Private Sub Command3_Click() '2
    Dim icount As Integer, i As Long, j As Long, k As Integer, p As Long, flag As Integer
     Dim sum As Single, sum1 As Single
    Dim b(10, 11) As Single, x(10) As Single, ark As Single, aa As Single '定义数组'ReDim b(10, 11), x(10)
    p = 100
     flag = 1
    icount = CInt(Text1.Text)k = 0 '初始化
    For i = 1 To icount
    For j = 1 To icount + 1
     b(i, j) = CSng(Text2(k).Text)
     b(i, j) = p * b(i, j)
    k = k + 1
    Next j
    Next i For k = 1 To icount - 1   ark = 0
       For i = k To icount '比校系数大小的函数
        
         If Abs(b(i, k)) > ark Then
          
          ark = Abs(b(i, k))
          flag = i
         Else
           End If
          Next i
          'Text3.Text = flag
      '  If ark = 0 Then              '判断方程是否为线性方程,即是否合法
        
         ' MsgBox "此方程组不合法"
        
        'Else
        
        If flag = 0 Then
        Else
              For i = 1 To icount + 1
                b(0, i) = b(flag, i)
              Next i
               For i = 1 To icount + 1
                 b(flag, i) = b(k, i)
                Next i
               For i = 1 To icount + 1
                  b(k, i) = b(0, i)
               Next i
              'Text3.Text = b(2, 1)
           For i = k + 1 To icount
           aa = b(i, k) / b(k, k)
             For j = 1 To icount + 1
            
            b(i, j) = b(i, j) - b(k, j) * aa
              Next j
              Next i
          'End If
          End If
       Next k
        'Text3.Text = b(2, 1)
       x(icount) = b(icount, icount + 1) / b(icount, icount)
        'Text3.Text = x(icount)
        'sum = 1   For k = icount - 1 To 1 Step -1
       
         sum = 0
         For j = k + 1 To icount
         
          sum = sum + x(j) * (b(k, j))
         Next j
         'Text3.Text = sum
           x(k) = (b(k, icount + 1) - sum) / b(k, k)
            
        Next k
        For i = 1 To icountText3 = Text3 & "X" & CStr(i) & "=" & Format(x(i), "0.00000") & "     "
      Next i
    End Sub