C++程序设计案例教程编程练习第一章至第四章

                                ***第一章 ***

编程:由键盘输入三个数,求出最大数和最小数并显示输出。

#include <iostream>
using namespace std;
int max(int a,int b)
{
    return a>b?a:b;
}
int min(int a,int b)
{
    return a>b?b:a;
}
int main()
{
    int a,b,c,Max,Min;
    cin>>a>>b>>c;
    Max=max(max(a,b),c);
    cout<<"max="<<Max<<endl;
    Min=min(min(a,b),c);
    cout<<"min="<<Min<<endl;
    return 0;
}

在这里插入图片描述

                                 ***第二章*** 

1.键盘输入五个double型数,输出它们的和以及平均值(n个double 型数)

#include <iostream>
#include <cstdio>
using namespace std;
double sum,a[100000000],ave;
int n;
void addsum_ave(double a[],int n);


int main()
{
    while(cin>>n&&n)
    {
        for(int i=0;i<n;i++)
            cin>>a[i];
        addsum_ave(a,n);
    }
    return 0;
}

void addsum_ave(double a[],int n)
{
    for(int i=0;i<n;i++)
        sum+=a[i];
    printf("sum=%.5f\n",sum);
    ave=sum/n;
    printf("ave=%.5f\n",ave);
}

在这里插入图片描述
2.计算(a+b)*(a+b)与 a * a+2 * a * b+b * 是否相等,相等输出"yes"反之输出“no”

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    int a,b;
    cin>>a>>b;
    if(pow((a+b),2)==(pow(a,2)+2*a*b+pow(b,2)))
       cout<<"Yes";
    else
        cout<<"No";
    cout<<endl;
    return 0;
}

在这里插入图片描述
3.求100以内所有的奇数和

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    int sum=0;
    for(int i=1;i<=100;i++)
        if(i&1)
            sum+=i;
    cout<<"sum="<<sum<<endl;
    return 0;
}

在这里插入图片描述
4.求最大公约数和最小公倍数

#include <iostream>
#include <cmath>
using namespace std;

int a,b,gcd,times;
int Max_gcd(int a,int b)
{
    if(b==0)
        return a;
    else
        return Max_gcd(b,a%b);
}

int Min_times(int a,int b)
{
    return (a*b)/(Max_gcd(a,b));
}
int main()
{
    cin>>a>>b;
    gcd=Max_gcd(a,b);
    cout<<"Max_gcd="<<gcd<<endl;
    times=Min_times(a,b);
    cout<<"Min_times="<<times<<endl;
    return 0;
}

在这里插入图片描述
5.求序列和,假定n=20. S=1+(1+2)+…………+(1+2+…………+n)
键盘输入n,求S=1+(1+2)+………………+(1+2+…………+n)

#include <iostream>
#include <cmath>
using namespace std;
long a[1000000],fib[10000000];
int main()
{
    int i,n;
    long sum=0;
    while(cin>>n&&n)
    {
        a[0]=0;
        for(i=1;i<=n;i++)
        {
            sum+=i;
            a[i]=sum;
            if(i==n)
            {
                fib[0]=0;fib[1]=1;
                for(int i=1;i<=n;i++)
                {
                    fib[i]=a[i]+fib[i-1];
                    sum=a[i]+fib[i-1];
                }
                cout<<"sum="<<sum<<endl;
                sum=0;
            }
        }
    }
    return 0;
}

在这里插入图片描述
6.求分数序列和 2/1+3/2+……………… 前15项和
键盘输入n,求前n项和 2/1+3/2+5/3+8/5………………前n项和

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;

int main()
{
    double a,b,sum=0.0,temp=0.0;
    int n;
    while(cin>>n&&n)
    {
        a=1.0;b=2.0;
        for(int i=0;i<n;i++)
        {
            sum+=b/a;
            temp=b;
            b=b+a;
            a=temp;

        }
        printf("%.2f\n",sum);
        sum=0;
    }
    return 0;
}

在这里插入图片描述
6 求e的近似值
e=1+1/1!+1/2!+………………+1/n!

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;

int main()
{
    int n;
    double e,k=0.0;
    while(cin>>n&&n)
    {
        double t=1.0;
        for(int i=1.0;i<=n;i++)
        {
            t*=i;
            k+=(1.0)/t;
        }
        e=k+1.0;
        printf("%.15f\n",e);
        e=0.0;k=0.0;
    }
    return 0;
}

在这里插入图片描述

                                    ***第三章***

1.任意输入10( n )个数于数组中,求出数组的最大数max及最小数 min

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
int arr[10000000];

void max_min(int arr[],int n)
{
    int i,j,k;
    for(i=1;i<=n;i++)
    {
        k=i;
        for(j=i+1;j<=n;j++)
        {
            if(arr[i]>arr[j]) k=j;
            if(k!=j)
            {
                swap(arr[i],arr[j]);
            }
        }
    }
    cout<<"min="<<arr[1]<<endl;
    cout<<"max="<<arr[n]<<endl;
}
int main()
{
    int n,i;
    while(cin>>n&&n)
    {
        for(i=1;i<=n;i++)
            cin>>arr[i];
        max_min(arr,n);
    }
    return 0;
}

在这里插入图片描述
2.任意输入15个整数存放于数组A [ 3 ] [ 5 ] 中,再输入20个整数存放于数组B [ 5 ] [ 4 ]中,用二维数组A,B表示矩阵A,B,计算矩阵A、B的乘积并输出结果。

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;

int a[5][5],b[5][5];
int result[3][4];
int main()
{
    int a[5][5]={0},b[5][5]={0};
    int result[3][4]={0};

    int i,j;
    cout<<"Please enter a a[3][5]:"<<endl;
    for(i=0;i<3;i++)
        for(j=0;j<5;j++)
            cin>>a[i][j];
    cout<<"Please enter a b[5][4]:"<<endl;
    for(i=0;i<5;i++)
        for(j=0;j<4;j++)
            cin>>b[i][j];

    cout<<"Please a[3][4] times b[3][4]:"<<endl;
    for(i=0;i<3;i++)
        for(j=0;j<4;j++)
        {
           /*
            result[i][j]=0;
            for(k=0;k<5;k++)
                result[i][j]+=a[j][k]*b[k][j];
                */
            result[i][j]=a[i][j]*b[i][j];
        }

    for(i=0;i<3;i++)
        for(j=0;j<4;j++)
        {
            cout<<result[i][j]<<" ";
            if(j==3)
                cout<<endl;
        }
    return 0;
}

在这里插入图片描述

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;

int a[5][5],b[5][5];
int result[3][4];
int main()
{
    int a[5][5]={0},b[5][5]={0};
    int result[3][4]={0};

    int i,j,k;
    cout<<"Please enter a a[3][5]:"<<endl;
    for(i=0;i<3;i++)
        for(j=0;j<5;j++)
            cin>>a[i][j];
    cout<<"Please enter a b[5][4]:"<<endl;
    for(i=0;i<5;i++)
        for(j=0;j<4;j++)
            cin>>b[i][j];

    cout<<"Please a[3][4] times b[3][4]:"<<endl;
    for(i=0;i<3;i++)
        for(j=0;j<4;j++)
        {

            result[i][j]=0;
            for(k=0;k<5;k++)
                result[i][j]+=a[j][k]*b[k][j];

//            result[i][j]=a[i][j]*b[i][j];
        }

    for(i=0;i<3;i++)
        for(j=0;j<4;j++)
        {
            cout<<result[i][j]<<" ";
            if(j==3)
                cout<<endl;
        }
    return 0;
}

在这里插入图片描述
3.编写函数alter(x,y),它的x值变为x*y,y值变为x+y,x与y是float型。

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;

void alter(float x,float y)
{
    float temp;
    temp=y;
    y=x+temp;
    x=x*temp;
    cout<<"x="<<x<<" "<<"y="<<y<<endl;
}
int main()
{
    float x,y;
    while(~scanf("%f %f",&x,&y))
    {
        alter(x,y);
    }
    return 0;
}

在这里插入图片描述

                                        ***第四章***

1.编写一个程序,将用户输入的一个十进制转换为二进制数、八进制数、十六进制数。
1>十进制转换为n进制

#include <iostream>
#include <string>
#include <cmath>
using namespace std;
int main()
{
    int N,R;
    while(cin>>N>>R&&N&&R)
    {
        if(N<0) cout<<"-";
        string s;
        N=abs(N);
        while(N>0)
        {
            int a=N%R;
            if(a>=10)
                s.push_back(a-10+'A');    //应用stl,s尾部插入
            else
                s.push_back(a+'0');
            N/=R;                        //更新
        }
        for(int i=s.size()-1;i>=0;i--)   //size(),统计s
            cout<<s[i];
        cout<<endl;
    }
    return 0;
}

在这里插入图片描述

2.判断n个数字是否由奇数组成

全是奇数组成输出 “Yes" ,否则输出 “No"

#include <iostream>
#include <string>
#include <cmath>
bool flag;

using namespace std;
int main()
{
    string s="";
    int n;
    while(cin>>n&&n)
    {
        for(int i=0;i<n;i++)
            cin>>s[i];
        for(int i=0;i<n;i++)
        {
            if(s[i]&1)
                flag=true;
            else
                {
                    flag=false;
                    break;
                }
        }
        if(flag)
            cout<<"Yes"<<endl;
        else
            cout<<"No"<<endl;
    }
    return 0;
}

在这里插入图片描述
3.编程求n^1 +n2+………………+n20的值,n=1,2,3,4,5;

#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;

int main()
{
    int n;
    long long sum=0;
    while(cin>>n&&n)
    {
        if(n>5) break;
        for(int i=1;i<=20;i++)
            sum+=pow(n,i);
        cout<<sum<<endl;
    }
    return 0;
}

在这里插入图片描述
4.输入一个自然数,将改自然数的每一位数字按反序输出。

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

int main()
{
    string s,t="";
    while(cin>>s)
    {
        for(int i=s.size()-1;i>=0;i--)
        {
            t+=s[i];
        }
        cout<<t<<endl;
        t="";
    }
    return 0;
}

在这里插入图片描述

#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int main()
{
    int n;
    while(cin>>n&&n)
    {
        while(n>0)
        {
            int t;
            t=n%10;
            cout<<t;
            n/=10;
        }
        cout<<endl;
    }
    return 0;
}

在这里插入图片描述
5.输入5 ( n )个字符串,按照升序输出。要求 5 ( n )个字符串必须以指针数组形式存放。

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
void Sortstring(char *s[10000],int n)
{
 /***   for(int i = 0; i < 5; i ++)
        puts(s[i]);***/
    int i,j,k;
    char *t = new char[1000];
    for(i=0; i<n; i++)
    {
        k=i;
        for(j=i+1; j<n; j++)
            if(strcmp(s[k],s[j])>0)
                k=j;
        if(k!=i)
        {
            strcpy(t, s[k]);
            strcpy(s[k],s[i]);
            strcpy(s[i], t);
        }
    }
}

int main()
{
    char *s[10000],**p;
    int i,n;
    while(cin>>n){
    for(i=0; i<n; i++)
        s[i]=new char[1000];

    cout<<"Please enter lots of strings:"<<endl;
    for(p=s; p<s+n; *p++)
        scanf("%s",*p);
    Sortstring(s,i);
    cout<<"Sort by:"<<endl;
    for(p=s; p<s+i;*p++)
        cout<<*p<<" ";
    cout<<endl;
    }
    return 0;
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43517282/article/details/89279411
今日推荐