程序设计期末.docx

上传人:b****1 文档编号:15088827 上传时间:2023-06-30 格式:DOCX 页数:37 大小:27.25KB
下载 相关 举报
程序设计期末.docx_第1页
第1页 / 共37页
程序设计期末.docx_第2页
第2页 / 共37页
程序设计期末.docx_第3页
第3页 / 共37页
程序设计期末.docx_第4页
第4页 / 共37页
程序设计期末.docx_第5页
第5页 / 共37页
程序设计期末.docx_第6页
第6页 / 共37页
程序设计期末.docx_第7页
第7页 / 共37页
程序设计期末.docx_第8页
第8页 / 共37页
程序设计期末.docx_第9页
第9页 / 共37页
程序设计期末.docx_第10页
第10页 / 共37页
程序设计期末.docx_第11页
第11页 / 共37页
程序设计期末.docx_第12页
第12页 / 共37页
程序设计期末.docx_第13页
第13页 / 共37页
程序设计期末.docx_第14页
第14页 / 共37页
程序设计期末.docx_第15页
第15页 / 共37页
程序设计期末.docx_第16页
第16页 / 共37页
程序设计期末.docx_第17页
第17页 / 共37页
程序设计期末.docx_第18页
第18页 / 共37页
程序设计期末.docx_第19页
第19页 / 共37页
程序设计期末.docx_第20页
第20页 / 共37页
亲,该文档总共37页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

程序设计期末.docx

《程序设计期末.docx》由会员分享,可在线阅读,更多相关《程序设计期末.docx(37页珍藏版)》请在冰点文库上搜索。

程序设计期末.docx

程序设计期末

第八章指针

1.若有语句int*point,a=4;和point=&a;下面均代表地址的一组选项是(D)

A)a,point,*&a

B)&*a,&a,*point

C)*&point,*point,&a

D)&a,&*point,point

2.以下程序的输出结果是(B)

#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.有以下函数(C)

char*fun(char*p)

{returnp;}

该函数的返回值是

A)无确切的值   B)形参p中存放的地址值 

C)一个临时存储单元的地址  D)形参p自身的地址值

4.若说明int*p,n;则通过语句scanf能够正确读入数据的程序段是(D)

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,则下列选项中正确的赋值语句是(D)

A)p=1;

B)*q=2;

C)q=p;

D)*p=5;

6.下列程序的输出结果是(B)

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的值分别为(C)

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.以下程序有错,错误原因是(D)

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;以下正确的程序段是(C)

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

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

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

D)p=&n;*p=m

10.有如下程序段(B)

int*p,a=10,b=1;

p=&a;a=*p+b;

执行该程序段后,a的值为

A)12

B)11

C)10

D)编译出错

11.以下程序执行后a的值是(C)

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.请选出正确的程序段(D)

A)int*p;

scanf("%d",p);

 

B)int*s,k;

*s=100;

 

C)int*s,k;

char*p,c;

s=&c;     

p=&k;

*p=’a′;

D)int*s,k;

char*p,c;

s=&k;

p=&c;

s=p;

*s=1;

13.以下程序的运行结果是(B)

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);下面函数的正确输出结果是(D)

voidprint_value(int*x)

{printf("%d\n",++*x);}

A)23

B)24

C)25

D)26

15.下列程序的运行结果是(A)

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.下面程序应能对两个整型变量的值进行交换。

以下正确的说法是(D)

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的语句正确的是(C)

A)intp=&a  B)int*p=a  C)int*p=&a  D)int*p=*a

18.已知char**t;则变量t是(C)

A)指向char变量的指针  B)指向指针的char变量

C)指向指针的指针   D)以上说法都不对

19.阅读下面程序,执行后的结果为(C)

#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.阅读下面程序,在程序执行后的结果为(A)

#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

21.变量的指针,其含义是指该变量的____(B)____.

a)值   b)地址  c)名           d)一个标志

22.若有语句int*point,a=4;和point=&a;下面均代表地址的一组选项是__(D)__. 

 a)a,point,*&ab)&*a,&a,*pointc)*&point,*point,&ad)&a,&*point,point

23.若有说明;int*p,m=5,n;以下正确的程序段的是___(D)____. 

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

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

24.下面程序段的运行结果是____(A)____.

 char *s="abcde";  s+=2;printf("%s",s); 

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

25.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是____(B)___.

a)c=*p1+*p2;  b)p2=c  c)p1=p2   d)c=*p1*(*p2);

26.以下正确的程序段是____(B)_____. 

 a)char str[20];  scanf("%s",&str);

 b)char *p  scanf("%s",p);

  c)char str[20];scanf("%s",&str[2]);

   d)char str[20],*p=str;    scanf("%s",p[2]); 

27.若有说明语句

 chara[]="Itismine";  char*p="Itismine";  

则以下不正确的叙述是___(B)____. 

 a)a+1表示的是字符t的地址     b)p指向另外的字符串时,字符串的长度不受限制

 c)p变量中存放的地址值可以改变  d)a中只能存放10个字符 

28.下面程序的运行结果是___(B)___.  

 #include  

 #include  

 main() 

 { 

  char *s1="AbDeG";

  char *s2="AbdEg";

  s1+=2;s2+=2; 

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

 }

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

29.下面程序的运行结果是___(A)____.

 #include  

 #include  

 fun(char *w,intn)

  {char t,*s1,*s2;

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

  while(s1

 } 

 main() 

{char*p;

 p="1234567"; 

 fun(p,strlen(p)); 

 puts(p);

 } 

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

30.若有以下定义,则对a数组元素的正确引用是____(D)____.

 inta[5],*p=a; 

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

31.若有定义:

inta[2][3],

则对a数组的第i行j列元素地址的正确引用为__(D)___.

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

32.若有以下定义,则p+5表示____(A)___. 

 int a[10],*p=a; 

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

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

填空题:

1.引用一个数组元素,可以有两种方法:

下标法和 指针法         。

2.inta[3]={0,1,2},*p=a;printf("%d",*(++p))则输出结果是:

 1       。

3.若有定义:

inta[3][5],i,j;(且0<=i<3,0<=j<5),则a数组中任一元素可用多种形式引用其中一种是:

(*  (a+i)    )[j]

4.char*p="House";则b[2]=’r’操作非法,字符串常量不能改变。

            。

5.int(*p)(int,int)其中的p是 指向函数的指针变量                。

6.int(*p)[4]=,则p每加1,地址就增加   16  个字节。

7.一个变量的地址称为该变量的    指针        。

8.inta[3]={0,1,2},*p=a;printf("%d",*(p++))则输出结果是:

   0  。

9.若有定义:

inta[3][5],i,j;(且0<=i<3,0<=j<5),则a数组中任一元素可用多种形式引用其中一种是:

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

10.int(*p)[m]其中的p是 一个指向一个由整型数据组成的数组指针。

11.编译时为字符数组分配若干个存储单元,而对字符指针变量,只分配 1  个存储单元。

12.char   *a【3】   ={"Zhang","Wang","Li"};

程序填空

1.以下程序的功能是:

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

请填空。

 #include "stdio.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______.

 char s[80],*sp="HELLO!

";

 sp=strcpy(s,sp); 

 s[0]='h'; 

 puts(sp); 

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

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

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

4. 将若干字符串按字母顺序(由小到大)输出。

#include

#include

intmain()

{voidsort(char*name[],intn);

 void print(char*name[],intn);

 char *name[]={“Follow”,“Great”,“FORTRAN”,“Computer”};

 int n=4;

 sort(name,n); 

 return 0;

}

voidsort(char*name[],intn)

{char*temp; inti,j,k;

 for (i=0;i

 { k=i;

   for (j=i+1;j

    if(strcmp(name[k],name[j])>0)k=j;

   if(k!

=i)

   {temp=name[i];name[i]=name[k];     

     name[k]=temp;

   } 

 } 

}

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() 

 {int a[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[0][0]+5*i+j) 

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

 main() 

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

  char **p;

  int j;

  p=a+3; 

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

 }             

10.下面的程序实现的是指针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】q

【4】*q>max

【5】*q

 

第九章 结构体、共用体和用户定义类型

选择题

1.设有以下说明语句

typedefstruct

{  intn;

charch[8];

}PER;

则下面叙述中正确的是(B)

A)PER是结构体变量名

B)PER是结构体类型名

C)typedefstruct是结构体类型名

D)struct是结构体类型名

2.设有以下说明语句

structstu

{    inta;

floatb;

}stutype;

则下面的叙述不正确的是(C)

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

B)structstu是用户定义的结构体类型

C)stutype是用户定义的结构体类型名

D)a和b都是结构体成员名

3.以下程序在VC环境下的运行结果是(D)

#include"stdio.h"

main()

{  structdate

{  intyear,month,day;}today;

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

}

A)6

B)8

C)10

D)12

4.若以下定义:

structlink

{  intdata;

structlink*next;

}a,b,c,*p,*q;

且变量a和b之间已有如下图所示的链表结构:

 

指针p指向变量a,q指向变量c。

则能够把c插入到a和b之间并形成新的链表的语句组是:

(D)

A)a.next=c;c.next=b;

B)p.next=q;q.next=p.next;

C)p->next=&c;q->next=p->next;

D)(*p).next=q;(*q).next=&b;

5.设有如下定义:

strucksk

{  inta;

floatb;

}data;

int*p;

若要使p指向data中的a域,正确的赋值语句是(C)

A)p=&a;

B)p=data.a;

C)p=&data.a;

D)*p=data.a;

6.以下对结构体类型变量的定义中,不正确的是(C)

A)typedefstructaa

{  intn;

floatm;

}AA;

AAtdl;

B)#defineAAstructaa

AA{intn;

floatm;

}tdl;

 

C)struct 

{   intn;

floatm;

}aa;

structaatdl;

D)struct

{    intn;

floatm;

}tdl;

 

7.若有下面的说明和定义

structtest

{  intml;charm2;floatm3;

unionuu{charul[5];intu2[2];}ua;

}myaa;

则sizeof(structtest)的值是(D)

A)12

B)16

C)14

D)20

8.以下程序的输出是(C)

structst

{  intx;int*y;}*p;

intdt[4]={10,20,30,40};

structstaa[4]={50,&dt[0],60,&dt[0],60,&dt[0],60,&dt[0]};

main()

{  p=aa;

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

}

A)10

B)11

C)51

D)60

9.下列各数据类型不属于构造类型的是(D)

A)枚举型

B)共用型

C)结构型

D)数组型

10.有以下程序:

#include

unionpw

{  inti;

charch[2];}a;

 main()

 {  a.ch[0]=13;a.ch[1]=0;printf("%d\n",a.i);}

程序的输出结果是(A)

A)13

B)14

C)208

D)209

11.设有以下说明语句

structex

{intx;floaty;charz;}example;

则下面的叙述中不正确的是(B)

A)struct结构体类型的关键字

B)example是结构体类型名

C)x,y,z都是结构体成员名

D)structex是结构体类型名

12.当说明一个结构体变量时系统分配给它的内存是(A)

A)各成员所需内存量的总和

B)结构中第一个成员所需内存量

C)成员中占内存量最大者所需的容量

D)结构中最后一个成员所需内存量

13.若有以下结构体,则正确的定义或引用的是(D)

structTest

{   intx;

inty;

}vl;

A)Test.x=

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

当前位置:首页 > 解决方案 > 学习计划

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

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