指针和结构体练习题.docx
- 文档编号:27349837
- 上传时间:2023-06-29
- 格式:DOCX
- 页数:12
- 大小:19.10KB
指针和结构体练习题.docx
《指针和结构体练习题.docx》由会员分享,可在线阅读,更多相关《指针和结构体练习题.docx(12页珍藏版)》请在冰豆网上搜索。
指针和结构体练习题
第十章指针
一.选择题
1.变量的指针,其含义是指该变量的。
A)值B)地址C)名D)一个标志
2.已有定义intk=2;int*ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是。
A)k=*ptr1+*ptr2B)ptr2=kC)ptr1=ptr2D)k=*ptr1*(*ptr2
3.若有说明:
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;
4.已有变量定义和函数调用语句:
inta=25;print_value(&a;下面函数的输出结果是。
voidprint_value(int*x
{printf(“%d\n”,++*x;}
A)23B)24C)25D)26
5.若有说明:
int*p1,*p2,m=5,n;以下均是正确赋值语句的选项是。
A)p1=&m;p2=&p1;B)p1=&m;p2=&n;*p1=*p2;
C)p1=&m;p2=p1;D)p1=&m;*p1=*p2;
6.若有语句:
int*p,a=4;和p=&a;下面均代表地址的一组选项是。
A)a,p,*&aB)&*a,&a,*pC)*&p,*p,&aD)&a,&*p,p
7.下面判断正确的是。
A)char*a=”china”;等价于char*a;*a=”china”;
B)charstr[10]={“china”};等价于charstr[10];str[]={“china”;}
C)char*s=”china”;等价于char*s;s=”china”;
D)charc[4]=”abc”,d[4]=”abc”;等价于charc[4]=d[4]=”abc”;
8.下面程序段中,for循环的执行次数是。
char*s=”\ta\018bc”;
for(;*s!
=’\0’;s++printf(“*”;
A)9B)7C)6D)5
9.下面能正确进行字符串赋值操作的是。
A)chars[5]={“ABCDE”};B)chars[5]={‘A’,’B’,’C’,’D’,’E’};
C)char*s;s=”ABCDE”;D)char*s;scanf(“%s”,s;
10.下面程序段的运行结果是。
char*s=”abcde”;
s+=2;printf(“%d”,s;
A)cdeB)字符’c’C)字符’c’的地址D)不确定
11.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是。
A)c=*p1+*p2B)p2=cC)p1=p2D)c=*p1*(*p2
12.设有程序段:
chars[]=”china”;char*p;p=s;则下面叙述正确的是。
A)s和p完全相同
B)数组s中的内容和指针变量p中的内容相等
C)s数组长度和p所指向的字符串长度相等
D)*p与s[0]相等
13.以下与库函数strcpy(char*p1,char*p2功能不相等的程序段是。
A)strcpy1(char*p1,char*p2
{while((*p1++=*p2++!
=’\0’;}
B)strcpy2(char*p1,char*p2
{while((*p1=*p2!
=’\0’{p1++;p2++}}
C)strcpy3(char*p1,char*p2
{while(*p1++=*p2++;}
D)strcpy4(char*p1,char*p2
{while(*p2*p1++=*p2++;}
14.下面程序段的运行结果是。
chara[]=”language”,*p;
p=a;
while(*p!
=’u’{printf(“%c”,*p-32;p++;}
A)LANGUAGEB)languageC)LANGD)langUAGE
15.若有语句:
chars1[]=”string”,s2[8],*s3,*s4=”string2”;则库函数strcpy的错误调用是。
A)strcpy(s1,”string2”;B)strcpy(s4,”string1”;
C)strcpy(s3,”string1”;D)strcpy(s1,s2;
16.以下与库函数strcmp(char*s,char*t功能相等的程序段是。
A)strcmp1(char*s,char*t
{for(;*s++=*t++;
if(*s==’\0’return0;
return(*s-*t;
}
B)strcmp2(char*s,char*t
{for(;*s++=*t++;
if(!
*sreturn0;
return(*s-*t;
}
C)strcmp3(char*s,char*t
{for(;*t==*s;
{if(!
*treturn0;t++;s++;}
return(*s-*t;
}
D)strcmp4(char*s,char*t
{for(;*s==*t;s++,t++
if(!
*sreturn0;
return(*t-*s;
}
17.以下说明不正确的是。
A)chara[10]=”china”;B)chara[10],*p=a;p=”china”;
C)char*a;a=”china”;D)chara[10],*p;p=a=”china”;
18.设有说明语句:
chara[]=”Itismine”;char*p=”Itismine”;则以下不正确的叙述是。
A)a+1表示的是字符t的地址
B)p指向另外的字符串时,字符串的长度不受限制
C)p变量中存放的地址值可以改变
D)a中只能存放10个字符
19.若已定义chars[10];则在下面表达式中不表示s[1]的地址是。
A)s+1B)s++C)&s[0]+1D)&s[1]
20.若有定义:
inta[5],*p=a;则对a数组元素的正确引用是。
A)*&a[5]B)a+2C)*(p+5D)*(a+2
21.若有定义:
inta[5],*p=a;则对a数组元素地址的正确引用是。
A)p+5B)*a+1C)&a+1D)&a[0]
22.若有定义:
inta[5];则a数组中首元素的地址可以表示为。
A)&aB)a+1C)aD)&a[1]
23.以下与int*q[5];等价的定义语句是。
A)intq[5]B)int*qC)int*(q[5]D)int(*q[5]
24.以下选项中,对指针变量p的不正确操作是。
A)inta[3],*p;B)inta[5],*p;C)inta[5];D)inta[5]
p=&a;p=a;int*p=a;int*p1,*p2=a;
*p1=*p2;
25.若有定义:
intx[10]={0,1,2,3,4,5,6,7,8,9},*p1;则数值不为3的表达式是。
A)x[3]B)p1=x+3,*p1++
C)p1=x+2,*(p1++D)p1=x+2,*++p1
26.若有说明:
char*language[]={“FORTRAN”,”BASIC”,”PASCAL”,”JAVA”,”C”};则language[2]的值是。
A)一个字符B)一个地址C)一个字符串D)一个不定值
27.设有定义:
char*cc[2]={“1234”,”5678”};则正确的叙述是。
A)cc数组的两个元素中各自存放了字符串”1234”和”5678”的首地址
B)cc数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址
C)cc是指针变量,它指向含有两个数组元素的字符型一维数组
D)cc数组元素的值分别维”1234”和”5678”
28.已有定义int(*p(;指针p可以。
A)代表函数的返回值B)指向函数的入口地址
C)表示函数的类型D)表示函数返回值的类型
29.已有函数max(a,b,为了让函数指针变量p指向函数max,正确的赋值方法是。
A)p=max;B)p=max(a,b;C)*p=max;D)*p=max(a,b;
30.若有函数max(a,b,并且已使函数指针变量p指向函数max,当调用该函数时,正确的调用方法是。
A)(*pmax(a,bB)*pmax(a,b;C)(*p(a,b;D*p(a,b;
31.以下正确的叙述是。
A)C语言允许main函数带形参,且形参个数和形参名均可由用户指定
B)C语言允许main函数带形参,形参名只能是argc和argv
C)当main函数带有形参时,传给形参的值只能从命令行中得到
D)若有说明:
intmain(intargc,char*argv[],则argc的值必须大于1
二.填空题
1.在C程序中,指针变量能够赋值或值。
2.在C语言中,数组名时一个不可改变的,不能对它进行赋值运算。
3.若有定义语句:
inta[4]={0,1,2,3},*p;p=&a[1];则++(*p的值是。
4.若有定义:
inta[2][3]={2,4,6,8,10,12};则*(&a[0][0]+2*2+1的值是,*(a[1]+2的值是。
5.若有程序段:
int*p[3],a[6],i;
for(i=0;i<3;i++p[i]=&a[2*i];
则*p[0]引用的是a数组元素,*(p[1]+1引用的是a数组元素。
三.程序阅读题
1.写出下面程序的运行结果。
func(char*s,chara,intn
{intj;
*s=a;j=n;
while(*s--;
returnj;
}
main(
{charc[6];
inti;
for(i=1;i<=5;i++*(c+i=’A’+i+1;
printf(“%d\n”,fun(c,’E’,5;
}
2.写出下面程序的运行结果。
fun(char*s
{char*p=s;
while(*pp++;
return(p-s;
}
main(
{char*a=”abcdef”;
printf(“%d\n”,fun(a;
}
3.写出下面程序的运行结果。
sub(char*a,intt1,intt2
{charch;
while(t1
ch=*(a+t1;*(a+t1=*(a+t2;*(a+t2=ch;
t1++;t2--;
}
}
main(
{chars[12];
inti;
for(i=0;i<12;i++s[i]=’A’+i+32;
sub(s,7,11;
for(i=0;i<12;i++printf(“%c”,s[i];
printf(“\n”;
}
abcdefglkjih
4.当运行以下程序时,写出输入6↙的程序运行结果。
sub(char*a,charb
{while(*(a++!
=’\0’;
while(*(a-1
*(a--=*(a-1;
*(a--=b;
}
main(
{chars[]=”97531”,c;
c=getchar(;
fun(s,c;puts(s;
}
第十一章结构
一.选择题
1.如下说明语句,则下面叙述不正确的是。
structstu{
inta;floatb;
}stutype;
A)struct是结构类型的关键字
B)structstu是用户定义的结构类型
C)stutype是用户定义的结构类型名
D)a和b都是结构成员名
2.以下对结构类型变量的定义中不正确的是。
A)#defineSTUDENTstructstudentB)structstudent{
STUDENT{intnum;
intnum;floatage;floatage;
}std1;}std1;
C)struct{D)struct{
intnum;intnum;floatage;
floatage;}student;
}std1;structstudentstd1;
3.在16位PC机中,若有定义:
structdata{inti;charch;doublef;}b;
则结构变量b占用内存的字节数是。
A)1B)2C)8D)11
4.当定义一个结构变量时,系统分配给它的内存是。
A)各成员所需内存量的总和B)结构中第一个成员所需内存量
C)成员中占内存量最大的容量D)结构中最后一个成员所需内存量
5.已知学生记录描述为:
structstudent{
intno;charname[20];charsex;
struct{
intyear;intmonth;intday;
}birth;
}s;
设结构变量s中的“birth”应是“1985年10月1日”,则下面正确的赋值方式是。
A)year=1985B)birth.year=1985
month=10birth.month=10
day=1birth.day=1
C)s.year=1985D)s.birth.year=1985
s.month=10s.birth.month=10
s.day=1s.birth.day=1
6.下面程序的运行结果是。
main({
structcomplx{
intx;inty;
}cnum[2]={1,3,2,7};
printf(“%d\n”,cnum[0].y/cnum[0].x*cnum[1].x;
}
A)0B1C)2D)6
7.以下对结构变量成员不正确的引用是。
structpupil{
charname[20];intage;intsex;
}pup[5],*p=pup;
A)scanf(“%s”,pup[0].name;B)scanf(“%d”,&pup[0].age;
C)scanf(“%d”,&(p->sex;D)scanf(“%d”,p->age;
8.以下引用不合法的是。
structs{
inti1;structs*i2,*i0;
}a[3]={2,&a[1],’\0’,4,&a[2],&a[0],6,’\0’,&a[1]},*ptr=a;
A)ptr->i1++B)*ptr->i2C)++ptr->i0D)*ptr->i1
9.若有以下程序段:
inta=1,b=2,c=3;
structdent{
intn;int*m;
}s[3]={{101,&a},{102,&b},{103,&c}};
structdent*p=s;
则以下表达式中值为2的是。
A)intB)*(p++->mC)(*p.mD)*(++p->m
10.若要利用下面的程序段使指针变量p指向一个存储整型变量的存储单元,则在【】中应有的内容是。
int*p;
p=【】malloc(sizeof(int;
A)intB)int*C)(*intD)(int*
11.下面对typedef的叙述中不正确的是。
A)用typedef可以定义多种类型名,但不能用来定义变量
B)用typedef可以增加新类型
C)用typedef只是将已存在的类型用一个新的标识符来代表
D)使用typedef有利于程序的通用和移植
二.填空题
1.结构变量成员的引用方式是使用运算符,结构指针变量成员的引用方式是使用运算符。
2.若有定义:
structnum{
inta;intb;floatf;
}n={1,3,5.0};
structnum*pn=&n;
则表达式pn->b/n.a,n.a*++pn->b的值是。
表达式(*pn.a+pn->f的值是。
3.C语言允许用声明新的类型名来代替已有的类型名。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 指针 结构 练习题