50道常见++编程题

50道常见++编程题
50道常见++编程题

C++编程题

1. 100~200间的素数

#include

#include

#include

using namespace std;

int main()

{int m,k,i,n=0;

bool prime;

for(m=101;m<=200;m=m+2)

{prime=true;k=int(sqrt(m));

for(i=2;i<=k;i++)

if(m%i==0)

{prime =false;break;}

if(prime)

{

cout <

if(n%10==0)

cout <

}

cout <

}

例3.15

译密码

#include

using namespace std;

int main()

{char c;

while ((c=getchar())!='\n')

{if((c>='a'&&c<='z')|| (c>='A'&&c<='Z'))

{c=c+4;

if(c>'Z'&&c<='Z'+4||c>'z')c=c-26;

}

cout<

}

cout<

return 0;

}

17、求Sn=a+aa+aaa+……+aa…a(n个a)的值,n由键盘输入。#include

using namespace std;

int main ()

{int a,n,i=1,sn=0,tn=0;

cout<<"a,n=:";

cin>>a>>n;

while (i<=n)

{tn=tn+a; //赋值后的tn为i个a组成数的值

sn=sn+tn; //赋值后的sn为多项式前i项之和

a=a*10;

++i;

}

cout<<"a+aa+aaa+...="<

return 0;

}

18、.求1!+2!……+20!、

#include

using namespace std;

int main ()

{float s=0,t=1;

int n;

for (n=1;n<=20;n++)

{

t=t*n; // 求n!

s=s+t; // 将各项累加

}

cout<<"1!+2!+...+20!="<

return 0;

}

20、找出1000之内所有的完数例如6的因子是1.2.3而6=1+2+3,所以6是完数#include

using namespace std;

int main()

{int m,s,i;

for (m=2;m<1000;m++)

{s=0;

for (i=1;i

if ((m%i)==0) s=s+i;

if(s==m)

{cout<

cout<<"its factors are:";

for (i=1;i

if (m%i==0) cout<

cout<

}

}

return 0;

}

21、2/1, 3/2, 5/3, 8/5, 13/8, 21/13,…前20项之和

#include

using namespace std;

int main()

{int i,t,n=20;

double a=2,b=1,s=0;

for (i=1;i<=n;i++)

{s=s+a/b;

t=a;

a=a+b; // 将前一项分子与分母之和作为下一项的分子b=t; // 将前一项的分子作为下一项的分母

}

cout<<"sum="<

return 0;

}

24、输出图形

#include

using namespace std;

int main()

{int i,k;

for (i=0;i<=3;i++) // 输出上面4行*号

{for (k=0;k<=2*i;k++)

cout<<"*"; // 输出*号

cout<

}

for (i=0;i<=2;i++) // 输出下面3行*号

{for (k=0;k<=4-2*i;k++)

cout<<"*"; // 输出*号

cout<

}

return 0;

}

习题:

1、求最大公约数和最小公倍数,用主函数条用两个函数

#include

using namespace std;

int main()

{int hcf(int,int);

int lcd(int,int,int);

int u,v,h,l;

cin>>u>>v;

h=hcf(u,v);

cout<<"H.C.F="<

l=lcd(u,v,h);

cout<<"L.C.D="<

return 0;

}

int hcf(int u,int v)

{int t,r;

if (v>u)

{t=u;u=v;v=t;}

while ((r=u%v)!=0)

{u=v;

v=r;}

return(v);

}

int lcd(int u,int v,int h)

{return(u*v/h);

}

3、判别素数的函数

#include

using namespace std;

int main()

{int prime(int); /* 函数原型声明*/ int n;

cout<<"input an integer:";

cin>>n;

if (prime(n))

cout<

else

cout<

return 0;

}

int prime(int n)

{int flag=1,i;

for (i=2;i

if (n%i==0)

flag=0;

return(flag);

}

4、.求a!+b!+c!的值,用一个函数fac(n)求n!。4 #include

using namespace std;

int main()

{int fac(int);

int a,b,c,sum=0;

cout<<"enter a,b,c:";

cin>>a>>b>>c;

sum=sum+fac(a)+fac(b)+fac(c);

cout<

return 0;

}

int fac(int n)

{int f=1;

for (int i=1;i<=n;i++)

f=f*i;

return f;

}

7、.验证哥德巴赫猜想:一个不小于6的偶数可以表示为两个素数之和。7 #include

#include

using namespace std;

int main()

{void godbaha(int);

int n;

cout<<"input n:";

cin>>n;

godbaha(n);

return 0;

}

void godbaha(int n)

{int prime(int);

int a,b;

for(a=3;a<=n/2;a=a+2)

{if(prime(a))

{b=n-a;

if (prime(b))

cout<

}

}

int prime(int m)

{int i,k=sqrt(m);

for(i=2;i<=k;i++)

if(m%i==0) break;

if (i>k) return 1;

else return 0;

}

11、用递归方法求f(n)=12+22+……+n2

#include

using namespace std;

int main()

{int f(int);

int n,s;

cout<<"input the number n:";

cin>>n;

s=f(n);

cout<<"The result is "<

return 0;

}

int f(int n)

{

if (n==1)

return 1;

else

return (n*n+f(n-1));

}

例5.2 用数组Fibonacci数列

#include

#include

using namespace std;

int main ()

{int i;

int f[20]={1,1};

for(i=2;i<20;i++)

f[i]=f[i-2]+f[i-1];

for(i=0;i<20;i++)

{if(i%5==0)cout<

cout<

}

cout<

return 0;

}

例5.3用冒泡法对10个数排序

#include

using namespace std;

int main( )

{

int a[10];

int i,j,t;

cout<<"input 10 numbers :"<

for (i=0;i<10;i++) //输入a[0]~a[9]

cin>>a[i];

cout<

for (j=0;j<9;j++) //共进行9趟比较

for(i=0;i<9-j;i++) //在每趟中要进行(10-j)次两两比较if (a[i]>a[i+1]) //如果前面的数大于后面的数{t=a[i];a[i]=a[i+1];a[i+1]=t;} //交换两个数的位置,使小数上浮

cout<<"the sorted numbers :"<

for(i=0;i<10;i++) //输出10个数

cout<

cout<

return 0;

}例5.4将二维数组行列元素互换,存到另一个数组中

a=1 2 3

5 6 b=1 4

2 5

3 6

#include

using namespace std;

int main()

{ int a[2][3]={{1,2,3},{4,5,6}};

int b[3][2],i,j;

cout<<"array a:"<

for(i=0;i<=1;i++)

{ for(j=0;j<=2;j++)

{ cout<

b[j][i]=a[i][j];

}

cout<

}

cout<<"array b:“<

for(i=0;i<=2;i++)

{ for(j=0;j<=1;j++)

cout<

cout<

}

return 0;

}

例5.5求3×4 二维数组中最大元素值及其行列号

#include

using namespace std;

int main()

{

int i,j,row=0,colum=0,max;

int a[3][4]={{5,12,23,56},{19,28,37,46},{-12,-34,6,8}};

max=a[0][0]; //使max开始时取a[0][0]的值

for(i=0;i<=2;i++) //从第0行~第2行

for(j=0;j<=3;j++) //从第0列~第3列

if(a[i][j]>max) //如果某元素大于max

{ max=a[i][j]; //max将取该元素的值

row=i; //记下该元素的行号i

colum=j; //记下该元素的列号j

}

cout<<"max= "<

for(i=0;i<10;i++) //输入10个数cin>>a[i];

cout<

select_sort( a ,10); //函数调用,数组名作实参cout<<"the sorted array:"<

for(i=0;i<10;i++) //输出10个已排好序的数cout<

cout<

return 0;

}

void select_sort(int array[],int n) //形参array是数组名

{int i,j,k,t;

for(i=0;i

{k=i;

for(j=i+1;j

if(array[j]

t=array[k];array[k]=array[i];array[i]=t;

}

}

习题:

6、打印出杨辉三角(要求打印出10行)

#include

#include

using namespace std;

int main()

{const int n=11;

int i,j,a[n][n];

for (i=1;i

{a[i][i]=1;

a[i][1]=1;

}

for (i=3;i

for (j=2;j<=i-1;j++)

a[i][j]=a[i-1][j-1]+a[i-1][j];

for (i=1;i

{for (j=1;j<=i;j++)

cout<

cout<

}

cout<

return 0;

}

C语言部分

1. 编程计算1, 1+2, 1+2+3, …, 1+2+3+…+n各项值的积

答案:

#include

using namespace std;

void main()

{

int i,n,mul=1,sum=0;

cout<<"Please input n:";

cin>>n;

for (i=1;i<=n;i++)

{

sum+=i;

mul*=sum;

}

cout<<"The multiple is:"<

}

2. 编写重载函数Max可分别求取两个整数,三个字符,两个浮点型数,三个双精度数的最大值。

答案:

int max(int i,int j)

{

if (i>j)

return i;

else

return j;

}

char max(char c1,char c2,char c3)

{

char ch;

if (c1>c2)

ch=c1;

else

ch=c2;

if (c3>ch)

ch=c3;

return ch;

}

float max(float x,float y)

{

if (x>y)

return x;

else

return y;

}

double max(double x1,double x2,double x3)

{

double y;

if (x1>x2)

y=x1;

else

y=x2;

if (x3>y)

y=x3;

return y;

}

3.请编写一个函数int find(char s[],char t[]),该函数在字符串s中查找字符串t,如果找到,则返回字符串t在字符串s中的位置(整数值);否则返回-1。注意:用数组方式及两重循环来实现该函数。

答案:

int find(char s[],char t[])

{

int i,j,slen,tlen;

slen=strlen(s);

tlen=strlen(t);

i=0;j=0;

while (i

{

if (s[i]==t[j])

{

i++;

j++;

}

else

{

i=i-j+1;

j=0;

}

}

if (j>=tlen)

return i-tlen+1;

else

return -1;

}

4.写一程序,将字符串a的所有字符传送到字符串b中,要求每传送3个字符后放一个空格,例如,字符串a为”abcdefg”,则b为”abc deg g”。

答案:

#include

#include

#define N 40

void fun(char s[],char t[])

{

int i=0,j=0;

while(s[i])

{

t[j]=s[i];

i++;

j++;

if ((i)%3==0)

{

t[j]=' ';

j++;

}

}

t[j]='\0';

}

main()

{

char a[N],b[N];

printf("请输入原始字符串a: ");

gets(a);

fun(a,b);

printf("加入空格后的字符串b: "); puts(b);

}

5. 编程判断一个数是否为素数。

答案:

#include

#include

using namespace std;

int prime(int m)

{

int i,flag=1;

for (i=2;i<=int(sqrt(m));i++)

if (m%i==0)

{ flag=0; break; }

return flag;

}

int main(void)

{

int n;

cout<<"请输入一个整数:";

cin>>n;

if (prime(n))

cout<

else

cout<

return 0;

}

6.编程打印九九乘法表:

1×1=1

1×2=2 2×2=4

1×3=3 2×3=6 3×3=9

….

答案:

#include

using namespace std;

void main()

{

int i,j;

for (i=1;i<=9;i++)

{

for (j=1;j<=i;j++)

printf("%1d*%1d=%2d ",j,i,i*j);

printf("\n");

}

}

7.请编写一个程序,程序的功能是打印以下图案。

*

***

*****

*******

*****

***

*

答案:

#include

using namespace std;

void main()

{

int i,j;

for (i=1;i<=4;i++)

{

for (j=1;j<=4-i;j++)

cout<<' ';

for (j=1;j<=2*i-1;j++)

cout<<'*';

cout<

}

for (i=3;i>=1;i--)

{

for (j=1;j<=4-i;j++)

cout<<' ';

for (j=1;j<=2*i-1;j++)

cout<<'*';

cout<

}

}

8. 写出下面程序的运行结果:

#include

void average(float*p, int n)

{

int i;

float sum=0;

for(i=0;i

sum+=(*p);

cout<

}

void main()

{

float score[2][2]={ {1,2},{3,4} };

average(*score, 4);

}

答案:

2.5

C++部分

1.定义一个满足如下要求的Date类。(1)用下面的格式输出日期:日/月/年(2)可运行在日期上加一天操作;(3)设置日期。

答案:

#include

using namespace std;

extern int i = 0;

class Date

{

public:

set(int y,int m, int d);

add();

print();

private:

int year;

int month;

int day;

};

Date::set(int y, int m, int d)

{

year = y;

month = m;

day = d;

}

Date::add()

{

switch(month)

{

case 1:

case 3:

case 5:

case 7:

case 8:

case 10: if(day < 31)

day += 1;

else if(day == 31)

{

day = 1;

month += 1;

}

break;

case 12: if(day < 31)

day += 1;

else if(day == 31)

{

day = 1;

month = 1;

year += 1;

}

break;

case 4:

case 6:

case 9:

case 11: if(day < 30)

day += 1;

else if(day == 30)

{

day = 1;

month += 1;

}

break;

case 2: if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {

if(day < 29)

day += 1;

else if(day == 29)

{

day = 1;

month+= 1;

}

}

else

{

if(day < 28)

day += 1;

else if(day == 28)

{

day = 1;

month += 1;

}

}

break;

}

}

Date::print()

{

cout << day << "/" << month << "/" << year << endl;

}

void main()

{

Date d1;

int year;

int month;

int day;

cout << "请输入年月日:";

cin >> year >> month >> day;

d1.set(year, month, day);

d1.print();

d1.add();

cout << "下一天是:" ;

d1.print();

}

2.定义一个时间类Time,能提供和设置由时、分、秒组成的时间,并编出应用程序,定义时间对象,设置时间,输出该对象提供的时间。

答案:

//Time.h

class Time

{

public:

Time();

~Time();

bool SetTime(int h,int m,int s);

void GetTime(int &h,int &m,int &s);

void Print();

private:

int iHour,iMinute,iSecond;

};

/***********************************/

//Time.cpp

#include

#include "Time.h"

using namespace std;

Time::Time()

{

iHour=1;iMinute=1;iSecond=1;

}

Time::~Time(){}

bool Time::SetTime(int h,int m,int s)

{

if((h<0)||(h>23)) return false;

if((m<0)||(m>59)) return false;

if((s<0)||(s>59)) return false;

iHour =h;iMinute= m;iSecond =s;return true;

}

void Time::GetTime(int &h,int &m,int &s)

{

h=iHour;m=iMinute;s=iSecond;

}

void Time::Print()

{

cout<

/**********************************/

//mainfunction.cpp

#include

#include "Time.h"

using namespace std;

void main()

{

Time t;

t.SetTime(23,44,59);

t.Print();

}

3. 编写一个矩形的类,要求类中具有长和宽2个数据成员,具有构造函数、计算矩形的面积即及周长这3个成员函数。

答案:

class rectangle

{

float width;

float heigth;

public:

rectangle(float w, float h)

{width=w;heigth=h;}

float area(){return width*heigth;}

float circulm(){return 2*(width+heigth);}

};

4. 设计一个人的类,要求包含姓名、身份证号、年龄、以及人的总数和所有人的平均年龄这5个数据成员,然后编写一个测试程序,输入n个人的信息(姓名、身份证号和年龄),要求输出这些人的信息和平均年龄。

答案:

#include

#include

using namespace std;

const int n=3;

class Person

{

private:

char name[20];

char id[18];

int age;

public:

static int count; //人数

static float aveage;

Person(void){}

Person(const char* names,char *ids,int ages)

{

strcpy(name,names);//初始化姓名

strcpy(id,ids);

age = ages;//初始化年龄

aveage+=age;

count++;

}

void display()

{

cout<<"姓名:"<

cout<<"身份证:"<

cout<<"年龄:"<

}

friend void ModifyAveage();//修改平均年龄的友元函数

};

int Person::count = 0;

float Person::aveage=0;

void ModifyAveage()

{

Person::aveage=Person::aveage/Person::count;

}

void main()

{

int ages,i;

char namestr[20],idstr[18];

Person per[n];

for (i=0;i

{

cout<<"请输入姓名:";

cin>>namestr;

cout<<"请输入身份证号码:";

cin>>idstr;

cout<<"请输入的年龄:";

cin>>ages;

Person temp(namestr,idstr,ages);

per[i]=temp;

}

ModifyAveage();

for (i=0;i

per[i].display();

cout<<"人的数量:"<

cout<<"平均年龄:"<

}

5. 编写一个圆的类,再使用派生类的机制,编写一个圆柱的类,求每个类都包含具有初始化功能的构造函数和相关数据的输出函数。

答案:

#include

#define pi 3.1416

using namespace std;

class circle

{

protected:

float r;

float area;

public:

circle() {r=0;}

circle(float radius){r=radius;}

void print()

{

area=r*r*pi;

cout<<"r="<

相关主题
相关文档
最新文档