#include "stdio.h" void max(int *p,int N) /*求最大数的函数(void--无返回值),定义指针*/ { int i,max=*p; /*定义整型i;设指针指向的第一个值是最大值*/ for(i=0;i<N;i++,p++) /*for循环,逐个指针向下*/ { if(max<*p) /*假如后面出现一个比前一个数值大的数*/ max=*p; /*马上将较大的数赋给max*/ } printf("最大的数是%d\n",max); /*格式化输出最大数*/ } void min(int *p,int N) /*求最小数的函数,定义指针*/ { int i,min=*p; /*设指针指向的第一个值是最小值*/ for(i=0;i<N;i++,p++) /*for循环,逐个指针向下*/ { if(min>*p) /*假如后面出现一个比前一个数值小的数*/ min=*p; /*马上将较小的数赋给max*/ } printf("最小的数是%d",min); /*格式化输出最大数*/ } main() /*主函数说:我才是老大,上面的两个函数都得听我的!O(∩_∩)O哈!*/ { int a[10],*p,i; /*定义一个长度为10的数组,一个指针和一个整型i*/ p=a; /*将数组的第一个地址赋给指针的第一个地址,也就是把数组和指针对应。即a[0]=*p; a[1]=*(p+1)*;a[2]=*(p+2);……*/ puts("请输入十个整数:\n"); /*屏幕显示用户提示信息;puts()--即put string--字符串输出命令*/ for(i=0;i<10;i++) /*for循环依次向下*/ scanf("%d",&a[i]); /*扫描用户输入的数据*/ puts("\n"); /*换行*/ max(p,10); min(a,10); /*按最大&最小函数格式分别调用它们,求最大数和最小数*/ }
程序执行顺序说明:
众所周知,C程序是从main()开始执行的。所以前面的两个求最大&最小函数先不执行,程序先执行main(),一直到“ max(p,10); ”时,调用前面的void max()函数,当它执行完毕,输出最大数后,函数生命期结束。接着返回到main()中,又遇到“min(a,10); ”,马上调用void min()函数,执行完毕,找到并输出最小数后,函数生命期结束,返回main()中,然后整个程序结束。
这个程序也可以这样写:
#include "stdio.h" void max(int *p,int N); void min(int *p,int N); /*若求最大函数&最小函数不放在main()之前,要事先在程序中声明*/ main() { int a[10],*p,i; p=a; puts("请输入十个整数:\n"); for(i=0;i<10;i++) scanf("%d",&a[i]); puts("\n"); max(p,10); min(a,10); } void max(int *p,int N) { int i,max=*p; for(i=0;i<N;i++,p++) { if(max<*p) max=*p; } printf("最大的数是%d\n",max); } void min(int *p,int N) { int i,min=*p; for(i=0;i<N;i++,p++) { if(min>*p) min=*p; } printf("最小的数是%d",min); }
这样可以比较两个程序的不同,学会外部子函数的调用方法。