一道函数指针调用的有关问题,请高手帮忙解决

一道函数指针调用的问题,请高手帮忙解决
程序要求:
在程序中内设一个字符串作为该程序可以被执行的密码,执行程序时使用命令行参数,若命令行参数与密码相等,则程序可以执行;否则报告用户:“密码错。对不起,你没有执行该程序的权限。”

编写主函数,录入若干学生(n> =0)的学号和(物理、数学、外语)三门课程考试成绩,数据类型都是整型。定义指向函数的指针void   (*func)   (int   (*   )[4],   int   ),用指向函数的指针完成对子函数的调用。

子函数共四个,函数头结构:void   子函数名(int   (*   score)[4],   int   n),分别对应功能如下:

输出每门功课最高分及对应学生的学号和最低分及对应学生的学号;

输出三门课最高总分及对应学生的学号和最低总分及对应学生的学号;

输出每门课的平均成绩;

输出成绩低于60分的同学的学号和科目。

已完成部分程序,函数指针调用部分遇到问题,如何编写子函数?
#include   <stdio.h>
#include   <string.h>
#define   SIZE   5
void   f1
void   f2
void   f3
void   f4

int   main(int   argc,char   *argv[])
{ if   (argc==1);
return   0
char   b[7]= "063115 ";
int   c=strcmp(argv[1],b);
if(c!=0)
{printf( "密码错。对不起,你没有执行该程序的权限。 ");
return   0
}
else


int   tab[SIZE][3]={0};
int   i,;
for(i=0;i <=SIZE;i++){
printf( "请输入数学成绩: ");
scanf( "%d ",&   tab[1][i]);
}
for(i=0;i <=SIZE;i++){
printf( "请输入物理成绩: ");
scanf( "%d ",&   tab[2][i]);
}
for(i=0;i <=SIZE;i++){
printf( "请输入英语成绩: ");
scanf( "%d ",&   tab[3][i]);

}
f1(const   int   tab[SIZE][3]   );
f2(const   int   tab[SIZE][3]   );
f3(const   int   tab[SIZE][3]   );
f4(const   int   tab[SIZE][3]   );
}
return   0;


------解决方案--------------------
我要说的就是你那tab数组是从下标1开始的,
其实还是分函数的定义和声明。你用的时候传的是一个双维数组,那你的声明和定义应该是
void 子函数名(int score[SIZE][3]),你那样不对吧?
------解决方案--------------------
你先不要管函数指针,先把函数写好再说.
你觉得这样写对吗?
列数定义的是3,你下面使用时好象超过了吧?你要先把基本的弄好,再说其他的.

int tab[SIZE][3]={0};
int i,;
for(i=0;i <=SIZE;i++){
printf( "请输入数学成绩: ");
scanf( "%d ",& tab[1][i]);
}
for(i=0;i <=SIZE;i++){
printf( "请输入物理成绩: ");
scanf( "%d ",& tab[2][i]);
}
for(i=0;i <=SIZE;i++){
printf( "请输入英语成绩: ");
scanf( "%d ",& tab[3][i]);