c++
我是C++初学者,希望各位给出点题,让我研究研究,谢谢
[解决办法]
?《题目1》:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
《题目2》:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
?******************************************************************
?#include<iostream.h>
?void main()
?{
?int i=0,j=0,sum,num=0,t=0,p=0;
?for(i=0;i<1000;i++)
?for(j=0;j<1000;j++)
?{
?t=i*i-100;
?p=j*j-168;
?sum=t-p;
?num=i*i-100;
?if(sum==0)
?cout<<"该数为:"<<num<<endl;
?}
?
?}
?*************************************************************************
?题目3:输入某年某月某日,判断这一天是这一年的第几天?
题目4:用*号输出字母C的图案。
《题目5》:输出9*9口诀。
?*********************************************************************
?#include<iostream.h>
?#include<cmath>
?void main()
?{
?int k=0,i=0,j=0,t=0;
?for(i=1;i<10;i++)
?{
?for(j=1;j<=i;j++)
?{
?t=i*j;
?if(t<10)
?cout<<j<<"*"<<i<<"="<<t<<" ";
?if(t>10)
?cout<<i<<"*"<<j<<"="<<t<<" ";
?
?}
?cout<<endl;
?}
?cout<<endl;
?
?}
?********************************************************************
?《题目6》:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
?***********************************************************************
?#include<iostream.h>
?void main()
?{
?int i=0,j=0,k=0,sum,num=0,t=0,p;
?cout<<"所有的水仙花数如下:"<<endl;
?for(i=1;i<10;i++)
?for(j=0;j<10;j++)
?for(k=0;k<10;k++)
?{
?t=i*i*i+j*j*j+k*k*k;
?sum=i*100+j*10+k;
?p=sum-t;
?if(p==0)
?cout<<sum<<" ";
?
?}
?cout<<endl;
?}
?*********************************************************************
《题目7》:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
?**************************************************************
?#include<iostream.h>
?void main()
?{
?int i=0,sum=0,n=0,a=0;
?int b[1000]={0};
?cout<<"请输入数a,a="<<endl;
?cin>>a;
?cout<<"请输入n,n="<<endl;
?cin>>n;
?for(i=1;i<=n;i++)
?{
?b[i]=b[i-1]*10+a;
?sum=sum+b[i];
?}
?cout<<"sum="<<sum<<endl;
?}
?***********************************************************************
题目8:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数。
?***********************************************************************
?#include<iostream.h>
?#include<cmath>
?void main()
?{
?int i=0,sum=0,j=0,k=1,t,g=0;
?int b[1000]={0};
?cout<<"1到1000的所有完数如下:"<<endl;
?for(i=1;i<=1000;i++)
?{
?for(j=1;j<i;j++)
?if(i%j==0)
?{
?b[k]=j;
?sum=sum+b[k];
?k=k+1;
?}
?t=sum-i;
?if(t==0)
?{
?cout<<i<<" ";
?g=1;
?}
?sum=0;
?}
?cout<<endl;
?if(g==0)
?cout<<"can't found !!!"<<endl;
?}
?**********************************************************************
?题目9:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
题目10:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
题目11:求一个3*3矩阵对角线元素之和
题目12:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
?**********************************************************************
?#include<iostream.h>
?#define N 5
?void main()
?{
?int n=0,i=0,j=0;
?int a[N]={-8,2,7,13,67};
?int b[N+1]={0};
?cout<<"请输入一个待插入的数n,n="<<endl;
?cin>>n;
?if(n<a[0])
?{
?cout<<"该数应该插入在数组的第一个数的位置之前,即a[0]之前"<<endl;
?b[0]=n;
?for(i=0;i<N;i++)
?b[i+1]=a[i];
?}
?if(n>a[N-1])
?{
?cout<<"该数应该插入数组最后一个数之后,即a["<<N-1<<"]之后"<<endl;
?b[N]=n;
?for(i=0;i<N;i++)
?b[i]=a[i];
?}
?else
?{
?for(i=0;i<N;i++)
?{
?if(n==a[i])
?{
?cout<<"该数就是原来数组中的数,为"<<"a["<<i<<"]"<<endl;
?break;
?}
?if(n>a[i]&&n<a[i+1])
?{
?cout<<"该数应该插入的位置为 a["<<i<<"]与a["<<i+1<<"]之间"<<endl;
?for(j=0;j<=i;j++)
?b[j]=a[j];
?b[i+1]=n;
?for(j=i+1;j<N;j++)
?{
?b[j+1]=a[j];
?
?}
?break;
?
?}
?}
?}
?cout<<"原来的数组为:"<<endl;
?for(i=0;i<N;i++)
?cout<<a[i]<<" ";
?cout<<endl;
?cout<<"插入后的数组为:"<<endl;
?for(i=0;i<=N;i++)
?cout<<b[i]<<" ";
?cout<<endl;
?
?
?}***********************************************************************
题目13:取一个整数a从右端开始的4~7位。
?题目14:打印出杨辉三角形(要求打印出10行)
题目15:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
题目16:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n(利用指针函数)
题目17:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
题目18:求0—7所能组成的奇数个数。
?**********************************************************************
#include<iostream.h>
?#include<cmath>
?void main()
?{
?int a,b,c,d,e,f,g,h,sum=0,t,p;
?for(a=1;a<8;a++)
?for(b=0;b<8;b++)
?for(c=0;c<8;c++)
?for(d=0;d<8;d++)
?for(e=0;e<8;e++)
?for(f=0;f<8;f++)
?for(g=0;g<8;g++)
?for(h=0;h<8;h++)
?{
?t=(a-b)*(a-c)*(a-d)*(a-e)*(a-f)*(a-g)*(a-h)*(b-c)*(b-d)*
?(b-e)*(b-f)*(b-g)*(b-h)*(c-d)*(c-e)*(c-f)*(c-g)*(c-h)*(d-e)*
?(d-f)*(d-g)*(d-h)*(e-f)*(e-g)*(e-h)*(f-g)*(f-h)*(g-h);
?p=a*pow(10,6)+b*pow(10,5)+c*pow(10,4)+d*pow(10,3)+e*pow(10,3)+f*pow(10,2)+g*pow(10,1)+h;
?if(t!=0&&(p%2!=0))
?sum++;
?}
?cout<<sum<<endl;
?
?
?
?}
?*********************************************************************
[解决办法]
下面的难度大点的题目,没有答案。
<1>递归:将输入的字符串倒置
例如:输入(a,((b,c),( )),(((d),e),f))
逆转为:((f,(e,(d))),(( ),(c,b)),a)
<2>递归:判断一个以'@'为结束符的字符系列是否是回文
(提示:用两个指针分别指向要访问的两个结点)
<3>递归:f(m,n)=n+1,m=0;f(m,n)=f(m-1,1),m!=0,n=0;f(m,n)=f(m-1,f(m,n-1)),m!=0,n!=0
<4>递归:判断一个算术表达式中的括号(包括小括号,中括号,大括号)是否配对
<5>试编写算法,将一个用循环链表表示的稀疏多项式分解成两个多项式,使这两个多项式中各自
仅含奇次项或偶次项,并要求利用原链表的结点空间来构成这两个链表。
<6>试以循环链表作稀疏多项式的存储结构,编写求其导函数的算法,要求利用原多项式中的结点空间
存放其导函数(多项式),同时释放所有无用(被删)的结点。
<7>假设某个单向循环链表的长度大于1,且表中既无头结点也无头指针。已知s为指向链表总某个结点的
指针,试编写算法在链表中删除指针s所指结点的前驱结点。
<8>递归:在二叉树中求位于先序序列中第k个位置的结点的值。
<9>递归:将二叉树中所有结点的左、右子树相互交换。
<10>递归:求二叉树中元素值为x的结点为根的子树的深度。
<11>递归:复制一个二叉树
<12>编写算法,判断二叉树是否为完全二叉树。
<13>一棵二叉树的茂盛度定义为各层结点的最大值与树的高度的乘积。编写算法,求二叉树的茂盛度。
[解决办法]
2.22.简单应用题
请编写两个函数void sort(int &x, &y)和void sort(int x,int y,int z),实现对2个和3个元素的排序并在屏幕上输出排序结果(数字之间使用跳格)。
注意:部分源程序已存放在文件test2_2.cpp中。
请勿修改主函数main和其他函数中的任何内容,仅在函数的花括号中填写若干语句。
输出结果如下:
3 4
2 3 4
文件test2_2.cpp的内容如下:
#include<iostream.h>
void sort(int &x,int &y)
{
/**1**/
}
void sort(int x,int y,int z)
{
/**2**/
}
void main()
{
int a=4,b=3,c=2;
sort(a,b);
sort(a,b,c);
}
【答案】
(1)void sort(int &x,int &y)
{
int t;
if (x>y)
{
t=x;
x=y;
y=t;
}
cout<<x<<'\t'<<y<<endl;
}
(2)void sort(int x,int y,int z)
{
int t;
if(x>y){ t=x; x=y; y=t;}
if(x>z){ t=x; x=z; z=t;}
if(y>z){ t=y; y=z; z=t;}
cout<<x<<'\t'<<y<<'\t'<<z<<endl;
}
7.2交换两个数
5.22.简单应用题
请编写函数void swap(int *px,int *py) 与void swap(int &px,int &py),实现主程序中变量a和b值的交换。
输出结果如下:
3 2
2 3
注意:部分源程序已存在文件test5_2.cpp中。
请勿修改主函数main和其他函数中的任何内容,仅在函数相应的花括号中填写若干语句。
文件test5_2.cpp的内容如下:
#include<iostream.h>
void swap(int *px,int *py)
{
/***1***/
}
void swap(int &px,int &py)
{
/***2***/
}
void main()
{
int a=2,b=3;
swap(a,b);
cout<<a<<" "<<b<<endl;
swap(&a,&b);
cout<<a<<" "<<b<<endl;
}
【答案】
(1)void swap(int *px,int *py)
{
int temp;
temp=*px;
*px=*py;
*py=temp;
}
(2)void swap(int &px,int &py)
{
int temp;
temp=px;
px=py;
py=temp;
}
}