第7章 数组 ·101·
习 题 (第七章)
1. 选择题
(1) 在C语言程序中,有关函数的定义正确的是( )。
A. 函数的定义可以嵌套,但函数的调用不可以嵌套
B. 函数的定义不可以嵌套,但函数的调用可以嵌套 C. 函数的定义和函数的调用均不可以嵌套 D. 函数的定义和函数的调用均可以嵌套
(2) 以下对C语言函数的有关描述中,正确的是( )。
A. 在C中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参 B. C函数既可以嵌套定义又可递归调用
C. 函数必须有返回值,否则不能使用函数
D. C程序中有调用关系的所有函数必须放在同一个源程序文件中 (3) 函数调用语句f((e1,e2) , (e3,e4,e5));中参数个数是( )。
A. 5 B. 4 C. 2 D. 1 (4) C语言中,若对函数类型未加显式说明,则函数的隐含类型为( )。
A. void B. double (5) C语言中函数的隐含存储类型是( )。
A. auto B. static
C. char C. extern
D. int
D. 无存储
类型
(6) 能把函数处理结果的两个数据返回给主调函数,在下面的方法中不正确的是
( )。
A. return这两个数 B. 形参用两个元素的数组
C. 形参用两个这种数据类型的指针 (7) 以下程序的输出结果是( )。
#include
fun(int a, int b, int c) { c=a*b; } void main( ) {
int c;
fun(2,3,c) ;
printf(\}
D. 用两个全局变量
A. 0 B. 4 C. 6 D. 无
法确定
(8) 对于以下递归函数f,调用f(4),其返回值为( )。
int f(int n) {
·101·
·102· 第7章 数组
if(n) return f(n-1)+n ; else return n; }
上均不是
A. 10 B. 4 C. 0 D. 以
2. 填空题
(1) 变量的作用域主要取决于变量 ,变量的生存期既取决于变量 ,又取决于变量 。
(2) 从变量的存储类型来说, 变量不允许初始化, 变量、
变量和 变量可以初始化。其中变量如果不进行初始化,则 变量和 变量的初值不确定,而 变量初值为0。
(3) 静态型内部变量的作用域是 。
(4) 函数中的形参和调用时的实参都是数组名时,传递方式为 ,都是变量时,传递方式为 。
(5) 函数的形式参数的作用域为 ,全局的外部变量和函数体内定义的局部变量重名时, 变量优先。
(6) 若自定义函数要求返回一个值,则应在该函数体中有一条 语句,若自定义函数要求不返回一个值,则应在该函数说明时加一个类型说明符 。
(7) 执行下列程序段后,i值为 。
int i;
int f(int x) {
static int k=0; x+=k++; return x; }
i=f(f(1)) ;
(8) 执行i=f(3);后,i值为 。
int i;
int f(int x)
{ return ((x>0)? f(x-1)+f(x-2):1); }
3. 程序阅读题
(1) 程序运行时从键盘输入abcdef
#include
char c ;
if((c=getchar( ))!='\\n') fun( ) ;
·102 ·
第7章 数组
putchar(c); }
void main( )
{ fun( ); }
(2) 阅读下面程序,写出输出结果。
#include
int x;
x=y++; printf(\
if(x>4) { int x ; x=++y; printf(\ x+=y--;
printf(\
}
(3) 阅读下面程序,写出输出结果。
#include
func(int a , int b)
{ c=a*b ; a=b-1 ; b++ ; return (a+b+1) ; } void main( ) {
int b=2 , p=0 ; c=1 ; p=func(b , a) ;
printf(\
}
(4)
阅读函数,写出函数的主要功能。 float av(float a[ ], int n) {
int i; float s;
for(i=0,s=0; i } (5) 阅读下面程序,写出输出结果。 #include unsigned fun6(unsigned num) { unsigned k=1; do { k*=num; num/=10; } while(num); return k; } void main( ) { unsigned n=26; ·103· ·103· ·104· 第7章 数组 printf(\} (6) 阅读下面程序,写出输出结果。 #include void main() { int a,b,c; int find(int,int,int); scanf(\ printf(\} int find(int a,int b,int c) { int u,s,t; u=((u=(a>b)?a:b)>c)? u:c; t=((t=(a (7) 阅读下面程序,写出输出结果。 #include void fun1(int n,int a[ ][3]) { for(int i=0;i for(int j=0;j void main( ) { int a[3][3]={{6,4,2},{8,6,4},{9,6,3}}; fun1 (3,a); for(int i=0;i<3;i++) { for(int j=0;j<3;j++) printf(\ printf(\ } } (8) 阅读下面程序,写出输出结果。 #include \ int binary(int x,int a[ ],int n) { int low=0,high=n-1,mid; while(low<=high) { mid=(low+high)/2; if(x>a[mid]) high=mid-1; else if(x ·104 · 第7章 数组 } return(-1); } void main( ) { static int a[]={4,0,2,3,1}; int i,t,j; for(i=1;i<5;i++) { t=a[i]; j=i-1; while(j>=0&&t>a[j]) { a[j+1]=a[j]; j--; } a[j+1]=t; } printf (\} ·105· 4. 程序设计题 (1) 编一个名为root的函数,求方程ax+bx+c=0的b-4ac,并作为函数的返回值。其中的a、b、c作为函数的形式参数。 (2) 编一个函数,若有参数y为闰年,则返回1,否则返回0。 (3) 编一个无返回值、名为max_min的函数,对两个整数实参能求出它们的最大公约数和最小公倍数并显示。 (4) 编一个名为day_of_year(int year,int month,int day)的函数,计算并返回是该年的第几天。 (5) 编一个名为link的函数,要求如下: 形式参数:s1[40],s2[40],s3[80],存放字符串的字符型数组。 功能:将s2连接到s1后存入s3中。 返回值:连接后字符串的长度。 (6) 编一个函数,返回一维实型数组前n个元素的最大数、最小数和平均值。数组、n和最大数、最小数、平均值均作为函数的形式参数。 (7) 编一函数delchar(s,c),将字符串s中出现的所有c字符删除。编写 main 函数,并在其中调用delchar(s,c) 函数。 (8) 按下面要求编写程序: ①定义函数cal_power(x, n)计算x的n次幂(即xn),函数返回值类型是double。 ②定义函数main(),输入浮点数x 和正整数n,计算并输出下列算式的值。要求调用函数cal_power(x, n)计算x的n次幂。 算式:s = 1/x+1/x2+1/x3+…+1/xn ·105· 2 2