4.请仔细分析并执行以下程序段,并给出输入数据下的运行结果: int main(void) { int fun1(); int fun2(); int fun3(); int fun4(); int (*function[4])(); int nA=10,nB=5,i; function[0]=fun1; function[1]=fun2; function[2]=fun3; function[3]=fun4; for (i=0;i<4;i++) printf(“fun No.%d->%d\n”,i+1,execute(nA,nB,function[i])); return 0; } int execute(int nX,int nY,int *func()) {return ((*fun)(nX,nY));} int fun1(int nX,int nY) {return (nX+nY);} int fun2(int nX,int nY) {return (nX-nY);} int fun3(int nX,int nY) {return (nX*nY);} int fun4(int nX,int nY) {return (nX/nY);} 对如下main()函数,假设源程序名为list.c,则对编译连接后的list.exe程序,在 DOS界面运行时输入命令行时,其执行结果是什么?为什么? /*Second main() program*/ int main(int argc,char *argv[]) { while (argc→1) printf(“%s\n”,*++argv); return 0; }
时间: 2023-07-16 08:12:17 浏览: 46
程序段一的运行结果为:
fun No.1->15
fun No.2->5
fun No.3->50
fun No.4->2
这是因为程序段一先定义了四个函数:fun1、fun2、fun3、fun4。然后定义了一个函数指针数组function,将这四个函数分别赋值给数组元素。接着使用for循环遍历数组,执行函数execute,并输出结果。函数execute的参数是两个整型变量和一个函数指针,返回值为函数指针指向的函数的计算结果。最后输出结果是每个函数的计算结果。
程序段二的运行结果为:
假设在DOS界面中输入命令行:list.exe hello world
输出结果为:
hello
world
这是因为程序段二使用了命令行参数argc和argv,argc表示命令行参数的个数,argv是一个指针数组,指向每个命令行参数。while循环遍历argv数组,输出每个参数的值。在DOS界面中输入命令行list.exe hello world,argc为3,argv[0]为list.exe,argv[1]为hello,argv[2]为world,所以输出结果为hello和world。