#include <stdio.h>
#define STUD 30
#define COURSE 5
void Total(int *score,int sum[],float aver[],int m,int n);
void Print(int*score,int sum[],float aver[],int m,int n);
int main(void)
{
int i,j,m,n,score[STUD][COURSE],sum[STUD]; float aver[STUD];
printf("How many courses?\n"); scanf("%d",&n);
printf("How many students?\n"); scanf("%d",&m);
printf("Input scores:\n");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{ printf("Input scores:\n"); scanf("%d",&score[i][j]);
}
}
Total(*score,sum,aver,m,n); Print(*score,sum,aver,m,n);
return 0;}
void Total(int*pScore,int sum[],float aver[],int m,int n)
{
int i,j;
for(i=0;i<m;i++)
{ sum[i]=0;
for(j=0;j<n;j++)
{
sum[i]=sum[i]+pScore[i*n+j];
}
aver[i]=(float)sum[i]/n;
}
}
void Print(int*pScore,int sum[],float aver[],int m,int n)
{
int i,j;
printf("Result:\n");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
printf("%4d\t",pScore[i*n+j]);
} printf("%5d\t%6.1lf\n",sum[i],aver[i]);
}
}


uj5u.com熱心網友回復:
問題出現在這里:score[STUD][COURSE]
所以
for(j=0;j<n;j++)
{
sum[i]=sum[i]+pScore[i*n+j];
}
就是錯的
sum[i]=sum[i]+pScore[i*COURSE+j];
這樣才可以
下面的Print函式也是同樣的問題
uj5u.com熱心網友回復:
列指標每次移動的是陣列的列數,原陣列的行就對應列指標移動幾次course是嗎?那些陣列空下來的記憶體就是空的書上說列指標相當于把二維陣列當成一維陣列
按照這個題就是不連續的一串數咯
uj5u.com熱心網友回復:
int a[2][3] = {1,2,3,4,5,6};a[0] == {1,2,3} a[0][0] == 1 a[0][1] == 2 a[0][2] == 3
a[1] == {4,5,6} a[1][0] == 4 a[1][1] == 5 a[1][2] == 6
二維陣列就和excel表格一樣,行數和列數2個一起才能確定具體的位置,
uj5u.com熱心網友回復:
int score[STUD][COURSE]; 這是原始定義
記憶體結構上就是STUD個長度為COURSE的一維陣列一個接一個的存放,可以當作一維陣列來使用沒有問題
score[I][j]在記憶體當中距離score首地址的距離就是 I*COURSE+j
所以當一維陣列使用的時候,也是要按照這個來計算位置
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/137722.html
標籤:新手樂園
上一篇:課設要求有些不明白,麻煩指教
下一篇:哪位大佬分析一下這題的演算法
