c语言练习题7(指针与结构体,有答案)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、下列程序的运行结果是_B______。

void fun(int *a,int *b)

{

int *k:

k=a;a-b;b=k;

}

main()

{

int a=3,b=6,*x=&a,*y=&b;

fun(x,y);

printf[”%d%d.f,a,b);

}

A)6 3 B)36 C)编译出错 D)0 0

PS:本题中主函数里的x、y,fun函数里的a、b、k,这些都是指针,fun函数中只是将a、b这两个指针交换了位置,而并没有改变主函数中变量a、b的值。

2、若有定义:int*p[3];,则以下叙述中正确的是____B____。

A)定义了一个基类型为int的指针变量p,该变量有三个指针

B)定义了一个指针数组p,该数组含有三个元素,每个元素都是基类型为int的指针

C)定义了一个名为+p的整型数组,该数组含有三个int类型元素

D)定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素

PS:由于运算符[]优先级比*高,int*p[3];相当于int *(p[3]);表示数组p 的三个元素都是指针变量,且每个元素都是基类型为int的指针。

3、有以下程序:

void swapl(int *a,int *b)

{int *c=a;

a=b,b=c;

}

void swap2(int *a,int *b)

{

int c=*a:

*a=*b,*b=c;

}

main()

(int a=lO,b=15;

swapl(&a,&b);

printf(”%d,%d,”,a,b);

a=lO,b=15;

swap2(&a,&b);

printf(”%d,%dt.,a,b);

}

其输出结果为_10,15,15,10___。

A)15,10,10,15 B)15,10,15,10 C)10,15,10,15 D)10,15,15,10

PS:C语言规定,实参变量对形参变量的数据传递是“值传递”,只由实参传给形参,而不能由形参传回来给实参。在内函数调用结束后,形参单元被释放,实参单元仍保留并维持原值。本题中swapl()函数中,虽然改变了形参指针的值,但实参指针的值并没有改变,所以执行第一个printf后应输出10,15,;swap2()函数实现了交换两个变量a和b的值,因此执行第二个printf后输出交换后的值15,10,所以本题答案为D。

4、当调用函数时,实参是一个数组名,则向函数传送的是___B_______。

A)数组的长度B)数组的首地址

C)数组每一个元素的地址 D)数组每个元素中的值

PS:当调用函数时,实参是一个数组名,则向函数传送的是数组的首地址,函数中的形参可定义成以下三种形式:

①形参定义成数组;

②形参定义成可变长数组;

③形参定义为指针变量。

5、设有以下声明语句

struct ex

{ int x;float y;char z;}example;

则下面的叙述中不正确的是_____B_____。

A)struct是结构体类型的关键字B)example是结构体类型名

C)x,y,z都是结构体成员名 D)struct ex是结构体类型

6、以下只有在使用时才为该类型变量分配内存的存储类说明是____B____。

A)auto和stmic B)auto和register

C)register和static D)extem和register

PS:extem、register、static、auto分别是定义外部变量、寄存器变量、静态变量、自动变量,其中,自动变量和寄存器变量属于动态存储,调用时临时分配单元;而静态变量和外部变量属于静态存储,在整个程序运行时都存在。

7、下面程序运行后的输出结果是__C________。

fut(int**s,int p[2][3])

{

**s=p[l][1];

}

main()

{

int a[2][3]={1,3,5,7,9,1l},*p;

p=(int*)malloc(sizeof(int));

fut(&p,a);

printf(”%d\n”,*p);

}

A)l B)7 C)9 D)ll

PS:本题a[2][3]定义为一个具有两行三列的元素的数组,malloc()函数的作用是开辟了一个长度为sizeof(int)的内存区,p为指向整型数据的指针变量,程序调用fur()函数,将第一行第一列对应的元素值赋给一s,由于数组中第一行第一列对应的元素为9,所以本题输出值9。

8、以下程序的输出结果是10 。

main()

{

int arr[]={30,25,20,15,10,5},*p=arr;

p++;

printf(”%d\n”,*(p+3));

)

PS:整型指针最初被赋的值是数组art的头指针,即指向数组的第一个元素30,p++后,指针指向数组的下一个元素,即*p=arr[1]=25,在执行*(p+3)时,则相当于a[1+3],即10。因此,输出应为10。

9、下列程序的输出结果是6。

main()

{

int a[]={2,4,6},*ptr=&a[0],x=8,y,z;

for(y=O;y<3;y++)

z=(*(ptr+y)

printf(”%d\n”,z);

10、若有定义语句:char s[100],d[100];int j=0,i=0;且s中已赋字符串,请填空以实现拷贝。(注:不使用逗号表达式)

;}

d[j]=0;

PS:本题中为了能实现字符串的拷贝,需要使字符数组s从头到尾依次遍历其所有元素。本题应使用i的自增后置来实现。

11、若有如下结构体说明:

struct STRU

{ int a,b;char c:double d:

struct STRU *pl,*p2;

};

请填空,以完成对t数组的定义,t数组的每个元素为该结构体类型。

struct STRU t[20]

12、_数据库______ 是数据库应用的核心。

13、对指定字符串中的字符串进行从大到小排序.

相关文档
最新文档