一道函数指针调用的有关问题,请高手帮忙解决
一道函数指针调用的问题,请高手帮忙解决
程序要求:
在程序中内设一个字符串作为该程序可以被执行的密码,执行程序时使用命令行参数,若命令行参数与密码相等,则程序可以执行;否则报告用户:“密码错。对不起,你没有执行该程序的权限。”
编写主函数,录入若干学生(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]);
程序要求:
在程序中内设一个字符串作为该程序可以被执行的密码,执行程序时使用命令行参数,若命令行参数与密码相等,则程序可以执行;否则报告用户:“密码错。对不起,你没有执行该程序的权限。”
编写主函数,录入若干学生(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]);