C语言题集三.docx
《C语言题集三.docx》由会员分享,可在线阅读,更多相关《C语言题集三.docx(75页珍藏版)》请在冰豆网上搜索。
![C语言题集三.docx](https://file1.bdocx.com/fileroot1/2023-2/4/80fde0eb-4355-4dbe-afe9-656977a751ec/80fde0eb-4355-4dbe-afe9-656977a751ec1.gif)
C语言题集三
第1章函数
填空题
1.若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是
A)函数调用可以作为独立的语句存在
B)函数调用可以作为一个函数的实参
C)函数调用可以出现在表达式中
D)函数调用可以作为一个函数的形参
2.有以下程序
floatfun(intx,inty)
{return(x+y);}
main()
{inta=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
3.以下说法正确的是
A)C语言程序总是从第一个的函数开始执行
B)在C语言程序中,要调用函数必须在main()函数中定义
C)C语言程序总是从main()函数开始执行
D)C语言程序中的main()函数必须放在程序的开始部分
4.在调用函数时,如果实参是简单的变量,它与对应形参之间的数据传递方式是
A)地址传递
B)单向值传递
C)由实参传形参,再由形参传实参
D)传递方式由用户指定
5.以下正确的说法是
A)定义函数时,形参的类型说明可以放在函数体内
B)return后边的值不能为表达式
C)如果函数值的类型与返回值类型不一致,以函数值类型为准
D)如果形参与实参类型不一致,以实参类型为准
6.有以下程序
intf(intn)
{if(n==1)return1;
elsereturnf(n-1)+1;
}
main()
{inti,j=0;
for(i=1;i<3;i++)j+=f(i);
printf("%d\n",j);
}
程序运行后的输出结果是
A)4
B)3
C)2
D)1
7.若有以下程序
#include
voidf(intn);
main()
{voidf(intn);
f(5);
}
voidf(intn)
{printf("%d\n",n);}
则以下叙述中不正确的是
A)若只在主函数中对函数f进行说明,则只能在主函数中正确调用函数f
B)若在主函数前对函数f进行说明,则在主函数和其后的其他函数中都可以正确调用函数f
C)对于以上程序,编译时系统会提示出错信息:
提示对f函数重复说明
D)函数f无返回值,所以可用void将其类型定义为无返回值型
8.C语言允许函数类型缺省定义,此时函数值隐含的类型是
A)float
B)int
C)long
D)double
9.以下程序有语法错误,有关错误原因的正确说法是
main()
{intG=5,k;
voidprt_char();
...
k=prt_char(G);
...
}
A)语句voidprt_char();有错,它是函数调用语句,不能用void说明
B)变量名不能使用大写字母
C)函数说明和函数调用语句之间有矛盾
D)函数名不能使用下划线
10.以下叙述中不正确的是
A)在不同的函数中可以使用相同的名字的变量
B)函数中的形式参数是局部变量
C)在一个函数内定义的变量只在本函数范围内有效
D)在一个函数内的复合语句中定义的变量在本函数范围内有效
11.以下正确的说法是
A)用户若需调用标准库函数,调用前必须重新定义
B)用户可以重新定义标准库函数,若如此,该函数将失去原有含义
C)系统根本不允许用户重新定义标准库函数
D)用户若需调用标准库函数,调用前不必使用预编译命令将该函数所在文件包括到用户源文件中,系统自动调用
12.以下正确的函数头定义形式是
A)doublefun(intx,inty)
B)doublefun(intx;inty)
C)doublefun(intx,inty);
D)doublefun(intx,y);
13.有以下程序
fun(intx,inty,intz)
{z=x*y;}
main()
{inta=4,b=2,c=6;
fun(a,b,c);
printf("%d",c);
}
程序运行后的输出结果是
A)16
B)6
C)8
D)12
14.下列函数的运行结果是
main()
{inti=2,p;
intj,k;
j=i;
k=++i;
p=f(j,k);
printf("%d",p);
}
intf(inta,intb)
{intc;
if(a>b)c=1;
elseif(a==b)c=0;
elsec=-1;
return(c);
}
A)-1
B)1
C)2
D)编译出错,无法运行
15.以下对C语言函数的有关描述中,正确的是
A)在C语言中调用函数时,只能把实参的值传给形参,形参的值不能传送给实参
B)C函数既可以嵌套定义又可以递归调用
C)函数必须有返回值,否则不能使用函数
D)函数必须有返回值,返回值类型不定`
16.有以下程序:
voidfun(inta,intb,intc)
{a=456,b=567,c=678;}
main()
{intx=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
17.有以下函数:
fun(char*p)
{returnp;}
该函数的返回值是
A)无确切值
B)形参p中存放的地址值
C)一个临时存储单元的地址
D)形参p自身的地址值
18.以下不正确的说法是
C语言规定:
A)实参可以是常量,变量或表达式
B)形参可以是常量,变量或表达式
C)实参可以为任何类型
D)形参应与其对应的实参类型一致
19.以下程序的输出结果是
longfun(intn)
{longs;
if(n==1||n==2)s=2;
elses=n-fun(n-1);
returns;}
main()
{printf("%ld\n",fun(3));}
A)1
B)2
C)3
D)4
20.以下所列的各函数首部中,正确的是
A)voidplay(var:
Integer,varb:
Integer)
B)voidplay(inta,b)
C)voidplay(inta,intb)
D)Subplay(aasinteger,basinteger)
21.下面函数调用语句含有实参的个数为
func((exp1,exp2),(exp3,exp4,exp5));
A)1
B)2
C)4
D)5
22.设有如下函数
fun(floatx)
{
printf("\n%d",x*x);}
则函数的类型是
A)与参数x的类型相同
B)是void
C)是int型
D)无法确定
23.C语言规定,函数返回值的类型是由
A)return语句中的表达式类型所决定
B)调用该函数时的主调函数类型所决定
C)调用该函数时系统临时决定
D)在定义该函数时所指定的函数类型所决定
24.下面对C语言的描述中,正确的是
A)函数一定有返回值,否则无法使用函数
B)C语言函数既可以嵌套定义又可以递归调用
C)在C语言中,调用函数时,只能将实参的值传递给形参
D)C语言程序中有调用关系的所有函数都必须放在同一源程序文件中
25.阅读下面程序段,则执行后的结果为
#include"stdio.h"
main()
{intm=4,n=2,k;
k=fun(m,n);
printf("%d\n",k);}
fun(intm,intn)
{return(m*m*m-n*n*n);}
A)64
B)8
C)56
D)0
26.阅读下面程序段,则执行后输出的结果是
#include"stdio.h"
main()
{charfun(char,int);
chara=′A′;
intb=13;
a=fun(a,b);
putchar(a);}
charfun(chara,intb)
{chark;
k=a+b;
returnk;}
A)A
B)M
C)N
D)L
27.编写求两个双精度数之和的函数,选项中正确的是
A)doubleadd(doublea,doubleb)
{doubles;
s=a+b;
returns;}
B)doubleadd(doublea,b)
{doubles;
s=a+b;
return(s);}
C)doubleadd(doubleadoubleb)
{doubles;
s=a+b;
returns;}
D)doubleadd(a,b)
{doublea,b,s;
s=a+b;
return(s);}
填空题
1.阅读下面程序,则程序的执行结果为【1】。
#include"stdio.h"
main()
{inta=30,b=20,z;
z=fun(a+b,a-b);
printf("%d\n",z);
}
fun(inta,intb)
{intz;
z=a/b;
returnz;
}
2.函数fun的功能是:
根据以下公式求p的值,结果由函数值返回。
m与n为两个正数且要求m>n。
例如:
m=12,n=8时,运行结果应该是495.000000。
请在题目的空白处填写适当的程序语句,将该程序补充完整。
#include
#include
floatfun(intm,intn)
{inti;
doublep=1.0;
for(i=1;i<=m;i++)【2】;
for(i=1;i<=n;i++)【3】;
for(i=1;i<=m-n;i++)p=p/i;
returnp;}
main()
{clrscr();
printf("p=%f\n",fun(12,8));}
第2章指针
选择题
1.若有语句int*point,a=4;和point=&a;下面均代表地址的一组选项是
A)a,point,*&a
B)&*a,&a,*point
C)*&point,*point,&a
D)&a,&*point,point
2.以下程序的输出结果是
#include
voidprt(int*x,int*y,int*z)
{printf("%d,%d,%d\n",++*x,++*y,*(z++));}
main()
{inta=10,b=40,c=20;
prt(&a,&b,&c);
prt(&a,&b,&c);
}
A)11,42,31
12,22,41
B)11,41,20
12,42,20
C)11,21,40
11,21,21
D)11,41,21
12,42,22
3.有以下函数
charfun(char*p)
{returnp;}
该函数的返回值是
A)无确切的值
B)形参p中存放的地址值
C)一个临时存储单元的地址
D)形参p自身的地址值
4.若说明int*p,n;则通过语句scanf能够正确读入数据的程序段是
A)p=&n;scanf("%d",&p);
B)p=&n;scanf("%d",*p);
C)scanf("%d",n);
D)p=&n;scanf("%d",p);
5.设有定义:
intn=0,*p=&n,**q=&p,则下列选项中正确的赋值语句是
A)p=1;
B)*q=2;
C)q=p;
D)*p=5;
6.下列程序的输出结果是
intb=2;
intfunc(int*a)
{b+=*a;return(b);}
main()
{inta=2,res=2;
res+=func(&a);
printf("%d\n",res);
}
A)4
B)6
C)8
D)10
7.执行以下程序后,a,b的值分别为
main()
{inta,b,k=4,m=6,*p1=&k,*p2=&m;
a=p1==&m;
b=(*p1)/(*p2)+7;
printf("a=%d\n",a);
printf("b=%d\n",b);
}
A)-1,5
B)1,6
C)0,7
D)4,10
8.以下程序有错,错误原因是
main()
{int*p,i;char*q,ch;
p=&i;
q=&ch;
*p=40;
*p=*q;
......
}
A)p和q的类型不一致,不能执行*p=*q;语句
B)*p中存放的是地址值,因此不能执行*p=40;语句
C)q没有指向具体的存储单元,所以*q没有实际意义
D)q虽然指向了具体的存储单元,但该单元中没有确定的值,所以执行*p=*q;没有意义,可能会影响后面语句的执行结果
9.若有说明:
int*p,m=5,n;以下正确的程序段是
A)p=&n;scanf("%d",&p);
B)p=&n;scanf("%d",*p)
C)scanf("%d",&n);*p=n;
D)p=&n;*p=m
10.有如下程序段
int*p,a=10,b=1;
p=&a;a=*p+b;
执行该程序段后,a的值为
A)12
B)11
C)10
D)编译出错
11.以下程序执行后a的值是
main()
{intx,y=252,i=386,*m=&y,*z=&i;
x=(z==y);
printf("%d",x);
}
A)252
B)1
C)0
D)运行时出错,x无定值
12.请选出正确的程序段
A)int*p;
scanf("%d",p);
…
B)int*s,k;
*s=100;
…
C)int*s,k;
char*p,c;
s=&k;
p=&c;
*p=’a′;
…
D)int*s,k;
char*p,c;
s=&k;
p=&c;
s=p;
*s=1;
…
13.以下程序的运行结果是
sub(intx,inty,int*z)
{*z=y-x;}
main()
{inta,b,c;
sub(10,5,&a);
sub(7,a,&b);
sub(a,b,&c);
printf("%4d,%4d,%4d\n",a,b,c);
}
A)5,2,3
B)-5,-12,-7
C)-5,-12,-17
D)5,-2,-7
14.已有变量定义和函数调用语句:
inta=25;print_value(&a);下面函数的正确输出结果是
voidprint_value(int*x)
{printf("%d\n",++*x);}
A)23
B)24
C)25
D)26
15.下列程序的运行结果是
voidfun(int*a,int*b)
{int*k;
k=a;a=b;b=k;
}
main()
{inta=2004,b=9,*x=&a,*y=&b;
fun(x,y);
printf("%d%d",a,b);
}
A)20049
B)92004
C)00
D)编译时出错
16.下面程序应能对两个整型变量的值进行交换。
以下正确的说法是
main()
{inta=10,b=20;
printf("
(1)a=%d,b=%d\n",a,b);
swap(&a,&b);
printf("
(2)a=%d,b=%d\n",a,b);
}
swap(intp,intq)
{intt;
t=p;p=q;q=t;
}
A)该程序完全正确
B)该程序有错,只要将语句swap(&a,&b);中的参数改为a,b即可
C)该程序有错,只要将swap()函数中的形参p和q以及t均定义为指针(执行语句不变)即可
D)以上说法都不对
17.已知inta;则下面的说明指针变量p的语句正确的是
A)intp=&a
B)int*p=a
C)int*p=&a
D)int*p=*a
18.已知char**t;则变量t是
A)指向char变量的指针
B)指向指针的char变量
C)指向指针的指针
D)以上说法都不对
19.阅读下面程序,执行后的结果为
#include"stdio.h"
voidfun(int*a,int*b)
{intk;
k=5;
*a=k;
*b=*a+k;
}
main()
{int*a,*b,x=10,y=15;
a=&x;
b=&y;
fun(a,b);
printf("%d,%d\n",*a,*b);
}
A)10,15
B)5,15
C)5,10
D)15,10
20.阅读下面程序,在程序执行后的结果为
#include"stdio.h"
int*fun(int*a,int*b)
{intm;
m=*a;
m+=*b-3;
return(&m);}
main()
{intx=21,y=35,*a=&x,*b=&y;
int*k;
k=fun(a,b);
printf("%d\n",*k);}
A)53
B)21
C)35
D)14
填空题:
1.函数voidfun(float*sn,intn)的功能是:
根据以下公式计算S,计算结果通过形参指针sn传回;n通过形参传入,n的值大于等于0。
请填空。
voidfun(float*sn,intn)
{floats=0.0,w,f=-1.0;
inti=0;
for(i=0;i<=n;i++)
{f=【1】*f;
w=f/(2*i+1);
s+=w;}
【2】=s;}
2.下面的程序实现的是指针p所指向的地址的n个数中,求出最大的和最小的数据,请填空。
fun(int*p,intn)
{int*q;
intmax,min;
max=min=*p;
for(q=p;【3】;q++)
if(【4】)max=*q;
elseif(【5】)min=*q;
}
第3章数组
选择题
1.假定int类型变量占用两个字节,其有定义:
intx[10]={0,2,4};,则数组x在内存中所占字节数是
A)3
B)6
C)10
D)20
2.对以下说明语句的正确理解是
inta[10]={6,7,8,9,10};
A)将5个初值依次赋给a[1]至a[5]
B)将5个初值依次赋给a[0]至a[4]
C)将5个初值依次赋给a[6]至a[10]
D)因为数组长度与初值的个数不相同,所以此语句不正确
3.若有说明:
inta[][4]={0,0};则下面不正确的叙述是
A)数组a的每个元素都可得到初值0
B)二维数组a的第一维大小为1
C)当初值的个数能被第二维的常量表达式的值除尽时,所得商数就是第一维的大小
D)只有元素a[0][0]和a[0][1]可得到初值,其余元素均得不到确定的初值
4.以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是
main()
{int*p,*q,a,b;
p=&a;
printf("inputa:
");
scanf("%d",*p);
}
A)*p表示的是指针变量p的地址
B)*p表示的是变量a的值,而不是变量a的地址
C)*p表示的是指针变量p的值
D)*p只能用来说明p是一个指针变量
5.有如下说明
inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
则数值为9的表达式是
A)*p+9
B)*(p+8)
C)*p+=9
D)p+8
6.若有以下调用语句,则不正确的fun函数的首部是
main()
{…
inta[50],n;
…
fun(n,&a[9]);
…
}
A)voidfun(intm,intx[])
B)voidfun(ints,inth[41])
C)voidfun(intp,int*s)
D)voidfun(intn,inta)
7.若有说明inta[3][4];则a数组元素的非法引用是
A)a[0][2*1]
B)a[1][3]
C)a[4-2][0]
D)a[0][4]
8.C语言中,引用数组元素时,其数组下标的数据类型允许是
A)整型常量
B)整型表达式
C)整型常量或整型表达式
D)任何类型的表达式
9.下列程序执行后的输出结果是
voidfunc(int*a,intb[])
{b[0]=*a+6;}
main()
{inta,b[5];
a=0;b[0]=3;
func(&a,b);
printf("%d\n",b[0]);
}
A)6
B)7
C)8
D)9
10.以下程序中函数sort的功能是对a数组中的数据进行由大到小的排序
voidsort(inta[],intn)
{inti,j,t;
for(i=0;ifor(j=i+1;jif(a[i]{t=a[i];a[i]=a[j];a[j]=t;}
}
main()
{intaa[10]={1,2,3,4,5,6,7,8,9,10},i;
sort(&aa[3],5);
for(i=0;i<10;i++)
printf("%d,",aa[i]);
printf("\n");
}
程序运行后的输出结果是
A)1,2,3,4,5,6,7,8,9,10,
B)10,9,8,7,6,5,4,3,2,1,
C)1,2,3,8,7,6,5,4,9,10,
D)1,2,10,9,8,7,6,5,4,3,
11.执行下面的程序段后,变量k中的值为
intk=3,s[2];
s[0]=k;k=s[1]*10;
A)不定值
B)33
C)30
D)10
12.以下函数返回a所指数组中最大值所在的下标值
fun(int*a,intn)
{inti,j=0,p;
p=j;
for(i=j;iif(a[i]>a[p])_________;
return(p);
}
在下划线处应