首先声明,我是菜鸟,对于您这样的高手来说,估计这个程序很垃圾,但是我不是学这个专业的,拿来做一些排列计算,谢谢啦。
小弟编了个程序计算实验数据。思路是这样的:先定义几个元素的参数,形成不同的数组,比如FeA等,这些数组中用到第2行和第3行,一列是一组,也就是说每个元素有很多组参数,比如FeA有18组参数。然后根据需要选择两个元素,程序中输入JZ1和JZ2来选择元素,利用这两个代号选择完元素后,排列组合不同的参数,每次排列都计算一组值出来。这里我排列出来一组就放到一个数组里面Ia[][],但是运行发现每次排列出来的都是一个元素的参数,和预想的不一样。请各位帮忙看看嵌套循环赋值组合那段程序错在那里了。谢谢
#include "stdafx.h"
#include <iostream>
#include <cmath>
#include <string>
using namespace std;void main()

double FeA[3][19]={{0},{0,3,3.0393,3.1577,3.1737,3.2100,3.3183,3.5559,3.5955,3.7743,3.9723,4.2075,4.4367,4.6905,4.9806,5.6994,5.8368,5.9127,6},{0,0.1161,0.11582,0.11501,0.11434,0.11460,0.11384,0.11251,0.11187,0.11059,0.10909,0.10751,0.10589,0.10408,0.10202,0.09691,0.09583,0.09539,0.09477}};
    cout << "FeA代号为1" << endl;
    double FeB[3][19]={{0},{0,3,3.0024,3.0095,3.0133,3.0753,3.2826,3.3096,3.3314,3.3823,3.5709,4.0021,4.2400,4.4610,4.7144,5.3710,5.8436,5.9153,6},{0,0.1161,0.11609,0.11907,0.11606,0.11590,0.11535,0.11527,0.11522,0.11508,0.11458,0.11343,0.11279,0.11220,0.11153,0.10978,0.10852,0.10833,0.10810}};
    cout << "FeB代号为2" << endl;
    double Al[3][7]={{0},{0,1,1.033,1.1734,2.5296,2.8970,3},{0,0.119,0.119,0.119,0.119,0.119,0.119}};
    cout << "Al代号为3" << endl;
    double Cr[3][19]={{0},{0,4,3.9851,3.9515,3.9369,3.8779,3.6807,3.6487,3.6177,3.3972,3.35838,3.2932,3.1635,3.1290,3.0222,3.0025,3.0006,3.0002,3},{0,0.10670,0.10695,0.10751,0.10775,0.10874,0.11202,0.11256,0.11307,0.11675,0.11747,0.11848,0.12065,0.12122,0.12300,0.12333,0.12336,0.12337,0.12337}};
    cout << "Cr代号为4" << endl;
    double Nd[3][19]={{0},{0,4,4.0014,4.0029,4.0167,4.0461,4.0947,4.2593,4.3763,4.4184,4.4314,4.4865,4.6092,4.8139,4.8999,4.9712,4.9959,4.9980,5},{0,0.15606,0.15603,0.15599,0.15568,0.15502,0.15393,0.15022,0.14758,0.14663,0.14634,0.14509,0.14233,0.13771,0.13578,0.13417,0.13361,0.13356,0.13352}};
    cout << "Nd代号为5" << endl;
    double C[3][7]={{0},{0,2,2.0962,2.3362,3.6638,3.9038,4},{0,0.07630,0.07630,0.07630,0.07630,0.07630,0.07630}};
    cout << "C代号为6" << endl;
    double La[3][11]={{0},{0,2,2.0365,2.0958,2.1765,2.2922,2.3751,2.7004,2.7915,2.9556,3},{0,0.15174,0.15304,0.15515,0.15801,0.16212,0.16507,0.17663,0.17986,0.18569,0.18727}};
    cout << "La代号为7" << endl;
    double CeA[3][11]={{0},{0,2,2.0365,2.0958,2.1765,2.2922,2.3751,2.7004,2.7915,2.9556,3},{0,0.15093,0.15223,0.15434,0.15720,0.16131,0.16426,0.17582,0.17906,0.18489,0.18647}};
    cout << "CeA代号为8" << endl;
    double CeB[3][19]={{0},{0,2,2.0025,2.0070,2.0266,2.0739,2.1700,2.1826,2.2005,2.3194,2.3646,2.4530,2.5680,2.6909,2.8366,2.8889,2.9536,2.9792,3},{0,0.15093,0.15089,0.15081,0.15046,0.14962,0.14791,0.14769,0.14737,0.14526,0.14445,0.14267,0.14084,0.13866,0.13607,0.13514,0.13399,0.13354,0.13317}};
    cout << "CeB代号为9" << endl;
    int Ia[5][40]={{0},{0},{0},{0},{0}};//第一行存放每个键的Ia,第三四行存放两个原子的代号
    double D[40];//第二行存放实验键距D
    int JZ1,JZ2;//输入第一个基准原子和第二个原子代号,用来组合排列原子杂阶。
    int x1,y1;//两种原子的个数
    int m,n;//确定两个原子的最高杂阶数目,如果是三种就得再加个变量,嵌套循环计算
    cout << "输入第一个基准原子代号,排列组合用到";
    cin >> JZ1;
    cout << "输入第一个原子的个数:";
    cin >> x1;
    cout <<"输入第一个基准原子的总共杂阶数(不要乱输,应该和杂阶表一样):";
    cin >> m;
    cout << "输入第二个基准原子代号,排列组合用到";
    cin >> JZ2;
    cout << "输入第二个原子的个数:";
    cin >> y1;
    cout <<"输入第二个原子的总共杂阶数(不要瞎输入):";
    cin >>n;
    int Ix;
    cout << "输入总键数";
    cin >> Ix;
    int i;
    for (i=1;i<=Ix;i++)
    {     
        cout << "输入第" <<i<<"个键的键数I:";
        cin >> Ia[1][i];
        cout << "输入第" <<i<<"个键的实验键距:";
        cin >> D[i];
        cout << "输入该键的第1个原子代号:";
        cin >> Ia[3][i];
        cout << "输入该键的第2个原子代号:";
        cin >> Ia[4][i];
    }//第一行存放每个键的Ia,第二行存放实验键距D,第三四行存放两个原子的代号
   int num=0;//存放误差范围内的组合数。
    float Zn,x,y,B;//总电子数目xy,B值
    cout << "输入B值:";
    cin >> B;
    double count[40][10];
    int a,b,c;
    for (a=1;a<=m;a++)
    {
        for (b=1;b<=n;b++)
        {
            for(i=1;i<=Ix;i++)
            {
                if (Ia[3][i]=JZ1)//如果这个原子时基准原子,那就用m来寻找杂化表里的数据。
                {
                  switch (JZ1)
                  {
                   case 1: count[i][1]=FeA[1][a];x=FeA[1][a];count[i][2]=FeA[2][a];break;//第一个原子的n,R(i)放在第1,2列;用x存放JZ1这个电子数,用来计算总电子数
                   case 2: count[i][1]=FeB[1][a];x=FeB[1][a];count[i][2]=FeB[2][a];break;
                   case 4 : count[i][1]=Cr[1][a];x=Cr[1][a];count[i][2]=Cr[2][a];break;
                   case 3 : count[i][1]=Al[1][a];x=Al[1][a];count[i][2]=Al[2][a];break;
                   case 5 : count[i][1]=Nd[1][a];x=Nd[1][a];count[i][2]=Nd[2][a];break;
                   case 6 : count[i][1]=C[1][a];x=C[1][a];count[i][2]=C[2][a];break;
                   case 7 : count[i][1]=La[1][a];x=La[1][a];count[i][2]=La[2][a];break;
                   case 8 : count[i][1]=CeA[1][a];x=CeA[1][a];count[i][2]=CeA[2][a];break;
                   case 9 : count[i][1]=CeB[1][a];x=CeB[1][a];count[i][2]=CeB[2][a];break;
                  }
                }
               if(Ia[3][i]=JZ2)
              {
                   switch (JZ2)
                   
                   {
                   case 1:count[i][1]=FeA[1][b];y=FeA[1][b];count[i][2]=FeA[2][b];break;//第一个原子的n,R(i)放在第1,2列;用y存放JZ2这个电子数,用来计算总电子数
                   case 2: count[i][1]=FeB[1][b];y=FeB[1][b];count[i][2]=FeB[2][b];break;
                   case 4 : count[i][1]=Cr[1][b];y=Cr[1][b];count[i][2]=Cr[2][b];break;
                   case 3 : count[i][1]=Al[1][b];y=Al[1][b];count[i][2]=Al[2][b];break;
                   case 5 : count[i][1]=Nd[1][b];y=Nd[1][b];count[i][2]=Nd[2][b];break;
                   case 6 : count[i][1]=C[1][b];y=C[1][b];count[i][2]=C[2][b];break;
                   case 7 : count[i][1]=La[1][b];y=La[1][b];count[i][2]=La[2][b];break;
                   case 8 : count[i][1]=CeA[1][b];y=CeA[1][b];count[i][2]=CeA[2][n];break;
                   case 9 : count[i][1]=CeB[1][b];y=CeB[1][b];count[i][2]=CeB[2][b];break;
                   }
              }
              if (Ia[4][i]=JZ1)
              {
                  switch (JZ1)
                  {
                   case 1: count[i][3]=FeA[1][a];x=FeA[1][a];count[i][4]=FeA[2][a];break;//第2个原子的n,R(i)放在第3,4列;用x存放JZ1这个电子数,用来计算总电子数
                   case 2: count[i][3]=FeB[1][a];x=FeB[1][a];count[i][4]=FeB[2][a];break;
                   case 4 : count[i][3]=Cr[1][a];x=Cr[1][a];count[i][4]=Cr[2][a];break;
                   case 3 : count[i][3]=Al[1][a];x=Al[1][a];count[i][4]=Al[2][a];break;
                   case 5 : count[i][3]=Nd[1][a];x=Nd[1][a];count[i][4]=Nd[2][a];break;
                   case 6 : count[i][3]=C[1][a];x=C[1][a];count[i][4]=C[2][a];break;
                   case 7 : count[i][3]=La[1][a];x=La[1][a];count[i][4]=La[2][a];break;
                   case 8 : count[i][3]=CeA[1][a];x=CeA[1][a];count[i][4]=CeA[2][a];break;
                   case 9 : count[i][3]=CeB[1][a];x=CeB[1][a];count[i][4]=CeB[2][a];break;
                  }
              }
               if (Ia[4][i]=JZ2)
              {
                  switch (JZ2)
                  {
                   case 1: count[i][3]=FeA[1][b];y=FeA[1][b];count[i][4]=FeA[2][b];break;//第2个原子的n,R(i)放在第3,4列;用y存放JZ2这个电子数,用来计算总电子数
                   case 2: count[i][3]=FeB[1][b];y=FeB[1][b];count[i][4]=FeB[2][b];break;
                   case 4 : count[i][3]=Cr[1][b];y=Cr[1][b];count[i][4]=Cr[2][b];break;
                   case 3 : count[i][3]=Al[1][b];y=Al[1][b];count[i][4]=Al[2][b];break;
                   case 5 : count[i][3]=Nd[1][b];y=Nd[1][b];count[i][4]=Nd[2][b];break;
                   case 6 : count[i][3]=C[1][b];y=C[1][b];count[i][4]=C[2][b];break;
                   case 7 : count[i][3]=La[1][b];y=La[1][b];count[i][4]=La[2][b];break;
                   case 8 : count[i][3]=CeA[1][b];y=CeA[1][b];count[i][4]=CeA[2][b];break;
                   case 9 : count[i][3]=CeB[1][b];y=CeB[1][b];count[i][4]=CeB[2][b];break;
                  }
              }
            }//建立一个计算数组完毕
        Zn=x*x1+y*y1;
        float NN=Ia[1][1];
        i=0;
        for(i=2;i<=Ix;i++)
        {
            count[i][5]=pow(10,(count[i][2]+count[i][4]-D[i]-count[1][2]-count[1][4]+D[1])/B);//第5列放r
            NN=NN+count[i][5]*Ia[1][i];
        }
        count[1][6]=Zn/NN;//第6列存放nc值
        i=0;
        for(i=2;i<=Ix;i++)
        {
            count[i][6]=count[1][6]*count[i][5];
        }
        i=0;
        for (i=1;i<=Ix;i++)
        {
            count[i][7]=count[i][2]+count[i][4]-B*log10(count[i][6]);//第7列存放理论键距
            count[i][8]=fabs(count[i][7]-D[i]);//第8列存放键距误差差
        }
        if (count[i][8]<0.005)//如果误差小于0.005则num+1,并输出计算结果
        {
            num=num+1;
            cout << "原子" << JZ1 <<"杂阶"<<a <<"   ,";
            cout << "原子" << JZ2 <<"杂阶"<<b<<"   :"<<endl;
            cout <<"键数I"<< "实验键距," << "电子对数nc  ," << "理论键距,  " << " 误差" << endl;
            for(i=1;i<=Ix;i++)
            {
                cout << Ia[1][i]<< ",    ";
                cout << D[i]<< ",    ";
                cout << count[i][1]<<"  ,";
                cout << count[i][2]<<"  ,";
                cout << count[i][3]<<"  ,";
                cout <<count[i][4]<<"  ,";
                cout << count[i][5]<<" ,";
                cout << count[i][6]<< ",    ";
                cout << count[i][7]<< ",    ";
                cout << count[i][8] << endl;
                        
            }
                cout << "总电子数"<<Zn<<endl;
        }
        }
        cout << "符合要求的原子状态有: "<<num<<"组";
        system("pause");
    }
    cout << "符合要求的原子状态总共有: "<<num<<"组";
    system("pause");
}