第8章 指针-习题

  • 格式:doc
  • 大小:50.00 KB
  • 文档页数:6

指针
一、选择题
1.假设变量已经被正确定义,下列_______语句是不正确的。

A、p=&x ;
B、p=&(x+1);
C、p=&x+1 ;
2.若有以下定义,则p+5表示_______。

int a[10],*p=a;
A、元素a[5]的地址
B、元素a[5]的值
C、元素a[6]的地址
D、元素a[6]的值
3.若有以下定义,则对a数组元素的正确引用是________。

int a[5],*p=a;
A、*&a[5]
B、a+2
C、*(p+5)
D、*(a+2)
4.若p1和p2都是整形指针,p1已经指向变量x,要使p2也指向x,_______是正确。

A、p2=p1;
B、p2=**p1
C、p2=&p1;
D、p2=*p1;
5.下列程序段的输出结果是________。

int m=1, n=2, *ptr1=&m, *ptr2=&n;
ptr1=ptr2;
ptr2=&m;
printf(“%d %d %d”,*ptr1, *ptr2, *ptr1-*ptr2)
A、1 2 3
B、1 2 4
C、 2 1 3
D、2 1 1 6.下列程序段的输出是________。

int c[]=[1,7,12];
int *k;
k=c;
printf(“next k is %d”,*++k);
A、2
B、7
C、1
D、以上都不对7.以下正确的程序段是_________。

A、char str[20];
B、char *p;
scanf("%s",&str); scanf("%s",p);
C、char str[20];
D、char str[20],*p=str;
scanf("%s",&str[2]); scanf("%s",p[2]);
8.若有说明语句
char a[]="It is mine";
char *p=a;
则以下不正确的叙述是________.
A、a+1表示的是字符t的地址
B、p指向另外的字符串时,字符串的长度不受限制
C、p变量中存放的地址值可以改变
D、a中只能存放10个字符
9.变量的指针,其含义是指该变量的_________。

A、值
B、地址
C、名
D、一个标志
10.若有下列的程序段,则对数组元素的错误引用是_________。

int a[12]={0}, *p, **pp, j;
for (j=0; j<3; j++)
p[j]=&a[j*4];
pp=p;
A、pp[0][1]
B、a[10]
C、p[3][1]
D、*(*(p+2)+2)
11.若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是_____。

A、a,point,*&a
B、&*a, &a,*point
C、*&point,*point, &a
D、&a,&*point ,point
12.下列程序的输出是_______。

void main()
{
int a[12]={1,2,3,4,5,6,7,8,9,10,11,12},*p[4],I;
for(i=0;i<4;i++)
p[i]=&a[i*3];
printf(“%d\n”,p[3][2]);
}
A、上程序有错误
B、6
C、8
D、12
二、程序阅读题
1.下面程序段的运行结果是__________。

char s[80],*sp="HELLO!";
sp=strcpy(s,sp);
s[0]='h';
puts(sp);
A、hHELLO!
B、h
C、hELLO!
D、以上都不对
2.下面程序段的运行结果是__________。

#include <stdio.h>
int z;
void p(int *x, int y)
{
++*x;
y--;
z=*x+y;
printf(“%d,%d,%d,”,*x, y, z);
}
void main()
{
int x=2, y=3, z=4;
p(&x,y);
printf(“%d,%d,%d”, x, y, z);
}
A、3,2,5,3,3,4
B、3,2,5,2,3,4
C、3,2,5,3,2,4
D、3,2,5,3,3,5
3.若有以下定义:int a[2][3]={2,4,6,8,10,12};则a[1][0]的值是_____.
*(*(a+1)+0))的值是___________。

A、6,6
B、8,8
C、6,8
D、8,6
4.下面程序段的运行结果是___________。

char *st[]={“one”, “tow”, “three”, “four”};
printf(“%s\n”, *(st+3)+1);
A、owthreefour
B、hreefour
C、our
D、以上都不是
5.下列程序将字符串s逆序输出,如f(“abcd”),将输出“dcba”;
void f(char a[10])
{ int i=0;
char *s;
s=&a[0];
while(*(s+i)) i++;
for(__________) printf(“%c”,*(s+i));
}
A、(i--;i>=0;i--)
B、(;i>=0;i--)
C、(i--;i>0;i--)
D、(;i>=0;i--)
三、编程
(要求用指针的方法完成)
1.编写一个交换两个数的函数swap(),函数的形式参数使用指针变量。

2.编写一个函数,用指针数组输入10个整型数字,按从小到大排序并输出
3.输入一行英文字符,找出其中大写字母、小写字母、空格、数字以及其他字符各有多少个?
4.用字符指针定义函数strmcpy(s, t, m),将字符串t中从m个字符开始的全部字符复制到字符串s中去。

5.写一个函数,将一个4×4的整型矩阵转置。

ftp://192.168.69.81
6.定义一个函数search(int list[], int n, int x), 在数组list中查找元素x,若找到则返回相应下标,否则返回-1。

在main()函数中调用search(),main()函数如下:
#include <stdio.h>
void main()
{ int i,x,a[10],res;
for(i=0;i<10;i++)
scanf(“%d”,&a[i]);
scanf(“%d”,%x);
res=search(a,10,x);
printf(“%d”,res);
}
项娇娇0203
int search(int list[],int n,int x)
{
int i;
for(i=0;i<n;i++)
{
if(list[i]==x) break;
}
if(i==n) return(-1);
else return(i);
}
int search(int list[],int n,int x)
{
int res,i;
res=-1;
for(i=0;i<n;i++)
if(x==list[i])
{
res=i;
break;
}
return(res);
}
0130
int search(int list[],int n,int x) {
int i,j,m,a;
j=0;m=0;
for(i=0;i<n;i++)
{
if(list[i]==x) j=i;
else m+=1;
}
if(m==n-1) a=-1;
else a=j;
return(j);
}
问题作业:
0210
int search(int *p,int n,int x)
{
int i,z=-1;
for(i=0;i<n;i++)
{
if(*(p+i)==x)
z=i;
}
return (z);
}
int search(int *p1, int n, int *p2) {
int i,res=-1;
for(i=0;i<n;i++)
if (*(p1+i)==*p2)
res=i;
return (res);
}。