程序设计期末.docx
- 文档编号:15088827
- 上传时间:2023-06-30
- 格式:DOCX
- 页数:37
- 大小:27.25KB
程序设计期末.docx
《程序设计期末.docx》由会员分享,可在线阅读,更多相关《程序设计期末.docx(37页珍藏版)》请在冰点文库上搜索。
程序设计期末
第八章指针
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=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 期末