首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

大一新生。如何把如下二维数组改成指针形式

2013-07-08 
大一新生求助。。怎么把如下二维数组改成指针形式数组形式如下#includestdio.hint main(){float a[5][4],a

大一新生求助。。怎么把如下二维数组改成指针形式
数组形式如下
#include<stdio.h>
int main()
{
float a[5][4],average;
int i,j;
float pingjunfen(float a[][4]);
float bujige(float a[5][4]);
float youxiu(float a[5][4]);
for(j=0;j<5;j++)
{
printf("请输入第%d科成绩\n",j+1);
   for(i=0;i<4;i++)
scanf("%f",&a[j][i]);
}
average=pingjunfen(a);
bujige(a);
youxiu(a);
printf("第一科平均分=%f\n",average);
 return 0;
}  
float pingjunfen(float a[][4])
{
float b,sum=0;
int i;
    for(i=0;i<4;i++)
sum=sum+a[0][i];
     b=sum/4;
return(b);
}
float bujige(float a[5][4])
{
int i,j,m=0,sum=0;
for(i=0;i<4;i++)
{
for(j=0;j<5;j++)
{
if(a[j][i]<60)
m++;
}
if(m>2)
printf("%d号不及格,成绩为%f %f %f %f %f,平均分为%f\n",i+1,a[0][i],a[1][i],a[2][i],a[3][i],a[4][i],(a[0][i]+a[1][i]+a[2][i]+a[3][i]+a[4][i])/5);
m=0;
}
return 0;
}
float youxiu(float a[5][4])
{
int i,j,m=0;
for(i=0;i<4;i++)
{
for(j=0;j<5;j++)
{
if(a[j][i]>85)
m++;
}
if(m==5)
printf("%d号优秀\n",i+1);
m=0;
}
return 0;
}
希望哪个高人帮忙改成指针形式,感激不尽。。。
这是一个关于4个学生5门成绩的数组,作业题来的。。。
pingjunfen()是指第一科成绩的平均分
bujige()是指有两门科目以上不及格
youxiu()是指所有科目85分以上 二维数组 指针
[解决办法]


#include<stdio.h>

float pingjunfen(float (*a)[4]);
float bujige(float (*a)[4]);
float youxiu(float (*a)[4]);

int main()
{
float a[5][4],average;
int i,j;
for(j=0;j<5;j++)
{
printf("请输入第%d科成绩\n",j+1);
for(i=0;i<4;i++)
{
scanf("%f",*(a + j) + j);
}
}
average=pingjunfen(a);
bujige(a);
youxiu(a);
printf("第一科平均分=%f\n",average);
return 0;
}  
float pingjunfen(float (*a)[4])
{
float b,sum=0;


int i;
for(i=0;i<4;i++)
sum += *(*a + i);
b=sum/4;
return(b);
}
float bujige(float (*a)[4])
{
int i,j,m=0,sum=0;
for(i=0;i<4;i++)
{
for(j=0;j<5;j++)
{
if (*(*(a + j) + i) < 60)
m++;
}
if(m>2)
{
printf("%d号不及格,成绩为%f %f %f %f %f,平均分为%f\n",
i+1,a[0][i],a[1][i],a[2][i],a[3][i],a[4][i],(a[0][i]+a[1][i]+a[2][i]+a[3][i]+a[4][i])/5);
}
m=0;
}
return 0;
}
float youxiu(float (*a)[4])
{
int i,j,m=0;
for(i=0;i<4;i++)
{
for(j=0;j<5;j++)
{
if (*(*(a + j) + i) > 85)
m++;
}
if(m==5)
{
printf("%d号优秀\n",i+1);
}
m=0;
}
return 0;



[解决办法]
//在堆中开辟一个4×5的二维int数组
#include <stdio.h>
#include <malloc.h>
int **p;
int i,j;
void main() {
    p=(int **)malloc(4*sizeof(int *));
    if (NULL==p) return;
    for (i=0;i<4;i++) {
        p[i]=(int *)malloc(5*sizeof(int));
        if (NULL==p[i]) return;
    }
    for (i=0;i<4;i++) {
        for (j=0;j<5;j++) {
            p[i][j]=i*5+j;
        }
    }
    for (i=0;i<4;i++) {
        for (j=0;j<5;j++) {
            printf(" %2d",p[i][j]);
        }
        printf("\n");
    }
    for (i=0;i<4;i++) {
        free(p[i]);
    }
    free(p);
}
//  0  1  2  3  4
//  5  6  7  8  9
// 10 11 12 13 14
// 15 16 17 18 19

[解决办法]
float (*p)[4];//首先从 P 处开始,先与*结合,说明 P 是一个指针


//然后再与[]结合(与"()"这步可以忽略,只是为
//了改变优先级),说明指针所指向的内容是一个
//数组,然后再与 float结合,说明数组里的元素是
//浮点型的.所以 P 是一个指向由4个浮点型数据组成的数
//组的指针
[解决办法]
两种形式吧,(其实数组本身就可以看做指针常量)其一是使用数组指针,

int array[4][5]; 
int (*p)[5] = array;

其二是使用普通的一维指针:
int array[4][5]; int *p = &array[0][0];

p要遍历所有元素,则需要偏移4 * 5 - 1个int类型的字节长度。

热点排行