D)for(p=a;a
15.有以下程序段
#include
intmain()
{intx[]={10,20,30};
int*px=x;
printf("%d,",++*px);printf("%d,",*px);
px=x;
printf("%d,",(*px)++);printf("%d,",*px);
px=x;
printf("%d,",*px++);printf("%d,",*px);
px=x;
printf("%d,",*++px);printf("%d\n",*px);
return0;
}
程序运行后的输出结果是()
A)11,11,11,12,12,20,20,20B)20,10,11,10,11,10,11,10
C)11,11,11,12,12,13,20,20D)20,10,11,20,11,12,20,20
16.设有如下定义:
intarr[]={6,7,8,9,10};
int*ptr;
ptr=arr;
*(ptr+2)+=2;
printf("%d,%d\n",*ptr,*(ptr+2));
则程序段的输出结果为
A)8,10B)6,8C)7,9D)6,10
17.若有定义:
inta[]={2,4,6,8,10,12},*p=a;则*(p+1)的值是______.*(a+5)的值是_________.
18.若有以下说明和语句,int c[4][5],(*p)[5];p=c;能正确引用c数组元素的是______.
A) p+1 B) *(p+3) C) *(p+1)+3 D) *(p[0]+2)
19.若有定义:
inta[2][3],则对a数组的第i行j列元素地址的正确引用为______.
a)*(a[i]+j)b)(a+i)c)*(a+j)d)a[i]+j
20.若有以下定义:
inta[2][3]={2,4,6,8,10,12};则a[1][0]的值是_____.*(*(a+1)+0)的值是________.
21.有以下定义
chara[10],*b=a;
不能给数组a输入字符串的语句是()
A)gets(a)B)gets(a[0])C)gets(&a[0]);D)gets(b);
22.下面程序段的运行结果是_________.
char*s="abcde";
s+=2;printf("%d",s);
a)cdeb)字符'c'c)字符'c'的地址d)无确定的输出结果
23.以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是()
A)chars[10]="abcdefg";B)chart[]="abcdefg",*s=t;
C)chars[10];s="abcdefg";D)chars[10];strcpy(s,"abcdefg");
24.设已有定义:
char*st="howareyou";下列程序段中正确的是()
A)chara[11],*p;strcpy(p=a+1,&st[4]);
B)chara[11];strcpy(++a,st);
C)chara[11];strcpy(a,st);
D)chara[],*p;strcpy(p=&a[1],st+2);
25.有以下程序
main()
{
chara[]="programming",b[]="language";
char*p1,*p2;
inti;
p1=a;p2=b;
for(i=0;i<7;i++)
if(*(p1+i)==*(p2+i))
printf("%c",*(p1+i));
}
输出结果是()
A)gmB)rgC)orD)ga
26.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是________.
a)c=*p1+*p2;b)p2=cc)p1=p2d)c=*p1*(*p2);
27.以下正确的程序段是_________.
a)charstr[20];b)char*p;
scanf("%s",&str);scanf("%s",p);
c)charstr[20];d)charstr[20],*p=str;
scanf("%s",&str[2]);scanf("%s",p[2]);
28.若有说明语句
chara[]="Itismine";
char*p="Itismine";
则以下不正确的叙述是________.
a)a+1表示的是字符t的地址
b)p指向另外的字符串时,字符串的长度不受限制
c)p变量中存放的地址值可以改变
d)a中只能存放10个字符
29.下面程序的运行结果是_______.
#include
#include
main()
{char*s1="AbDeG";
char*s2="AbdEg";
s1+=2;s2+=2;
printf("%d\n",strcmp(s1,s2));
}
a)正数b)负数c)零d)不确定的值
30.有以下程序
voidf(int*x,int*y)
{
intt;
t=*x;*x=*y;*y=t;
}
main()
{
inta[8]={1,2,3,4,5,6,7,8},i,*p,*q;
p=a;q=&a[7];
while(*p!
=*q){f(p,q);p++;q--;}
for(i=0;i<8;i++)printf("%d,",a[i]);
}
程序运行后的输出结果是______。
A)8,2,3,4,5,6,7,1,B)5,6,7,8,1,2,3,4,
C)1,2,3,4,5,6,7,8,D)8,7,6,5,4,3,2,1,
31.已定义以下函数
fun(int *p)
{ return *p;}
该函数的返回值是
A)不确定的值 B)形参p中存放的值
C)形参p所指存储单元中的值 D)形参p的地址值
32. 有以下程序
intf(intb[][4])
{inti,j,s=0;
for(j=0;j<4;j++)
{
i=j;
if(i>2)i=3-j;
s+=b[i][j];
}
returns;
}
main()
{inta[4][4]={{1,2,3,4},{0,2,4,5},{3,6,9,12},{3,2,1,0}};
printf("%d\n",f(a));
}
执行后的输出结果是
A) 12 B) 11 C) 18 D) 16
33.若有以下函数首部
intfun(doublex[10],int*n)
则下面针对此函数的函数声明语句中正确的是
A)intfun(doublex,int*n);B)intfun(double,int);
C)intfun(double*x,intn);D)intfun(double*,int*);
34.有以下程序
voidsum(int*a)
{a[0]=a[1];}
main()
{intaa[10]={1,2,3,4,5,6,7,8,9,10},i;
for(i=2;i>=0;i--)sum(&aa[i]);
printf("%d\n",aa[0]);
}
执行后的输出结果是()
A)4B)3C)2D)1
35.下段代码的运行结果是:
intmain()
{
chara;
char*str=&a;
strcpy(str,"hello");
printf(str);
return0;
}
A)helloB)nullC)hD)发生异常
36.下段程序的运行结果是:
voidmain()
{
char*p,*q;
charstr[]="Hello,World\n";
q=p=str;
p++;
print(q);
print(p);
}
voidprint(char*s)
{
printf(“%s”,s);
}
A)He
B)Hello,Worldello,World
C)Hello,WorldHello,World
D)ello,Worldell,World
37.有以下程序
voidfun(char*c,intd)
{
*c=*c+1;
d=d+1;
printf("%c,%c,",*c,d);
}
voidmain()
{
chara='A',b='a';
fun(&b,a);
printf("%c,%c\n",a,b);
}
程序运行后的输出结果是______。
A)B,a,B,a B)a,B,a,B C)A,b,A,b D)b,B,A,b
38、下面选项属于函数指针的是:
A、(int*)p(int,int)B、int*p(int,int)C、两者都是D、两者都不是
39、若有函数max(a,b),并且已使函数指针变量p指向函数max,当调用该函数时,正确的调用方法是_______.
A)(*p)max(a,b);B)*pmax(a,b);
C)(*p)(a,b);D)*p(a,b);
40、下面几个选项中的代码能通过编译的是:
A)int*fun()
{
ints[3]={1,3,4};;
returns;
}
intmain()
{
int*result;
result=fun();
for(inti=0;i<3;i++)
printf("%d\n",result[i]);
return0;
}
B)int&fun()
{
ints[3]={1,3,4};;
returns;
}
intmain()
{
int*result;
result=fun();
for(inti=0;i<3;i++)
printf("%d\n",result[i]);
return0;
}
C)int*fun()
{
ints[3]={1,3,4};;
return&s;
}
intmain()
{
int*result;
result=fun();
for(inti=0;i<3;i++)
printf("%d\n",result[i]);
return0;
}
D)int&fun()
{
ints[3]={1,3,4};;
return&s;
}
intmain()
{
int*result;
result=fun();
for(inti=0;i<3;i++)
printf("%d\n",result[i]);
return0;
}
41、下列选项中声明了一个指针数组的是:
A)int*p[2];B)int(*p)[2];
C)typedefint*intPtr;intPtrp[2];
D)A和B
E)A和C
F)B和C
42、下面代码能通过编译的是:
A)intmain()
{
inta[3]={1,2,3};
int*b[3]={&a[1],&a[2],&a[3]};
int**p=b;
return0;
}
B)intmain()
{
inta[3]={1,2,3};
int*b[3]={a[1],a[2],a[3]};
int**p=b;
return0;
}
C)intmain()
{
inta[3]={1,2,3};
int*b[3]={&a[1],&a[2],&a[3]};
int*p=b;
return0;
}
D)intmain()
{
inta[3]={1,2,3};
int*b[3]={&a[1],&a[2],&a[3]};
int*p=&b;
return0;
}
43、对于语句int*pa[5];下列描述中正确的是_______.
A)pa是一个指向数组的指针,所指向的数组是5个int型元素
B)pa是一个指向某数组中第5个元素的指针,该元素是int型变量
C)pa[5]表示某个元素的第5个元素的值
D)pa是一个具有5个元素的指针数组,每个元素是一个int型指针
44、若有以下定义,且0≤i<4,则不正确的赋值语句是_______.
intb[4][6],*p,*q[4];
A)q[i]=b[i];B)p=b;
C)p=b[i]D)q[i]=&b[0][0];
45、若要对a进行++运算,则a应具有下面说明_______.
A)inta[3][2];B)char*a[]={“12”,”ab”};
C)char(*a)[3];D)intb[10],*a=b;
46、若有以下说明语句:
char*language[]={“FORTRAN”,”BASIC”,’’PASCAL”,’’JAVA”,”C”};
char**q;
q=language+2;
则语句printf(“%o\n”,*q)输出的是_______.
A)language[2]元素的地址;
B)字符串PASCAL
C)language[2]元素的值,它是字符串PASCAL的首地址
D)格式说明不正确,无法得到确定的输出
47、若有以下程序:
voidmain()
{
char*a[3]={"I","love","China"};
char**ptr=a;
printf("%c%s",*(*(a+1)+1),*(ptr+1));
}
这段程序的输出是()
A)Il
B)oo
C)olove
D)Ilove
二、程序题
1、计算字符串中子串出现的次数。
要求:
用一个子函数subString()实现,参数为指向字符串和要查找的子串的指针,返回次数。
2、加密程序:
由键盘输入明文,通过加密程序转换成密文并输出到屏幕上。
算法:
明文中的字母转换成其后的第4个字母,例如,A变成E(a变成e),Z变成D,非字母字符不变;同时将密文每两个字符之间插入一个空格。
例如,China转换成密文为Glmre。
要求:
在函数change中完成字母转换,在函数insert中完成增加空格,用指针传递参数。
3、字符替换。
要求用函数replace将用户输入的字符串中的字符t(T)都替换为e(E),并返回替换字符的个数。
4、编写一个程序,输入星期,输出该星期的英文名。
用指针数组处理。
5、有5个字符串,首先将它们按照字符串中的字符个数由小到大排列,再分别取出每个字符串的第三个字母合并成一个新的字符串输出(若少于三个字符的输出空格)。
要求:
利用字符串指针和指针数组实现。
6、定义一个动态数组,长度为变量n,用随机数给数组各元素赋值,然后对数组各单元排序,定义swap函数交换数据单元,要求参数使用指针传递。
7、实现模拟彩票的程序设计:
随机产生6个数字,与用户输入的数字进行比较,输它们相同的数字个数(使用动态内存分配)。