实验1 C++基础

1.实验目的和要求

目的:快速掌握C++语言编程的方法,了解C++的增强功能,主要内容有:(1)输入流、输出流的使用;(2)重载、默认参数;(3)引用;(4)new和delete运算符分配内存。

2.实验内容:

(1)       编写一个用输入和输出流运算符进行的输入和输出的程序。从键盘输入两个数,分别对两个数进行加,减,乘和除的运算。并输出计算结果,如: 23+123=146。

#include<iostream>
using namespace std;
int main()
{
    double a,b;
    cout<<"输入两个数"<<endl;
    cin>>a>>b;
    cout<<"a+b="<<(a+b)<<endl;
    cout<<"a-b="<<(a-b)<<endl;
    cout<<"a*b="<<(a*b)<<endl;
    if(b==0)
        cout<<"ERROR,除数不能为0"<<endl;
    else
        cout<<"a/b="<<(a/b)<<endl;
    return 0;
}

(2)       用new和delete运算符动态分配内存空间的方法编写程序。从键盘输入3´3整型数组的数据,并计算出所有元素之和,打印出最大值和最小值。输入输出要用流运算符实现。

#include<iostream>
using namespace std;
int main()
{
    int **a=(int**)new int*[3];//申请空间
    for(int i=0;i<3;i++)
        a[i]=new int[3];//申请行空间
    cout<<"输入9(3*3)个整数"<<endl;
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
            cin>>a[i][j];

    int max=a[0][0],min=a[0][0],sum=0;
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
        {
            sum+=a[i][j];
            if(max<a[i][j])
                max=a[i][j];
            if(min>a[i][j])
                min=a[i][j];
        }
    cout<<"sum="<<sum<<endl;
    cout<<"max="<<max<<endl;
    cout<<"min="<<min<<endl;
    delete []a;
}


(3)       编写C++风格的程序,解决百钱问题:将1元人民币兑换成1,2,5分的人民币,有多少种换法?

#include<iostream>
using namespace std;
int main()
{
    int i,j,k;
    int count=0;
    for(i=0; i*5<=100; i++)
        for(j=0; j*2<=100; j++)
            for(k=0; k<=100; k++)
            {
                if(i*5+j*2+k==100)
                {
                    cout<<"5 fen:"<<i<<" 2 fen:"<<j<<" 1 fen:"<<k<<endl;
                    count++;
                }
            }
    cout<<"共有阅换方法 "<<count<<" 种"<<endl;
    return 0;
}

(4)       在主函数中定义2个整型元素a,b,用引用作函数参数的方法,在函数void swap(int & x, int & y)中实现将数据交换存放,并在主函数中打印出来。

#include<iostream>
using namespace std;
void swap(int &x,int &y)//函数形参为引用
{
    int temp;
    temp=x;
    x=y;
    y=temp;
}
int main()
{
    int a=5,b=10;
    int &x=a,&y=b;//引用声明是必须进行初始化
    cout<<"a="<<a<<" b="<<b<<endl;

    cout<<"After swap"<<endl;
    swap(x,y);
    cout<<"a="<<a<<" b="<<b<<endl;
    return 0;
}


(5)       假设我们班有50名同学,每个同学都报出自己的生日, 每个同学的生日都不相重的概率只有0.0296,如果有100个同学,不相重的概率为3.0725´10-7。相重复的概率如此之大与我们主观想象不同。写一个程序,输入同学的人数n计算出其生日不重复的概率。然后在用彷真的方法, 利用随机数产生每个同学的生日,计算出生日不重复的概率并与前面的结果进行比较。

    [学生的生日可以用随机数产生,rand()产生0—32767之间的伪随机数,因为此需要一个种子,种子不同产生的随机数列不同,rand()产生的随机数也不同,可以调用srand(longint *)函数设置种子,比如我们可以获得计算机中的时间获得随机数种子, 以上函数需要包含头文件 stdlib.h] 

#include<iostream>
#include<stdlib.h>//使用rand()所需头文件
using namespace std;
int Judge(int *a,int n)//判断生日是否有重复的
{
    for(int i=0;i<n;i++)
        for(int j=i+1;j<n;j++)
        {
            if(a[i]==a[j])
                return 1;
        }
    return 0;
}
int main()
{
    int n;
    cout<<"输入同学人数"<<endl;
    cin>>n;
    int *birthday=new int[n];
    long times=1000000;
    double count=0;
    for(int k=0;k<times;k++)
    {
        for(int i=0; i<n; i++)
        {
            birthday[i]=rand()%365+1;//随机产生生日
        }
        count+=Judge(birthday,n);
    }
    cout<<"生日不重复的概率为:"<<1-(count/times)<<endl;
}


原文地址:https://www.cnblogs.com/javawebsoa/p/3074163.html