9.6 综合自测
一、选择题
1.在说明语句:int*f();中,标识符f代表的是( )。
A.一个用于指向整型数据的指针变量 B.一个用于指向一维数组的行指针
C.一个用于指向函数的指针变量 D.一个返回值为指针型的函数名
2.以下程序的输出结果是( )。
#include <stdio.h>
#include <string.h>
main()
{ char *p="abcde\0fghjik\0";
printf("% d\n",strlen(p));
}
A.12 B.15 C.6 D.5
3.设有以下语句,则不是对a数组元素的正确引用的是( ),其中0≤i<10。
int a[10] ={0,1,2,3,4,5,6,7,8,9},*p=a;
A.a[p-a] B.*(&a[i]) C.p[i] D.*(*(a+i))
4.以下程序段的输出结果是( )。
int *var,ab;
ab=100;var=&ab;ab=*var+10;
printf("% d\n",*var);
A.110 B.100 C.0 D.出现错误
5.设有以下的程序段:
char str[ ] ="Hello";
char *ptr;
ptr=str;
执行上面的程序段后,*(ptr+5)的值为( )。
A.'o' B.'\0' C.不确定的值 D.'o'的地址
6.若有以下定义和语句:
#include<stdio.h>
int a=4,b=3,*p,*q,*w;
p=&a;q=&b;w=q;q=NULL;
则以下选项中错误的语句是( )。
A.*q=0; B.w=p; C.*p=a; D.*p=*w;
7.下面函数的功能是( )。
sss(s,t)
char *s,*t;
{ while((*s)&&(*t)&&(*t++ == *s++));
return(*s-*t);
}
A.求字符串的长度 B.比较两个字符串的大小
C.将字符串s复制到字符串t中 D.将字符串s接续到字符串t中
8.有以下程序:
#include<stdlib.h>
#include<stelio.h>
main()
{ char*p,*q;
p=(char*)malloc(sizeof(char)*20);q=p;
scanf("% s% s",p,q);printf("% s% s\n",p,q);
}
若从键盘输入:abcdef<回车>,则输出结果是( )。
A.defdef B.abcdef C.abcd D.d d
9.若有以下说明和定义:
typedef int *INTEGER;
INTEGER p,*q;
以下叙述正确的是( )。
A.p是int型变量 B.p是基类型为int的指针变量
C.q是基类型为int的指针变量 D.程序中可用INTEGER代替int类型名
10.说明语句int*(*p)();的含义是( )。
A.p是一个指向int型数组的指针
B.p是指针变量,它构成了指针数组
C.p是一个指向函数的指针,该函数的返回值是一个整型
D.p是一个指向函数的指针,该函数的返回值是一个指向整型的指针
11.已知char*p,*q;,正确的语句是( )。
A.p*=3; B.p /=q; C.p+=3; D.p+=q;
12.已知inti,x[3][4];,则不能将x[1][1]的值赋给变量i的语句是( )。
A.i=*(*(x+1)+1); B.i=x[1][1]; C.i=*(*(x+1)); D.i=*(x[1] +1);
13.下列程序的输出结果是( )。
#include <stdio.h>
int b=2;
int func(int *a)
{ b + = *a;return(b);
}
main()
{ int a=2,res=2;
res + = func(&a);
printf("% d \n",res);
}
A.4 B.6 C.8 D.10
14.有以下程序段:
int*p,a=10,b=1;
p=&a;a=*p+b;
执行该程序段后,a的值为( )。
A.12 B.11 C.10 D.编译出错
15.对于基类型相同的两个指针变量之间,不能进行的运算是( )。
A.< B.= C.+ D.
16.以下程序的输出结果是( )。
#include <stdio.h>
main()
{ char ch[2][5] ={"6937","8254"},*p[2];
int i,j,s=0;
for(i=0;i<2;i++)p[i] =ch[i];
for(i=0;i<2;i++)
for(j=0;p[i][j] > '\0';j+ =2)
s=10*s+p[i][j] - '0';
printf("% d\n",s);
}
A.69825 B.63825 C.6385 D.693825
17.当调用函数时,实参是一个数组名,则向函数传递的是( )。
A.数组的长度 B.数组的首地址
C.数组每一个元素的地址 D.数组每个元素中的值
18.若有说明语句:inta,b,c,*d=&c;,则能正确从键盘读入3个整数分别赋给变量a、b、c的语句是( )。
A.scanf("%d%d%d",&a,&b,d); B.scanf("%d%d%d",&a,&b,&d);
C.scanf("%d%d%d",a,b,d); D.scanf("%d%d%d",a,b,*d);
19.若定义:inta=511,*b=&a;,则printf("%d\n",*b);的输出结果为( )。
A.无确定值 B.a的地址 C.512 D.511
二、操作题
1.下列给定程序中,函数fun()的功能是:在形参s所指字符串中的每个数字字符之后插入一个*号。例如,形参s所指的字符串为def35adh3kjsdf7,执行后结果为def3*5*adh3*kjsdf7*。
请在标号处填入正确的内容,使程序得出正确的结果。
注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构。
试题程序
#include <stdio.h>
void fun(char *s)
{ int i,j,n;
for(i=0;s[i]!= '\0';i++)
if(s[i] > = '0'【1】s[i] < = '9')
{ n=0;
while(s[i+1+n]!=【2】)
n++;
for(j=i+n+1;j>i;j--)
s[j+1] =【3】;
s[j+1] = '*';
i=i+1;
}
}
main()
{ char s[60] ="ba3a54cd23a";
printf("\nThe original string is:% s\n",s);
fun(s);
printf("\nThe result is:% s\n",s);
}
2.下列给定程序中函数fun()的功能是:将s所指字符串中出现的与t1所指字符串相同的子串全部替换为t2所指字符串,所形成的新串放在w所指的数组中。要求t1和t2所指字符串的长度相同。
例如,当s所指字符串中的内容为“abcdabfab”,t1所指子串中的内容为“ab”,t2所指子串中的内容为“99”时,在w所指的数组中的内容应为“99cd99f99”。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。
试题程序
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>
void fun(char *s,char *t1,char *t2,
char *w)
{ char *p,*r,*a;
strcpy(w,s);
while(*w)
{ p=w;r=t1;
/*****found*****/
while(r)
if(*r==*p){r++;p++;}
else break;
if(*r== '\0')
{ a=w;r=t2;
while(*r)
/*****found*****/
{ *a=*r;a++;r++}
w+ =strlen(t2);
}
else w++;
}
}
void main()
{ char s[100],t1[100],t2[100],w[100];
printf("\nPlease enter string S:");
scanf("% s",s);
printf("\nPlease enter substring t1:");
scanf("% s",t1);
printf ( " \ nPlease enter substring t2:");
scanf("% s",t2);
if(strlen(t1)==strlen(t2))
{ fun(s,t1,t2,w);
printf("\nThe result is:% s\n",w);
}
else printf("Error:strlen(t2)\n");
}