问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C++新手指针习题

发布网友 发布时间:2022-06-06 00:15

我来回答

4个回答

热心网友 时间:2024-10-24 14:53

三、填空题
1. 下列函数change的功能是,将字符串中的小写字母转成大写字母,请填空。
#include<iostream>
void change( ) //1
{int i=0;
for(i=0; ;i++) //2
if(a[i]>='a'&&a[i]<='z')
; //3
}
int main()
{ char p[80];
cout<<" \n";
cin.getline(p,80) ; //读一行字符,中间可以有空格
change(p);
cout<<p<<endl;
}
如程序运行时得到以下结果:
请输入一行字符:
This is a book..
THIS IS A BOOK.
答案:(1)char *a 或 char a[80]
(2) a[i] 或 a[i]!=’\0’
(3) a[i]= a[i] –32或a[i]-= a[i]
2. 下列函数swap实现数据交换功能功能,请填空。
#include<iostream>
void swap(int *p,int *q)
{ int temp;
temp=*p;
; //1
; //2
}
int main()
{ int a,b;
int *p1,*p2;
cout<<"请输入两个正数:";
cin>>a>>b;
p1=&a;
p2=&b;
swap(p1,p2);
cout<<"结果a和b的值:"<<a<<","<<b<<endl;
}
如程序运行时得到以下结果:
请输入两个正数:10 20
结果a和b的值:20,10
答案:
(1) *p=*q
(2) *q=temp;
3. 下列函数sort实现对字符串按字典顺序由小到大排序,请填空。
#include<iostream>
void sort( ) //1
{ char ; //2
int i,j;
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
if(strcmp( ) //3
{ temp=p[j];
; //4
p[j+1]=temp;
}
}
int main()
{
char *a[5]={"student","worker","cadre","soldier","apen"};
sort(a,5);
for(int i=0;i<5;i++)
cout<<a[i]<<endl;
}
程序运行结果如下:
apen
cadre
soldier
student
worker
答案:(1)char *p[],int n
(2)*temp
(3)p[j],p[j+1])>0
(4)p[j]=p[j+1]
4.函数find功能是:在指针p所指数组中,查找值为x的元素,找到后,返回该元素的下标,否则返回-1,改正程序中语句错误,能够正确运行。
#include<iostream>
#include<stdlib.h>
const int N=10;
int find(int *p,int n,int x) //1
{ int i ; // 2
*(p+n)=x; //3
while(*p+i!=x) //4
i++; //5
if(i!=n) //6
return 1; //7
else
return -1; //8
}
int main()
{ int i,pos,x;
int *p=new int [N];
for(i=0;i<N;i++)
*(p+i)=rand()%50;
for(i=0;i<N;i++)
cout<<*(p+i)<<'\t';
cout<<"\ninput x: ";
cin>>x;
pos=find(p,N,x);
if(pos!=-1)cout<<"index= "<<pos<<" ,value= "<<*(p+pos)<<endl;
else cout<<"No find!"<<endl;
}
答案:(1) 2行语句改为 int i=0;
(2) 4行语句改为 while(*(p+i)!=x);
(3) 7行语句改为 return i 。

四、编程题
1. 写一个函数,将一个n阶方阵转置。具体要求如下:
(1)初始化一个矩阵A(5×5),元素值取自随机函数,并输出。
(2)将其传递给函数,实现矩阵转置。
(3) 在主函数中输出转置后的矩阵。(提示:程序中可以使用C++库函数rand( ),其功能是产生一个随机数0~65535,其头文件为stdlib.h)
2.使用指针编写函数strcat(),实现两个字符串的首尾连接(将字符串str2接到str1的后面,str1最后面的‘\0’被取消)。
3.编写从多个字符串中寻找最长串的函数
4.编写一个程序,实现在命令行中以参数的形式接收两个整数,输出这两个整数的和。(提示:程序中可以使用C++库函数atoi(),其功能是将字符串转换成整型值,其头文件为stdlib.h)

热心网友 时间:2024-10-24 14:54

11.若有以下定义,则变量p所占内存空间的字节数是(   )。
float *p;
A.1 B.2 C.4 D.8
12.若有以下定义,则赋值错误的是(   )。
int a,*p,*q;
A. *p=&a ; B.p=new int ; C.q=NULL; D.p=q
13. 下列程序运行结果是(  )。
#include<iostream>
int main()
{ int a=10,*q;
if(q==NULL)
cout<<"####"<<endl;
else
q=&a;
cout<<*q<<endl;
}
A. #### B.10 C. 有语法错误 D.*q
14. 若程序段static char line[]=”Visual C++”; char *point=line;则point的值为( )。
A. ”Visual C++” B. line的首地址  C. Visual D. \0
15. 相同数据类型的数组名和指针变量均表示地址,以下不正确的说法是(   )。
A. 数组名代表的地址不变,指针变量存放的地址可变。
B. 数组名代表的存储空间不变,指针变量指向的存储空间长度可变。
C. A和B的说法均正确。
D. 没有差别。
16. 若有以下定义,则下列操作错误的是(   )。
int a[5]={1,3,5,7,9},*p=new int [5];
A.p=a; B.*p=a; C.*(p+1)=a[1]; D.*p=*a
17. 若有以下定义,则释放指针所指内存空间的操作是(   )。
  int *p=new int [10]; 
A.delete []p; B.delete *p C.delete p; delete p[]
18. 若有以下定义,下列值为6的表达式是( )。
  int a[3][5]={{1,2},{2,4,6,8},{10,20,30,40,50}};
A.*(a+2)+3 B.a[2][3] C.*(*(a+1)+2) D.*(*(a+2)+3)
19. 执行下列程序段后,字符串str1的值是(   )。
char str1[8] ,*str2[]=”AA\0BB”;
strcpy(str1,str2);
A. AA\0BB B. AA BB C. AA D.AA\0BB\0

热心网友 时间:2024-10-24 14:54

你能准确的做到以上的题目,基本上你对指针的概念和基本应用都可以了,接着你要学习的是特定指针了,比如字符串指针,函数指针是非常重要的

热心网友 时间:2024-10-24 14:55

知识点:
1.掌握指针、地址、指针类型、空指针(NULL)等概念;
2.掌握指针变量的定义和初始化、指针的间接访问、指针的加减运算、指针变量比较运算和指针表达式;
3.掌握指针与数组、函数、字符串等的联系;
4.掌握引用参数的使用。
一、选择题
1.若有以下定义,则说法错误的是( )。
int a=100,*p=&a ;
A.声明变量p,其中*表示p是一个指针变量
B.变量p经初始化,获得变量a的地址
C.变量p只可以指向一个整形变量
D.变量p的值为100
2. 若有以下定义,则赋值正确的是( )。
int a ,b , *p;
float c, *q;
A.p=&c B.q=p C.p=NULL D.q=new int
3. 如果x是整型变量,则合法的形式是( )。
A.&(x+5)B.*x   C.&*x   D.*&x
4. 若有语句int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;则( )不是对a数组元素的正确引用(其中0≤i<10)。
A.p[i]   B.*(*(a+i))C.a[p-a]D.*(&a[i])
5. 以下程序的输出结果是( )。
#include <iostream>
int main()
{ int a[3]={10,15,20}; // a[0]=10,a[1]=15,a[2]=20
int *p1=a,*p2=&a[1]; // p1取a[0]地址,p2取a[1]地址
*p1=*(p2-1)+5; // a[0]=15,a[1]=15,a[2]=20
*(p1+1)=*p1-5; // a[0]=15,a[1]=10,a[2]=20
cout<<a[1]<<endl;
}
A.5B.10C.15D.20
6. 执行以下程序段后,m的值为 ( )。
int a[2][3]={{1,2,3},{4,5,6}};
int m,*p=&a[0][0];
m=(*p)*(*(p+2))*(*(p+4));
A.15B.14C.13D.12
7. 以下程序的输出结果是( )。
#include <iostream>
void fun(int x,int y,int *cp,int *dp)
{ *cp=x+y; //*cp=30+50=80
*dp=x-y; //*dp=30-50=-20
}
int main()
{int a,b,c,d;
a=30,b=50;
fun(a,b,&c,&d);
cout<<c<<","<<d<<endl;
}
A.50,30B.30,50C.80,-20D.80,20
8. 要求函数的功能是交换x和y中的值,且通过正确调用返回交换结果。能正确执行此功能的函数是( )。
A.funa(int *x,int *y)B.funb(int x,int y)
{ int *p=new int ;{ int t;
p=*x; t=x;
*x=*y; x=y;
*y=*p; y=t;
} }

C.func(int *x,int *y)D.fund(int x,int y)
{ *x=*y;{*x=*x+*y;
*y=*x; *y=*x-*y;
} *x=*x-*y;
}
9. 以下程序的输出结果是( )。
#include <iostream>
int main()
{char *s="12134211";
int v1=0,v2=0,v3=0,v4=0;
for (int k=0;s[k];k++)
switch(s[k])
{default:v4++;
case '1':v1++;
case '3':v3++;
case '2':v2++;
}
cout<<v1<<","<<v2<<","<<v3<<","<<v4<<endl;
}
A.4,2,1,1 B.4,9,3,1C.5,8,6,1D.8,8,8,8
10. 若有如下语句:
int **pp,*p,a=10,b=20;
pp=&p; //二级指针pp取一级指针p地址
p=&a; //一级指针p取变量a地址
p=&b; //一级指针p取变量b地址
cout<<*p<<”,”<<**pp<<endl;
则输出结果是( )。
A.10,20B.10,10C.20,10D.20,20

热心网友 时间:2024-10-24 14:53

三、填空题
1. 下列函数change的功能是,将字符串中的小写字母转成大写字母,请填空。
#include<iostream>
void change( ) //1
{int i=0;
for(i=0; ;i++) //2
if(a[i]>='a'&&a[i]<='z')
; //3
}
int main()
{ char p[80];
cout<<" \n";
cin.getline(p,80) ; //读一行字符,中间可以有空格
change(p);
cout<<p<<endl;
}
如程序运行时得到以下结果:
请输入一行字符:
This is a book..
THIS IS A BOOK.
答案:(1)char *a 或 char a[80]
(2) a[i] 或 a[i]!=’\0’
(3) a[i]= a[i] –32或a[i]-= a[i]
2. 下列函数swap实现数据交换功能功能,请填空。
#include<iostream>
void swap(int *p,int *q)
{ int temp;
temp=*p;
; //1
; //2
}
int main()
{ int a,b;
int *p1,*p2;
cout<<"请输入两个正数:";
cin>>a>>b;
p1=&a;
p2=&b;
swap(p1,p2);
cout<<"结果a和b的值:"<<a<<","<<b<<endl;
}
如程序运行时得到以下结果:
请输入两个正数:10 20
结果a和b的值:20,10
答案:
(1) *p=*q
(2) *q=temp;
3. 下列函数sort实现对字符串按字典顺序由小到大排序,请填空。
#include<iostream>
void sort( ) //1
{ char ; //2
int i,j;
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
if(strcmp( ) //3
{ temp=p[j];
; //4
p[j+1]=temp;
}
}
int main()
{
char *a[5]={"student","worker","cadre","soldier","apen"};
sort(a,5);
for(int i=0;i<5;i++)
cout<<a[i]<<endl;
}
程序运行结果如下:
apen
cadre
soldier
student
worker
答案:(1)char *p[],int n
(2)*temp
(3)p[j],p[j+1])>0
(4)p[j]=p[j+1]
4.函数find功能是:在指针p所指数组中,查找值为x的元素,找到后,返回该元素的下标,否则返回-1,改正程序中语句错误,能够正确运行。
#include<iostream>
#include<stdlib.h>
const int N=10;
int find(int *p,int n,int x) //1
{ int i ; // 2
*(p+n)=x; //3
while(*p+i!=x) //4
i++; //5
if(i!=n) //6
return 1; //7
else
return -1; //8
}
int main()
{ int i,pos,x;
int *p=new int [N];
for(i=0;i<N;i++)
*(p+i)=rand()%50;
for(i=0;i<N;i++)
cout<<*(p+i)<<'\t';
cout<<"\ninput x: ";
cin>>x;
pos=find(p,N,x);
if(pos!=-1)cout<<"index= "<<pos<<" ,value= "<<*(p+pos)<<endl;
else cout<<"No find!"<<endl;
}
答案:(1) 2行语句改为 int i=0;
(2) 4行语句改为 while(*(p+i)!=x);
(3) 7行语句改为 return i 。

四、编程题
1. 写一个函数,将一个n阶方阵转置。具体要求如下:
(1)初始化一个矩阵A(5×5),元素值取自随机函数,并输出。
(2)将其传递给函数,实现矩阵转置。
(3) 在主函数中输出转置后的矩阵。(提示:程序中可以使用C++库函数rand( ),其功能是产生一个随机数0~65535,其头文件为stdlib.h)
2.使用指针编写函数strcat(),实现两个字符串的首尾连接(将字符串str2接到str1的后面,str1最后面的‘\0’被取消)。
3.编写从多个字符串中寻找最长串的函数
4.编写一个程序,实现在命令行中以参数的形式接收两个整数,输出这两个整数的和。(提示:程序中可以使用C++库函数atoi(),其功能是将字符串转换成整型值,其头文件为stdlib.h)

热心网友 时间:2024-10-24 14:54

11.若有以下定义,则变量p所占内存空间的字节数是(   )。
float *p;
A.1 B.2 C.4 D.8
12.若有以下定义,则赋值错误的是(   )。
int a,*p,*q;
A. *p=&a ; B.p=new int ; C.q=NULL; D.p=q
13. 下列程序运行结果是(  )。
#include<iostream>
int main()
{ int a=10,*q;
if(q==NULL)
cout<<"####"<<endl;
else
q=&a;
cout<<*q<<endl;
}
A. #### B.10 C. 有语法错误 D.*q
14. 若程序段static char line[]=”Visual C++”; char *point=line;则point的值为( )。
A. ”Visual C++” B. line的首地址  C. Visual D. \0
15. 相同数据类型的数组名和指针变量均表示地址,以下不正确的说法是(   )。
A. 数组名代表的地址不变,指针变量存放的地址可变。
B. 数组名代表的存储空间不变,指针变量指向的存储空间长度可变。
C. A和B的说法均正确。
D. 没有差别。
16. 若有以下定义,则下列操作错误的是(   )。
int a[5]={1,3,5,7,9},*p=new int [5];
A.p=a; B.*p=a; C.*(p+1)=a[1]; D.*p=*a
17. 若有以下定义,则释放指针所指内存空间的操作是(   )。
  int *p=new int [10]; 
A.delete []p; B.delete *p C.delete p; delete p[]
18. 若有以下定义,下列值为6的表达式是( )。
  int a[3][5]={{1,2},{2,4,6,8},{10,20,30,40,50}};
A.*(a+2)+3 B.a[2][3] C.*(*(a+1)+2) D.*(*(a+2)+3)
19. 执行下列程序段后,字符串str1的值是(   )。
char str1[8] ,*str2[]=”AA\0BB”;
strcpy(str1,str2);
A. AA\0BB B. AA BB C. AA D.AA\0BB\0

热心网友 时间:2024-10-24 14:54

你能准确的做到以上的题目,基本上你对指针的概念和基本应用都可以了,接着你要学习的是特定指针了,比如字符串指针,函数指针是非常重要的

热心网友 时间:2024-10-24 14:55

知识点:
1.掌握指针、地址、指针类型、空指针(NULL)等概念;
2.掌握指针变量的定义和初始化、指针的间接访问、指针的加减运算、指针变量比较运算和指针表达式;
3.掌握指针与数组、函数、字符串等的联系;
4.掌握引用参数的使用。
一、选择题
1.若有以下定义,则说法错误的是( )。
int a=100,*p=&a ;
A.声明变量p,其中*表示p是一个指针变量
B.变量p经初始化,获得变量a的地址
C.变量p只可以指向一个整形变量
D.变量p的值为100
2. 若有以下定义,则赋值正确的是( )。
int a ,b , *p;
float c, *q;
A.p=&c B.q=p C.p=NULL D.q=new int
3. 如果x是整型变量,则合法的形式是( )。
A.&(x+5)B.*x   C.&*x   D.*&x
4. 若有语句int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;则( )不是对a数组元素的正确引用(其中0≤i<10)。
A.p[i]   B.*(*(a+i))C.a[p-a]D.*(&a[i])
5. 以下程序的输出结果是( )。
#include <iostream>
int main()
{ int a[3]={10,15,20}; // a[0]=10,a[1]=15,a[2]=20
int *p1=a,*p2=&a[1]; // p1取a[0]地址,p2取a[1]地址
*p1=*(p2-1)+5; // a[0]=15,a[1]=15,a[2]=20
*(p1+1)=*p1-5; // a[0]=15,a[1]=10,a[2]=20
cout<<a[1]<<endl;
}
A.5B.10C.15D.20
6. 执行以下程序段后,m的值为 ( )。
int a[2][3]={{1,2,3},{4,5,6}};
int m,*p=&a[0][0];
m=(*p)*(*(p+2))*(*(p+4));
A.15B.14C.13D.12
7. 以下程序的输出结果是( )。
#include <iostream>
void fun(int x,int y,int *cp,int *dp)
{ *cp=x+y; //*cp=30+50=80
*dp=x-y; //*dp=30-50=-20
}
int main()
{int a,b,c,d;
a=30,b=50;
fun(a,b,&c,&d);
cout<<c<<","<<d<<endl;
}
A.50,30B.30,50C.80,-20D.80,20
8. 要求函数的功能是交换x和y中的值,且通过正确调用返回交换结果。能正确执行此功能的函数是( )。
A.funa(int *x,int *y)B.funb(int x,int y)
{ int *p=new int ;{ int t;
p=*x; t=x;
*x=*y; x=y;
*y=*p; y=t;
} }

C.func(int *x,int *y)D.fund(int x,int y)
{ *x=*y;{*x=*x+*y;
*y=*x; *y=*x-*y;
} *x=*x-*y;
}
9. 以下程序的输出结果是( )。
#include <iostream>
int main()
{char *s="12134211";
int v1=0,v2=0,v3=0,v4=0;
for (int k=0;s[k];k++)
switch(s[k])
{default:v4++;
case '1':v1++;
case '3':v3++;
case '2':v2++;
}
cout<<v1<<","<<v2<<","<<v3<<","<<v4<<endl;
}
A.4,2,1,1 B.4,9,3,1C.5,8,6,1D.8,8,8,8
10. 若有如下语句:
int **pp,*p,a=10,b=20;
pp=&p; //二级指针pp取一级指针p地址
p=&a; //一级指针p取变量a地址
p=&b; //一级指针p取变量b地址
cout<<*p<<”,”<<**pp<<endl;
则输出结果是( )。
A.10,20B.10,10C.20,10D.20,20

热心网友 时间:2024-10-24 14:54

三、填空题
1. 下列函数change的功能是,将字符串中的小写字母转成大写字母,请填空。
#include<iostream>
void change( ) //1
{int i=0;
for(i=0; ;i++) //2
if(a[i]>='a'&&a[i]<='z')
; //3
}
int main()
{ char p[80];
cout<<" \n";
cin.getline(p,80) ; //读一行字符,中间可以有空格
change(p);
cout<<p<<endl;
}
如程序运行时得到以下结果:
请输入一行字符:
This is a book..
THIS IS A BOOK.
答案:(1)char *a 或 char a[80]
(2) a[i] 或 a[i]!=’\0’
(3) a[i]= a[i] –32或a[i]-= a[i]
2. 下列函数swap实现数据交换功能功能,请填空。
#include<iostream>
void swap(int *p,int *q)
{ int temp;
temp=*p;
; //1
; //2
}
int main()
{ int a,b;
int *p1,*p2;
cout<<"请输入两个正数:";
cin>>a>>b;
p1=&a;
p2=&b;
swap(p1,p2);
cout<<"结果a和b的值:"<<a<<","<<b<<endl;
}
如程序运行时得到以下结果:
请输入两个正数:10 20
结果a和b的值:20,10
答案:
(1) *p=*q
(2) *q=temp;
3. 下列函数sort实现对字符串按字典顺序由小到大排序,请填空。
#include<iostream>
void sort( ) //1
{ char ; //2
int i,j;
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
if(strcmp( ) //3
{ temp=p[j];
; //4
p[j+1]=temp;
}
}
int main()
{
char *a[5]={"student","worker","cadre","soldier","apen"};
sort(a,5);
for(int i=0;i<5;i++)
cout<<a[i]<<endl;
}
程序运行结果如下:
apen
cadre
soldier
student
worker
答案:(1)char *p[],int n
(2)*temp
(3)p[j],p[j+1])>0
(4)p[j]=p[j+1]
4.函数find功能是:在指针p所指数组中,查找值为x的元素,找到后,返回该元素的下标,否则返回-1,改正程序中语句错误,能够正确运行。
#include<iostream>
#include<stdlib.h>
const int N=10;
int find(int *p,int n,int x) //1
{ int i ; // 2
*(p+n)=x; //3
while(*p+i!=x) //4
i++; //5
if(i!=n) //6
return 1; //7
else
return -1; //8
}
int main()
{ int i,pos,x;
int *p=new int [N];
for(i=0;i<N;i++)
*(p+i)=rand()%50;
for(i=0;i<N;i++)
cout<<*(p+i)<<'\t';
cout<<"\ninput x: ";
cin>>x;
pos=find(p,N,x);
if(pos!=-1)cout<<"index= "<<pos<<" ,value= "<<*(p+pos)<<endl;
else cout<<"No find!"<<endl;
}
答案:(1) 2行语句改为 int i=0;
(2) 4行语句改为 while(*(p+i)!=x);
(3) 7行语句改为 return i 。

四、编程题
1. 写一个函数,将一个n阶方阵转置。具体要求如下:
(1)初始化一个矩阵A(5×5),元素值取自随机函数,并输出。
(2)将其传递给函数,实现矩阵转置。
(3) 在主函数中输出转置后的矩阵。(提示:程序中可以使用C++库函数rand( ),其功能是产生一个随机数0~65535,其头文件为stdlib.h)
2.使用指针编写函数strcat(),实现两个字符串的首尾连接(将字符串str2接到str1的后面,str1最后面的‘\0’被取消)。
3.编写从多个字符串中寻找最长串的函数
4.编写一个程序,实现在命令行中以参数的形式接收两个整数,输出这两个整数的和。(提示:程序中可以使用C++库函数atoi(),其功能是将字符串转换成整型值,其头文件为stdlib.h)

热心网友 时间:2024-10-24 14:54

11.若有以下定义,则变量p所占内存空间的字节数是(   )。
float *p;
A.1 B.2 C.4 D.8
12.若有以下定义,则赋值错误的是(   )。
int a,*p,*q;
A. *p=&a ; B.p=new int ; C.q=NULL; D.p=q
13. 下列程序运行结果是(  )。
#include<iostream>
int main()
{ int a=10,*q;
if(q==NULL)
cout<<"####"<<endl;
else
q=&a;
cout<<*q<<endl;
}
A. #### B.10 C. 有语法错误 D.*q
14. 若程序段static char line[]=”Visual C++”; char *point=line;则point的值为( )。
A. ”Visual C++” B. line的首地址  C. Visual D. \0
15. 相同数据类型的数组名和指针变量均表示地址,以下不正确的说法是(   )。
A. 数组名代表的地址不变,指针变量存放的地址可变。
B. 数组名代表的存储空间不变,指针变量指向的存储空间长度可变。
C. A和B的说法均正确。
D. 没有差别。
16. 若有以下定义,则下列操作错误的是(   )。
int a[5]={1,3,5,7,9},*p=new int [5];
A.p=a; B.*p=a; C.*(p+1)=a[1]; D.*p=*a
17. 若有以下定义,则释放指针所指内存空间的操作是(   )。
  int *p=new int [10]; 
A.delete []p; B.delete *p C.delete p; delete p[]
18. 若有以下定义,下列值为6的表达式是( )。
  int a[3][5]={{1,2},{2,4,6,8},{10,20,30,40,50}};
A.*(a+2)+3 B.a[2][3] C.*(*(a+1)+2) D.*(*(a+2)+3)
19. 执行下列程序段后,字符串str1的值是(   )。
char str1[8] ,*str2[]=”AA\0BB”;
strcpy(str1,str2);
A. AA\0BB B. AA BB C. AA D.AA\0BB\0

热心网友 时间:2024-10-24 14:54

你能准确的做到以上的题目,基本上你对指针的概念和基本应用都可以了,接着你要学习的是特定指针了,比如字符串指针,函数指针是非常重要的

热心网友 时间:2024-10-24 14:55

知识点:
1.掌握指针、地址、指针类型、空指针(NULL)等概念;
2.掌握指针变量的定义和初始化、指针的间接访问、指针的加减运算、指针变量比较运算和指针表达式;
3.掌握指针与数组、函数、字符串等的联系;
4.掌握引用参数的使用。
一、选择题
1.若有以下定义,则说法错误的是( )。
int a=100,*p=&a ;
A.声明变量p,其中*表示p是一个指针变量
B.变量p经初始化,获得变量a的地址
C.变量p只可以指向一个整形变量
D.变量p的值为100
2. 若有以下定义,则赋值正确的是( )。
int a ,b , *p;
float c, *q;
A.p=&c B.q=p C.p=NULL D.q=new int
3. 如果x是整型变量,则合法的形式是( )。
A.&(x+5)B.*x   C.&*x   D.*&x
4. 若有语句int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;则( )不是对a数组元素的正确引用(其中0≤i<10)。
A.p[i]   B.*(*(a+i))C.a[p-a]D.*(&a[i])
5. 以下程序的输出结果是( )。
#include <iostream>
int main()
{ int a[3]={10,15,20}; // a[0]=10,a[1]=15,a[2]=20
int *p1=a,*p2=&a[1]; // p1取a[0]地址,p2取a[1]地址
*p1=*(p2-1)+5; // a[0]=15,a[1]=15,a[2]=20
*(p1+1)=*p1-5; // a[0]=15,a[1]=10,a[2]=20
cout<<a[1]<<endl;
}
A.5B.10C.15D.20
6. 执行以下程序段后,m的值为 ( )。
int a[2][3]={{1,2,3},{4,5,6}};
int m,*p=&a[0][0];
m=(*p)*(*(p+2))*(*(p+4));
A.15B.14C.13D.12
7. 以下程序的输出结果是( )。
#include <iostream>
void fun(int x,int y,int *cp,int *dp)
{ *cp=x+y; //*cp=30+50=80
*dp=x-y; //*dp=30-50=-20
}
int main()
{int a,b,c,d;
a=30,b=50;
fun(a,b,&c,&d);
cout<<c<<","<<d<<endl;
}
A.50,30B.30,50C.80,-20D.80,20
8. 要求函数的功能是交换x和y中的值,且通过正确调用返回交换结果。能正确执行此功能的函数是( )。
A.funa(int *x,int *y)B.funb(int x,int y)
{ int *p=new int ;{ int t;
p=*x; t=x;
*x=*y; x=y;
*y=*p; y=t;
} }

C.func(int *x,int *y)D.fund(int x,int y)
{ *x=*y;{*x=*x+*y;
*y=*x; *y=*x-*y;
} *x=*x-*y;
}
9. 以下程序的输出结果是( )。
#include <iostream>
int main()
{char *s="12134211";
int v1=0,v2=0,v3=0,v4=0;
for (int k=0;s[k];k++)
switch(s[k])
{default:v4++;
case '1':v1++;
case '3':v3++;
case '2':v2++;
}
cout<<v1<<","<<v2<<","<<v3<<","<<v4<<endl;
}
A.4,2,1,1 B.4,9,3,1C.5,8,6,1D.8,8,8,8
10. 若有如下语句:
int **pp,*p,a=10,b=20;
pp=&p; //二级指针pp取一级指针p地址
p=&a; //一级指针p取变量a地址
p=&b; //一级指针p取变量b地址
cout<<*p<<”,”<<**pp<<endl;
则输出结果是( )。
A.10,20B.10,10C.20,10D.20,20

热心网友 时间:2024-10-24 14:54

三、填空题
1. 下列函数change的功能是,将字符串中的小写字母转成大写字母,请填空。
#include<iostream>
void change( ) //1
{int i=0;
for(i=0; ;i++) //2
if(a[i]>='a'&&a[i]<='z')
; //3
}
int main()
{ char p[80];
cout<<" \n";
cin.getline(p,80) ; //读一行字符,中间可以有空格
change(p);
cout<<p<<endl;
}
如程序运行时得到以下结果:
请输入一行字符:
This is a book..
THIS IS A BOOK.
答案:(1)char *a 或 char a[80]
(2) a[i] 或 a[i]!=’\0’
(3) a[i]= a[i] –32或a[i]-= a[i]
2. 下列函数swap实现数据交换功能功能,请填空。
#include<iostream>
void swap(int *p,int *q)
{ int temp;
temp=*p;
; //1
; //2
}
int main()
{ int a,b;
int *p1,*p2;
cout<<"请输入两个正数:";
cin>>a>>b;
p1=&a;
p2=&b;
swap(p1,p2);
cout<<"结果a和b的值:"<<a<<","<<b<<endl;
}
如程序运行时得到以下结果:
请输入两个正数:10 20
结果a和b的值:20,10
答案:
(1) *p=*q
(2) *q=temp;
3. 下列函数sort实现对字符串按字典顺序由小到大排序,请填空。
#include<iostream>
void sort( ) //1
{ char ; //2
int i,j;
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
if(strcmp( ) //3
{ temp=p[j];
; //4
p[j+1]=temp;
}
}
int main()
{
char *a[5]={"student","worker","cadre","soldier","apen"};
sort(a,5);
for(int i=0;i<5;i++)
cout<<a[i]<<endl;
}
程序运行结果如下:
apen
cadre
soldier
student
worker
答案:(1)char *p[],int n
(2)*temp
(3)p[j],p[j+1])>0
(4)p[j]=p[j+1]
4.函数find功能是:在指针p所指数组中,查找值为x的元素,找到后,返回该元素的下标,否则返回-1,改正程序中语句错误,能够正确运行。
#include<iostream>
#include<stdlib.h>
const int N=10;
int find(int *p,int n,int x) //1
{ int i ; // 2
*(p+n)=x; //3
while(*p+i!=x) //4
i++; //5
if(i!=n) //6
return 1; //7
else
return -1; //8
}
int main()
{ int i,pos,x;
int *p=new int [N];
for(i=0;i<N;i++)
*(p+i)=rand()%50;
for(i=0;i<N;i++)
cout<<*(p+i)<<'\t';
cout<<"\ninput x: ";
cin>>x;
pos=find(p,N,x);
if(pos!=-1)cout<<"index= "<<pos<<" ,value= "<<*(p+pos)<<endl;
else cout<<"No find!"<<endl;
}
答案:(1) 2行语句改为 int i=0;
(2) 4行语句改为 while(*(p+i)!=x);
(3) 7行语句改为 return i 。

四、编程题
1. 写一个函数,将一个n阶方阵转置。具体要求如下:
(1)初始化一个矩阵A(5×5),元素值取自随机函数,并输出。
(2)将其传递给函数,实现矩阵转置。
(3) 在主函数中输出转置后的矩阵。(提示:程序中可以使用C++库函数rand( ),其功能是产生一个随机数0~65535,其头文件为stdlib.h)
2.使用指针编写函数strcat(),实现两个字符串的首尾连接(将字符串str2接到str1的后面,str1最后面的‘\0’被取消)。
3.编写从多个字符串中寻找最长串的函数
4.编写一个程序,实现在命令行中以参数的形式接收两个整数,输出这两个整数的和。(提示:程序中可以使用C++库函数atoi(),其功能是将字符串转换成整型值,其头文件为stdlib.h)

热心网友 时间:2024-10-24 14:54

11.若有以下定义,则变量p所占内存空间的字节数是(   )。
float *p;
A.1 B.2 C.4 D.8
12.若有以下定义,则赋值错误的是(   )。
int a,*p,*q;
A. *p=&a ; B.p=new int ; C.q=NULL; D.p=q
13. 下列程序运行结果是(  )。
#include<iostream>
int main()
{ int a=10,*q;
if(q==NULL)
cout<<"####"<<endl;
else
q=&a;
cout<<*q<<endl;
}
A. #### B.10 C. 有语法错误 D.*q
14. 若程序段static char line[]=”Visual C++”; char *point=line;则point的值为( )。
A. ”Visual C++” B. line的首地址  C. Visual D. \0
15. 相同数据类型的数组名和指针变量均表示地址,以下不正确的说法是(   )。
A. 数组名代表的地址不变,指针变量存放的地址可变。
B. 数组名代表的存储空间不变,指针变量指向的存储空间长度可变。
C. A和B的说法均正确。
D. 没有差别。
16. 若有以下定义,则下列操作错误的是(   )。
int a[5]={1,3,5,7,9},*p=new int [5];
A.p=a; B.*p=a; C.*(p+1)=a[1]; D.*p=*a
17. 若有以下定义,则释放指针所指内存空间的操作是(   )。
  int *p=new int [10]; 
A.delete []p; B.delete *p C.delete p; delete p[]
18. 若有以下定义,下列值为6的表达式是( )。
  int a[3][5]={{1,2},{2,4,6,8},{10,20,30,40,50}};
A.*(a+2)+3 B.a[2][3] C.*(*(a+1)+2) D.*(*(a+2)+3)
19. 执行下列程序段后,字符串str1的值是(   )。
char str1[8] ,*str2[]=”AA\0BB”;
strcpy(str1,str2);
A. AA\0BB B. AA BB C. AA D.AA\0BB\0

热心网友 时间:2024-10-24 14:54

你能准确的做到以上的题目,基本上你对指针的概念和基本应用都可以了,接着你要学习的是特定指针了,比如字符串指针,函数指针是非常重要的

热心网友 时间:2024-10-24 14:55

知识点:
1.掌握指针、地址、指针类型、空指针(NULL)等概念;
2.掌握指针变量的定义和初始化、指针的间接访问、指针的加减运算、指针变量比较运算和指针表达式;
3.掌握指针与数组、函数、字符串等的联系;
4.掌握引用参数的使用。
一、选择题
1.若有以下定义,则说法错误的是( )。
int a=100,*p=&a ;
A.声明变量p,其中*表示p是一个指针变量
B.变量p经初始化,获得变量a的地址
C.变量p只可以指向一个整形变量
D.变量p的值为100
2. 若有以下定义,则赋值正确的是( )。
int a ,b , *p;
float c, *q;
A.p=&c B.q=p C.p=NULL D.q=new int
3. 如果x是整型变量,则合法的形式是( )。
A.&(x+5)B.*x   C.&*x   D.*&x
4. 若有语句int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;则( )不是对a数组元素的正确引用(其中0≤i<10)。
A.p[i]   B.*(*(a+i))C.a[p-a]D.*(&a[i])
5. 以下程序的输出结果是( )。
#include <iostream>
int main()
{ int a[3]={10,15,20}; // a[0]=10,a[1]=15,a[2]=20
int *p1=a,*p2=&a[1]; // p1取a[0]地址,p2取a[1]地址
*p1=*(p2-1)+5; // a[0]=15,a[1]=15,a[2]=20
*(p1+1)=*p1-5; // a[0]=15,a[1]=10,a[2]=20
cout<<a[1]<<endl;
}
A.5B.10C.15D.20
6. 执行以下程序段后,m的值为 ( )。
int a[2][3]={{1,2,3},{4,5,6}};
int m,*p=&a[0][0];
m=(*p)*(*(p+2))*(*(p+4));
A.15B.14C.13D.12
7. 以下程序的输出结果是( )。
#include <iostream>
void fun(int x,int y,int *cp,int *dp)
{ *cp=x+y; //*cp=30+50=80
*dp=x-y; //*dp=30-50=-20
}
int main()
{int a,b,c,d;
a=30,b=50;
fun(a,b,&c,&d);
cout<<c<<","<<d<<endl;
}
A.50,30B.30,50C.80,-20D.80,20
8. 要求函数的功能是交换x和y中的值,且通过正确调用返回交换结果。能正确执行此功能的函数是( )。
A.funa(int *x,int *y)B.funb(int x,int y)
{ int *p=new int ;{ int t;
p=*x; t=x;
*x=*y; x=y;
*y=*p; y=t;
} }

C.func(int *x,int *y)D.fund(int x,int y)
{ *x=*y;{*x=*x+*y;
*y=*x; *y=*x-*y;
} *x=*x-*y;
}
9. 以下程序的输出结果是( )。
#include <iostream>
int main()
{char *s="12134211";
int v1=0,v2=0,v3=0,v4=0;
for (int k=0;s[k];k++)
switch(s[k])
{default:v4++;
case '1':v1++;
case '3':v3++;
case '2':v2++;
}
cout<<v1<<","<<v2<<","<<v3<<","<<v4<<endl;
}
A.4,2,1,1 B.4,9,3,1C.5,8,6,1D.8,8,8,8
10. 若有如下语句:
int **pp,*p,a=10,b=20;
pp=&p; //二级指针pp取一级指针p地址
p=&a; //一级指针p取变量a地址
p=&b; //一级指针p取变量b地址
cout<<*p<<”,”<<**pp<<endl;
则输出结果是( )。
A.10,20B.10,10C.20,10D.20,20
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
少儿学什么舞蹈 青年学什么舞蹈好 成年人学什么舞蹈 福州企业最低工资标准 2013年厦门的底薪是多少 生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... 养宠物的人遵守规则,是不是就能和别人平安相处呢? c语言和 下列关于指针定义的描述,_是错误的 灰指甲怎么能医治的好? 空间,朋友圈需不需要常发? 音乐剪辅辑合成后没声音 怎样让股票出现在委比前排名但不涨 怎样让股票出现在委比前排名但不涨 跪求答案! 奶水一滴滴的怎么办 母乳挤出来是一滴一滴的 怎么撅人,练嘴皮子功夫? 学唱歌能练嘴皮子吗。我是个话很少的人, 什么叫嘴皮子活,如何学会说话 怎样练嘴皮子? 嘴巴说话,和思路不行,怎么练嘴皮子? 我不会说话,怎样会说话? 嘴皮子不利落,说话总是说不清意思,怎么办?求练嘴皮子的方法 怎么样练嘴皮子? 怎样可以练嘴皮子? 有什么练嘴皮子的方法? 怎么练嘴皮子 Stop的过去式?谢谢! 七天前坐的滴滴可以开发票吗 交科配债是什么意思? 童装店的产品或服务和主要特征 求韩剧《你为我着迷》全集高清下载 温馨提醒和温馨提示有什么区别? 黔东南州有几大特色产业 宫颈癌治愈后会传染吗 ...盘突出自我按摩疗法缓解腰间压力,你知道怎么按摩吗? 怎么给久坐腰疼的人按摩腰部? 腰肌劳损按摩穴位;不知该用么法啊 用手机号怎么找回 ...旧的被新申请的微信替换了。请问怎么找回旧的? 用手机号注册了一个新,以前的不见了,怎么找回?_百度... 钓鱼时心情好与心情不好的小练笔怎么写? 浮钓怎么样可以在水库多钓起鲢鳙 宝蓝色冲锋衣加灰色登山鞋配什么样子的和什么颜色的裤子好看点? 贷款买车的多还是全款的多? 手机查耳机时必须一直按住耳机上的按钮才会听可美不按听到唱时就音可... 法兰克送给善美的手机 可以和苹果媲美的手机