C语言上机题库百科园第4章南信大.docx
《C语言上机题库百科园第4章南信大.docx》由会员分享,可在线阅读,更多相关《C语言上机题库百科园第4章南信大.docx(14页珍藏版)》请在冰豆网上搜索。
![C语言上机题库百科园第4章南信大.docx](https://file1.bdocx.com/fileroot1/2023-3/19/f5a93112-29c5-47c0-9fc9-d82428af168c/f5a93112-29c5-47c0-9fc9-d82428af168c1.gif)
C语言上机题库百科园第4章南信大
第四章
单选
有以下程序,程序运行后的输出结果是()
#include
intfun(intx,inty)
{if(x!
=y)return((x+y)/2);
elsereturn(x);
}
intmain()
{inta=4,b=5,c=6;
printf("%d\n",fun(2*a,fun(b,c)));
return0;
}
A.12B.6C.3D.8
有以下程序,程序运行的输出结果()
#include
intf(intx);
intmain()
{intn=1,m;
m=f(f(f(n)));printf(“%d\n”,m);
return0;
}
intf(intx)
{returnx*2;}
A.8B.4C.1D.2
有以下程序,程序执行后变量w中的值是()
#include
intfunl(doublea){returna*=a;}
intfun2(doublex,doubley)
{doublea=0,b=0;
a=funl(x);b=funl(y);return(int)(a+b);
}
intmain()
{doublew;w=fun2(1.1,2.0);……}
A.5.21B.0.0C.5.0D.5
有以下程序,程序运行后的输出结果是()
#include
intfun()
{staticintx=1;
x*=2;
returnx;
}
intmain()
{inti,s=1;
for(i=1;i<=3;i++)s*=fun();
printf("%d\n",s);
}
A.10B.64C.0D.30
有以下程序,程序运行后的输出结果是()
#include
intf(intx,inty)
{return((y-x)*x);}
intmain()
{inta=3,b=4,c=5,d;
d=f(f(a,b),f(a,c));
printf("%d\n",d);
}
A.10B.8C.7D.9
有以下程序,程序运行后的输出结果是()
#include
voidfun(intp)
{intd=2;p=d++;printf(“%d”,p);}
intmain()
{inta=1;
fun(a);printf(“%d\n”,a);
return0;
}
A.22B.21C.12D.32
有以下程序:
程序运行后的输出结果是()
#include
intf()
{staticintx=1;
x+=1;returnx;
}
intmain()
{inti,s=1;
for(i=1;i<=5;i++)s+=fun();
printf("%d\n",s);
return0;
}
A.21B.6C.120D.11
若有代数式
(其中e仅代表自然对数的底数,不是变量),则以下能够正确表示该代数式的C语言表达式是()
A.sqrt(fabs(pow(n,x)+exp(x,e)))
B.sqrt(fbs(pow(n,x)+pow(x,e)))
C.sqrt(fabs(pow(x,n)+exp(x)))
D.sqrt(abs(nx+ex))
以下关于return语句叙述中正确的是()
A.定义void类型的函数中可以有带返回值的return语句
B.没有return语句的自定义函数在执行结束时不能返回到调用处
C.一个自定义函数中必须有一条return语句
D.一个自定义函数中可以根据不同情况设置多条return语句
设有如下函数定义,若执行调用语句:
n=fun(3);,则函数fun总共被调用的次数是()
intfun(intk)
{if(k<1)return0;
elseif(k==1)return1;
elsereturnfun(k-1)+1;
}
A.2B.3C.5D.4
在一个C语言源程序文件中所定义的全局变量,其作用域为()
A.所在函数的全部范围
B.所在文件的全部范围
C.由具体定义位置和extern说明来决定范围
D.所在程序的全部范围
以下叙述正确的是()
A.C语言函数可以嵌套调用,例如:
fun(fun(x))
B.C语言程序是由过程和函数组成的
C.C语言函数不可以单独编译
D.C语言中除了main函数,其他函数不可以作为单独文件形式存在
以下程序的主函数中调用了在其前面定义的fun函数,则以下选项中错误的fun函数首部是()
#include
intmain()
{
doublea[15],k;
k=fun(a);
return0;
}
A.doublefun(double*a)
B.doublefun(doublea)
C.doublefun(doublea[])
D.doublefun(doublea[15])
以下说法不正确的是()
A.系统不允许用户重新定义标准库函数
B.标准库函数按分类在不同的头文件中声明
C.用户可以重新定义标准库函数
D.用户若需要调用标准库函数,调用前必须使用预编译命令将该函数所在文件包括到用户源文件中
下列叙述中正确的是()
A.C语言规定必须用main作为主函数名,程序将从此开始执行,在此结束
B.main可作为用户标识符,用以命名任意一个函数作为主函数
C.可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行
D.C语言程序将从源程序中第一个函数开始执行
若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是()
A.同名的实参和形参占同一存储单元
B.函数的形参和实参分别占用不同的存储单元
C.函数的实参和其对应的形参共占同一存储单元
D.形参只是形式上的存在,不占用具体存储单元
在C语言中,只有在使用时才占用内存单元的变量,其存储类型是()。
A.extern和register
B.auto和register
C.static和register
D.auto和static
设函数中有整形变量n,为保证其在未赋初值的情况下初值为0,应该选择的存储类别是()
A.register
B.auto
C.auto或register
D.static
以下正确的函数定义形式是:
()
A.doublefun(intx,inty){}
B.doublefun(intx,y);{}
C.doublefun(intx;inty){}
D.doublefun(intx,inty);{}
在函数调用过程中,如果函数funA调用了函数funB,函数funB又调用了函数funA,则()
A.称为函数的循环调用
B.C语言中不允许这样的递归调用
C.称为函数的间接递归调用
D.称为函数的直接递归调用
程序设计
/*请编写函数fun,其功能是:
将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k传回。
例如,输入17,则应输出46891012141516。
注意:
部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
*/
#include
#include
#include
intfun(intm,intxx[])
{
/***************Begin************/
/***************End************/
}
intmain()
{
FILE*wf;
intm,n,zz[100];
printf("\nPleaseenteranintegernumberbetween10and100:
");
scanf("%d",&n);
m=fun(n,zz);
printf("\n\nThereare%dnon-primenumberslessthan%d:
",m,n);
for(n=0;nprintf("%4d\n",zz[n]);
wf=fopen("debug\\out.dat","w");
m=fun(21,zz);
for(n=0;nfprintf(wf,"%d\n",zz[n]);
fclose(wf);
return0;
}
【参考代码】
inti,k,j=0;
for(i=2;ifor(k=2;k
if(i%k==0)break;
if(k
}
returnj;
程序改错
/*下列给定程序中,函数fun的功能是:
将十进制正整数m转换成
进制数,并按位输出。
例如,若输入8和2,则应输出1000(即十进制数8转换成二进制表示是1000)。
请改正函数fun中的错误,使它能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
*/
#include
#include
/**********ERROR**********/
voidfun(intm,intk);
{intaa[20],i;
for(i=0;m;i++)
{
/**********ERROR**********/
aa[i]=m/k;
m/=k;
}
for(;i;i--)
/**********ERROR**********/
printf("%d",aa[i]);
}
intmain()
{
intb,n;
printf("\nPleaseenteranumberandabase:
\n");
scanf("%d%d",&n,&b);
fun(n,b);
printf("\n");
return0;
}
【参考答案】
voidfun(intm,intk)
【参考答案】
aa[i]=m%k;
【参考答案】
printf("%d",aa[i-1]);
如当n的值为20时,该数列为3,8,13,18,23,28,…,93,98。
符合此条件的累加值应为42,126,366,570,1010。
请改正程序中的错误,使它能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
*/
#include
#defineN20
intfun(intn,inta[])
/**********ERROR**********/
{inti,j,k,sum;
sum=0;
for(k=3,i=0;i{sum=sum+k;
/**********ERROR**********/
if(sum%4=2)
a[j++]=sum;
}
/**********ERROR**********/
returnj-1;
}
intmain()
{
inta[N],d,n,i;
printf("\nEntern(4<=n<=50):
");
scanf("%d",&n);
d=fun(n,a);
printf("\n\nTheresult:
\n");
for(i=0;iprintf("\n\n");
return0;
}
【参考答案】
inti,j=0,k,sum;
【参考答案】
if(sum%4==2)
【参考答案】
returnj++;
returnj;
/*下列给定程序中,函数fun的功能是:
计算函数F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值。
其中x和y不相等,z和y不等。
例如,当x的值为9,y的值为11,z的值为15时,函数值为-3.50。
请改正程序中的错误,使它能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
*/
#include
#include
#include
/**********ERROR**********/
#defineFU(m,n)(m/n)
floatfun(floata,floatb,floatc)
{floatvalue;
value=FU(a+b,a-b)+FU(c+b,c-b);
/**********ERROR**********/
return(Value);
}
voidmain()
{floatx,y,z,sum;
printf("Inputxyz:
:
");
scanf("%f%f%f",&x,&y,&z);
printf("x=%f,y=%f,z=%f\n",x,y,z);
if(x==y||y==z)
{printf("Dataerror!
\n");
exit(0);}
sum=fun(x,y,z);
printf("Theresultis:
%5.2f\n",sum);
}
【参考答案】
#defineFU(m,n)(m)/(n)
#defineFU(m,n)((m)/(n))
【参考答案】
return(value);
returnvalue;
/*下列给定程序中,函数fun的功能是:
按如下递归公式求函数值。
例如,当给n输入5时,函数值为18;当给n输入3时,函数值为14。
请改正程序中的错误,使它能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
*/
#include
/**********ERROR**********/
intfun(n)
{
intc;
/**********ERROR**********/
if(n=1)
c=10;
else
c=fun(n-1)+2;
return(c);
}
voidmain()
{
intn;
printf("Entern:
");
scanf("%d",&n);
printf("Theresult:
%d\n\n",fun(n));
}
【参考答案】
intfun(intn)
【参考答案】
if(n==1)
if(1==n)
/*下列给定程序中,函数fun的功能是:
用递归算法计算斐波拉契级数列中第n项的值。
从第一项起,斐波拉契级数序列为1,1,2,3,5,8,13,21,…例如,若给n输入7,该项的斐波拉契级数值为13。
请改正程序中的错误,使它能得出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
*/
#include
longfun(intg)
{
/**********ERROR**********/
switch(g);
{case0:
return0;
/**********ERROR**********/
case1;case2:
return1;
}
return(fun(g-1)+fun(g-2));
}
voidmain()
{
longfib;intn;
printf("Inputn:
");
scanf("%d",&n);
printf("n=%d\n",n);
fib=fun(n);
printf("fib=%d\n\n",fib);
}
【参考答案】
switch(g)
【参考答案】
case1:
case2:
return1;
/*请补充函数fun,函数fun的功能是求n的阶乘。
注意:
部分源程序给出如下。
试题程序:
*/
#include
longfun(intn)
{
/**********FILL**********/
if([1])
/**********FILL**********/
return(n*fun([2]));
/**********FILL**********/
return[3];
}
voidmain()
{
printf("10!
=%ld\n",fun(10));
}
【参考答案】
if(n>1)
if(1【参考答案】
return(n*fun(n-1));
【参考答案】
return1;