6.2 填充题
1.静态型内部变量的作用域是___________.
“解”静态存储类型的主要特性是永久性和专用性。静态局部变量提供永久存储,但因它是局部变量,也得遵守局部变量的作用域规则,是定义它的函数或复合语句。
2.函数中的形参和调用时的实参都是数组名时,传递方式为______;都是变量时,传递方式为_____________.
“解”在C语言中,实参向形参传递方式只有值传递,但传递的内容可能是非指针类型的值,如基本类型值,或结构类型值,也可以是指针类型值。通常传递指针类型值特称为传地址方式。其中实参向指针形参传递数组名,就是一种传地址方式。若形参不是指针类型的,形参是一般的变量,实参可以是变量或表达式,就是值传递方式。
3.函数的形式参数的作用域为_____,全局的外部变量和函数体内定义的局部变量重名时,________变量优先。
“解”函数将它的形参当作它的局部变量,所以函数形参的作用城为定义它的函数。当函数的形参或函数内的局部变量与函数外的全局变量同名时,函数的局部变量优先。
4.若自定义函数要求返回一个值,则应在该函数体中有一条________语句,若自定义函数要求不返回一个值,则应在该函数说明时加一个类型符____________.
“解”苦自定义的函数有返回值,则函数返回时应执行带表达式的return语句返回,该表达式的值将作为函数调用的结果。为了强调函数是一个不返回值的函数,应在该函数说明时,加上一个void类型说明符。
5.若给fun函数的形参s传送字符串:“ㄩㄩ 6354abcc”(其中ㄩ表示空格字符),则函数的返回值是__________.
# include
long fun(char s[])
{ long n;int sign;
for(; isspace(*s); s++);
sign=(*s==‘-’ )?-1:l;
if(*s==‘+’ ||*s==‘-’) s++;
for(n=0; isdigit(*s); s++) n=10*n+(*s-‘0’);
return sign *n;
}
“解”函数fun的第一个for循环跳过字符串的前导空白符,接着分析第一个非空白符是否是负号,若是置变量sign为-1;否则,置变量sign为1.接着的if语句在第一个非空白字符是负号或正号时,跳过该字符。以后的for循环将后面的数字符当作十进制数的各位数字译出一个长整数n.遇字符a时,结束译数循环。最后,函数返回sign与n的乘积。所以若调用函数时提供的实参是“ㄩㄩ6354abc”,函数返回值是整数6354.
6.下面函数要求计算两个整数X、y之和,并通过形参Z传回该和值,请填空。
void add(int x,int y,________z)
{_________=x+ y; return;}
“解”函数希望通过形参z传送结果,形参z必须是指针类型的,由于返回整型结果,所以z的说明是int *z.函数返回前必须先把结果通过形参z间接引用(写成* z)传回。7.以下函数用来在w数组中插入x.在n所指向的存储单元中存放着w数组中的字符个数。数组W中的字符已按从小到大的顺序排列,插入后数组W中的字符仍有序。请填空。
void fun(char *w,char x, int *n)
{ int i, p;
p=0;
w[*n]=x;
whlie( xw[p] ) p++;
for(i=* n; ip;i——) w=_____________;
w[p] = x;
++ *n;
}
“解”在用数组实现的有序序列中插入内容,必须先寻找插入位置。插入位置找到后,需将插入位置之后的元素向后移动一个位置,留出插入点。最后,将元素插入,并增加序列的元素个数。函数为了简化寻找插入位置循环的循环条件,预先在序列的最后置人插入值。插入位置之后的元素向后移动一个位置必须从最后一个元素开始往前逆序移动,是将前一个元素向后移,所以在空框处应填入w[i-l] .
7.函数my_cmp()的功能是比较字符串s和t的大小,当S等于t时返回0,否则返回s和t的第一个不同字符的ASCII码差值,即st时返回正值,当s
my_cmp( char *s, char * t)
{while(*s==* t)
{ if(*s==‘