收藏 分销(赏)

C++编程实例.doc

上传人:二*** 文档编号:4499284 上传时间:2024-09-25 格式:DOC 页数:54 大小:93KB
下载 相关 举报
C++编程实例.doc_第1页
第1页 / 共54页
本文档共54页,全文阅读请下载到手机保存,查看更方便
资源描述
例3.13 求Fibonacci数列前40个数。这个数列有如下特点:第1、2个数为1、1。从第3个数开始,每个数是其前面两个数之和。 #include <iostream> #include <iomanip> using namespace std; int main( ) { long f1,f2; int i; f1=f2=1; for( i=1; i<=20; i++ ) { //设备输出字段宽度为12,每次输出两个数 cout<<setw(12)<<f1<<setw(12)<<f2; //每输出完4个数后换行,使每行输出4个数 if(i%2==0) cout<<endl; f1=f1+f2; //左边的f1代表第3个数,是第1、2个数之和 f2=f2+f1; //左边的f2代表第4个数,是第2、3个数之和 } return 0; } 例3.14 100~200间的素数 #include <iostream> #include <cmath> #include <iomanip> 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 <<setw(5) <<m; n=n+1; } if(n%10==0) cout <<endl; } cout <<endl;return 0; } 例3.15 译密码 #include <iostream> 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<<c; } cout<<endl; return 0; } 习题: 16、统计个数 #include <iostream> using namespace std; int main () {char c; int letters=0,space=0,digit=0,other=0; cout<<"enter one line::"<<endl; while((c=getchar())!='\n') { if (c>='a' && c<='z'||c>='A' && c<='Z') letters++; else if (c==' ') space++; else if (c>='0' && c<='9') digit++; else other++; } cout<<"letter:"<<letters<<", space:"<<space<<", digit:"<<digit<<", other:"<<other<<endl; return 0; } 17、求Sn=a+aa+aaa+……+aa…a(n个a)的值,n由键盘输入。 #include<iostream> 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+...="<<sn<<endl; return 0; } 18、.求1!+2!……+20!、 #include <iostream> 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!="<<s<<endl; return 0; } 19、求“水仙花数”例153=13+33+53 #include <iostream> using namespace std; int main () {int i,j,k,n; cout<<"narcissus numbers are:"<<endl; for (n=100;n<1000;n++) { i=n/100; j=n/10-i*10; k=n%10; if (n == i*i*i + j*j*j + k*k*k) cout<<n<<" "; } cout<<endl; return 0; } 20、找出1000之内所有的完数例如6的因子是1.2.3而6=1+2+3,所以6是完数 #include <iostream> using namespace std; int main() {int m,s,i; for (m=2;m<1000;m++) {s=0; for (i=1;i<m;i++) if ((m%i)==0) s=s+i; if(s==m) {cout<<m<<" is a完数"<<endl; cout<<"its factors are:"; for (i=1;i<m;i++) if (m%i==0) cout<<i<<" "; cout<<endl; } } return 0; } 21、2/1, 3/2, 5/3, 8/5, 13/8, 21/13,…前20项之和 #include <iostream> 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="<<s<<endl; return 0; } 24、输出图形 #include <iostream> using namespace std; int main() {int i,k; for (i=0;i<=3;i++) // 输出上面4行*号 {for (k=0;k<=2*i;k++) cout<<"*"; // 输出*号 cout<<endl; //输出完一行*号后换行 } for (i=0;i<=2;i++) // 输出下面3行*号 {for (k=0;k<=4-2*i;k++) cout<<"*"; // 输出*号 cout<<endl; // 输出完一行*号后换行 } return 0; } 习题: 1、求最大公约数和最小公倍数,用主函数条用两个函数 #include <iostream> 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="<<h<<endl; l=lcd(u,v,h); cout<<"L.C.D="<<l<<endl; 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 <iostream> using namespace std; int main() { int prime(int); /* 函数原型声明 */ int n; cout<<"input an integer:"; cin>>n; if (prime(n)) cout<<n<<" is a prime."<<endl; else cout<<n<<" is not a prime."<<endl; return 0; } int prime(int n) { int flag=1,i; for (i=2;i<n/2 && flag==1;i++) if (n%i==0) flag=0; return(flag); } 4、.求a!+b!+c!的值,用一个函数fac(n)求n!。4 #include <iostream> 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<<a<<"!+"<<b<<"!+"<<c<<"!="<<sum<<endl; 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 <iostream> #include <cmath> 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<<n<<"="<<a<<"+"<<b<<endl;} } } 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 <iostream> 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 "<<s<<endl; return 0; } int f(int n) { if (n==1) return 1; else return (n*n+f(n-1)); } 例5.2 用数组Fibonacci数列 #include <iostream> #include <iomanip> 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<<endl; cout<<setw(8)<<f[i]; } cout<<endl; return 0; } 例5.3用冒泡法对10个数排序 #include <iostream> using namespace std; int main( ) { int a[10]; int i,j,t; cout<<"input 10 numbers :"<<endl; for (i=0;i<10;i++) //输入a[0]~a[9] cin>>a[i]; cout<<endl; 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 :"<<endl; for(i=0;i<10;i++) //输出10个数 cout<<a[i]<<" "; cout<<endl; return 0; }例5.4将二维数组行列元素互换,存到另一个数组中 a=1 2 3 5 6 b=1 4 2 5 3 6 #include <iostream> using namespace std; int main() { int a[2][3]={{1,2,3},{4,5,6}}; int b[3][2],i,j; cout<<"array a:"<<endl; for(i=0;i<=1;i++) { for(j=0;j<=2;j++) { cout<<a[i][j]<< " "; b[j][i]=a[i][j]; } cout<<endl; } cout<<"array b:“<<endl; for(i=0;i<=2;i++) { for(j=0;j<=1;j++) cout<<b[i][j]<< " "; cout<<endl; } return 0; } 例5.5求 3×4 二维数组中最大元素值及其行列号 #include <iostream> 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= "<<max<< ",row="<<row<< ",colum="<<colum<<endl; return 0; } 例5.7用选择法对数组中10个整数按由小到大排序 #include <iostream> using namespace std; int main( ) { void select_sort(int array[],int n); //函数声明 int a[10],i; cout<<"enter the originl array:"<<endl; for(i=0;i<10;i++) //输入10个数 cin>>a[i]; cout<<endl; select_sort( a ,10); //函数调用,数组名作实参 cout<<"the sorted array:"<<endl; for(i=0;i<10;i++) //输出10个已排好序的数 cout<<a[i]<<" "; cout<<endl; return 0; } void select_sort(int array[],int n) //形参array是数组名 { int i,j,k,t; for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n;j++) if(array[j]<array[k]) k=j; t=array[k];array[k]=array[i];array[i]=t; } } 习题: 6、打印出杨辉三角(要求打印出10行) #include <iostream> #include <iomanip> using namespace std; int main() {const int n=11; int i,j,a[n][n]; for (i=1;i<n;i++) {a[i][i]=1; a[i][1]=1; } for (i=3;i<n;i++) for (j=2;j<=i-1;j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; for (i=1;i<n;i++) {for (j=1;j<=i;j++) cout<<setw(5)<<a[i][j]<<" "; cout<<endl; } cout<<endl; return 0; } C语言部分 1. 编程计算1, 1+2, 1+2+3, …, 1+2+3+…+n各项值的积 答案: #include <iostream> 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:"<<mul<<endl; } 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<slen && j<tlen) { 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 <stdio.h> #include <string.h> #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 <iostream> #include <math.h> 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<<n<<"是素数!"<<endl; else cout<<n<<"不是素数!"<<endl; return 0; } 6.编程打印九九乘法表: 1×1=1 1×2=2 2×2=4 1×3=3 2×3=6 3×3=9 …. 答案: #include <iostream> 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 <iostream> 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<<endl; } for (i=3;i>=1;i--) { for (j=1;j<=4-i;j++) cout<<' '; for (j=1;j<=2*i-1;j++) cout<<'*'; cout<<endl; } } 8. 写出下面程序的运行结果: #include <iostream.h> void average(float*p, int n) { int i; float sum=0; for(i=0;i<n;i++,p++) sum+=(*p); cout<<sum/n; } void main() { float score[2][2]={ {1,2},{3,4} }; average(*score, 4); } 答案: 2.5 C++部分 1.定义一个满足如下要求的Date类。 (1)用下面的格式输出日期:日/月/年 (2)可运行在日期上加一天操作; (3)设置日期。 答案: #include <iostream> 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 <iostream> #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<<iHour<<':'<<iMinute<<':'<<iSecond<<endl; } /**********************************/ //mainfunction.cpp #include <iostream> #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个人的 信息(姓名、身份证号和年龄),要求
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服