C语言程序设计 第六章 函数 试题及答案C语言程序设计第六章函数试题及答案
1 选择题
*6.1建立函数的目的之一,以下正确的说法是。
A)提高程序的执行效率B)提高程序的可读性
C)减少程序的篇幅D)减少程序文件所占内存
参考答案:B
*6.2 以下正确的说法是。
A)用户若需要调用标准库函数,调用前必须重新定义
B)用户可以重新定义标准库函数,若如此,该函数将失去原有意义
C)用户系统根本不允许用户重新定义标准库函数
D)用户若需要调用库函数,调用前不必使用预编译命令将该函数所在文件包括到用户源文件中,系统自动寻找该文件。
参考答案:B ...
C语言程序设计第六章函数试题及
1 选择题
*6.1建立函数的目的之一,以下正确的说法是。
A)提高程序的执行效率B)提高程序的可读性
C)减少程序的篇幅D)减少程序文件所占内存
参考答案:B
*6.2 以下正确的说法是。
A)用户若需要调用
库函数,调用前必须重新定义
B)用户可以重新定义标准库函数,若如此,该函数将失去原有意义
C)用户系统根本不允许用户重新定义标准库函数
D)用户若需要调用库函数,调用前不必使用预编译命令将该函数所在文件包括到用户源文件中,系统自动寻找该文件。
参考答案:B
6.3 以下正确的函数定义形式是。
A)double fun(int x,int y) B)double fun(int x;int y)
C)double fun(int x,int y); D)doubel fun(int x;int y);
参考答案:A
*6.4 以下正确的函数形式是。
A)double fun(int x,int y){z=x+y;return z;}
B)double fun(int x,y){int z;return z;}
C)fun(x,y){int x,y;double z; z=x+y; return z;}
D)double fun(int x,int y){double z;z=x+y;return z;}
参考答案:D
*6.5以下正确的说法是。
A)实参和与其对应的形参占用独立的存储单元
B)实参和与其对应的形参共占用一个存储单元
C)只有当实参和与其对应的形参同名时才共占用一个存储单元
D)形参是虚拟的,不占用存储单元
参考答案:A
参考分析:本题并不严谨,因为实参可以是表达式,当实参为表达式时,实参并不单独占用独立的存储单元。
6.6 若调用一个函数,且此函数中没有return语句,则正确的说法是该函数。
A)没有返回值B)返回若干个系统默认值
C)返回一个用户所希望的函数值D)返回一个不确定的值
参考答案:D
参考分析:函数有没有返回值是由函数类型所决定的,当没有retrun语句,系统不能返回一个确定的值而已。
6.7 以下不正确的说法是,C语言规定。
A)实参可以是常量、变量或表达式
B)形参可以是常量、变量或表达式
C)实参可以是任意类型
D)实参应与其对应的形参类型一致
参考答案:B
6.8 以下正确的说法是。
A)定义函数时,形参的类型说明可以放在函数体内
B)return后面的值不能为表达式
C)如果函数的类型与返回值类型不一致,以函数类型为准
D)如果形参与实参的类型不一致,以实参类型为准
参考答案:C
6.9 C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是。
A)地址传递B)单向值传递
C)由实参传给形参,再由形参传回实参D)由用户指定传递方式
参考答案:B
6.10 以下程序有语法性错误,有关错误原因的正确说法是。
main()
{int G=5,k;
void prt_char();
......
k=prt_char(G);
......
}
A)语句void prt_char();有错,它是函数调用语句,不能用void说明
B)变量名不能使用大写字母
C)函数说明和函数调用语句之间有矛盾
D)函数名不能使用下划线
参考答案:C
6.11 C语言允许函数值类型缺省定义,此时该函数值隐含的类型是。
A)float型B)int型C)long型D)double型
参考答案:B
6.12 C语言规定,函数返回值的类型是由所决定。
A)return语句中的表达式类型
B)调用该函数时的主调函数类型
C)调用该函数是系统临时指定
D)在定义该函数时所指定的函数类型
参考答案:D
*6.13 下面函数调用语句含有实参的个数为。
fun((exp1,exp2),(exp3,exp4,exp5));
A)1 B)2 C)4 D)5
参考答案:B
参考分析:该函数的实参是两个逗号表达式。
6.14 以下错误的描述是。
函数调用可以
A)出现在执行语句中B)出现在表达式中
C)作为函数的实参D)作为函数的形参
参考答案:D
6.15 以下程序的功能是计算函数F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值,请选择填空。
#include
#include
float f(float,float);
main()
{float x,y,z,sum;
scanf("%f%f%f",&x,&y,&z);
sum=f(【1】)+f(【2】);
printf("sum=%f\n",sum);
}
float f(float a,float b)
{float value;
falue=a/b;
return(value);
}
【1】A)x-y,x+y B)x+y,x-y C)z+y,z-y D)z-y,z+y
【2】A)x-y,x+y B)x+y,x-y C)z+y,z-y D)z-y,z+y
参考答案:【1】B 【2】C
6.16以下正确的描述是________。
A)函数的定义可以嵌套,但函数的调用不可以嵌套
B)函数的定义不可以嵌套,但函数的调用可以嵌套
C)函数的定义和函数的调用均不可嵌套
D)函数的定义和函数的调用均可以嵌套
参考答案:B
6.17 以下程序是选出能被3整除且至少有一位是5的两位数,打印出所有的这样的数及其个数。请选择填空。
sub(int k,int n)
{int a1,a2;
a2=【1】;
a1=k-【2】;
if((k%3==0&&a2==5)||(k%3==0&&a1==5))
{printf("%4d",k);n++;return n;}
else return -1;
}
main()
{int n=0,k,m;
for(k=10;k<100;k++)
{m=sub(k,n);
if(m!=-1) n=m;
}
printf("\nn=%d",n);
}
【1】A)k*10 B)k%10 C)k/10 D)k*10%10
【2】A)a2*10 B)a2 C)a2/10 D)a2%10
参考答案:【1】C 【2】A
6.18 以下是有关汉诺塔问题的程序段,若在main函数中有调用语句hanoi(3,'A','B','C');则符合程序段运行结果的选项是。
void move(char getone,char putone)
{printf("%c-->%c\n",getone,putone);}
void hanoi(int n,char one,char two,char three)
{if(n==1) move(one,three);
else
{hanoi(n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three);
}
}
A)A-->C B)A-->C C)A-->C D)A-->C
A-->B A-->B A-->B A-->B
C-->B C-->A C-->B C-->B
B-->A A-->B A-->C A-->C
C-->B B-->C B-->A A-->B
A-->C A-->C B-->C B-->C
A-->B A-->B A-->C A-->C
参考答案:C
6.19 若用数组名作为函数调用的实参,传递给形参的是。
A)数组的首地址B)数组第一个元素的值
C)数组中全部元素的值D)数组元素的个数
参考答案:A
6.20 已有以下数组定义和f函数调用语句,则在f函数的说明中,对形参数组array的错误定义方式为。
int a[3][4];
f(a);
A)f(int array[][6]) B)f(int array[3][]) C)f(int array[][4]) D)f(int array[2][5])
参考答案:B
6.21 若使用一位数组名作为函数实参,则以下正确的说法是。
A)必须在主调函数中说明此数组的大小
B)实参数组类型与形参数组类型可以不匹配
C)在被调函数中,不需要考虑形参数组的大小
D)实参数组名与形参数组名必须一致
参考答案:C
6.22 以下函数binary的作用是应用折半查找法从存有10个整数的a数组中对关键字m进行查找,若找到,返回其下标值;反之,返回-1。请选择填空。
int binary(int a[],int m)
{int low=0,high=9,mid;
while(low<=high)
{mid=(low+high)/2;
if(ma[mid]) 【2】;
else return(mid);
}
return(-1);
}
A)high=mid-1 B)high=mid+1 C)low=mid-1 D)low=mid+1
参考答案:【1】A 【2】D
6.23如果在一个复合语句中定义了一个变量,则有关该变量正确的说法是。
A)只在该复合语句中有效B)只在该函数中有效
C)在本程序范围内均有效D)为非法变量
参考答案:A
6.24 以下不正确的说法为。
A)在不同函数中可以使用相同名字的变量
B)形式参数是局部变量
C)在函数内定义的变量只在本函数范围内有效
D)在函数内的复合语句中定义的变量在本函数范围内有效
参考答案:D
6.25 以下程序的正确运行结果是。
#define MAX 10
int a[MAX],i;
main()
{printf("\n");sub1();sub3(a);sub2();sub3(a);}
sub2()
{int a[MAX],i,max;
max=5;
for(i=0;i
void num()
{extern int x,y;
int a=15,b=10;
x=a-b;
y=a+b;
}
int x,y;
main()
{int a=7,b=5;
x=a+b;
y=a-b;
num();
printf("%d,%d\n",x,y);
}
A)12,2 B)12,25 C)5,25 D)5,2
参考答案:C
6.27 凡是函数中未指定存储类别的局部变量,其隐含的存储类别为。
A)auto B)static C)extern D)register
参考答案:A
6.28 在一个C源程序文件中,若要定义一个只允许本源文件中所有函数使用的全局变量,则该变量需要使用的存储类别是。
A)extern B)register C)auto D)static
参考答案:D
*6.29 以下程序的正确运行结果是。
main()
{int a=2,i;
for(i=0;i<3;i++) printf("%4d",f(a));
}
int f(int a)
{int b=0;
static int c=3;
b++;c++;
return(a+b+c);
}
A) 7 7 7 B) 7 10 13
C) 7 9 11 D) 7 8 9
参考答案:D
*6.30 以下程序的正确运行结果是。
#include
main()
{int k=4,m=1,p;
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
2 填空题
6.31 C语言规定,可执行程序的开始执行点是【】。
参考答案:main函数
6.32 在C语言中,一个函数一般由两个部分组成,它们是【1】和【2】。参考答案:【1】函数声明【2】函数体
*6.33 若输入的值是-125,以下程序的执行结果是。
#include
main()
{int n;
scanf("%d",&n);
printf("%d=",n);
if(n<0) printf("-");
n=abs(n);
fun(n);
}
fun(int n)
{int k,r;
for(k=2;k<=sqrt(n);k++)
{r=n%k;
while(r==0)
{printf("%d",k);
n=n/k;
if(n>1)printf("*");
r=n%k;
}
}
if(n!=1) printf("%d\n",n);
}
参考答案:-125=-5*5*5
参考分析:本程序用来将整数分解为素数因子的乘积。
6.34 下面add函数的功能是求两个参数的和,并将和值返回调用函数。函数中错误的部分是【1】;改正后为【2】。
void add(float a,float b)
{float c;
c=a+b;
return c;
}
参考答案:【1】void add(float a,float b) 【2】float add(float a,float b)
6.35 以下程序的运行结果是。
main()
{int i=2,x=5,j=7;
fun(j,6);
printf("i=%d;j=%d;x=%d\n",i,j,x);
}
fun(int i,int j)
{int x=7;
printf("i=%d;j=%d;x=%d\n",i,j,x);
}
参考答案:
i=7;j=6;x=7
i=2;j=7;x=5
6.36 以下程序的运行结果是。
main()
{increment();
increment();
increment();
}
increment()
{int x=0;
x+=1;
printf("%d",x);
}
参考答案:1 1 1
6.37 以下程序的运行结果是。
#include
main()
{int a=1,b=2,c;
c=max(a,b);
printf("max is %d\n",c);
}
max(int x,int y)
{int z;
z=(x>y)?x:y;
return(z);
}
参考答案:max is 2
6.38 以下程序的功能是根据输入的"y"("Y")与"n"("N"),在屏幕上分别显示出"This is YES."与"This is NO."。请填空。
#include
void YesNo(char ch)
{switch(ch)
{case 'y':
case 'Y':printf("\nThis is YES.\n");【1】;
case 'n':
case 'N':printf("\nThis is NO.\n");
}
}
main()
{char ch;
printf("\nEnter a char 'y','Y' or 'n','N':");
ch=【2】;
printf("ch:%c",ch);
YesNo(ch);
}
参考答案:【1】break 【2】getchar()
6.39 以下Check函数的功能是对value中的值进行四舍五入计算,若计算后的值与ponse值相等,则显示"WELL DONE!!",否则显示计算后的值。已有函数调用语句Check(ponse,value);请填空。
void Check(int ponse,float value)
{int val;
val=【1】;
printf("计算后的值:%d",val);
if(【2】) printf("\nWELL DONE!!!\n");
else printf("\nSorry the correct answer is %d\n",val);
}
参考答案:【1】value+0.5 【2】ponse==val
6.40 以下程序的功能是。
#include
f(int n)
{int i,j,k;
i=n/100;j=n/10-i*10;k=n%10;
if (i*100+j*10+k==i*i*i+j*j*j+k*k*k) return n;
else return 0;
}
main()
{int n,k;
printf("Output");
for(n=100;n<1000;n++)
{k=f(n);
if(k!=0)
printf("%d ",k);
}
printf("\n");
}
参考答案:输出所有的水仙花数。
6.41 以下程序的功能是用二分法求方程2x3-4x2+3x-6=0的根,并要求绝对误差不超过0.001。请填空。
#include
float f(float x)
{return (2*x*x*x-4*x*x+3*x-6);}
main()
{float m=-100,n=90,r;
r=(m+n)/2;
while(f(r)*f(n)!=0)
{if(【1】) m=r;
else n=r;
if(【2】) break;
r=(m+n)/2;
}
printf("方程的解是%6.3f\n",r);
}
参考答案:【1】f(r)*f(n)<0或f(r)*f(m)>0【2】n-m<0.001
6.42 若输入一个整数10,以下程序的运行结果是。
int sub(int a)
{int c;
c=a%2;
return c;
}
main()
{int a,e[10],c,i=0;
printf("Input a number:");
scanf("%d",&a);
while(a!=0)
{c=sub(a);
a=a/2;
e[i]=c;
i++;
}
for(;i>0;i--) printf("%d",e[i-1]);
}
参考答案:1010
6.43 以下程序的功能是计算下面函数的值。请填空。
sin(x) sin(y) sin(z)
F(x)= + +
sin(x-y)*sin(x-z) sin(y-z)*sin(y-x) sin(z-x)*sin(z-y)
#include
#include
float f(float,float,float);
main()
{printf("input x,y,z:\n");
scanf("%f%f%f",&x,&y,&z);
sum=【1】;
printf("sum=%f\n",sum);
}
float f(float a,float b,float c)
{float value;
value=【2】;
return(value);
}
参考答案:【1】f(x,y,z)+f(y,z,x)+f(z,x,y) 【2】sin(a)/sin(a-b)/sin(a-c)
参考分析:本题答案非常不严谨,完全可以写成多种方式,比如
【1】f(x,x-y,x-z)+f(y,y-z,y-x)+f(z,z-x,z-y) 【2】sin(a)/sin(b)/sin(c)
【1】f(x,y,z) 【2】sin(a)/sin(a-b)/sin(a-c)+sin(b)/sin(b-c)/sin(b-a)+sin(c)/sin(c-a)/sin(c-b) 6.44 已有函数pow,现要求取消变量i后pow函数的功能不变。请填空。
修改前的pow函数:
int pow(int x,int y)
{int i,j=1;
for(i=1;i<=y;i++) j=j*x;
return j;
}
修改后的函数:
int pow(int x,int y)
{int j;
for(【1】;【2】;【3】) j=j*x;
return j;
}
参考答案:【1】j=1【2】y>0或y>=1【3】y--或--y
6.45 以下程序的运行结果是输出如下图形。请填空。
*
***
*****
*******
*****
***
*
#include
void a(int i)
{int j,k;
for(j=0;j<=7-i;j++) printf(" ");
for(k=0;k<【1】;k++) printf("*");
printf("\n");
}
main()
{int i;
for(i=0;i<3;i++) 【2】;
for(i=3;i>=0;i--) 【3】;
}
参考答案:【1】2*i+1 【2】a[i] 【3】a[i]
参考说明:最长的一行前面有5个空格。
6.46 以下程序的功能是求三个数的最小公倍数,请填空。
#include
int max(int x,int y,int z)
{if(x>y&&x>z) return(x);
else if(【1】) return(y);
else return(z);
}
main()
{int x1,x2,x3,i=1,j,x0;
printf("Input three number:");
scanf("%d%d%d",&x1,&x2,&x3);
x0=max(x1,x2,x3);
while(1)
{j=x0*i;
if(【2】) break;
i++;
}
printf("zuixiaogongbeishu=%d\n",j);
}
参考答案:【1】y>x&&y>z 【2】j%x1==0&&j%x2==0&&j%x3==0
参考分析:本题有错误,若x=z>y这种条件下max函数不能正确返回最大值。若将所有条件均改为>=就可以了。
6.47函数gongyue的作用是求整数num1和num2的最大公约数。请填空。
int gongyue(int num1,int num2)
{int temp,a,b;
if(num1【1】num2)
{temp=num1;num1=num2;num2=temp;}
a=num1;b=num2;
while(【2】)
{temp=a%b;a=b;b=temp;}
return(a);
}
参考答案:【1】< 【2】b
参考分析:本题需要修改,作为函数,没有必要将num1赋值给a,另外,不必须要num1大, num2小,还有【2】可以为b!=0
6.48以下程序的运行结果是。
main()
{int x=2,y=3,z=0;
printf("(1)x=%d y=%d z=%d\n",x,y,z);
add(x,y,z);
printf("(3)x=%d y=%d z=%d\n",x,y,z);
}
add(int x,int y,int z)
{z=x+y; x=x*x; y=y*y;
printf("(2)x=%d y=%d z=%d\n",x,y,z);
}
参考答案:
(1)x=2 y=3 z=0
(2)x=4 y=9 z=5
(3)x=2 y=3 z=0
6.49 下面函数pi的功能是:根据以下,返回满足精度(0.0005)要求的π值,请填空。
π/2=1+1/3+1/3*2/5+1/3*2/5*3/7+1/3*2/5*3/7*4/9+…
#include
#include
#include
double pi(double eps)
{double s,t;
int n;
for(【1】;t>eps;n++)
{s+=t;
t=n*t/(2*n+1);
}
return (【2】);
}
main()
{double x;
printf("\nPlease enter a precision:");
scanf("%lf",&x);
printf("\neps=%lf,π=%lf",x,pi(x));
}
参考答案:【1】s=0,t=1,n=1 【2】2*s
6.50 下面是一个计算阶乘的程序。程序中错误的语句是【1】,应改为【2】。
#include
double fac(int);
main()
{int n;
printf("Enter an integer:");
scanf("%d",&n);
printf("\n\n%d!=%lg\n\n",n,fac(fac(n));
}
double fac(int n)
{double result=1.0;
while (n>1||n<170) result *=--n;
return result;
}
参考答案:【1】while(n>1||n<170) result *=--n 【2】while (n>1&&n<170) result *=n--;
***6.51函数f的形参a为一个10×10的二维数组,n的值为5,以下程序段的运行结果为。
f(int a[][20], int n)
{int i,j,k;
j=n/2+1;
a[1][j]=1;
i=1;
for(k=2;k<=n*n;k++)
{i=i-1;j=j+1;
if(i<1&&j>n) {i=i+2;j=j-1;}
else
{if(i<1) i=n;
if(j>n) j=1;
}
if(a[i][j]==0) a[i][j]=k;
else {i=i+2; j=j-1; a[i][j]=k;}
}
}
main()
{int a[20][20]={0},n,i,j;
scanf("%d",&n);
f(a,n);
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)
printf("%3d",a[i][j]);
printf("\n");
}
}
参考答案:
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
参考说明:这是幻方题目
6.52 下面函数func的功能是。
#include
long func(long num)
{long k=1;
num=labs(num);
do
{k*=num%10;
num/=10;
}while(num);
return k;
}
main()
{long n;
printf("\nPlease enter a number:");
scanf("%ld",&n);
printf("\nThe product of its digits is %ld.",func(n));
}
参考答案:计算一个数的各位数字之积。
6.53以下程序的运行结果是。
#include
main()
{printf("FACT(5):%d\n",fact(5));
printf("FACT(1):%d\n",fact(1));
fact(-5);
}
fact(int value)
{if(value<0) {printf("FACT(<0):Error!\n"); return (-1);}
else if(value==1||value==0) return(1);
else return(value*fact(value-1));
}
参考答案:
FACT(5):120
FACT(1):1
FACT(<0):Error!
6.54 以下程序的功能是用递归方法计算学生的年龄,已知第一位学生年龄最小,为10岁,其余学生一个比一个大2岁,求第5位学生的年龄。请填空。
递归公式如下:
10 n=1
age(n)=age(n-1)+2 n>1
#include
age(int n)
{int c;
if(n==1) c=10;
else c=【1】;
return c;
}
main()
{int n=5;
printf("age:%d\n",【2】);
}
参考答案:【1】age(n-1)+2 【2】age(n)
6.55 下面程序的功能是【1】,运行结果是【2】。
long fib(int g)
{switch(g)
{case 0: return 0;
case 1: case 2: return 1;
}
return(fib(g-1)+fib(g-2));
}
main()
{ long k;
k=fib(7);
printf("k=%d\n",k);
}
参考答案:【1】计算斐波那契数列第7项的值【2】k=13
6.56以下程序的运行结果是。
main()
{int i=5;
printf("%d\n",sub(i));
}
sub(int n)
{int a;
if(n==1) return 1;
a=n+sub(n-1);
return a;
}
参考答案:15
参考分析:利用递归的方法计算1+2+3+4+5
6.57 以下程序是应用递归函数算法求某数a的平方根,请填空。求平方根的迭代公式如下:
x1=1/2(x0+a/x0)
#include
double mysqrt(double a,double x0)
{double x1,y;
x1=【1】;
if(fabs(x1-x0)>0.00001) y=mysqrt(【2】);
else y=x1;
return y;
}
main()
{double x;
printf("Enter x:"); scanf("%lf",&x);
printf("The sqrt of %f=%f\n",x,mysqrt(x,1.0));
}
参考答案:【1】1.0/2*(x0+a/x0) 【2】a,x1
6.58以下程序的运行结果是。
#include
f(int a[])
{int i=0;
while(a[i]<=10)
{printf("%3d",a[i]);
i++;
}
}
main()
{int a[]={1,5,10,9,11,7};
f(a+1);
}
参考答案:5 10 9
6.59以下程序的运行结果是。
main()
{int a[3][3]={1,3,5,7,9,11,13,15,17},sum;
sum=func(a);
printf("\nsum=%d\n",sum);
}
func(int a[][3])
{int i,j,sum=0;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{a[i][j]=i+j;
if(i==j) sum=sum+a[i][j];
}
return (sum);
}
参考答案:sum=6
6.60 阅读下面程序,完成下列问题中的填空。
问题(1)此程序在调用函数f后的运行结果是【1】。
(2)若将函数f中的for(j=i+1;j<4;j++)改为for(j=0;j<3-i;j++),则程序的运行结果是【2】。
f(int s[][4])
{int i,j,k;
for(i=0;i<3;i++)
for(j=i+1;j<4;j++)
{k=s[i][j];s[i][j]=s[j][i];s[j][i]=k;}
}
main()
{int s[4][4],i,j;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
s[i][j]=i-j;
f(s);
for(i=0;i<4;i++)
{printf("\n");
for(j=0;j<4;j++)
printf("%4d",s[i][j]);
}
}
参考答案:
【1】0 1 2 3 【2】0 -1 -2 -3
-1 0 1 2 1 0 -1 -2
-2 -1 0 1 2 1 0 -1
-3 -2 -1 0 3 2 1 0
6.61 以下search函数的功能是利用顺序查找法从数组的10个元素中对关键字m进行查找。顺序查找法的思路是:从第一个元素开始,从前向后依次与关键字比较,直到找到此元素或找到数组尾部时结束。若找到,返回此元素的下标;若未找到,则返回-1。请填空。
#include
int search(int a[10],int m)
{int i;
for(i=0;i<=9;i++) if(【1】) return (i);
return -1;
}
main()
{int a[10],m,i,no;
…
no=search(【2】);
if(【3】) printf("\nOK FOUND!",no);
else printf("\nSorry Not Found!");
}
参考答案:【1】a[i]==m 【2】a,m 【3】no>=0
6.62 已定义一个含有30个元素的数组s,函数fav1的功能是按顺序分别赋给各元素从2开始的偶数,函数fav2则按顺序每5个元素求一个平均值,并将该值存放在数组w中。请填空。
#define SIZE 30
fav1(float s[])
{int k,i;
for(k=2,i=0;ia[j+1])
{t=a[j];a[j]=a[j+1];a[j+1]=t;}
}
参考答案:【1】-7 3 5 7 10 【2】冒泡法排序
6.64以下程序的运行结果是【1】,其算法是【2】。
main()
{int a[5]={9,6,8,3,-1},i,j,t,p;
sort(a);
for(i=0;i<=4;i++)
printf("%3d",a[i]);
}
sort(int a[])
{int i,j,t,p;
for(j=0;j<4;j++)
{p=j;
for(i=j;i<=4;i++)
if(a[i]=a[p]&&p
func(int array[][4],int m)
{int i,j,k;
k=0;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
if(array[i][j]b?a:b;
return c;
}
main()
{int a=8;
printf("%d",max(a,b));
}
参考答案:8
6.78以下程序的运行结果是。
int x;
main()
{x=5;
cude();
printf("%d\n",x);
}
{x=x*x*x;}
参考答案:125
参考分析:x是全局变量。
6.79以下程序的运行结果是。
main()
{int i;
for (i=0;i<3;i++)
{funx();
funy();
}
}
funx()
{int x=0;
printf("x=%d\t",++x);
}
funy()
{static int y=0;
printf("y=%d\n",++y);
}
参考答案:
x=1 y=1
x=1 y=2
x=1 y=3
6.80以下程序的运行结果是。
main()
{int i;
for (i=0;i<3;i++)
fun();
}
fun()
{static int x=0;
x+=1;
printf("%3d",x);
}
参考答案: 1 2 3
6.81以下程序的运行结果是。
int n=1;
main()
{static int x=5;
int y;
y=n;
printf("MAIN:x=%2d y=%2d n=%2d\n",x,y,n);
func();
printf("MAIN:x=%2d y=%2d n=%2d\n",x,y,n);
func();
}
func()
{static int x=4;
int y=10;
x=x+2;
y=y+n;
printf("FUNC:x=%2d y=%2d n=%2d\n",x,y,n);
}
参考答案:
MAIN:x= 5 y= 1 n=1
FUNC:x= 6 y=21 n=11
MAIN:x= 5 y= 1 n=11
FUNC:x= 8 y=31 n=21
6.82 以下程序的功能是。
int fac(int n)
{static int f=1;
f=f*n;
return f;
}
main()
{int i;
for(i=1;i<=5;i++)
printf("%d!=%d\n",i,fac(i));
}
参考答案:计算并输出1到5的阶乘
3 编程题
6.83 已有变量定义和函数调用语句:int a=1,b=-5,c;c=fun(a,b);fun函数的作用是计算两个数之差的绝对值,并将差值返回调用函数,请编写fun函数。
fun(int x,int y)
{ }
参考程序:
fun(int x,int y)
{if(x>y) return x-y;
return y-x;
}
6.84 已有变量定义和函数调用语句:int x=57; isprime(x);函数isprime()用来判断一个整型数a 是否为素数,若是素数,函数返回1,否则返回0。请编写isprime函数。
int isprime(int a)
{ }
参考程序:
int isprime(int a)
{int k;
if(a==1) return 0;
for(k=2;k<=a/2;k++)
if(a%k==0) return 0;
return 1;
}
6.85 已有变量定义和函数调用语句int a,b; b=sum(a);函数sum用来求1+2+3+…+n,请编写sum函数。
int sum(int n){ }
参考程序:
int sum(int n)
for(k=1;k<=n;k++)
s+=k;
return s;
}
6.86已有变量定义和函数调用语句double a=5.0; int n=5;和函数调用语句mypow(a,n);用来求a 的n次方。请编写mypow函数。
double mypow(double x,int y){ }
参考程序:
double mypow(double x,int y)
{double s=1;
for(;y>0;y--)
s=s*x;
return s;
}
6.87 以下程序的功能是用牛顿法求解方程f(x)=cosx-x=0。已有初始值x0=3.1415/4,要求绝对误差不超过0.001,函数f用来计算迭代公式中x0的值。请编写f函数。牛顿迭代公式是: xn+1=xn
本文档为【C语言程序设计 第六章 函数 试题及答案】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。