想找一些C++编程例题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了想找一些C++编程例题相关的知识,希望对你有一定的参考价值。
一:选择题1. 下面函数的功能是:( )
int fun(char *x)
char *y=x;
while(*y++);
return y-x-1;
a. 求字符串的长度
b. 求字符串存放位置
c. 比较两个字符串的大小
d. 将字符串x连接到字符串y后面
2. 若有以下说明和语句,且0<i<10,则( )是对数组元素的错误引用。
int a[ ]=1,2,3,4,5,6,7,8,9,0,*p,i;
p=a;
a. *(a+i)
b. a[p-a]
c. p+i
d. *(&a[i])
3. 下面程序的输出是:( )
#include <stdio.h>
void main( )
int a[10]=1,2,3,4,5,6,7,8,9,10,*p=a;
printf("%d", *(p+2));
a. 3
b. 4
c. 1
d. 2
4. 若有以下定义和语句,且0<i<10,则对数组元素地址的正确表示是:( )
int a[ ]=1,2,3,4,5,6,7,8,9,0,*p,i;
p=a;
a. &(a+1)
b. a++
c. *p
d. &p[i]
5.已知:int a,x=1;则下面正确的赋值语句是:( )
a. a=(a[1]+a[2])/2;
b. a=(a[1]+a[2])/2;
c. a=x+2;
d. a="good";
6.已知:int a[]=1,2,3,4,5,6,*p=a;下面表达式中其值为5的是:( )
a.p+=3;*(p++);
b.p+=5;*p++ ;
c.p+=4;*++p;
d.p+=4;++*p;
7. 若有以下语句,且0<=k<6,则正确表示数组元素地址的语句是( )
int x[]=1,9,10,7,32,4,*ptr=x,k=1;
a.x++
b.&ptr
c.&ptr[k]
d.&(x+1)
8.若有说明:int i,j=7,*p;p=&i;则与i=j等价的语句是( )
a.i=*p;
b.*p=*&j;
c.i=&j
d.i=**p;
9. 设p1和p2是指向同一个int型一维数组的指针变量,k为int型变量,则不能正确执行的语句是( )
a.k=*p1+*p2;
b.p2=k;
c.p1=p2;
d.k=*p1*(*p2);
10. 设有以下函数定义,则该函数返回的值是( )
int * fun(int a)
int *t,n;
n=a;t=&n;
return t;
a.一个不可用的存储单元地址值
b.一个可用的存储单元地址值
c.n中的值
d.形参a中的值
二:填空题
1、 给出以下程序的输出结果是
#include<stdio.h>
void main()
int *v,b;
v=&b; b=100; *v+=b;
printf("%d\n",b);
2、 说明语句"int (* p)();"的含义是
3、 已知函数说明语句:void *fun();则它的含义是
4、 已知:int i;char *s="a\045+045\'b";执行语句"fot(i=0;*s++;i++);"之后,变量i的结果是
5、下面的程序是求两个整数之和,并通过形参传回结果。
int add(intx,int y, z)
=x+y;
6、给出以下程序的输出结果是
void fun(int *x)
printf("%d\n",++*x)';
main()
int a=25;
fun(&a);
7、给出以下程序运行的结果
#include <stdio.h>
void main( )
int a[ ]=1,2,3,4,5;
int x, y, *p;
p=&a[0];
x=*(p+2);
y=*(p+4);
printf("*p=%d,x=%d,y=%d\n",*p,x,y);
return;
8、给出以下程序运行的结果
#include<iostream.h>
void callbyval(int a,int b,int c)
a=3;b=2;c=1;
void callbypointer(int* a,int* b,int* c)
*a=3;*b=2;*c=1;
void callbyreference(int& a,int& b,int& c)
a=1;b=2;c=3;
void main()
int a=1,b=2,c=3;
int& a1=a;
int& b1=a;
int& c1=a;
callbyval(a,b,c);
cout<<a<<b<<c<<endl;
callbypointer(&a,&b,&c);
cout<<a<<b<<c<<endl;
callbyreference(a1,b1,c1);
cout<<a<<b<<c<<endl;
9、给出以下程序运行的结果
#include<iostream.h>
void ast(int x,int y,int *cp,int *dp)
*cp=x*y;
*dp=x%y;
void main()
int a,b,c,d;
a=2; b=3;
ast(a,b,&c,&d);
cout<<c<<d<<endl;
10、给出以下程序运行的结果
#include <stdio.h>
void main( )
int a=10,b=0,*pa, *pb;
pa=&a; pb=&b;
printf("%d,%d\n",a,b);
printf("%d,%d\n",*pa,*pb);
a=20; b=30;
*pa=a++; *pb=b++;
printf("%d,%d\n",a,b);
printf("%d,%d\n",*pa,*pb);
(*pa)++;
(*pb)++;
printf("%d,%d\n",a,b);
printf("%d,%d\n",*pa,*pb);
三:简答和编程题
1. 判断执行下面的语句后,ab的值变为多少
int *var, ab;
ab=100;
var=&ab;
ab=*var+10;
2.已知指针p的指向下图所示,则表达式*--p的值是多少?(这里,a[0],a[1],a[2]……仅作为连续存储单元的代号,a[0]在低地址,a[1]在高地址)。
3. 有定义:double var;那么,
a) 使指针p可以指向double型变量的定义语句是什么?
b) 使指针p指向变量var的赋值语句是什么?
c) 通过指针p给变量var读入数据的scanf函数调用语句是什么?
4.写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。
5.编程实现:从键盘输入一任意字符串,然后,输入所要查找字符。存在则返回它第一次在字符串中出现的位置;否则,输出"在字符串中查找不到!" 。并实现对同一字符串,能连续输入所要查找的字符。
6.编程实现:从字符串中删除子字符串。从键盘输入一字符串,然后,输入要删除的子字符串。最后输出删除子串后的新字符串。
一:选择题:
1.A
2.C
3.A
4.D
5.C
6.A
7.C
8.B
9.B
10.A
二:填空题
1. 200
2. p是一个指向函数的指针,该函数的返回值是一个整型
3. 函数fun的返回值是一个通用型的指针
4. 8
由于for语句就是求字符串的长度,所以可以知道i的结果是8
5. (1)int * (2)*z
6. 26
7. *p=1 x=3 y=5
8. 123
321
321
9. 6 2
10. 10,0
10,0
21,31
21,31
22,32
22,32
三、问答和编程题
1. 本例定义了两个变量,int型的变量ab和指向int型的指针变量var;语句var=&ab;是将ab的地址赋给了var,在下一条语句中,*var 表示var所指单元的内容,即100。然后,将*var+10赋给了变量ab;那么,这时ab的值应该是110。
2.根据运算符的优先级,表达式*--p=*(--p)。所以,先执行--p操作,使指针p向低地址方向移动一个存储单元,指向a[1]。然后用运算符"*"取得该地址所存储的数据,即20。
3.(1)要求把p定义成指向double型的指针变量即可,所以定义语句是:double *p;
(2)要使p指向变量var,即将var的地址赋给指针p,赋值语句为:p=&var;
(3)用scanf函数把读入的数据赋给变量var的语句是:scanf("%lf",&var);由于(2)中已将var的地址赋给了p,所以该语句等价于scanf("%lf",p);
4.程序为:
#include <stdio.h>
int length(char* a);
void main( )
int len;
char str[20];
printf("请输入一个字符串:");
scanf("%s",str);
len=length(str);
printf("字符串长度为%d",len);
return;
int length(char* a)/*求字符串长度函数*/
char *p;
p=a;
int n;
n=0;
while(*p!='\0')
n++;
p++;
return(n);
5.程序为:
#include<iostream.h>
char *strchr( char *string,int letter)
while((*string!=letter)&&(*string))
string++;
return string;
void main()
int tt=1;
while(tt)
char title[64];
cout<<"请输入一字符串:";
cin>>title;
char *p;
cout<<"请输入你想查找的字符: ";
char ch;
cin>>ch;
p=strchr(title,ch);
if(*p)
cout<<"所查字符在字符串中第一次出现的位置为: "<<p-title<<endl;
else
cout<<"在字符串中没有所查字符!"<<endl;
cout<<"do u cunteue!1--counte,0--exit"<<endl;
cin>>tt;
6.程序为:
#include<string.h>
#include<iostream.h>
char* strstr_rep(char *source,char *old)
int i,j,k,loc=-1;
for(i=0;source[i]&&(loc==-1);i++)
for(j=i,k=0;source[j]==old[k];j++,k++)
if(!old[k+1])
loc=i;
if(loc!=-1)
for(k=0;old[k];k++);
for(j=loc,i=loc+k;source[i];j++,i++)
source[j]=source[i];
source[i]=NULL;
return(source);
void main()
char a[50];
cout<<"请输入一字符串:";
cin>>a;
char b[30];
cout<<"请输入上字符串的一个子串:";
cin>>b;
cout<<strstr_rep(a,b)<<endl;
参考技术A 一:选择题
1.
下面函数的功能是:(
)
int
fun(char
*x)
char
*y=x;
while(*y++);
return
y-x-1;
a.
求字符串的长度
b.
求字符串存放位置
c.
比较两个字符串的大小
d.
将字符串x连接到字符串y后面
2.
若有以下说明和语句,且0<i<10,则(
)是对数组元素的错误引用。
int
a[
]=1,2,3,4,5,6,7,8,9,0,*p,i;
p=a;
a.
*(a+i)
b.
a[p-a]
c.
p+i
d.
*(&a[i])
3.
下面程序的输出是:(
)
#include
<stdio.h>
void
main(
)
int
a[10]=1,2,3,4,5,6,7,8,9,10,*p=a;
printf("%d",
*(p+2));
a.
3
b.
4
c.
1
d.
2
4.
若有以下定义和语句,且0<i<10,则对数组元素地址的正确表示是:(
)
int
a[
]=1,2,3,4,5,6,7,8,9,0,*p,i;
p=a;
a.
&(a+1)
b.
a++
c.
*p
d.
&p[i]
5.已知:int
a,x=1;则下面正确的赋值语句是:(
)
a.
a=(a[1]+a[2])/2;
b.
a=(a[1]+a[2])/2;
c.
a=x+2;
d.
a="good";
6.已知:int
a[]=1,2,3,4,5,6,*p=a;下面表达式中其值为5的是:(
)
a.p+=3;*(p++);
b.p+=5;*p++
;
c.p+=4;*++p;
d.p+=4;++*p;
7.
若有以下语句,且0<=k<6,则正确表示数组元素地址的语句是(
)
int
x[]=1,9,10,7,32,4,*ptr=x,k=1;
a.x++
b.&ptr
c.&ptr[k]
d.&(x+1)
8.若有说明:int
i,j=7,*p;p=&i;则与i=j等价的语句是(
)
a.i=*p;
b.*p=*&j;
c.i=&j
d.i=**p;
9.
设p1和p2是指向同一个int型一维数组的指针变量,k为int型变量,则不能正确执行的语句是(
)
a.k=*p1+*p2;
b.p2=k;
c.p1=p2;
d.k=*p1*(*p2);
10.
设有以下函数定义,则该函数返回的值是(
)
int
*
fun(int
a)
int
*t,n;
n=a;t=&n;
return
t;
a.一个不可用的存储单元地址值
b.一个可用的存储单元地址值
c.n中的值
d.形参a中的值
二:填空题
1、
给出以下程序的输出结果是
#include<stdio.h>
void
main()
int
*v,b;
v=&b;
b=100;
*v+=b;
printf("%d\n",b);
2、
说明语句"int
(*
p)();"的含义是
3、
已知函数说明语句:void
*fun();则它的含义是
4、
已知:int
i;char
*s="a\045+045\'b";执行语句"fot(i=0;*s++;i++);"之后,变量i的结果是
5、下面的程序是求两个整数之和,并通过形参传回结果。
int
add(intx,int
y,
z)
=x+y;
6、给出以下程序的输出结果是
void
fun(int
*x)
printf("%d\n",++*x)';
main()
int
a=25;
fun(&a);
7、给出以下程序运行的结果
#include
<stdio.h>
void
main(
)
int
a[
]=1,2,3,4,5;
int
x,
y,
*p;
p=&a[0];
x=*(p+2);
y=*(p+4);
printf("*p=%d,x=%d,y=%d\n",*p,x,y);
return;
8、给出以下程序运行的结果
#include<iostream.h>
void
callbyval(int
a,int
b,int
c)
a=3;b=2;c=1;
void
callbypointer(int*
a,int*
b,int*
c)
*a=3;*b=2;*c=1;
void
callbyreference(int&
a,int&
b,int&
c)
a=1;b=2;c=3;
void
main()
int
a=1,b=2,c=3;
int&
a1=a;
int&
b1=a;
int&
c1=a;
callbyval(a,b,c);
cout<<a<<b<<c<<endl;
callbypointer(&a,&b,&c);
cout<<a<<b<<c<<endl;
callbyreference(a1,b1,c1);
cout<<a<<b<<c<<endl;
9、给出以下程序运行的结果
#include<iostream.h>
void
ast(int
x,int
y,int
*cp,int
*dp)
*cp=x*y;
*dp=x%y;
void
main()
int
a,b,c,d;
a=2;
b=3;
ast(a,b,&c,&d);
cout<<c<<d<<endl;
10、给出以下程序运行的结果
#include
<stdio.h>
void
main(
)
int
a=10,b=0,*pa,
*pb;
pa=&a;
pb=&b;
printf("%d,%d\n",a,b);
printf("%d,%d\n",*pa,*pb);
a=20;
b=30;
*pa=a++;
*pb=b++;
printf("%d,%d\n",a,b);
printf("%d,%d\n",*pa,*pb);
(*pa)++;
(*pb)++;
printf("%d,%d\n",a,b);
printf("%d,%d\n",*pa,*pb);
三:简答和编程题
1.
判断执行下面的语句后,ab的值变为多少
int
*var,
ab;
ab=100;
var=&ab;
ab=*var+10;
2.已知指针p的指向下图所示,则表达式*--p的值是多少?(这里,a[0],a[1],a[2]……仅作为连续存储单元的代号,a[0]在低地址,a[1]在高地址)。
3.
有定义:double
var;那么,
a)
使指针p可以指向double型变量的定义语句是什么?
b)
使指针p指向变量var的赋值语句是什么?
c)
通过指针p给变量var读入数据的scanf函数调用语句是什么?
4.写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。
5.编程实现:从键盘输入一任意字符串,然后,输入所要查找字符。存在则返回它第一次在字符串中出现的位置;否则,输出"在字符串中查找不到!"
。并实现对同一字符串,能连续输入所要查找的字符。
6.编程实现:从字符串中删除子字符串。从键盘输入一字符串,然后,输入要删除的子字符串。最后输出删除子串后的新字符串。
一:选择题:
1.A
2.C
3.A
4.D
5.C
6.A
7.C
8.B
9.B
10.A
二:填空题
1.
200
2.
p是一个指向函数的指针,该函数的返回值是一个整型
3.
函数fun的返回值是一个通用型的指针
4.
8
由于for语句就是求字符串的长度,所以可以知道i的结果是8
5.
(1)int
*
(2)*z
6.
26
7.
*p=1
x=3
y=5
8.
123
321
321
9.
6
2
10.
10,0
10,0
21,31
21,31
22,32
22,32
三、问答和编程题
1.
本例定义了两个变量,int型的变量ab和指向int型的指针变量var;语句var=&ab;是将ab的地址赋给了var,在下一条语句中,*var
表示var所指单元的内容,即100。然后,将*var+10赋给了变量ab;那么,这时ab的值应该是110。
2.根据运算符的优先级,表达式*--p=*(--p)。所以,先执行--p操作,使指针p向低地址方向移动一个存储单元,指向a[1]。然后用运算符"*"取得该地址所存储的数据,即20。
3.(1)要求把p定义成指向double型的指针变量即可,所以定义语句是:double
*p;
(2)要使p指向变量var,即将var的地址赋给指针p,赋值语句为:p=&var;
(3)用scanf函数把读入的数据赋给变量var的语句是:scanf("%lf",&var);由于(2)中已将var的地址赋给了p,所以该语句等价于scanf("%lf",p);
4.程序为:
#include
<stdio.h>
int
length(char*
a);
void
main(
)
int
len;
char
str[20];
printf("请输入一个字符串:");
scanf("%s",str);
len=length(str);
printf("字符串长度为%d",len);
return;
int
length(char*
a)/*求字符串长度函数*/
char
*p;
p=a;
int
n;
n=0;
while(*p!='\0')
n++;
p++;
return(n);
5.程序为:
#include<iostream.h>
char
*strchr(
char
*string,int
letter)
while((*string!=letter)&&(*string))
string++;
return
string;
void
main()
int
tt=1;
while(tt)
char
title[64];
cout<<"请输入一字符串:";
cin>>title;
char
*p;
cout<<"请输入你想查找的字符:
";
char
ch;
cin>>ch;
p=strchr(title,ch);
if(*p)
cout<<"所查字符在字符串中第一次出现的位置为:
"<<p-title<<endl;
else
cout<<"在字符串中没有所查字符!"<<endl;
cout<<"do
u
cunteue!1--counte,0--exit"<<endl;
cin>>tt;
6.程序为:
#include<string.h>
#include<iostream.h>
char*
strstr_rep(char
*source,char
*old)
int
i,j,k,loc=-1;
for(i=0;source[i]&&(loc==-1);i++)
for(j=i,k=0;source[j]==old[k];j++,k++)
if(!old[k+1])
loc=i;
if(loc!=-1)
for(k=0;old[k];k++);
for(j=loc,i=loc+k;source[i];j++,i++)
source[j]=source[i];
source[i]=NULL;
return(source);
void
main()
char
a[50];
cout<<"请输入一字符串:";
cin>>a;
char
b[30];
cout<<"请输入上字符串的一个子串:";
cin>>b;
cout<<strstr_rep(a,b)<<endl;
参考技术B 到POJ上做啊!
http://acm.pku.edu.cn/JudgeOnline/
50道C++编程练习题及解答-c-编程例题
截止到目前我已经写了 600多道算法题,其中部分已经整理成了pdf文档,目前总共有1000多页(并且还会不断的增加),大家可以免费下载
下载链接:https://pan.baidu.com/s/1hjwK0ZeRxYGB8lIkbKuQgQ
提取码:6666
总共8页,就不在一一展示,可以扫描最上面的二维码,关注微信公众号“数据结构和算法”,回复2002即可下载
以上是关于想找一些C++编程例题的主要内容,如果未能解决你的问题,请参考以下文章