函数指针与结构体练习题参考答案.docx

上传人:b****1 文档编号:15153438 上传时间:2023-07-01 格式:DOCX 页数:20 大小:20.72KB
下载 相关 举报
函数指针与结构体练习题参考答案.docx_第1页
第1页 / 共20页
函数指针与结构体练习题参考答案.docx_第2页
第2页 / 共20页
函数指针与结构体练习题参考答案.docx_第3页
第3页 / 共20页
函数指针与结构体练习题参考答案.docx_第4页
第4页 / 共20页
函数指针与结构体练习题参考答案.docx_第5页
第5页 / 共20页
函数指针与结构体练习题参考答案.docx_第6页
第6页 / 共20页
函数指针与结构体练习题参考答案.docx_第7页
第7页 / 共20页
函数指针与结构体练习题参考答案.docx_第8页
第8页 / 共20页
函数指针与结构体练习题参考答案.docx_第9页
第9页 / 共20页
函数指针与结构体练习题参考答案.docx_第10页
第10页 / 共20页
函数指针与结构体练习题参考答案.docx_第11页
第11页 / 共20页
函数指针与结构体练习题参考答案.docx_第12页
第12页 / 共20页
函数指针与结构体练习题参考答案.docx_第13页
第13页 / 共20页
函数指针与结构体练习题参考答案.docx_第14页
第14页 / 共20页
函数指针与结构体练习题参考答案.docx_第15页
第15页 / 共20页
函数指针与结构体练习题参考答案.docx_第16页
第16页 / 共20页
函数指针与结构体练习题参考答案.docx_第17页
第17页 / 共20页
函数指针与结构体练习题参考答案.docx_第18页
第18页 / 共20页
函数指针与结构体练习题参考答案.docx_第19页
第19页 / 共20页
函数指针与结构体练习题参考答案.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

函数指针与结构体练习题参考答案.docx

《函数指针与结构体练习题参考答案.docx》由会员分享,可在线阅读,更多相关《函数指针与结构体练习题参考答案.docx(20页珍藏版)》请在冰点文库上搜索。

函数指针与结构体练习题参考答案.docx

函数指针与结构体练习题参考答案

函数

(一)选择题

1.以下正确的说法是_________.

建立函数的目的之一是a)提高程序的执行效率

b)提高程序的可读性

c)减少程序的篇幅

d)减少程序文件所占内存

 

2.以下正确的函数原型声明形式是________.

a)doublefun(intx,inty)

b)doublefun(intx;inty)

c)doublefun(intx,inty);

d)doublefun(intx,y);

 

3.C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式为______.

A)地址传递

B〕单向值传递

C〕由实参传给形参,再由形参传回给实参

D〕由用户指定传递方式

 

4.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是______.

a)float

b)int

c)long

d)double

 

5.已有以下数组定义和f函数调用语句,那么在f函数的说明中,对形参数组array

的错误定义方式为________.

inta[3][4];

f(a);

a)f(intarray[][6])

b)f(intarray[3][])

c)f(intarray[][4])

d)f(intarray[2][5])

 

6.以下程序的正确运行结果是_________.

#include

voidnum()

{externintx,y;inta=15,b=10;

x=a-b;

y=a+b;

}

intx,y;

main()

{

inta=7,b=5;

x=a+b;

y=a-b;

num();

printf("%d,%d\n",x,y);

}

a)12,2b)不确定c)5,25d)1,12

7.以下正确的描述是____________.

a)C语言的预处理功能是指完成宏替换和包含文件的调用

b)预处理指令只能位于C源程序文件的首部

c)但凡C源程序中行首以"#"标识的控制行都是预处理指令

d)C语言的编译预处理就是对源程序进行初步的语法检查

 

8.在"文件包含"预处理语句的使用形式中,当#include后面的文件名用<>(尖括号)括起时,找寻被包含文件的方式是_______.

a)仅仅搜索当前目录

b)仅仅搜索源程序所在目录

c)直接按系统设定的标准方式搜索目录

d)先在源程序所在目录搜索,再按照系统设定的标准方式搜索

9. 当调用函数时,实参是一个数组名,那么向函数传送的是_____.

A.数组的长度B

10.函数的值通过return语句返回,下面关于return语句的形式描述错误的选项是_____.

A.return表达式;B.return(表达式);

C

11.设函数fun的定义形式为

voidfun(charch,floatx){…}

那么以下对函数fun的调用语句中,正确的选项是_____.

A.fun("abc",3.0);B.t=fun('D',16.5);C.fun('65',2.8);D.fun(32,32);

12.以下程序的输出结果是_____.

voidreverse(inta[],intn)

{inti,t;

for(i=0;i

{t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;}

}

main()

{intb[10]={1,2,3,4,5,6,7,8,9,10};inti,s=0;

reverse(b,8);

for(i=6;i<10;i++)s+=b[i];

printf("%d\n",s);

}

A.22B.10

13.阅读以下程序,那么运行结果为_____.

fun()

{staticintx=5;

x++;

returnx;

}

main()

{inti,x;

for(i=0;i<3;i++)

x=fun();

printf("%d\n",x);

}

A.5B.6C.7D.8

14.假设使用一维数组名作函数实参,那么以下正确的说法是_____.

A.必须在主调函数中说明此数组的大小

C.在被调用函数中,不需要考虑形参数组的大小

15.在C语言中,定义函数时函数的类型可以缺省,此时函数的隐含类型是_____.

A.voidB.

16.在C语言中,形参的缺省存储类别是().

A

17.以下关于字符串的表达中正确的选项是_____.

 

D.空串一定比空格打头的字符串小

18.阅读程序,选择程序的运行结果。

#include

intTry(intn)

{

if(n>0)

return(n*Try(n-2));

else

return1;

}

voidmain()

{

intx;

x=Try(5);

printf(“%d\n〞,x);

}

A.15B.120C.1D.前面三个答案都是错的

(二)填空题

1.以下程序的运行结果是maxis2.

#include

max(intx,inty)

{intz;

z=(x>y)?

x:

y;

return(z);

}

main()

{inta=1,b=2,c;

c=max(a,b);

printf("maxis%d\n",c);

}

 

2.函数gongyu的作用是求整数num1和num2的最大公约数,并返回该值。

请填空。

gongyu(intnum1,intnum2)

{inttemp,a,b;

if(num1〔_____〕num2)

{temp=num1;num1=num2;num2=temp;}

a=num1;b=num2;

while(____)

{temp=a%b;a=b;b=temp;}

return(a);

}

 

3.以下程序的运行结果是A+B=9.

inta=5;intb=7;

main()

{inta=4,b=5,c;

c=plus(a,b);

printf("A+B=%d\n",c);

}

plus(intx,inty)

{intz;

z=x+y;

return(z);

}

 

4.以下程序的运行结果是_______.

main()

{incx();

incy();

incx();

incy();

incx();

incy();

}

incx()

{

intx=0;

printf("x=%d\t",++x);

}

incy()

{staticinty=0;

printf("\ny=%d\n",++y);

}

答案:

x=1

y=1

x=1

y=2

x=1

y=3

5.以下程序功能是求两个正整数的最大公约数。

#include

main()

{

intr,m,n,_____;

scanf("%d%d",&m,&n);

if(m

________________

r=m%n;

while(r)

{m=n;

n=r;

r=____;

}

printf("%d\n",n);

}

 

指针

(一)选择题

1.假设有以下定义,那么对a数组元素的正确引用是_________.

inta[5],*p=a;

a)*&a[5]b)a+2c)*(p+5)d)*(a+2)

 

2.假设有定义:

inta[2][3],那么对a数组的第i行j列元素地址的正确引用为______.

a)*(a[i]+j)b)(a+i)c)*(a+j)d)a[i]+j

 

3.假设有以下定义,那么p+5表示_______.

inta[10],*p=a;

a)元素a[5]的地址b)元素a[5]的值

c)元素a[6]的地址d)元素a[6]的值

 

4.下面程序段的运行结果是_________.

char*s="abcde";

s+=2;printf("%d",s);

a)cdeb)字符'c'c)字符'c'的地址d)无确定的输出结果

 

5.设p1和p2是指向同一个字符串的指针变量,c为字符变量,那么以下不能正确

执行的赋值语句是________.

a)c=*p1+*p2;b)p2=cc)p1=p2d)c=*p1*(*p2);

 

6.以下正确的程序段是_________.

a)charstr[20];b)char*p;

scanf("%s",&str);scanf("%s",p);

c)charstr[20];d)charstr[20],*p=str;

scanf("%s",&str[2]);scanf("%s",p[2]);

 

7.假设有说明语句

chara[]="Itismine";

char*p="Itismine";

那么以下不正确的表达是________.

a)a+1表示的是字符t的地址

b)p指向另外的字符串时,字符串的长度不受限制

c)p变量中存放的地址值可以改变

d)a中只能存放10个字符

 

8.下面程序的运行结果是_______.

#include

#include

main()

{

char*s1="AbDeG";

char*s2="AbdEg";

s1+=2;s2+=2;

printf("%d\n",strcmp(s1,s2));

}

a)正数b)负数c)零d)不确定的值

 

9.下面程序的运行结果是_______.

#include

#include

fun(char*w,intn)

{chart,*s1,*s2;

s1=w;s2=w+n-1;

while(s1

}

main()

{charp[]="1234567";//这里存在错误,通过字符指针无法改变字符串常量的值,因此改为数组

fun(p,strlen(p));

puts(p);

}

 

a)7654321b)1714171c)1711717d)7177171

10.变量的指针,其含义是指该变量的_________.

a)值b)地址

c)名d)一个标志

 

11.假设有语句int*point,a=4;和point=&a;下面均代表地址的一组选项是_____.

a)a,point,*&ab)&*a,&a,*point

c)*&point,*point,&ad)&a,&*point,point

 

12.假设有说明;int*p,m=5,n;以下正确的程序段的是________.

a)p=&n;b)p=&n;

scanf("%d",&p);scanf("%d",*p);

c)scanf("%d",&n);d)p=&n;

*p=n;*p=m;

 13.假设有以下定义,那么对a数组元素的正确引用是_____.

inta[5],*p=a;

A.*&a[5]B.a+2C.*(p+2)D.*(a+5)

14.以下程序执行后的输出结果是_____.

main()

{inta[3][3],*p,i;

p=&a[0][0];

for(i=1;i<9;i++)p[i]=i+1;

printf("%d\n",a[1][2]);

}

A.3B.6

15.下面程序段的运行结果是_____.〔该题题目有错,而且考的内容偏了,是一题面试题〕

char*p="abcdefgh";

p+=3;

printf("%d\n",strlen(strcpy(p,"ABCD")));

A.8B.12C

(二)填空题

1.以下程序的功能是:

通过指针操作,找出三个整数中的最小值并输出。

请填空。

#include"stdlib.h"

main()

{int*a,*b,*c,num,x,y,z;

a=&x;b=&y;c=&z;

printf("输入3个整数:

");

scanf("%d%d%d",a,b,c);

printf("%d,%d,%d\n",*a,*b,*c);

num=*a;

if(*a>*b)num=*b;

if(num>*c)num=*c;

printf("输出最小整数:

%d\n",num);

}

 

2.下面程序段的运行结果是hELLO!

.

chars[80],*sp="HELLO!

";

sp=strcpy(s,sp);

s[0]='h';

puts(sp);

 

3.下面程序段的运行结果是ef.

charstr[]="abc\0def\0ghi",*p=str;

printf("%s",p+5);

 

4.下面程序的功能是将两个字符串s1和s2连接起来。

请填空。

#include

main()

{chars1[80],s2[80];

gets(s1);gets(s2);

conj(s1,s2);

puts(s1);

}

conj(char*p1,char*p2)

{char*p=p1;

while(*p1)p1++;

while(*p2){*p1=*p2;p1++;p2++;}

*p1='\0';

_return0_________;//可以省略不要

}

 5.假设有定义:

inta[]={2,4,6,8,10,12},*p=a;那么*(p+1)的值是__4____.*(a+5)的值是__12_______.

6.假设有以下定义:

inta[2][3]={2,4,6,8,10,12};那么a[1][0]的值是__8___.*(*(a+1)+0))的值是___8___.

7.以下程序将数组a中的数据按逆序存放,请填空。

#defineM8

main()

{inta[M],i,j,t;

for(i=0;i

i=0;j=M-1;

while(i

{

t=*(a+i);*(a+i)=*(a+j);*(a+j)=t;

i++;j--;

}

for(i=0;i

}

 

8.假设有定义:

inta[3][5],i,j;(且0<=i<3,0<=j<5),那么a数组中任一元素可用

五种形式引用。

它们是:

(1)a[i][j]

(2)*(a[i]+j)

(3)*(*(a+i)+j);

(4)(*(a+i))[j]

(5)*(a+5*i+j)

 

9.下面程序的运行结果是_________.

main()

{char*a[]={"Pascal","Clanguage","dBase","Coble"};

char(**p)[];

intj;

p=a+3;

for(j=3;j>=0;j--)printf("%s\n",*(p--));

}

答案:

Coble

dBase

Clanguage

Pascal

结构体

(一)选择题

1.C语言结构体类型变量在程序执行期间_________.

a)所有成员一直驻留在内存中

b)只有一个成员驻留在内存中

c)局部成员驻留在内存中

d)没有成员驻留在内存中

2.下面程序的运行结果是___________.

main()

{

structcmplx{intx;

inty;

}cnum[2]={1,3,2,7};

printf("%d\n",cnum[0].y/cnum[0].x*cnum[1].x);

}

a)0b)1c)3d)6

3.设有如下定义:

structsk

{intn;

floatx;

}data,*p;

假设要使p指向data中的n域,正确的赋值语句是_______.

a)p=&data.n;

b)*p=data.n;

c)p=(structsk*)&data.n;

d)p=(structsk*)data.n;

4.以下对结构体变量stu1中成员age的非法引用是________.

structstudent

{intage;

intnum;

}stu1,*p;

p=&stu1;

a)stu1.ageb

c)p->aged)(*p).age

5.下面对typedef的表达中不正确的选项是______.

a)用typedef可以定义各种类型名,但不能用来定义变量

b)用typedef可以增加新类型

c)用typedef只是将已存在的类型用一个新的标识符来代表

d)使用typedef有利于程序的通用和移植

6.以下scanf函数调用语句中对结构体变量成员的不正确引用是________.

structpupil

{charname[20];

intage;

intsex;

}pup[5],*p;

p=pup;

a)scanf("%s",pup[0].name);

b)scanf("%d",&pup[0].age);

c)scanf("%d",&(p->sex));

d)scanf("%d",p->age);

(二)填空题

1.以下程序的运行结果是__10,x______.

structn{

intx;

charc;

};

main()

{structna={10,'x'};

func(a);

printf("%d,%c",a.x,a.c);

}

func(structnb)

{

b.x=20;

b.c='y';

}

 

2.假设有定义:

structnum

{inta;

intb;

floatf;

}n={1,3,5.0};

structnum*pn=&n;

那么表达式pn->b/n.a*++pn->b的值是___12_____,表达式(*pn).a+pn->f的值是

 

3.以下程序的运行结果是5,3.

structks

{inta;

int*b;

}s[4],*p;

main()

{

intn=1,i;

printf("\n");

for(i=0;i<4;i++)

{

s[i].a=n;

s[i].b=&s[i].a;

n=n+2;

}

p=&s[0];

p++;

printf("%d,%d\n",(++p)->a,(p++)->a);

}

 

4.结构数组中存有三人的姓名和年龄,以下程序输出三人中最年长者的姓名

和年龄。

请在_______内填入正确内容。

statistructman{

charname[20];

intage;

}person[]={"li=ming",18,

"wang-hua",19,

"zhang-ping",20

};

 

main()

{structman*p,*q;

intold=0

p=person;

for(;p

if(oldage)

{q=p;old=p->age;}

printf("%s%d",q->name,q->age);

}

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2