C++考试

函数

求绝对值

double  getAbs( double x )
{
    if(x>0)
        return x;
    else if(x==0)
        return 0;
    else
        return -1*x;
}

海伦公式求面积

double getArea(double a, double b,double c)
{
    double area,s;
    s=(a+b+c)/2;
    area=sqrt(s*(s-a)*(s-b)*(s-c));
    return area;
}
bool validate(double a,double b,double c)
{
    if(a+b>c&&a+c>b&&b+c>a)
        return true;
        else
            return false;
}

水仙花数

bool narcissistic( int number )
{
    int a,b,c,d;
    a=number%1000/100;
    b=number%1000%100/10;
    c=number%1000%100%10;
    d=a*a*a+b*b*b+c*c*c;
        if(d==number)
            return true;
    else
        return 0;
}

计算两点间的距离

double getDis(double x1, double y1,double x2,double y2)
{
    double dis;
    dis=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
    return dis;
}

计算电费

double getCost(double x)
{
    double a,b;
    if(x<=0)
        return 0;
    else if(x<=50)
    {
        a=x*0.53;
        return a;
    }
    else
    {
        b=50*0.53+(x-50)*0.58;
        return b;
    }
}

求pai值

double pai()
{
    int f,d;
    double t=1.0,m=1.0,pi=1,n=1;
    for(f=1,d=3;n>=1e-8;f++,d+=2)
    {
        t=t*f,m=m*d;
        n=t/m;
        pi=pi+n;
    }
    return 2*pi;
}

最大公约数

int gcd(int m,int n)
{
    if(n==0)
        return m;
    else
        return gcd(n,m%n);
}

素数

bool isPrime(int mum)
{
    int i=2,j=0;
    for(i=2,j=0;i<mum;i++)
    {
        if(mum%i==0)
            j++;
    }
    if(j==0)
        return true;
    else
        return false;
}

斐波那契数列

void fibo(int a[],int n )
{
    a[0]=1;a[1]=1;
    for(int i=2;i<n;i++)
        a[i]=a[i-2]+a[i-1];
}

删除数组元素

void delNum(int a[],int n,int x)
{
    for(int i=x;i<n-1;i++)
        a[i]=a[i+1];
}

数组元素的最大值

int getMax(int *pa, int size)
{
    int i,max=pa[0];
    for(i=1;i<size;i++)
        if(max<pa[i])
            max=pa[i];
    return max;
}

删除字符串中的指定字符

void deleteChar(char *s, char c)
{
    int i,j;
    for(i=0,j=0;s[i]!='\0';i++)
        if(s[i]!=c)
            s[j++]=s[i];
    s[j]='\0';
}

字符串比较

int stringcmp(char *s1,char *s2)
{
    int i=0,j=0;
    for(;s1[i]!='\0'||s2[j]!='\0';i++,j++)
    {
        if(s1[i]!=s2[j])
            break;
    }
    return (s1[i]-s2[j]);
}

求两点间的距离

void Point::setValue(double newX,double newY)
{
    x=newX;y=newY;
}
Point::Point(double newX,double newY):x(newX),y(newY)
{
    //setValue(newX,newY);
}
double Point::getX()
{
    return x;
}
double Point::getY()
{
    return y;
}
double Point::getDistance(Point& p2)
{
    double x1=getX();double y1=getY();
    double x2=p2.getX();double y2=p2.getY();
    return sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
}
double getDistance(Point& p1,Point& p2)
{
    return sqrt((p2.getX()-p1.getX())*(p2.getX()-p1.getX())+(p2.getY()-p1.getY())*(p2.getY()-p1.getY()));
}

字符串长度

int strLength(char str[])
{
    int i=0;
    for(;str[i]!='\0';i++);
    return i;
}

自定义函数实现有序数组的插入

bool insert(int a[],int &n,int N,int key)
{
    int i;
    if(n<N)
{
    for(i=n;a[i-1]>key&&i>=1;i--)
    {
        a[i]=a[i-1];
    }
    a[i]=key;
    n++;
    return true;}
else
    return false;
}

自定义函数实现有序数组的删除

bool del(int a[],int &n,int key)
{
    int i,j;
    for(i=0;i<n;i++)
    {
        if(a[i]==key)
            break;
    }
    if(i<n)
    {
        for(j=i;j<n-1;j++)
            a[j]=a[j+1];
    n--;
    return true;}
else
    return false;
}

自定义函数实现字符串的连接

void str_cat(char a[], char b[])
{
    int i=0,j=0;
    for(i=0;i<=162;i++)

        if(a[i]=='\0')
        {
            
            for(j=0;j<81;j++,i++)
                a[i]=b[j];
            break;
        }

    
}

从身份证号码中提取出生日期

void getBirth(char a[], char b[])
{
    int i=0,j=6;
   for(i=0,j=6;j<14,i<8;i++,j++)

    b[i]=a[j];

}

自定义函数删除字符串中大小写字母之外的其它字符

int deleChar(char a[])
{
    int i=0,j=0,x=0;
    for(i=0;i<80;i++)
    {
        if(a[i]=='\0')
        {
            a[j]='\0';
            break;
        }
            if(a[i]>='A'&&a[i]<='z')
            {
                a[j]=a[i];
                j++;
            }
            else
            {x++;}
        }
    return x;
}

编程

两正整数求和

#include<iostream>
using namespace std;
int main()
{
    int a,b,c;
    cin>>a>>b;
    c=a+b;
    cout<<a<<"+"<<b<<"="<<c;
    return 0;
}

圆的周长与面积

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
    double a,b,c;
    cin>>a;
    b=3.14;
        c=2;
    cout<<fixed<<setprecision(2)<<"area="<<a*b*a<<endl;
        cout<<fixed<<setprecision(2)<<"circle="<<a*c*b<<endl;
    
    return 0;
}

公里转换为英里

#include<iostream>
using namespace std;
int main()
{
    double a;
    cin>>a;
    cout<<a/1.60934<<endl;
    return 0;
}

小写字母转换为大写字母

#include<iostream>
using namespace std;
int main()
{
    char c;
    cin>>c;
    cout<<char(c-32);
    return 0;
}

合成新数

#include<iostream>
using namespace std;
int main()
{
    int a,b,p;
    cin>>a>>b;
    p=a%100/10*100+a%10+b%100/10*1000+b%10*10;
    cout<<"p="<<p<<endl;
    return 0;
}

多项式求值

#include<iostream>

using namespace std;
int main()
{
    float x;
    cin>>x;
    cout<<-4*x*x*x+5.8*x*x-2*x+2.6<<endl;
    return 0;
}

计算圆柱体的表面积和体积

#include<iostream>
using namespace std;
int main()
{
    double a,b;
    cin>>a>>b;
    cout<<"S="<<2*a*3.14*b+2*a*a*3.14<<endl;
    cout<<"V="<<a*a*3.14*b<<endl;
    return 0;
}

三数排序

#include<iostream>
using namespace std;
int main()
{
    int a,b,c;
    cin>>a>>b>>c;
        if(a>b) swap(a,b);
    if(a>c) swap(a,c);
    if(b>c) swap(b,c);
    cout<<a<<" "<<b<<" "<<c<<endl;
    return 0;
}

判断奇偶性

#include<iostream>
using namespace std;
int main()
{
    int a,b;
    cin>>a;

    b=a%2;
    if(b==1)
        cout<<"Odd";
    else
        cout<<"Even";
    return 0;
}

构造有效三角形

#include<iostream>
using namespace std;
int main()
{
    int a,b,c;
    cin>>a>>b>>c;
    if(a+b>c&&a+c>b&&b+c>a&&a>0&&b>0&&c>0)
        cout<<"This is a triangle."<<endl;
        else
            cout<<"This is not a triangle."<<endl;
    return 0;
}

计算分段函数值

#include<iostream>
using namespace std;
int main()
{
    double x,y;
    cin>>x;
    if(x<0)
        y=x*x;
    else if(x==0)
        y=1;
    else
        y=x+2;
    cout<<"y="<<y<<endl;
    return 0;
}

温度转换

#include<iostream>
using namespace std;
int main()
{
    double x,f;
    cin>>x;
    f=x*9/5+32;
    cout<<"F="<<f<<endl;
    return 0;
}

数字逆序

#include<iostream>
using namespace std;
int main()
{
    int a,b;
    cin>>a;
    b=a/100+a%100/10*10+a%10*100;
    cout<<b;
    return 0;
}

平方和

#include<iostream>
using namespace std;
int main()
{
    for(int i=1000; i<10000; i++)
    {if(i==(i/100+i%100)*(i/100+i%100))
            cout<<i<<endl;}
    
    return 0;
}

卡拉兹猜想

#include<iostream>
using namespace std;
int main()
{
    int num,count=0;
    cin>>num;
    if(num<=1000)
        while(num!=1)
        {
            if(num%2==0)
                num=num/2,count++;
            else
                num=(3*num+1)/2,count++;
            
        }
    cout<<count<<endl;
    return 0;
}

百马百担

#include<iostream>
using namespace std;
int main()
{
    int b,m,s;
    for(b=0;b<=33;b++)
        for(m=0;m<=50;m++)
        {
            s=100-b-m;
            if((3*b+2*m+s/2==100)&&s%2==0)
                cout<<b<<" "<<m<<" "<<s<<endl;
        }
    return 0;
}

100-200之间素数

#include<iostream>
using namespace std;
int main()
{
    int n=100,i=2,t=0,m=0;
    for(n=100;n<200;n++)
    {
        for(i=2;i<n;i++)
        {
            if(n%i==0)
            {t++;}
        }
        if(t==0)
        {
            cout<<" "<<n;
        m++;
            if(m%5==0)
        {
            cout<<endl;
        }
        }
        t=0;


    }
    return 0;
}

完数

#include<iostream>
using namespace std;
int main()
{
    int a,i,m;
    for(a=1;a<=1000;a++)
    {
        m=0;
        for(i=1;i<=a/2;i++)
            if(a%i==0)
                m=m+i;
        if(a==m)
        {
            cout<<a<<"=1";
            for(i=2;i<=a/2;i++)
            {
                if(a%i==0)
                {
                    cout<<"+"<<i;
                }
            }
            cout<<"\n";
        }
    }
    return 0;
}

打印数字三角

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int n,i=1,t=1;
    cin>>n;
    while(i<=n)
    {cout<<setw(3)<<i;
     t++;
     if(t>i)
         
         
             cout<<"\n",
             i++,t=1;
     }
 

return 0;
}

打印沙漏

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    int k=0,i,j,n;
    char c;
    cin>>n>>c;
    int sum=1;
    for(i=2;;i++)
    {
        sum=sum+2*(2*i-1);
        if(sum>n)
        {
            sum=sum-2*(2*i-1);
            i--;break;
        }
    }
    for(j=i;j>=1;j--)
    {
        for(k=1;k<=i-j;k++)
            cout<<" ";
            for(k=1;k<=2*j-1;k++)
                cout<<c;
        cout<<endl;
    }
        for(j=2;j<=i;j++)
    {
        for(k=1;k<=i-j;k++)
            cout<<" ";
            for(k=1;k<=2*j-1;k++)
                cout<<c;
        cout<<endl;
    }
    cout<<n-sum;
    return 0;
}

数组逆序

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
    int a[10],n,i,j,t;
    cin>>n;
    for(i=0;i<n;i++)
        cin>>a[i];
    for(i=0,j=n-1;i<j;i++,j--)
    {
        t=a[i];
        a[i]=a[j];
        a[j]=t;
    }
    for(i=0;i<n;i++)
        cout<<setw(4)<<a[i];
    return 0;
}

排序

#include<iostream>
using namespace std;
const int N=10;
void SelectSort(int a[],int n);
int main()
{
    int a[N],i,n;
    cin>>n;
    for(i=0;i<n;i++)
        cin>>a[i];
    SelectSort(a,n);
    for(i=0;i<n;i++)
        cout<<a[i]<<" ";
    return 0;
}
void SelectSort(int a[],int n)
{
    int i,j,k,t;
    for(i=0;i<n-1;i++)
    {
        k=i;
        for(j=i+1;j<n;j++)
        {
            if(a[j]<a[k])
                k=j;
        }
        t=a[k],a[k]=a[i],a[i]=t;
        
    }
}

对角线和

#include<iostream>
using namespace std;
int main()
{
    int n,i,j,t=0;
    cin>>n;
    int a[n][n];
    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
        cin>>a[i][j];
    for(i=0;i<n;i++)
        t+=a[i][i];
    cout<<t;
    return 0;
}

行列转置

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
    int m,n,i,j;
    cin>>m>>n;
    int a[m][n],b[n][m];
    for(i=0;i<m;i++)
        for(j=0;j<n;j++)
        {
            cin>>a[i][j];
            b[j][i]=a[i][j];
        }
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
            cout<<setw(5)<<b[i][j];
        cout<<endl;
    }
    return 0;
}

二维数组最大值

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
    int m,n,i,j,x=0,y=0;
    cin>>m>>n;
    int a[m][n];
    for(i=0;i<m;i++)
        for(j=0;j<n;j++)
            cin>>a[i][j];
    for(i=0;i<m;i++)
        for(j=0;j<n;j++)
            if(a[x][y]<a[i][j])
            {
                x=i;
                y=j;
            }
    cout<<a[x][y]<<endl;
    cout<<x<<endl;
    cout<<y<<endl;
    return 0;
}

杨辉三角

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
    int n,i=0,j=0;
    cin>>n;
    int a[n][n];
    for(i=0;i<n;i++)
    {
        for(j=0;j<=i;j++)
        {
            if(j==0||j==i)
            { a[i][j] =  1;}
            else
                a[i][j] =  a[i-1][j] + a[i-1][j-1];
        }
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<=i;j++)
        {
            cout<<setw(5)<<a[i][j];
        }
        cout<<endl;
    }
    return 0;
}

幻方

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int a[n][n];
    for(int i=0;i<=n-1;i++)
    {
        for(int j=0;j<=n-1;j++)
            a[i][j]=0;
    }
    int num=1;
    int x=0;
    int y=n/2;
    int x1=0;
    int y1=0;
    while(num<=n*n)
    {
        a[x][y]=num;
        num++;
        x1=x;
        y1=y;
        x--;
        if(x<0)
        {
            x=n-1;
        }
        y++;
        if(y>n-1)
        {
            y=0;
        }
        if(a[x][y]!=0)
        {
            x=x1+1;
            y=y1;
        }
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            cout<<setw(5)<<a[i][j];
        }
        cout<<endl;
    }
    return 0;
}

回文

#include<iostream>
#include<cstring>
using namespace std;
bool RW(char s[],int n);
int main()
{
    char s[100];
    cin.getline(s,100);
    int n=strlen(s);
    if(RW(s,n))
        cout<<s<<"是回文"<<endl;
    else
        cout<<s<<"不是回文"<<endl;
    return 0;
}
bool RW(char s[],int n)
{
    int i=0,j=n-1;
    for(;i<j;i++,j--)
        if(s[i]!=s[j])
            break;
    if(i>=j)
        return true;
    else
        return false;
}

个数统计

#include<iostream>
using namespace std;
int main()
{
    char s[1000];int i,b[10]={0};
    cin>>s;
    for(i=0;s[i]!='\0';i++)
        switch(s[i])
        {
            case '0':b[0]++;break;
            case '1':b[1]++;break;
            case '2':b[2]++;break;
            case '3':b[3]++;break;
            case '4':b[4]++;break;
            case '5':b[5]++;break;
            case '6':b[6]++;break;
            case '7':b[7]++;break;
            case '8':b[8]++;break;
            case '9':b[9]++;break;
            default:cout<<"不是正整数!"<<endl;
        }
    for(i=0;i<=9;i++)
    {
        if(b[i]!=0)
            cout<<i<<':'<<b[i]<<endl;
    }
    return 0;
}

D进制加法

#include<iostream>
using namespace std;
int main()
{
    int a,b,c,d,i=0,s;
    cin>>a>>b>>d;
    s=a+b;
    int m[100];
    do
    {
        m[i++]=s%d;
        s/=d;
    }
    while(s!=0);
        for(i-=1;i>=0;i--)
            cout<<m[i];
    return 0;
}

两个字符串的合并

#include<iostream>
#include<cstring>
using namespace std;
void insertString(char str[],char c);
int main()
{
    char str[100],a[20];
    cin>>str;
    cin>>a;
    int i;
    for(i=0;a[i]!='\0';i++)
        insertString(str,a[i]);
    cout<<str;
    return 0;
}
void insertString(char str[],char c)
{
    int i;
    int n=strlen(str);
    for(i=n-1;i>=0&&str[i]>c;i--)
        str[i+1]=str[i];
    str[i+1]=c;
    str[n+1]='\0';
}

非负整数排序

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
    char s[100],c;
    cin>>s;
    int i,j,len=strlen(s);
    for(j=0;j<len-1;j++)
        for(i=0;i<len-1-j;i++)
        if(s[i]>s[i+1])
            {c=s[i];
             s[i]=s[i+1];
             s[i+1]=c;}
    for(i=0,j=0;i<len;i++)
        if(s[i]!='0')
            s[j++]=s[i];
    s[j]='\0';
    if(j>0)
        cout<<s;
    else
        cout<<0;
    return 0;
}

猜数游戏

#include<iostream>

using namespace std;
int main()
{
int x,i=1;
    int magic;
    
    cin>>magic;

    while(1)
    {
        cin>>x;
        if(x==magic)
        {printf("猜对了");break;
        }
        else if(x>magic)
        {printf("猜大了\n")
            ;}
         else if(x<magic)
         {printf("猜小了\n");}
        if(i>=5)
        {printf("游戏失败");break;}
        i++;
    }
return 0;
}

小球自由落体

#include<iostream>
using namespace std;
int main()
{
    int m,n,i=1;
    cin>>n>>m;
    while(i<=m)
    {
        n/=2;
        i++;
    }
    cout<<n;

return 0;
}

打印图案

#include<iostream>
using namespace std;
int main()
{
int n,i=1,t=1;
    cin>>n;
    while(i<=n-n/2)
    {cout<<" *";
     t++;
     if(t>2*i-1)
         
         
             cout<<"\n",
             i++,t=1;
     }
    i=n/2;
    t=1;
   while(i>0)
    {cout<<" *";
     t++;
     if(t>2*i-1)
         
         
             cout<<"\n",
             i--,t=1;
            
    
     }
return 0;
}

输出低于平均分的学生序号和成绩

#include<iostream>
using namespace std;
int main()
{

    double a[30];
    int x=0,z=0,i=0,n=0,t=0;
    for(n=0;n<30;n++)
    {
        cin>>a[n];
        if (a[n]==-1)
            break;
    else
        t++;}
    for(i=0;i<=t;i++)
    {x+=a[i];}
    
    for(i=0;i<t;i++)
    {if(a[i]<=x/t)
        {cout<<i<<":"<<a[i]<<endl;
            z++;}
    }
    cout<<"There are "<<z;
    return 0;
}

有序数组(已初始化)的插入

#include<iostream>
using namespace std;
int main()
{
    const int N=6;
    int a[N]={1,3,5,7,9};
    int n,i=5,j;
    cin>>n;
    if(a[4]<=n)
        a[5]=n;
    else
    {for(i=0;i<5;i++)
        if(a[i]>n)
        {
            for(j=4;j>=i;j--)
        {a[j+1]=a[j];}
            a[i]=n;
            break;
}}
    for(i=0;i<6;i++)
        cout<<" "<<a[i];
    
    return 0;
}

有序数组(输入)的插入

#include<iostream>
using namespace std;
int main()
{
          int N;
        cin>>N;
    int a[N];
    int t=0;
    for(t=0;t<N;t++)
    cin>>a[t];
    int n,i=0,j;
    cin>>n;
    if(a[N-1]<=n)
        a[N]=n;
    else
    {for(i=0;i<N;i++)
        if(a[i]>n)
        {
            for(j=N-1;j>=i;j--)
        {a[j+1]=a[j];}
            a[i]=n;
            break;
}}
    for(i=0;i<N+1;i++)
        cout<<" "<<a[i];
    
    return 0;
}

有序数组元素的删除

#include<iostream>
using namespace std;
int main()
{
          int N;
        cin>>N;
    int a[N];
    int t=0,m=0;
    for(t=0;t<N;t++)
    cin>>a[t];
    int n,i=0,j;
    cin>>n;
for(i=0;i<N;i++)
      {if(a[i]!=n)
          m++;}
    if(m==N)
    {cout<<"delete fail.";}
else
    {for(i=0;i<N;i++)
        if(a[i]==n)
        {
            for(j=i;j<N;j++)
        {a[j]=a[j+1];}

            break;
}

    for(i=0;i<N-1;i++)
        cout<<a[i]<<" ";}
    
    return 0;
}

输出杨辉三角

#include<iostream>
using namespace std;
int main()
{
    int n,i=0,j=0;
    cin>>n;
    int a[n][n];
    for(i=0;i<n;i++)
    {
        for(j=0;j<=i;j++)
        {
            if(j==0||j==i)
            { a[i][j] =  1;}
            else
                a[i][j] =  a[i-1][j] + a[i-1][j-1];
        }
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<=i;j++)
        {
            cout<<a[i][j]<<" ";
        }
        cout<<endl;
    }
    return 0;
}

统计一行字符的各字符个数

#include<iostream>
using namespace std;
const int n=81;
int main()
{
    char s[n];
    int t,i,upper=0;
    cin.getline(s,n);
    for(i=0;s[i]!='\0';i++)
    {if(s[i]>='A'&&s[i]<='Z')
            upper++;
    t=i+1;}
    cout<<"upper:"<<upper<<endl;
    int lower=0;
    for(i=0;s[i]!='\0';i++)
        if(s[i]>='a'&&s[i]<='z')
            lower++;
        cout<<"lower:"<<lower<<endl;
    int digit=0;
    for(i=0;s[i]!='\0';i++)
        if(s[i]>='0'&&s[i]<='9')
            digit++;
        cout<<"digit:"<<digit<<endl;
    int space=0;
    for(i=0;s[i]!='\0';i++)
        if(s[i]==' ')
            space++;
        cout<<"space:"<<space<<endl;
    int other;
    other=t-upper-lower-digit-space-other;
    cout<<"other:"<<other;
    return 0;
}

统计一行字符中的大写字母的个数

#include<iostream>
using namespace std;
const int n=81;
int main()
{
    char s[n];
    int i,upper=0;
    cin.getline(s,n);
    for(i=0;s[i]!='\0';i++)
        if(s[i]>='A'&&s[i]<='Z')
            upper++;
    cout<<upper;
    return 0;
}

添加新评论