问题详情

有如下程序void func1(int st[],int i){ printf("%c",st[i]); if(i}void func2(int st[],int i){ printf("%c",st[i]); if(i}main(){ char st[ ]="hello,friend! "; int i=0;func1(st,i); printf("\n");}程序执行后输出的结果是A.hello B.hel C.hlo D.编译出错


A、hello

B、hel

C、hlo

D、编译出错

时间:2022-01-09 15:59 关键词:

答案解析

D
本题主要考查全局变量的作用域。在本题中,程序首先声明两个无返回值函数func1和func2。func1函数带有两个形参,一个是需要输出的数字,一个是输出数组元素的下标。在函数体中,首先输出以形参作为下标的数组元素值,然后执行if条件判断语句,其条件为形参变量i<3。如果结果为真,则将变量i加2后保存,然后调用func2函数;如果条件结果为假,则结束该函数。从程序中不难看出,func2函数与func1函数基本类似,只是最后它对函数func1进行调用,与前者不同,两个函数是互相调用的。在主函数中首先定义了一个字符数组,并赋了初值,然后定义一个变量i并赋值为0,如果数组st是一个全局数组,那么调用函数func1,根据我们对函数func1的分析可知,此时能输出st[0]即字符’h’,而此时if语句的结果为真,执行i加2并调用func2函数操作。此时变量i的值为2,因此,输出st[2]即字符‘l’,此时函数func2中的if条件语句结果为真,同样执行i加2并调用func1函数操作,然后通过func1函数输出st[4]即字符‘o’,但由于数组只是一个局部数组,局部数组的作用域是定义它的函数或者程序段,调用函数func1时,数组有效,当再调用函数func2时,已经超出了数组的作用域。因此,系统在编译时会报错。本题答案选D。