小春 發問時間: 電腦與網際網路程式設計 · 1 0 年前

陣列相加 做成副程式

讀進一個M.dat檔然後有兩個陣列

然後相加後印出要如何讓陣列相加這個動作在副程式執行?

main()

{

FILE *fp;

char filename[20] = "M.dat";

int i=0,j=0,k,a,count=1;

int temp[3][4],temp2[3][4],temp3[3][4];

fp= fopen(filename,"r");

while(fscanf(fp,"%d",&temp[i][j])!=EOF)

{

j++;

for(k=0;k<count;k++)

{

if(j==4)

{

j=0;

i++;

count++;

}

}

if(i==3)

{

break;

}

}

i=0,j=0,count=1;

while(fscanf(fp,"%d",&temp2[i][j])!=EOF)

{

j++;

for(k=0;k<count;k++)

{

if(j==4)

{

j=0;

i++;

count++;

}

}

if(i==3)

{

break;

}

}

i=0;

for(i=0;i<count-1;i++)

{

printf("%2d %2d %2d %2d\n",temp[i][0],temp[i][1],temp[i][2],temp[i][3]);

}

i=0;

printf("\n");

for(i=0;i<count-1;i++)

{

printf("%2d %2d %2d %2d\n",temp2[i][0],temp2[i][1],temp2[i][2],temp2[i][3]);

}

printf("\n相加後結果\n");

for(i=0;i<count-1;i++)

{

temp3[i][0]=temp[i][0]+temp2[i][0];

temp3[i][1]=temp[i][1]+temp2[i][1];

temp3[i][2]=temp[i][2]+temp2[i][2];

temp3[i][3]=temp[i][3]+temp2[i][3];

printf("%2d %2d %2d %2d\n",temp3[i][0],temp3[i][1],temp3[i][2],temp3[i][3]);

}

fclose(fp);

}

else

{

printf("檔案開啟錯誤....\n");

}

system("pause");

}

1 個解答

評分
  • 1 0 年前
    最佳解答

    下面是我修改你的程式後的結果

    並且你有漏掉一個if我也幫你加上去(在判斷是否開檔成功)

    我是用指標的方式修改的

    不知道是否能符合你的要求

    #include<stdio.h>

    #include<stdlib.h>

    void add(int *, int *, int *, int);

    int main(void)

    {

    FILE *fp;

    char filename[20] = "M.dat";

    int i=0,j=0,k,a,count=1;

    int temp[3][4],temp2[3][4],temp3[3][4];

    fp= fopen(filename,"r");

    if(fp!=NULL)

    {

    while(fscanf(fp,"%d",&temp[i][j])!=EOF)

    {

    j++;

    for(k=0;k<count;k++)

    {

    if(j==4)

    {

    j=0;

    i++;

    count++;

    }

    }

    if(i==3)

    {

    break;

    }

    }

    i=0,j=0,count=1;

    while(fscanf(fp,"%d",&temp2[i][j])!=EOF)

    {

    j++;

    for(k=0;k<count;k++)

    {

    if(j==4)

    {

    j=0;

    i++;

    count++;

    }

    }

    if(i==3)

    {

    break;

    }

    }

    for(i=0;i<count-1;i++)

    {

    printf("%2d %2d %2d %2d\n",temp[i][0],temp[i][1],temp[i][2],temp[i][3]);

    }

    i=0;

    printf("\n");

    for(i=0;i<count-1;i++)

    {

    printf("%2d %2d %2d %2d\n",temp2[i][0],temp2[i][1],temp2[i][2],temp2[i][3]);

    }

    printf("\n相加後結果\n");

    add(temp[0], temp2[0], temp3[0], count);

    for(i=0;i<count-1;i++)

    {

    printf("%2d %2d %2d %2d\n",temp3[i][0],temp3[i][1],temp3[i][2],temp3[i][3]);

    }

    fclose(fp);

    }

    else

    {

    printf("檔案開啟錯誤....\n");

    }

    system("pause");

    return 0;

    }

    void add(int *temp, int *temp2, int *temp3, int count)

    {

    int i;

    for(i=0;i<count-1;i++)

    {

    *(temp3+ i * 4) = *(temp + i * 4) + *(temp2 + i * 4);

    *(temp3+ i * 4 + 1) = *(temp + i * 4 + 1) + *(temp2 + i * 4 + 1);

    *(temp3+ i * 4 + 2) = *(temp + i * 4 + 2) + *(temp2 + i * 4 + 2);

    *(temp3+ i * 4 + 3) = *(temp + i * 4 + 3) + *(temp2 + i * 4 + 3);

    }

    }

    參考資料: 我自己
還有問題?馬上發問,尋求解答。