7-第8章 函数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、单选题
1、C语言规定,在一个源程序中,main函数的位置( )。
A.必须在最开始
B.必须在系统调用的库函数的后面
C.可以任意
D.必须在最后[C]
2、凡在函数中未指明存储类别的变量,其隐含的存储类别为
A.auto 型
B.static 型
C.extern 型
D.register 型[ A ]
3、函数调用语句func((exp1,exp2),(exp3,expD,exp5));中,实参的个数为:
A.1
B.2
C.4
D.5 [B]
4、以下程序的输出结果是
fun(int x, int y, int z)
{ z=x*x+y*y; }
main()
{ int a=31;
fun(5,2,a);
printf("%d",a); }
A.0
B.29
C.31
D.无定值[C]
5、以下对C语言函数的有关描述中,正确的是
A.在C中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参
B.C函数既可以嵌套定义又可以递归调用
C.函数必须有返回值,否则不能使用函数
D.C程序中有调用关系的所有函数必须放在同一个源程序文件中[ A ]
6、以下所列的各函数首部中,正确的是
A.void play(var :Integer,var b:Integer)
B.void play(int a,b) [C]
C.void play(int a,int b)
D.Sub play(a as integer,b as integer)
7、以下叙述中不正确的是()
A.在C中,函数中的自动变量可以赋初值,每调用一次,赋一次初值
B.在C中,在调用函数时,实参和对应形参在类型上只需赋值兼容
C.在C中,外部变量的隐含类别是自动存储类别
D.在C中,函数形参可以说明为register变量[C]
8、函数调用:strcat(strcpy(str1,str2),str3)的功能是
A.将串str1复制到串str2中后再连接到串str3之后
B.将串str1连接到串str2之后再复制到串str3之后
C.将串str2复制到串str1中后再将串str3连接到串str1之后
D.将串str2连接到串str1之后再将串str1复制到串str3中[C]
9、一个C程序的执行是从( )。
A.本程序的main函数开始,到main函数的结束
B.本程序文件的第一个函数开始,到本程序文件的最后一个函数的结束
C.本程序文件的main开始,到本程序文件的最后一个函数的结束
D.本程序文件的第一个函数开始,到本程序文件的main函数的结束[ A]
10、一个C语言程序是由( )。
A.一个主程序和若干子程序组成
B.函数组成
C.若干过程组成
D.若干子程序组成[B ]
11、以下说法中正确的是
A.C语言程序总是从第一个定义的函数开始执行
B.在C语言程序中,要调用的函数必须在main()函数中定义
C.C语言程序总是从main()函数开始执行
D.C语言程序中的main()函数必须放在程序的开始部分[C ]
12、以下叙述不正确的是( )。
A.一个C源程序可由一个或多个函数组成
B.一个C源程序必须包含一个main函数
C.C程序的基本组成单位是函数
D.在C程序中,注释说明只能位于一条语句的后面[ D]
13、当调用函数时,实参是一个数组名,则向函数传送的是_____。
A)数组的长度B)数组的首地址
C)数组每一个元素的地址D)数组每个元素中的值
学生解答: D 教师批改: B
14、请读程序:
#include<stdio.h>
f(in b[], int n)
{ int i, r;
r=1;
for(i=0; i<=n; i++)r=r*b[i];
return r;
}
main()
{ int x, a[]={ 2,3,4,5,6,7,8,9};
x=f(a, 3);
printf("%d\n",x); }
上面程序的输出结果是_____。
A)720 B)120 C)24 D)6 [B]
二、编程题
15、写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输山结果。
两个整数由键盘输入。
hcf(int u, int v)
{int a,b,t,r;
if(u>v){t=u;u=v;v=t;}
a=u;b=v;
while((r=b%a)!=0)
{b=a;a=r;}
return(a);
}
lcd(int u,int v,int h)
{return(u*v/h);}
main()
{int u,v,h,l;
scanf("%d,%d",&u,&v);
h=hcf(u,v);
printf("H.C.F=%d\n",h);
l=lcd(u,v,h);
printf("L.C.D=%d\n",l);
}
16、求二次方程的根(习题2)。
#include"math.h"
float x1,x2,disc,p,q;
greater_than_zero(a,b)
float a,b;
{x1=(-b+sqrt(disc))/(2*a);
x2=(-b-sqrt(disc))/(2*a);
}
equal_to_zero(flaot a, flaot b) {x1=x2=-b/(2*a);}
smaller_than_zero(a,b)
float a,b;
{p=-b/(2*a);
q=sqrt(-disc)/(2*a);
}
main()
{float a,b,c;
scanf("%f,%f,%f",&a,&b,&c);
disc=b*b-4*a*c;
if(fabs(disc)<=1e-5)
{equal_to_zero(a,b);
printf("x1=%5.2f\tx2=%5.2f\n",x1,x2);
}
else if(disc>0)
{greater_than_zero(a,b);
printf("x1=%5.2f\tx2=%5.2f\n",x1,x2);
}
else
{smaller_than_zero(a,b);
printf("x1=%5.2f+%5.2fi\tx2=%5.2f-%5.2fi\n ",p,q,p,q);
}
}
17、写一个判素数的函数,在主函数输入一个整数,输出是否素数的信息。
main()
{int number;
scanf("%d",&number);
if(prime(number))
printf("yes");
else
printf("no");
}
int prime(int number)
{int flag=1,n;
for(n=2;n<number/2&&flag==1;n++)
if(number%n==0)
flag=0;
return(flag);
}
18、写一函数,使给定的—个二维数组(3x3)转置,即行列互换。
#define N 3
int array[N][N];
convert(int array[3][3]) {int i,j,t;
for(i=0;i<N;i++)
for(j=i+1;j<N;j++)
{t=array[i][j];
array[i][j]=array[j][i];
array[j][i]=t;
}
}
main() {int i,j;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
scanf("%d",&array[i][j]); convert(array);
for(i=0;i<N;i++)
{printf("\n");
for(j=0;j<N;j++)
printf("%5d",array[i][j]);
}
}
19、写一函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。
main()
{char str[100]; scanf("%s",str); inverse(str); printf("%s\n",str); }
inverse(schar str[ ]) {char t;
int i,j;
for(i=0,j=strlen(str);i<strlen(str)/2;i++,j--) {t=str[i];
str[i]=str[j-1];
str[j-1]=t;
}
}
20、写一函数,将两个字符串连接。
char concate(char str1[],str2[],str[]) {int i,j;
for(i=0;str1[i]!='\0';i++)
str[i]=str1[i];
for(j=0;str2[j]!='\0';j++)
str[i+j]=str2[j];
str[i+j]='\0';
} main()
{char s1[100],s2[100],s[100]; scanf("%s",s1);
scanf("%s",s2);
concate(s1,s2,s);
printf("\ns=%s",s);
}
21、编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其他字符的个数,在主函数中输入字符串以及输出上述的结果。
int alph,digit,space,others;
main()
{char text[80];
gets(text);
alph=0,digit=0,space=0,others=0;
count(text);
printf("\nalph=%d,digit=%d,space=%d,others=%d\n",alph,digit,space,others);
}
count(char str[ ])
{int i;
for(i=0;str[i]!=‘\0‘;i++)
if((str[i]>=‘a‘&&str[i]<=‘z‘)||(str[i]>=‘A‘&&str[i]<=‘Z‘))
alph++;
else if(str[i]>=‘0‘&&str[i]<=‘9‘)
digit++;
else if(strcmp(str[i],‘‘)==0)
space++;
else
others++;
}
22、输入10个学生5门课的成绩,分别用函数求:(1)每个学生的平均分;(2)每门课的平均分;(3)找出最高的分数所对应的学生和课程:(4)求出平均分方差。
define N 10
#define M 5
float score[N][M];
float a_stu[N],a_cor[M];
main()
{int i,j,r,c;
float h;
float s_diff();
float highest();
r=0;
c=1;
input_stu();
avr_stu();
avr_cor();
printf("\n number class 1 2 3 4 5 avr"); for(i=0;i<N;i++)
{printf("\nNO%2d",i+1);
for(j=0;j<M;j++)
printf("%8.2f",score[i][j]);
printf("%8.2f",a_stu[i]);
}
printf("\nclassavr");
for(j=0;j<M;j++)
printf("%8.2f",a_cor[j]);
h=highest(&r,&c);
printf("\n\n%8.2f %d %d\n",h,r,c);
printf("\n %8.2f\n",s_diff());
}
input_stu( )
{int i,j;
float x;
for(i=0;i<N;i++)
{for(j=0;j<M;j++)
{scanf("%f",&x);
score[i][j]=x;
}
}
}
avr_stu( ) {int i,j;
float s;
for(i=0;i<N;i++)
{for(j=0,s=0;j<M;j++)
s+=score[i][j];
a_stu[i]=s/5.0;
}
}
avr_cor( )
{int i,j;
float s;
for(j=0;j<M;j++)
{for(i=0,s=0;i<N;i++)
s+=score[i][j];
a_cor[j]=s/(float)N;
}
}
float highest(int *r, int *c)
{float high;
int i,j;
high=score[0][0];
for(i=0;i<N;i++)
for(j=0;j<M;j++)
if(score[i][j]>high)
{high=score[i][j];
*r=i+1;
*c=j+1;
}
return(high);
}
float s_diff()
{int i,j;
float sumx=0.0,sumxn=0.0;
for(i=0;i<N;i++)
{sumx+=a_stu[i]*a_stu[i];
sumxn+=a_stu[i];
}
return(sumx/N-(sumxn/N)*(sumxn/N)); }
23、用递归法将一个整数n转换成字符串。
例如输入483,应输出字符串“483”。
n的位数不确定,可以是任意位数的整数。
#include<stdio.h>
void convert(int n)
{int i;
if((i=n/10)!=0)
convert(i);
putchar(n%10+'0');
}
main( )
{int number;
scanf("%d",&number);
if(number<0)
{putchar('-');
number=-number;
}
convert(number);
}。