习题7 参考答案
7. 1 选择题(请选择一个正确的答案)
1. 以下对C语言函数的有关描述中,正确的是_______
A. 在C语言中调用函数时,只能实参的值转送给形参,形参的值不能转送给实参。
B. C函数既可以嵌套定义,又可以递归调用。
C. 函数必须有返回值,否则不能使用函数。
D. C程序中有调用关系的所有函数必须放在同一个源程序文件中。
答案:A.
2. C语言中规定函数的返回值的类型由_______
A. return语句中的表达式类型所决定。
B. 调用该函数时的主调函数类型所决定。
C. 调用该函数时系统临时决定。
D. 在定义该函数时所指定的函数类型所决定。
答案:D
3. 以下不正确的说法是_______
A. 在不同函数中可以使用相同名字的变量。
B. 形参是局部变量。
C. 在函数内定义的变量只在本函数范围内有效。
D. 在函数内的复合语句中定义的变量在本函数范围内有效。
答案:D
4. 有一个如下定义的函数
func(int a)
{ printf("%d",a);
return a;}
则该函数值的类型是_______
A. 整型 B. void类型 C. 没有返回值 D. 无法确定
答案:A
5. 以下错误的描述为_______
A. 在函数之外定义的变量称为外部变量,外部变量是全局变量。
B. 在一个函数中既可以使用本函数中的局部变量a,又可以使用同名的外部变量a。
C. 外部变量定义和外部变量说明的含义不同。
D. 若在同一个源文件中,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量不起作用。
答案:B.
6. 下面程序的输出结果是_____
fun3(int x)
{static int a = 3 ;
a+=x;
return a;
}
main()
{int k=2,m=1,n;
n = fun3(k);
n = fun3(m) ;
printf( "%d\n",n);
}
A. 3 B. 4 C. 6 D. 9
答案:C
7.下面程序的输出结果是_____
#include <stdio.h>
main()
{ int k=4,m=1,p;
int func (int a,int b);
p=func(k,m);
printf("%d," ,p);
p=func(k,m);
printf("%d\n",p);
}
func (int a,int b)
{static int m=0,i=2;
i+=m+1; m=i+a+b;
return m;
}
A. 8, 17 B. 8, 16 C. 8, 20 D. 8 , 8
答案:A
7.2 判断下列叙述的正确性,若正确在()内标记,若错误在()内标记。
1. ( )全局变量与函数体内定义的局部变量重名时,全局变量优先。
2. ( )对于不需要使用函数返回值的函数,可以不定义类型。
3. ( )一个函数可以定义在别的函数的内部,即嵌套定义。
4. ( )返回值为int或char类型时,函数声明可以缺省。
5. ( )在C语言中允许函数之间的嵌套调用。
6. ( )局部静态变量是在编译时赋初值的,即只赋初值一次。
7. ( )函数的形参在退出该函数后就被释放了。
7.3 填空题(请在空白处填入合适的内容)
1. C语言程序的基本组成单位是_函数_。
2. C语言程序总是从_main_函数开始执行。
3. 函数体用 { 符号开始,用 } 符号结束。
4. 当函数的返回值与函数值类型不一致时,将以____函数值____的类型为准。
5. 凡在函数中未指定存储类别的变量,其隐含的存储类别为_动态_。
6. 静态局部变量的作用域是_ 所在函数_。
7. C语言规定,调用一个函数时,实参变量和形参变量之间的数据传递方向是_单向传递_。
8. 若定义的函数没有返回值时,则应在该函数声明时加一个类型说明符_void_。
9. 在C语言中,一个函数直接或间接地调用自身,便构成了函数的_递归调用_。
10. 函数的形式参数属于_局部__变量,其作用域为_函数体内_。
7.4 读程序写运行结果
2.void S1(int x,int y)
{int t;
t=x;x=y; y=t;
}
main()
{ int a=1,b=2;
S1(a,b);
printf(“%d,%d”,a,b);
}
运行结果__1,2__
1.int F(int a){int b=0;
b=b+1;
return (a+b);}
main()
{int i;
for(i=1;i<=3;i++)
printf(“%d ”, F(i));
}
运行结果__2 3 4__
4. long fun(int n)
{ long s;
if (n= =1 || n= =2)
s = 2;
else
s = n + fun(n-1);
return s;
}
main( )
{ long x;
x = fun(4) ;
printf("%ld\n",x);
}
运行结果___9___
3.int fun (int p)
{ int b=0;
static int c=3;
p=c++, b++;
return (p) ;
}
main()
{int a=2,i,k;
for(i=0;i<2;i++)
k=fun(a);
printf(“%d”,k);
}
运行结果___4__
7.5 完善下列程序,使程序有正确运行结果。
1. 答案:
① - =
② = z*
1.下面的程序用来求xy。float power( float x, int y )
{float z;
for(z=1;y>0;y__①__1)
z__②__x;
return z;
}
main()
{printf("%f\n",power(3.0, 4));
}
2.下面的程序用来求数组中最大元素的下标。
int findmax ( int s[ ], int t)
{int p, m ;
m=0;
2. 答案:
① m=p
② return m
_ findmax (a ,10)_
for (p = 0; p<t ; p++)if (s[p] > s[m])
__①___ ;
_ ② _;
}
main()
{ int a [10] , i , k ;
for (i = 0 ; i < 10 ; i + + )
scanf(" %d" , &a[ i] ) ;
k=__ _;
printf(" % d, % d\n" , k , a[ k] ) ;
}
3.下面的函数是将一个字符串str的内容颠倒过来。
#include < string. h >
void invert (char str[ ])
{ int i, j ;
__①__;
for(i = 0 , j = strlen(str)_ ②_; i<j; i++,j- -)
{ k=str[i]; str[i] = str[j]; str[j] = k; }
3. 答案:
① char k
② -1
_ invert ( s )_
} main()
{ char s[ 20];
printf(“Input a string : \n”);
gets(s);
printf(“inverted string is : \n”);
_______;
puts( s);
}
4. 下面的程序用来求数组a各元素的平均值。
4. 答案:
① pa[i]
② avg/n
float avr( int pa[ ], int n){ int i;
float avg = 0.0 ;
for(i=0;i<n;i++)
avg = avg +_①__;
avg=__②___;
return avg; }
main()
{ int a[5]= {2,4,6,8,10};
float mean;
mean = avr(a,5);
printf("mean = %f\n",mean);
}
7.6 编程题
1. 编写函数,根据给定的三角形三条边长a、b、c,函数返回三角形面积。主函数中输入三条边长,调用函数后,输出三角形面积。三角形面积的计算公式
area= s(s-a)(s-b)(s-c) 其中 s=(a+b+c)/2
#include <math.h>
#include <stdio.h>
float funarea(float x,float y,float z)
{ float s,area;
s=(x+y+z)/2;
area=sqrt((s-x)*(s-y)*(s-z));
return area;
}
main()
{ float a,b,c,area;
printf(" Input a,b,c: ");
scanf("%f,%f,%f", &a,&b,&c);
area=funarea(a,b,c);
printf(" Area = %.3f \n\n", area);
}
运行结果:
2. 编写判断一个年号是否为闰年的函数,若是闰年则返回1,否则返回0。主函数输出2000~2050年中的闰年。要求每输出4个年号换一行。
#include <math.h>
#include <stdio.h>
int funleap(int y)
{ int flag;
if (y%100==0)
if (y%400==0) flag=1;
else flag=0;
else
if(y%4==0) flag=1;
else flag=0;
return flag;
}
main()
{ int year,c;字符串函数编程题
for(year=2000; year<=2050; year++)
if(funleap(year))
{ printf(" %d ",year); c++;
if(c%4==0)printf("\n");
}
printf("\n\n");
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论