6.以下程序的输出结果是( )
# include
subl(char a,char b) {char c;c=a;a=b;b=c;}
sub2(char *a,char b){ char c;c=*a;*a=b;b=c;}
sub3(char *a,char *b) { char c;c=*a;*a=*b;*b=c;}
main()
{ char a, b;
a=’A’; b=’B’; sub3(&a,&b); putchar(a); putchar(b);
a=’A’;b=’B’ ;Sub2(&a,b);putchar(a); rutchar(b);
a=’A’; b=’B’; sub1(a,b); putchar(a);putchar(b);
}
①BABBAB ②ABBBBA
③ BABABA ④ BAABBA
【解】在上述程序中,函数subl完成两形参值的交换,这个交换不影响实参变量,这是一个没有意义的函数。函数sub2将第二个形参的值置入由第一个指针形参所指的变量中,指针形参所指的变量由调用时的实参提供。函数sub3完成将两个形参所指的变量的值交换。程序调用sub3,使变量a和b的值交换输出BA;调用subZ,使变量b的值传送到a,输出BB;调用subl,变量a和b的值不改变,输出AB。所以程序输出BABBAB。正确解答是①。
6.2 填充题
1.静态型内部变量的作用域是___________。
【解】静态存储类型的主要特性是永久性和专用性。静态局部变量提供永久存储,但因它是局部变量,也得遵守局部变量的作用域规则,是定义它的函数或复合语句。
2.函数中的形参和调用时的实参都是数组名时,传递方式为______;都是变量时,传递方式为_____________。
【解】在C语言中,实参向形参传递方式只有值传递,但传递的内容可能是非指针类型的值,如基本类型值,或结构类型值,也可以是指针类型值。通常传递指针类型值特称为传地址方式。其中实参向指针形参传递数组名,就是一种传地址方式。若形参不是指针类型的,形参是一般的变量,实参可以是变量或表达式,就是值传递方式。
3.函数的形式参数的作用域为_____,全局的外部变量和函数体内定义的局部变量重名时,________变量优先。
【解】函数将它的形参当作它的局部变量,所以函数形参的作用城为定义它的函数。当函数的形参或函数内的局部变量与函数外的全局变量同名时,函数的局部变量优先。
4.若自定义函数要求返回一个值,则应在该函数体中有一条________语句,若自定义函数要求不返回一个值,则应在该函数说明时加一个类型符____________。
【解】苦自定义的函数有返回值,则函数返回时应执行带表达式的return语句返回,该表达式的值将作为函数调用的结果。为了强调函数是一个不返回值的函数,应在该函数说明时,加上一个void类型说明符。
责任编辑:小草