1.选择题
(1)以下函数的类型是 。
ggg(float x)
{
printf("\n%d",x*x);
}
A.与参数x相同的类型 B.void型
C.int型 D.无法确定
(2)C语言规定,程序中各函数之间 。
A.既允许直接递归调用,也允许间接递归调用
B.不允许直接递归调用,也不允许间接递归调用
C.允许直接递归调用,不允许间接递归调用
D.不允许直接递归调用,允许间接递归调用
(3)以下程序的输出结果是 。
#include <stdio.h>
long fib(int n)
{
if(n>2) return(fib(n-1)+fib(n-2));
else return(2);
}
main()
{
printf("%d\n",fib(3));
}
A.2 B.4 C.6 D.8
(4)以下程序的输出结果是 。
#include <stdio.h>
int f(int a,int b)
{
int c;
if(a>b) c=1;
else
if(a==b) c=0;
else c=-1;
return(c);
}
main()
{
int i=2,p;
p=f(i,i+1);
printf("%d",p);
}
A.-1 B.0 C.1 D.2
(5)若程序执行时,输入如下数据:则以下程序的输出结果是 。
#include <stdio.h>
main()
{
char s1[10],s2[10],s3[10],s4[10];
scanf("%s%s",s1,s2);
gets(s3);
gets(s4);
puts(s1);
puts(s2);
puts(s3);
puts(s4);
}
输入的数据:
aaaa bbbb<CR>
cccc dddd<CR>
A.aaaa B.aaaa C.aaaa D.aaaa bbbb
bbbb bbbb bbbb cccc
cccc cccc dddd dddd
cccc dddd dddd eeee
(6)以下程序片段(字符串内无空格)的输出结果是 。
printf("%d\n",strlen("ATS\n012\1\\"));
A.11 B.10 C.9 D.8
(7)以下程序的输出结果是 。
#include <stdio.h>
func(int a,int b)
{
int c;
c=a+b;
return c;
}
main()
{
int x=6,y=7,z=8,r;
r=func((x--,y=x+y+1),z--);
printf("%d\n",r);
}
A.11 B.20 C.21 D.31
(8)以下程序的输出结果是 。
#include <stdio.h>
void fun(int *s)
{
static int j=0;
do
{
s[j]+=s[j+1];
}
while(++j<2);
}
main()
{
int k,a[10]={1,2,3,4,5};
for(k=1;k<3;k++)
fun(a);
for(k=0;k<5;k++)
printf("%d",a[k]);
}
A.34756 B.23445 C.35745 D.12345
(9)以下程序的输出结果是 。
#include <stdio.h>
f(int 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
(10)以下程序的输出结果是 。
#include <stdio.h>
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
(11)以下程序的输出结果是 。
#include <stdio.h>
int m=13;
int fun2(int x,int y)
{
int m=3;
return (x*y-m);
}
main()
{
int a=7,b=5;
printf("%d\n",fun2(a,b)/m);
}
A.1 B.2 C.7 D.10
(12)以下说法中正确的是 。
A.C语言程序总是从第一个函数开始执行
B.在C语言程序中,要调用的函数必须在main( )函数中定义
C.C语言程序总是从main( )函数开始执行
D.C语言程序中的main( )函数必须放在程序的开始部分
(13)以下程序的输出结果是 。
#include <stdio.h>
int f(int a)
{
int b=0;
static int c=3:
a=c++,b++;
return (a);
}
main()
{
int a=2,i,k;
for(i=0;i<2;i++)
k=f(a++);
printf("%d\n",k);
}
A.3 B.0 C.5 D.4
(14)以下程序的输出结果是 。
#include <stdio.h>
int d=1;
fun (int q)
{
int d=5;
d+=q++;
printf("%d",d);
}
main()
{
int a=3;
fun(a);
d+=a++;
printf("%d\n",d);
}
A.8 B.9 C.9 D.8
4 6 4 5
(15)以下程序的输出结果是 。
#include <stdio.h>
fun(int h)
{
static int a[3]={1,2,3};
int k;
for(k=0;k<3;k++)
a[k]+=a[k]-h;
for(k=0;k<3;k++)
printf("%d",a[k]);
printf("\n");
return(a[h]);
}
main()
{
int t=1;
fun(fun(t));
}
A.1,2,3, B.1,3,5, C.1,3,5, D.1,3,5,
1,5,9, 1,3,5, 0,4,8, -1,3,7,
(16)以下程序的输出结果是 。
#include <stdio.h>
int w=3;
int fun(int k)
{
if(k==0) return w;
return(fun(k-1)*k);
}
main()
{
int w=10;
printf("%d\n",fun(5)*w);
}
A.360 B.3600 C.1080 D.1200
(17)函数调用语句strcat(strcpy(str1,str2),str3)的功能是 。
A.将字符str1复制到字符串str2中,再连接到字符串str3之后
B.将字符串str1连接到字符串str2之后,再复制到字符串str3中
C.将字符串str2复制到字符串str1中,再将字符串str3连接到字符str1之后
D.将字符串str2连接到字符串str1之后,再将字符串str1复制到字符串str3中
(18)以下对C语言函数的描述中,正确的是 。
A.在C语言中调用函数时,只能把实参值传送给形参,形参的值不能传送给实参
B.C语言函数既可以嵌套定义,又可以递归调用
C.C语言函数必须有返回值,否则不能被调用
D.在C语言程序中,有调用关系的所有函数必须放在同一个源程序文件中
(19)以下叙述中,不正确的是 。
A.在C语言中,函数中的自动变量可以赋初值,每调用一次,赋一次初值
B.在C语言中,在调用函数时,实参和对应的形参在类型上只须赋值兼容
C.在C语言中,外部变量的隐含类别是自动存储类别
D.在C语言中,函数的形参可以说明为register变量
(20)以下叙述中,不正确的是 。
A.在不同的函数中,可以使用相同名称的变量
B.函数中的形式参数是局部变量
C.在一个函数内定义的变量,只在本函数范围内有效
D.在一个函数内的复合语句中定义的变量,只在本函数范围内有效
(21)以下程序的输出结果是 。
#include <stdio.h>
viod fun(int a,int b,int c)
{
a=456;
b=567;
c=678;
}
main()
{
int x=10,y=20,z=30;
fun (x,y,z);
printf("%d,%d,%d\n",x,y,z);
}
A.30,20,10 B.10,20,30 C.456,567,678 D.678,567,456
(22)以下程序的输出结果是 。
#include <stdio.h>
main()
{
int a=24,b=16,c;
c=abc(a,b);
printf("%d\n",c);
}
int abc(int u,int v)
{
int w;
while(v)
{
w=u%v;
u=v;
v=w;
}
return u;
}
A.6 B.7 C.8 D.9
(23)以下程序的输出结果是 。
#include <stdio.h>
int d=1;
fun(int p)
{
static int d=5;
d+=p;
printf("%d ",d);
return (d);
}
main()
{
int a=3;
printf("%d\n",fun(a+fun(d)));
}
A.6 9 9 B.6 6 9 C.6 15 15 D.6 6 15
(24)以下程序的输出结果是 。
#include <stdio.h>
func(int a,int b)
{
static int m=0,i=2;
i+=m+1;
m=i+a+b;
return(m);
}
main()
{
int k=4,m=1,p;
p=func(k,m);
printf("%d,",p);
p=func(k,m);
printf("%d\n",p);
}
A.8,17 B.8,16 C.8,20 D.8,8
(25)在C语言中,形参的默认存储类别是 。
A.自动(auto) B.静态(static)
C.寄存器(register) D.外部(extern)
(26)以下函数调用语句含有 个实参。
func((exp1,exp2),(exp3,exp4,exp5));
A.1 B.2 C.4 D.5
(27)sizeof(double)是 。
A.一种函数调用 B.一个双精度型表达式
C.一个整型表达式 D.一个不合法的表达式
(28)若有以下调用语句,则不正确的fun( )函数的首部是 。
#include <stdio.h>
main()
{
...
int a[50],n;
...
fun(n,&a[9]);
...
}
A.void fun(int m, int x[ ]) B.void fun(int s, int h[41])
C.void fun(int n, int a) D.void fun(int p, int *s)
(29)以下函数调用语句含有 个实参。
func(rec1,rec2+rec3,(rec4,rec5));
A.3 B.4 C.5 D.有语法错
(30)以如下程序的输出结果是 。
#include <stdio.h>
int func(int a,int b)
{
return(a+b);
}
main()
{
int x=2,y=5,z=8,r;
r=func(func(x,y),z);
printf("%d\n",r);
}
A.12 B.13 C.14 D.15
(31)以下函数的返回值是 。
char fun(char *p)
{
return p;
}
A.不确定的值 B.形参p中存放的地址值
B.一个临时存储单元的地址 D.形参p自身的地址值
(32)以下所列的各函数首部中,正确的是 。
A.void play(var :integer,var b:integer) B.void play(int a,b)
C.void play(int a,int b) D.Sub play(a as integer,b as integer)
(33)以下程序的输出结果是 。
#include <stdio.h>
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.不确定的值
(34)以下程序的输出结果是 。
#include <stdio.h>
long fun(int n)
{
long s;
if(n==1 || n==2) s=2;
else s=n-fun(n-1);
return s;
}
main()
{
printf("%ld\n",fun(3));
}
A.1 B.2 C.3 D.4
(35)在调用函数时,如果实参是简单变量,它与对应的形参之间的数据传递方式是
。
A.地址传递 B.单向值传递
C.由实参传给形参,再由形参传回实参 D.由用户指定的
(36)以下函数值的类型是 。
fun(float x)
{
float y;
y=3*x-4;
return y;
}
A.int B.不确定 C.void D.float
(37)设有如下函数:
f(int a)
{
int b=0;
static int c=3;
b++; c++;
return(a+b+c);
}
如果在以下程序中调用该函数,则输出结果是 。
#include <stdio.h>
main()
{
int a=2,i;
for(i=0;i<3;i++)
printf("%d\n",f(a));
}
A.7 B.7 C.7 D.7
8 9 10 7
9 11 13 7
(38)以下程序的输出结果是 。
#include <stdio.h>
int a,b;
void fun()
{
a=100;
b=200;
}
main()
{
int a=5,b=7;
fun();
printf("%d%d\n",a,b);
}
A.100200 B.57 C.200100 D.75
(39)若有如下程序:
#include <stdio.h>
void f(int n);
main()
{
void f(int n);
f(5);
}
void f(int n)
{
printf("%d\n",n);
}
则以下叙述中,不正确的是 。
A.若只在主函数中对函数f( )进行说明,则只能在主函数中正确调用函数f( )
B.若在主函数前对函数f( )进行说明,则在主函数和其后的其他函数中均可正
确调用函数f( )
C.对于以上程序,编译时系统会提示出错信息,提示对函数f( )重复说明
D.函数f( )无返回值,所以可用void将其类型定义为无值型
(40)以下程序的输出结果是 。
#include <stdio.h>
f(int b[],int m,int n)
{
int i,s=0;
for(i=m;i<n;i=i+2)
s=s+b[i];
return s;
}
main()
{
int x,a[]={1,2,3,4,5,6,7,8,9};
x=f(a,3,7);
printf("%d\n",x);
}
A.10 B.18 C.8 D.15
(41)以下程序的输出结果是 。
#include <stdio.h>
main()
{
int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1;
for(i=0;i<3;i++)
for(j=i;j<=i;j++)
t=t+b[i][b[j][j]];
printf("%d\n",t);
}
A.3 B.4 C.1 D.9
(42)以下程序的输出结果是 。
#include <stdio.h>
int x=3;
incre()
{
static int x=1;
x*=x+1;
printf(" %d",x);
}
main()
{
int i;
for(i=1;i<x;i++)
incre();
}
A.3 3 B.2 2 C.2 6 D.2 5
(43)以下叙述中,正确的是 。
A.构成C语言程序的基本单位是函数
B.可以在一个函数中定义另一个函数
C.main( )函数必须放在其他函数之前
D.所有被调用的函数,一定要在调用之前进行定义
(44)以下程序的输出结果是 。
#include <stdio.h>
float fun(int x,int y)
{
return(x+y);
}
main()
{
int a=2,b=5,c=8;
printf("%3.0f\n",fun(int)fun(a+c,b),a-c);
}
A.编译出错 B.9 C.21 D.9.0
(45)以下程序的输出结果是 。
#include <stdio.h>
int f(int n)
{
if(n==1) return 1;
else return f(n-1)+1;
}
main()
{
int i,j=0;
for(i=1;i<3;i++)
j+=f(i);
printf("%d\n",j);
}
A.4 B.3 C.2 D.1
(46)以下程序中,函数reverse( )的功能是将a所指数组中的内容进行逆置。该程序的输出结果是 。
#include <stdio.h>
void reverse(int a[],int n)
{
int i,t;
for(i=0;i<n/2;i++)
{
t=a[i];
a[i]=a[n-1-i];
a[n-1-i]=t;
}
}
main()
{
int b[10]={1,2,3,4,5,6,7,8,9,10};
int i,s=0;
reverse(b,8);
for(i=6;i<10;i++)
s+=b[i];
printf("%d\n",s);
}
A.22 B.10 C.34 D.30
(47)以下程序中,函数f( )的功能是将n个字符串按由大到小的顺序进行排序。该程序的输出结果是 。
#include <stdio.h>
#include <string.h>
void f(char p[][10],int n)
{
char t[20];
int i,j;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(strcmp(p[i],p[j])<0)
{
strcpy(t,p[i]);
strcpy(p[i],p[j]);
strcpy(p[j],t);
}
}
main()
{
char p[][10]={"abc","aabdfg","abbd","dcdbe","cd"};
int i;
f(p,5);
printf("%d\n",strlen(p[0]));
}
A.6 B.4 C.5 D.3
2.填空题
(1)以下的findmax( )函数的功能是返回数组s中最大元素的下标,数组中元素的个数由t传入。
findmax(int s[],int t)
{
int k,p;
for(p=0,k=p;p<t;p++)
if(s[p]>s[k]) ;
return k;
}
(2)以下程序的输出结果是 。
#include <stdio.h>
long fun5(int n)
{
long s;
if((n==1)||(n==2)) s=2;
else s=n+fun5(n-1);
return (s);
}
main()
{
long x;
x=fun5(4);
printf("%ld\n",x);
}
(3)以下invert( )函数的功能是将一个字符串str的内容倒置。
#include <string.h>
void invert(char str[])
{
int i,j, ;
for(i=0, ;i<j;i++,j--)
{
k=str[i];
str[i]=str[j];
str[j]=k;
}
}
(4)以下程序的功能是通过函数average( )计算数组中各元素的平均值。
#include <stdio.h>
float average(int a[],int n)
{
int i;
float avg=0.0;
for(i=0;i<n;i++)
avg=avg+ ;
avg= ;
return avg;
}
main()
{
int i,a[5]={2,4,6,8,10};
float mean;
mean=average(a,5);
printf("mean=%f\n",mean);
}
(5)以下fun( )函数的功能是将形参x的值转换成二进制数,所得二进制数的每一位数字放在一维数组中返回,二进制数的最低位放在下标为0的元素中,其他依此类推。
fun(int x,int b[])
{
int k=0,r;
do
{
r=x% ;
b[k++]=r;
x/= ;
} while(x);
}
(6)若函数fun( )的类型为void型,且有以下定义和调用语句:
#include <stdio.h>
#define M 50
main()
{
int a[M];
...
fun(a);
...
}
定义fun( )函数首部可以用三种不同的形式分别为: 、 、 。
(7)函数fun( )的功能是使一个字符串按逆序存放。
void fun (char str[])
{
char m;
int i,j;
for(i=0,j=strlen(str); ;i++,j--)
{
m=str[i];
str[i]= ;
str[j-1]=m;
}
printf("%s\n",str);
}
(8)以下程序的输出结果是 。
#include <stdio.h>
int fun(int x,int y)
{
static int m=0,i=2;
i+=m+1;
m=i+x+y;
return m;
}
main()
{
int j=4,m=1,k;
k=fun(j,m);
printf("%d,",k);
k=fun(j,m);
printf("%d\n",k);
}
(9)以下程序的功能是求a数组中所有素数的和,函数isprime( )用来判断自变量是否为素数。素数是只能被1和本身整除且大于1的自然数。
#include <stdio.h>
int isprime(int x)
{
int i;
for(i=2;i<=x/2;i++)
if(x%i==0) return (0);
;
}
main()
{
int i,a[10],sum=0;
printf("Enter 10 numbers:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++)
if( )==1)
{
printf("%d",a[i]);
sum+=a[i];
}
printf("\nThe sum=%d\n",sum);
}
(10)以下程序的功能是调用invert( )函数按逆序重新放置a数组中元素的值。a数组中元素的值在main( )函数中读入。
#include <stdio.h>
#define N 10
invert(int s[],int i,int j)
{
int t;
if(i<j)
{
t=s[i];
s[i]=s[j];
s[j]=t;
invert(s, ,j-1);
}
}
main()
{
int a[N],i;
for(i=0;i<N;i++)
scanf("%d", );
invert(a,0,N-1);
for(i=0;i<N;i++)
printf("%d",a[i]);
printf("\n");
}
(11)设在主函数中有以下定义和函数调用语句,且fun( )函数为void型。写出fun( )函数的首部 ,要求形参名为b。
#include <stdio.h>
main()
{
double s[10][22];
int n;
...
fun(s);
...
}
(12)以下程序的输出结果是 。
#include <stdio.h>
void fun(int x,int y)
{
x=x+y; y=x-y; x=x-y;
printf("%d,%d,",x,y);
}
main()
{
int x=2,y=3;
fun(x,y);
printf("%d,%d\n",x,y);
}
(13)以下程序的输出结果是 。
#include <stdio.h>
void fun()
{
static int a=0;
a+=2;
printf("%d",a);
}
main()
{
int cc;
for(cc=1;cc<4;cc++)
fun();
printf("\n");
}
(14)以下程序输出的最后一个值是 。
#include <stdio.h>
int ff(int n)
{
static int f=1;
f=f*n;
return f;
}
main()
{
int i;
for(i=1;i<=5;i++)
printf("%d\n",ff(i));
}
(15)以下函数的功能是求x的y次方。
double fun(double x,int y)
{
int i;
double z;
for(i=1,z=x;i<y;i++) z=z* ;
return z;
}
(16)若已有定义语句:int a[10], i;,以下fun( )函数的功能是:在第一个循环中,给前10个数组元素依次赋值为1、2、3、4、5、6、7、8、9、10;在第二个循环中,使a数组前10个元素中的值对称折叠,变成1、2、3、4、5、5、4、3、2、1。
fun(int a[])
{
int i;
for(i=1;i<=10;i++)
=i;
for(i=0;i<5;i++)
=a[i];
}
(17)fun( )函数的功能是:对a所指的N行N列的矩阵,先找出各行中的最大值,再将这N个最大值中的最小值作为函数值返回。
#include <stdio.h>
#define N 100
int fun(int(*a)[N])
{
int row,col,max,min;
for(row=0;row<N;row++)
{
for(max=a[row][0],col=1;col<N;col++)
if( ) max=a[row][col];
if(row==0)min=max;
else if( )min=max;
}
return min;
}
3.上机操作题
(1)编写一个函数,统计字符串中非数字字符的个数。
(2)编写一个函数,计算n!的值。
(3)编写一个函数,求出三个数中的最大数。
(4)编写一个函数,求任意一个整数的逆序数。
(5)编写一个函数,求两个整数的最小公倍数。