//例 8.24 //有两个整数a和b,由用户输入1,2或3。 //如 输入1,程序就给出a和b中大者, // 输入2,就给出a和b中小者, // 输入3,则求a与b之和。 #includeint max(int x, int y) { x > y ? x : y; } int min(int x, int y) { x < y ? x : y; } int add(int a, int b) { return a + b; } int main() { int a = 5, b = 2; int x; printf("输入1,2或者3:n"); scanf("%d", &x); int(*p)(int, int)=NULL; //指针指向函数入口 if (x == 1) p = max; else if (x == 2) p = min; else if (x == 3) p = add; else printf("输入有误,请重输入!"); //打印 if (x == 1) printf("最大值为%d:n",max(a,b));//或者(*p)(a,b) 两种表示意义相同! else if (x == 2) printf("最小值为%d:n", min(a,b)); else if (x == 3) printf("和为%d:n", add(a,b)); }
//例 8.25 //有a个学生,每个学生有b门课程的成绩。 //要求在用户输入学生序号以后,能输出该学生的全部成绩。 //用指针函数来实现。 #include#define M 2 #define N 3 int* search(int(*s)[M], int x) { return *(s + x - 1);//返回行 即姓名 } int main() { int s[M][N] = { {65,80,75},{90,85,60} }; int x,j; printf("输入学生序号:n"); scanf("%d", &x); int*p=search(s, x);//指针接收返回的行指针! for (j = 0; j < N; j++) printf("此学生第%d门成绩为:%dn",j+1, *(p + j)); }



