这是一道学生录入题,我用指针做的,结果很乱!请朋友们帮忙改改,谢谢了!(必须用指针做啊!呵!!!)
#include "stdio.h"
#define row 5
#define list 3
int main()
{
float (*p)[3];//五名学生,三门成绩指针
float *p_age,*p_sum;//每个学生的平均数,总成绩指针
float a[5][3];//五名学生,三门成绩;
float age[5],sum[5];//每个学生的平均数,总成绩
float l1[5],l2[5],l3[5];
float *pl_1,*pl_2,*pl_3;//二维数组给一维数组要用到指针
int i,j;
float s = 0,n,m,k,b,c,d;//交换成绩时要用到的数据
float age_all = 0,sum_all = 0;//五个学生的总平均数
//输入学生成绩函数
for(i = 0; i < row; i++)
{
printf("-----------请输入第%d个学生成绩--------------\n",i+1);
for(j = 0; j < list; j++)
{
printf("请输入成绩:","\n");
scanf("%f",&a[i][j]);
s = s + a[i][j];
sum[i] = s;
age[i] = s / 3;
}
sum_all +=sum[i];
s = 0;
}
age_all = sum_all / 5;
p = a;//初始化
p_age = age;//初始化
p_sum = sum;//初始化
pl_1 = l1;
pl_2 = l2;
pl_3 = l3;
//把二维数组,按列分配给一维数组函数
for(i = 0; i < row; i++)
{
*(pl_1+i) = *(*(p+i)+0);
}
for(i = 0; i < row; i++)
{
*(pl_2+i) = *(*(p+i)+1);
}
for(i = 0; i < row; i++)
{
*(pl_3+i) = *(*(p+i)+2);
}
//每科成绩最高分函数
//语文成绩最高分
pl_1 = l1;
pl_2 = l2;
pl_3 = l3;
b = 0;
for(i =0; i < row; i++)
{
if (b < *(pl_1+i))
{
b = *(pl_1+i);
}
}
//数学成绩最高分
c = 0;
for(i =0; i < row; i++)
{
if (c < *(pl_2+i))
{
c = *(pl_2+i);
}
}
//英语成绩最高分
d = 0;
for(i =0; i < row; i++)
{
if (d < *(pl_3+i))
{
d = *(pl_3+i);
}
}
p_age = age;//初始化
p_sum = sum;//初始化
pl_1 = l1;
pl_2 = l2;
pl_3 = l3;
//按平成绩、总成绩排序函数
for(i =0; i < row; i++)
{
for(j =0; j < row-i-1; j++)
{
if ((*(p_age+j) < *(p_age+j+1)) && (*(p_sum+j) < *(p_sum+j+1)))
{
//交换平均数
n = *(p_age+j);
*(p_age+j) = *(p_age+j+1);
*(p_age+j+1)= n;
//交换总成绩
m = *(p_sum+j);
*(p_sum+j) = *(p_sum+j+1);
*(p_sum+j+1) = m;
//交换成绩
k = *(pl_1+i);
*(pl_1+i) = *(pl_1+i+1);
*(pl_1+i+1) = k;
//=================
k = *(pl_2+i);
*(pl_2+i) = *(pl_2+i+1);
*(pl_2+i+1) = k;
//=================
k = *(pl_3+i);
*(pl_3+i) = *(pl_3+i+1);
*(pl_3+i+1) = k;
}
}
p_age = age;//初始化
p_sum = sum;//初始化
pl_1 = l1;
pl_2 = l2;
pl_3 = l3;
}
//把一维数组里的值再给二维数组函数
p_age = age;//初始化
p_sum = sum;//初始化
p = a;
pl_1 = l1;
pl_2 = l2;
pl_3 = l3;
for(i = 0; i < row; i++)
{
*(*(p+i)+0) = *(pl_1+i) ;
}
for(i = 0; i < row; i++)
{
*(*(p+i)+1) = *(pl_2+i);
}
for(i = 0; i < row; i++)
{
*(*(p+i)+2)= *(pl_3+i);
}
//显示学生成绩函数
p_age = age;//初始化
p_sum = sum;//初始化
p = a;
printf("\n-------------按平成绩、总成绩排序---------------------------\n");
printf("语文\t数学\t英语\t平均成绩\t总成绩\n");
printf("\n");
for(i = 0; i < row; i++)
{
for(j = 0; j < list; j++)
{
printf("%.2f\t",*(*(p+i)+j));
}
printf("%.2f\t\t,%.2f\t",*(p_age+i),*(p_sum+i));
printf("\n----------------------------------------\n");
}
printf("语文成绩最高分是:%.2f\t",b);
printf("\n");
printf("数学成绩最高分是:%.2f\t",c);
printf("\n");
printf("英语成绩最高分是:%.2f\t",d);
printf("\n");
printf("五个学生的总平均成绩:%.2f\t",age_all);
printf("\n");
printf("\n");
//按语文成绩排序函数
p_age = age;//初始化
p_sum = sum;//初始化
pl_1 = l1;
pl_2 = l2;
pl_3 = l3;
for(i =0; i < row; i++)
{
for(j =0; j < row-i-1; j++)
{
if (*(pl_1+i) < *(pl_1+i+1))
{
//交换平均数
n = *(p_age+j);
*(p_age+j) = *(p_age+j+1);
*(p_age+j+1)= n;
//交换总成绩
m = *(p_sum+j);
*(p_sum+j) = *(p_sum+j+1);
*(p_sum+j+1) = m;
//交换成绩
k = *(pl_1+i);
*(pl_1+i) = *(pl_1+i+1);
*(pl_1+i+1) = k;
//=================
k = *(pl_2+i);
*(pl_2+i) = *(pl_2+i+1);
*(pl_2+i+1) = k;
//=================
k = *(pl_3+i);
*(pl_3+i) = *(pl_3+i+1);
*(pl_3+i+1) = k;
}
}
p_age = age;//初始化
p_sum = sum;//初始化
pl_1 = l1;
pl_2 = l2;
pl_3 = l3;
}
//把一维数组里的值再给二维数组函数
p_age = age;//初始化
p_sum = sum;//初始化
p = a;
pl_1 = l1;
pl_2 = l2;
pl_3 = l3;
for(i = 0; i < row; i++)
{
*(*(p+i)+0) = *(pl_1+i) ;
}
for(i = 0; i < row; i++)
{
*(*(p+i)+1) = *(pl_2+i);
}
for(i = 0; i < row; i++)
{
*(*(p+i)+2)= *(pl_3+i);
}
printf("\n-------------按语文成绩排序---------------------------\n");
printf("语文\t数学\t英语\n");
printf("\n");
for(i = 0; i < row; i++)
{
for(j = 0; j < list; j++)
{
printf("%.2f\t",*(*(p+i)+j));
}
printf("\n---------------------\n");
}
return 0;
}