C++编程练习题及答案.docx
《C++编程练习题及答案.docx》由会员分享,可在线阅读,更多相关《C++编程练习题及答案.docx(32页珍藏版)》请在冰豆网上搜索。
C++编程练习题及答案
一、简单问题:
1.编程求下列式子的值,
y=1-1/2+1/3-1/4+…+1/99-1/100
并将结果输出,格式为:
1-1/2+1/3-1/4+…+1/99-1/100=表达式的值
publicclassPorg{
publicstaticvoidmain(String[]args){
doublesum=0;
for(doublei=1;i<=100;i++)
{
sum=sum+(-1,i-1)*(1/i);
}
"1-1/2+1/3-1/4+…+1/99-1/100="+sum);
}
}
2.请编程实现:
由键盘输入的任意一组字符,统计其中大写字母的个数m和小写字母的个数n,并输出m、n中的较大者。
importclassProg2{
publicstaticvoidmain(String[]args){
intm=0,n=0;
Scannercin=newScanner;
Stringstr=();
for(inti=0;i<();i++)
{
if(i)>'A'&&(i)<='Z')
m++;
else
n++;
}
if(m>n)
{
}
else
}
}
3.编程,求全部水仙花数。
所谓水仙花数是指一个三位数,其各位数字立方的和等于该数。
如:
153=13+53+33。
publicclassProg3{
publicstaticvoidmain(String[]args){
inta,b,c;
for(a=1;a<=9;a++)
{
for(b=0;b<=9;b++)
{
for(c=0;c<=9;c++)
{
if(a*100+b*10+c==a*a*a+b*b*b+c*c*c)
}
}
}
}
4.请编制程序判断输入的正整数是否既是5又是7的整倍数。
若是,则输出yes;否则输出no。
importclassProg4{
publicstaticvoidmain(String[]args){
Scannercin=newScanner;
inti=();
if(i%5==0&&i%7==0)
"yes");
else
"no");
}
}
5.请编程实现:
对于给定的一个百分制成绩,输出相应的五分制成绩。
设:
90分以上为‘A’,80—89分为‘B’,70—79分为‘C’,60—69分为‘D’,60分以下为‘E’。
importclassProg5{
publicstaticvoidmain(String[]args){
Scannercin=newScanner;
intm=();
if(m>=60&&m<=69)
"D");
else
if(m>=70&&m<=79)
"C");
else
if(m>=80&&m<=89)
"B");
else
if(m>=90)
"A");
else
"E");
}
}
6.输入一行字符,将其中的字母变成其后续的第3个字母,输出。
例:
a→d,x→a;y→b;编程实现。
importclassProg6{
publicstaticvoidmain(String[]args){
char[]zimu=newchar[]{'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','a','b','c'};
Scannercin=newScanner;
Stringstr=();
for(intj=0;j<();j++)
{
for(inti=0;i<29;i++)
{
if(j)==zimu[i])
{
break;
}
}
}
7.编写程序,输入任意一个1~7之间的整数,将他们转换成对应的英文单词.例如:
1转换成Monday,7转换成Sunday.
importclassProg7{
publicstaticvoidmain(String[]args){
"请输入任意一个1~7之间的整数\n");
Scannercin=newScanner;
intm=();
if(m==1)
"Monday");
else
if(m==2)
"Tuesday");
else
if(m==3)
"Wensday");
else
if(m==4)
"Thuesday");
else
if(m==5)
"Friday");
else
if(m==6)
"Saturday");
else
"Sunday");
}
}
8.输入三角形的三边a,b,c,判断能否构成三角形.若能,计算面积.
importclassProg8{
publicstaticvoidmain(String[]args){
"请输入三个整数\n");
Scannercin=newScanner;
inta=();
intb=();
intc=();
if(a+b{
"不能构成三角形\n");
}
else
{
intl=a+b+c;
}
}
}
9.编程序,输入a,b,c,求方程ax2+bx+c=0的解。
importclassProg9{
publicstaticvoidmain(String[]args){
"请输入三个整数\n");
Scannercin=newScanner;
inta=();
intb=();
intc=();
if(a==0)
{
}
elseif(b*b-4*a*c>=0)
{
doublex1=(-b+(1/2,b*b-4*a*c))/(2*a);
doublex2=(1/2,b*b-4*a*c))/(2*a);
}
else"无解");
}
}
10.计算出前20项fibonacci数列,要求一行打印5个数.
一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。
如果所有兔都不死,那么一年以后可以繁殖多少对兔子?
我们不妨拿新出生的一对小兔子分析一下:
第一个月小兔子没有繁殖能力,所以还是一对;
两个月后,生下一对小兔总数共有两对;
三个月以后,老兔子又生下一对,因为小兔子还没有繁殖能力,所以一共是三对;
……
依次类推可以列出下表:
经过月数
0
1
2
3
4
5
6
7
8
9
10
11
12
幼仔对数
0
1
1
2
3
5
8
13
21
34
55
89
144
成兔对数
1
1
2
3
5
8
13
21
34
55
89
144
233
总体对数
1
2
3
5
8
13
21
34
55
89
144
233
377
importclassProg10{
publicstaticvoidmain(String[]args){
Scannercin=newScanner;
intn=();
inta=0,b=1,c=1;
if(n==1){);
);
);}
else
{
for(inti=2;i<=n;i++)
{
a=b;
b=c;
c=a+b;
}
"幼崽数"+a+"成年兔子书"+b+"总数"+c);
}
}
}
11.输出100~10000之间个位数为3的所有素数。
publicclassProg11{
publicstaticvoidmain(String[]args){
for(inti=103;i<10000;i=i+10)
{
booleanflag=true;
for(intj=2;j
{
if(i%j==0)
{flag=false;break;}
}
if(flag==true){
}
}
}
12.百钱买百鸡问题:
公鸡每只5元,母鸡每只3元,小鸡3只一元,问一百元买一百只鸡有几种买法.
publicclassProg12{
publicstaticvoidmain(String[]args){
intm=0;
for(inta=0;a<100;a++)
{
for(intb=0;b<100;b++)
{
for(intc=0;c<100;c++)
if(5*a+3*b+1/3*c==100&&a+b+c==100)
m++;
}
}
"一百元买一百只鸡有"+m+"种买法");
}
}
13.请编制程序要求输入整数a和b,若a2+b2大于100,则输出a2+b2百位以上的数字,否则输出两数之和。
importclassProg13{
publicstaticvoidmain(String[]args){
"请输入两个整数\n");
Scannercin=newScanner;
inta=();
intb=();
if(a*a+b*b>100)
{
}
else
}
}
14.编程实现:
对键盘输入的任意一个四位正整数,计算各位数字平方和。
如:
2345,则:
计算22+32+42+52
importclassProg14{
publicstaticvoidmain(String[]args){
"请输入任意一个四位正整数\n");
intsum=0;
Scannercin=newScanner;
inta=();
sum=(a/1000*a/1000)+((a/100)%10*(a/100)%10)+((a/10%100%10)*(a/10%100%10))+((a%10)*(a%10));
}
}
15.有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,问几天以后能卖完,请编程.
publicclassProg15{
publicstaticvoidmain(String[]args){
intm=0,sum=1020;
do{
sum=sum/2-2;
m++;
}while(sum>=0);
"天以后能卖完");
}
}
16.编程,输出200以内所有完全平方数C(满足C2=A2+B2)及其个数.
publicclassProg16{
publicstaticvoidmain(String[]args){
intm=0;
for(intC=1;C<200;C++)
{
for(intA=1;A<=200;A++)
{
for(intB=1;B<=200;B++)
{
if(A*A+B*B==C*C)
{A=201;
B=201;
m++;}
}
}
}
"个数为:
"+m);
}
}
17.设N是一个四位数,它的9倍恰好是其反序数(例如:
123的反序数是321),编程,输出所有满足条件的N。
packageeasy;
publicclassThe17{
staticlongs,M;
publicstaticvoidmain(String[]args){
for(longN=1009;N<=1109;N=N+10){
M=9*N;
s=0;
while(M>0){
s=s*10+M%10;
M=M/10;
}
if(N==s)
}
}
}
18.编程,输出555555的约数中最大的三位数。
packageeasy;
publicclassThe18th{
publicstaticvoidmain(String[]args){
doublea=555555;
longb=0;
编程,输出所有个位数为6且能被31整除的五位数及其个数。
packageeasy;
publicclassThe19th{
publicstaticvoidmain(String[]args){
for(longi=10006;i<=99996;i=i+10){
if(i%31==0){
}
}
}
}
20.编写程序,输入两个整数,和+、-、*、/、%之中的任意一个运算符,输出计算结果.
packageeasy;
计算:
1+1/(1+2)+1/(1+2+3)+…+1/(1+2+…+n),n由键盘输入。
packageeasy;
importclassThe21th{
publicstaticvoidmain(String[]args){
doublesum=0,div=0;
Scannercin=newScanner;
intn=();
for(inti=1;i<=n;i++){
div=div+i;
"1/"+div);
sum=sum+1/div;
}
}
}
22.编程计算:
1*2*3+3*4*5+…+99*100*101的值.
packageeasy;
publicclassThe22th{
publicstaticvoidmain(String[]args){
longsum=0;
for(inti=1;i+2<=101;i=i+2){
sum=sum+i*(i+1)*(i+2);
}
}
}
二、比较简单问题:
1.编一个函数GCD,求两个无符号整数的最大公约数。
主函数输入两个正整数m和n,调用GCD,求出m和n的最大公约数和最小公倍数.并输出。
packagemoreEasy;
importclassThe1th{
publicstaticvoidmain(String[]args){
Scannercin=newScanner;
intm=();
intn=();
"和"+n+"的最大公约数为:
"+GCD(m,n));
"和"+n+"的最小公倍数为:
"+m*n/GCD(m,n));
}
publicstaticintGCD(inta,intb){
intr=0;
for(inti=1;i<=a&&i<=b;i++){
if(a%i==0&&b%i==0&&r
r=i;
}
}
请编程实现:
建立一个4*4的二维整型数组,求对角线元素的和。
packagemoreEasy;
importclassThe2th{
publicstaticvoidmain(String[]args){
intewsz[][]=newint[4][4];
Scannercin=newScanner;
for(inti=0;i<;i++){
for(intj=0;jewsz[i][j]=();
}
}
/*for(inti=0;i<;i++){
for(intj=0;jif(j==3){
"");
}
}
}*/
intsum=0;
for(inti=0;i<;i++){
sum=sum+ewsz[i][i];
}
}
}
3.写一个判断素数的函数prime,在主函数中输入10个整数,调用prime,输出这10个整数中的素数的累加和。
packagemoreEasy;
importclassThe3th{
publicstaticvoidmain(String[]args){
int[]shu=newint[10];
intsum=0;
Scannercin=newScanner;
for(inti=0;i<;i++){
shu[i]=();
}
for(inti=0;i<;i++){
if(prime(shu[i]))
sum=sum+shu[i];
}
}
publicstaticbooleanprime(inta){
输出最高成绩和最低成绩及相应的序号。
packagemoreEasy;
importclassThe4th{
publicstaticvoidmain(String[]args){
intn,n1=0,max,min;
Scannercin=newScanner;
"学生人数");
n=();
int[]chengJi=newint[n];
for(inti=0;ichengJi[i]=();
}
max=chengJi[0];
min=chengJi[0];
for(intj=0;j<;j++){
if(maxmax=chengJi[j];
n=j;
}
if(min>chengJi[j]){
min=chengJi[j];
n1=j;
}
}
"max="+max+""+n);
"min="+min+""+n1);
}
}
5.编程计算:
1!
+2!
+3!
+…+20!
,并将结果输出.输出格式:
1!
+2!
+3!
+…+20!
=表达式的值
packagemoreEasy;
publicclassThe5th{
publicstaticvoidmain(String[]args){
longsum=0;
for(inti=1;i<=20;i++){
longr=1;
for(intj=1;j<=i;j++){
r*=j;
}
sum=sum+r;
有一个3*4的矩阵,编程实现:
找出该矩阵中每行元素的最大值,存入一个一维数组中。
输出原始矩阵和结果矩阵。
7.将若干个整数放到一维数组中,找出该数组中的最大值和它的下标。
然后将它和数组中的最前面的元素对换。
不明白
packagemoreEasy;
importclassThe7th{
publicstaticvoidmain(String[]args){
int[]array=newint[10];
Scannercin=newScanner;
"数组长度:
");
intn=();
for(inti=0;iarray[i]=();
}
intmin=array[0];
intmax=array[0];
编写一个函数converse,将一维数组中的数逆序存放,不允许使用辅助数组。
主函数输入原始数据,调用converse,实现逆置。
并将原数组和逆置后的数组输出
packagemoreEasy;
importclassThe8th{
publicstaticvoidmain(String[]args){
converse();
}
publicstaticvoidconverse(){
int[]ar=newint[10];
Scannercin=newScanner;
for(inti=0;i<;i++){
ar[i]=();
编写函数,将给定的字符串的大写字母转变成小写字母;其它字符不变。
主函数输入一个字符串,调用该函数对其进行转换,分别输出原串和转换之后的串。
packagemoreEasy;
importclassThe9th{
staticStringstr="";
publicstaticvoidmain(String[]args){
Stringstr="";
Scannercin=newScanner;
str=();
zhuanHuan(str);
}
publicstaticvoidzhuanHuan(Stringstr1){
str=str1;
str=();
}
}
10.编写一个函数,将字符数组a中的全部字符复制到字符数组b中.不要使用strcpy函数.主函数输入任意一个字符串,调该函数,复制出另一个字符串。
将两个串输出。
packagemoreEasy;
importclassThe10th{
publicstaticvoidmain(String[]args){
Scannercin=newScanner