C++典型程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.求一元二次方程ax2+bx+c=0的根。

例3.5
#include<iostream>
using namespace std;
#include<cmath>//或#include<math.h>
void main(){
float a,b,c,d; cin>>a>>b>>c; d=b*b-4*a*c;
if(d>0){
d=sqrt(d);
cout<<"x1="<<(-b+d)/2/a<<endl;
cout<<"x2="<<(-b-d)/2/a<<endl;
}
else if(!d)cout<<"x1=x2="<<-b/2/a<<endl;
else{
d=sqrt(-d);
cout<<"x1="<<-b/2/a<<'+'<<d/2/(float)a<<'i'<<endl;
cout<<"x2="<<-b/2/a<<'-'<<d/2/(float)a<<'i'<<endl;
}
}
习题4-2
#include<iostream>
using namespace std;
#include<cmath>//或#include<math.h>
void Root1(double a,double b,double d){
double p=-b/2/a,q=sqrt(d)/2/a;
cout<<"x1="<<p+q<<"\nx2="<<p-q<<endl;
}
void Root2(double a,double b){
cout<<"x1=x2="<<-b/2/a<<endl;
}
void Root3(double a,double b,double d){
double p=-b/2/a,q=sqrt(-d)/2/fabs(a);
cout<<"x1="<<p<<'+'<<q<<'i'<<endl;
cout<<"x2="<<p<<'-'<<q<<'i'<<endl;
}
void main(){
double a,b,c,d; cin>>a>>b>>c; d=b*b-4*a*c;
if(d>0)Root1(a,b,d);
else if(!d)Root2(a,b);else Root3(a,b,d);
}
2.求三角形面积。

例3.6
#include<iostream>
using namespace std;
#include<cmath>//或#include<math.h>
void main(){
double a,b,c,s; cin>>a>>b>>c; s=(a+b+c)/2;
cout<<sqrt(s*(s-a)*(s-b)*(s-c))<<endl;
}
3.分段函数。

习题3-10
#include<iostream>
using namespace std;
void main(){
double x,y; cout<<"x="; cin>>x;
if(x<1)y=x;else if(x<10)y=2*x-1;else y=3*x-11;
//或y=x<1?x:x<10?2*x-1:3*x-11
cout<<"y="<<y<<endl;
}
4.转换字母的大小写。

例3.7
#include<iostream>
using namespace std;
void main(){
char ch; cin>>ch;
if('A'<=ch&&ch<='Z')ch+=32;
//小写转大写:if('a'<=ch&&ch<='z')ch-=32;
cout<<ch<<endl;
}
5.判断闰年。

bool f(int y){
return !(y%4||y>1582&&y%100==0&&y%400);
//return y%400==0||y%4==0&&y%100;
}
6.打印字符图形。

一般程序格式为:
for(i=1;i<=行数;i++){
for(j=1;j<=第i 行前置空格数;j++)cout<<' ';
for(j=1;j<=第i 行字符数;j++)输出所用字符
cout<<endl;//结束第i 行
}
7.已知项数和通项的累加。

一般程序格式为:
和的类型 S=0;
for(int i=1;i<=项数;i++)S+=第i 项;
例 计算∑=n
i i 11 #include<iostream>
using namespace std;
void main(){
int i,n; double s=0; cin>>n;
for(i=1;i<=n;i++)s+=1./i;
cout<<s<<endl;
8.已知项数和递推式的累加。

一般程序格式为:
和的类型 s=0,t=初始项;
for(int i=1;i<=项数;i++)s+=t,推下项t; 或
和的类型 s=0,t=前延项;
for(int i=1;i<=项数;i++)推当前项t,s+=t;
习题3-18 求1!+2!+3!+ (20)
#include<iostream>
using namespace std;
void main(){
double s=0,t=1; int i;
for(i=1;i<=20;i++)s+=t,t*=i+1;//或t*=i,s+=t cout<<"s="<<s<<endl;
}
例3.12 用下述公式的50项计算π的近似值。

∑=
-
--
=
50
1
1
1
2
1
)1
(
4
i n
i
π
#include<iostream>
using namespace std;
void main(){
int i; double s=0,f=1;
for(i=1;i<=50;i++)s+=f/(2*i-1),f=-f;
//或for(i=1;i<100;i+=2)s+=f/i,f=-f;
//或for(i=1;i<100;i+=4)s+=1./i;for(i=3;i<100;i+=4)s-=1./i;
cout<<4*s<<endl;
}
9.计算n!。

⑴递推算法
#include<iostream>
using namespace std;
void main(){
unsigned long t=1; int n; cin>>n;
for(i=2;i<=n;i++)t*=n;
cout<<n<<"!="<<t<<endl;
}
⑵递归算法
#include<iostream>
using namespace std;
unsigned long f(unsigned long n){
if(n<2)return 1;
return n*f(n-1);
//或return n<=1?1:n*f(n-1)
}
void main(){
int n; cin>>n;
cout<<n<<"!="<<f(n)<<endl;
}
10.穷举法(水仙花数、不定方程组的整数解)。

//习题3-19水仙花数.cpp
#include<iostream.h>
void main(){
short x,a,b,c;
for(x=100;x<=999;x++){
a=x/100,b=x/10%10,c=x%10;
if(x==a*a*a+b*b*b+c*c*c)cout<<x<<endl;
}
cout<<endl;
}
11.Fibonacci数列(单项递推、双项递推、递归、数组、累加)。

⑴单项递推
#include<iomanip.h>
void main(){
long i,f1=1,f2=1,f3;
cout<<setw(16)<<f1<<setw(16)<<f2;
for(i=3;i<=40;i++){
f3=f1+f2; f1=f2; f2=f1;
cout<<setw(16)<<f3;
}
}
⑵双项递推
#include<iomanip.h>
void main(){
long i,f1=1,f2=1;
for(i=1;i<=40;i++){
cout<<setw(16)<<f1<<setw(16)<<f2;
f1+=f2; f2+=f1;
}
}
⑶递归
long f(int n){
if(n<2)return 1;
return f(n-1)+f(n-2);
}
⑷数组
#include<iomanip.h>
void main(){
long i,f[40]={1,1};
cout<<setw(16)<<f[0]<<setw(16)<<f[1];
for(i=2;i<40;i++){
f[i]=f[i-1]+f[i-2]; cout<<setw(16)<<f[i];
}
}
12.最大公约数。

⑴穷举
#include<iostream.h>
void main(){
long m,n,d; cin>>m>>n;
if(m>n)d=n;else d=m;
while(m%d||n%d)d--;
cout<<d<<endl;
}
⑵辗转相除
#include<iostream.h>
void main(){
long m,n,d; cin>>m>>n;
while(n)d=m%n,m=n,n=d;
cout<<m<<endl;
}
⑶递归
long f(long m,long n){
if(n)return f(n,m%n);
return m;
}
13.递归。

14.全部变量、局部变量、静态局部变量。

⑴局部变量屏蔽同名全部变量
#include<iostream>
using namespace std;
int a=1;
void main(){
cout<<a<<endl;
int a=2; cout<<a<<endl;
{int a=3; cout<<a<<endl;}
cout<<a<<endl;
}
⑵静态局部变量只初始化一次
例4.12
#include<iostream>
using namespace std;
void f(){
static int b;
cout<<"b="<<++b<<endl;
}
void main(){
f(); f();
}
15.素数。

例3.14输出100~200中的全部素数。

void main(){
int m,i;
for(m=100;m<=200;m++){
for(i=sqrt(m+.5);i>=2&&m%i;i--);
if(i<2)cout<<setw(8)<<m;
}
cout<<endl;
}
习题4-3
bool f(long n){
for(int i=sqrt(n+.5);i>1;i--)
if(n%i==0)return 0;
return 1;
}
16.例5-3冒泡排序
#include<iostream>
using namespace std;
void main(){
int a[10],i,j,t;
cout<<"请输入10个数:\n";
for(i=0;i<10;i++)cin>>a[i];//输入数组
for(i=0;i<9;i++)//i可看作是轮次
for(j=0;j<9-i;j++)//一轮冒泡a[0]~a[9-i] if(a[j]>a[j+1])//遇到逆序
t=a[j],a[j]=a[j+1],a[j+1]=t;//交换for(i=0;i<10;i++)cout<<a[i]<<'\t';//输出数组}
冒泡排序函数:
void f(int a[],int n){
int t;
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
if(a[j]>a[j+1])
t=a[j],a[j]=a[j+1],a[j+1]=t;
}
17.选择排序。

例5-7选择排序
#include<iostream>
using namespace std;
void main(){
int a[10],i,j,k,m;
cout<<"请输入10个整数:\n";
for(i=0;i<10;i++)cin>>a[i];
for(i=0;i<9;i++){
k=i;//初始擂主
for(j=i+1;j<10;j++)//擂台赛
if(a[j]<a[k])k=j;//换擂主
m=a[k]; a[k]=a[i]; a[i]=m;//a[i]到位}
for(i=0;i<10;i++)cout<<a[i]<<' ';
}
选择排序:
void f(int a[],int n){
for(i=0;i<n-1;i++){
k=i;//初始擂主
for(j=i+1;j<n;j++)//擂台赛
if(a[j]<a[k])k=j;//换擂主
m=a[k]; a[k]=a[i]; a[i]=m;//a[i]到位}
for(i=0;i<10;i++)cout<<a[i]<<' ';
}
18.逆置数组。

//习题5-5逆置数组.cpp
#include<iostream.h>
#define n 5
void main(){
double a[n+1];//a[0]用于交换
cout<<"请输入"<<n<<"个数:\n";
for(int i=1;i<=n;i++)
cin>>a[i];
cout<<"逆置前:\n";
for(i=1;i<=n;i++)
cout<<a[i]<<' ';
for(i=n/2;i;i--)
*a=a[i],a[i]=a[n-i+1],a[n-i+1]=*a;
cout<<"\n逆置后:\n";
for(i=1;i<=n;i++)
cout<<a[i]<<' ';
cout<<endl;
}
19.杨辉三角。

//习题5-6打印杨辉三角形.cpp
#include<iomanip.h>
#define n 10
/*
void main(){
int i,j,a[n][n];
for(i=0;i<n;i++)
for(a[i][0]=a[i][i]=1,j=1;j<i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=0;i<n;i++){
for(j=0;j<=i;j++)cout<<setw(4)<<a[i][j];
cout<<endl;
}
}
*/
void main(){
int i,j,a;
for(i=0;i<n;i++){
cout<<setw(4)<<(a=1);
for(a=1,j=1;j<=i;j++)
cout<<setw(4)<<(a=a*(i-j+1)/j);
cout<<endl;
}
}
20.函数参数的传递。

#include<iostream>
using namespace std;
void f(int a,int b){
int c;
c=a; a=b; b=c;
}
void g(int *p,int *q){
int *r;
r=p; p=q; q=r;
}
void h(int *p,int *q){
int c;
c=*p; *p=*q; *q=c;
}
void main(){
int a=1,b=2;
f(a,b); cout<<a<<','<<b<<endl;
g(&a,&b); cout<<a<<','<<b<<endl;
h(&a,&b); cout<<a<<','<<b<<endl;
}。

相关文档
最新文档