第8章指针
1选择题
【题1】以下程序有错,错误的原因是(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;语句
【题2】已有定义 int k=2;int *ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是(B)。
A)k=*ptr1+*ptr2; B)ptr2=k; C)p1=*p2; D)*p1=p2;
【题3】变量的指针,其含义是指该变量的(B)。 A)值 B)地址 C)名 D)一个标志
【题4】若已定义int a=5;下面对(1),(2)两个语句的正确解释是(D)。 (1)int *p=&a; (2) *p=a;
A)语句(1)和(2)中的 *p含义相同,都表示给指针变量p赋值 B)(1)和(2)语句的执行结果,都是把变量a的地址值赋给指针变量p C)(1)在对p进行说明的同时进行初始化,使p指向a (2)将变量a的值赋给指针变量p
D)(1)在对p进行说明的同时进行初始化,使p指向a (2)将变量a的值赋于*p
【题5】若有语句int *point,a=4;和point=&a; 下面均代表地址的一组选项是(D)。 A)a,point,*&a B)&*a,&a,* point
C)*&point,*point,&a D)&a,&*point,point
【题6】以下程序输出的结果是(C) void main()
{ int a=5,*p1,**p2; p1=&a,p2=&p1; (*p1)++;
printf(“%d\\n”,**p2); }
A) 5 B) 4 C) 6 D) 不确定
【题7】若有说明:int *p,m=5,n; 以下正确的程序段是(D)。 A)p=&n; B)p=&n;
scanf(“%d”,&p); scanf(“%d”,*p); C)scanf(“%d”,&n); D)p=&n; *p=n; *p=m
【题8】若有说明:int *p1,*p2,m=5,n;以下均是正确赋值语句的选项是(C)。 A)p1=&m;p2=&p1;
B)p1=&m;p2=&n;*p1=*p2; C)p1=&m;p2=p1 D)p1=&m;*p2=*p1;
【题9】已有变量定义和函数调用语句:int a=25; print_value(&a);下面函数的正确输出结果是(D)。
void print_value(int *t) { print(“%d\\n”,++*x);}
A)23 B)24 C)25 D)26
【题10】下面判断正确的是(C)。
A)char * a=”china”;等价于 char *a;*a=”china”;
B)char str[10]={“china”};等价于char str[10];str[]={“china”}; C)char *s=”china”; 等价于 char *s; s=”china”;
D)char c[4]=”abc”,d[4]=”abc”; 等价于 char c[4]=d[4]=”abc”;
【题11】设 char *s=”\\ta\\017bc”; 则指针变量s指向的字符串所占的字节数是(C)。 A)9 B)5 C)6 D)7
【题12】下面程序段中,for循环的执行次数是(C)。 char *s=”\\ta\\018bc”;
for ( ;*s! =?\\0?;s++) printf(“*”); A)9 B)5 C)6 D)7
【题3】下面能正确进行字符串赋值操作的是(C)。
A) char s[5]={“ABCDE”}; B) char s[5]={?A?,?B?,?C?,?D?,?E?}; C) char *s; s=”ABCDE”; D) char *s; scanf(“%s”,s);
【题14】下面程序段的运行结果是(C)。 char *s=”abcde”; s+=2; printf(“%d”,s);
A)cde B)字符?c? C)字符?c?的地址 D)无确定的输出结果
【题15】设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是(B)。
A)c=*p1+p2; B)p2=c C)p1=p2 D)c=*p1*(*p2);
【题16】设有下面的程序段: chat s[]=”china”; char *p; p=s; 则下列叙述正确的是(D)。 A)s和p完全相同
B)数组s中的内容和指针变量p中的内容相等 C)s数组长度和p所指向的字符串长度相等 D)*p与s[0]相等
【题17】 下面程序的功能是将一个整数字符串转换为一个整数,如“-1234”转换为-1234,请选择填空。 #include
if(*s==?-?) n=-chnum(s+1); else n=chnum(s); printf(“%d\\n”,n); }
chnum(char*p) {int num=0,k,len,j; len=strlen(p); for(;[A];p++) {k=[C]; j=(--len);
while([B]) {k=k*10;} num=num+k; }
return (num) }
[1] A)*p!=?\\0? B)*(++p)!=?\\0? C)*(p++)!=?\\0? D)len!=0 [2] A)*p B)*p+?0?
C)*p-?0? D)*p-32 [3] A)--j B)j-->0 C)—len D)len-->0
【题18】 下面程序的功能是将八进制正整数转换为十进制整数.请选择填空, #include
{char *p,s[6]; p=s; gets(p); n=[C];
while([C]!=?\\0?) n=n*8+*p-?0?; printf(“%d\\n”,n); }
【题19】 下面程序的功能是统计子串substr在母串str中出现的次数。请选择填空。 #include
{char str[80],substr[80]; int n;
gets(str); gets(substr);
printf(“%d\\n”,count(str,substr)); }
count(char*str,char*substr) {int i,j,k,num=0; for(i =0; [B]; i ++)
for([B],k=0;substr[k]==str[j];k++,j++) if(substr[[C]]==?\\0?) {num++;break;} return(num); }
[1] A) str[i]==substr[i] B) str[i]!=?\\0? C) str[i]== ?\\0? D) str[i]> substr[i] [2] A)j=j+1 B)j=i C)j=0 D)j=1 [3] A)k B)k++ C)k+1 D)++k
【题20】下面程序的功能是在字符串str中找出最大的字符并放在第一个位置上,并将该字符前的原字符往后顺序移动,如chyab变成ychab。请选择填空 。 #include
{char str[80],*p,max,*q; p=str;gets(p);max=*(p++); while(*p!=?\\0?)
{if(max<*p) {max=*p; [C];} p++; } p=q;
while([A]) {*p=*(p-1); [C];} *p=max; puts(p); }
[1] A)p++ B)p=q C)q=p D)q++
[2] A)p>str B)p>=str C)*p>str D)*p>=str[0] [3] A) p++ B)str-- C)p-- D)i--
【题21】 以下程序的功能是删除字符串s中的所有空格(包括TAB符,回车符,换行符),请选择填空。 #include
{char c,s[80];int i=0; c=getchar()
while(c!=EOF) {s[i]=c;i++;c=getchar();} s[i]=?\\0?; delspace(s); puts(s); }
delspace(char*p) {int i,t;char c[80]; for(i=0,t=0; [A];i++)
if(!isspace([C])) c[t++]=p[i]; c[t]=?\\0?; strcpy(p,c); }
[1] A)p[i] B)! p[i] C) p[i]=?\\0? D) p[i]==?\\0? [2] A)p+i B)*c[i] C)*(p+i) D)*(c+i)
【题22】 下面程序的功能是将字符串中s中的内容按逆序输出,但不改变串中的内容,请选择填空。
#include
{char s[10]=”hello!”; Inverp(s); }