C语言题集三.docx

上传人:b****8 文档编号:9444797 上传时间:2023-02-04 格式:DOCX 页数:75 大小:61.87KB
下载 相关 举报
C语言题集三.docx_第1页
第1页 / 共75页
C语言题集三.docx_第2页
第2页 / 共75页
C语言题集三.docx_第3页
第3页 / 共75页
C语言题集三.docx_第4页
第4页 / 共75页
C语言题集三.docx_第5页
第5页 / 共75页
点击查看更多>>
下载资源
资源描述

C语言题集三.docx

《C语言题集三.docx》由会员分享,可在线阅读,更多相关《C语言题集三.docx(75页珍藏版)》请在冰豆网上搜索。

C语言题集三.docx

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;i

for(j=i+1;j

if(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;i

if(a[i]>a[p])_________;

return(p);

}

在下划线处应

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1