zoukankan      html  css  js  c++  java
  • VC++上机实习

    I、课程设计基本练习题目(18分×4)

    A组】请从以下1-3题中任意选做一题

    1、输出1至100之间每位数的乘积大于每位数的和的数,例如对于数字12,有1*2<1+2,故不输出该数;对于27,有2*7>2+7,故输出该数。

    法一:

    #include "stdafx.h"
    #include<iostream>
    using namespace std;
    bool isSelectNum(int N)
    {
        int temp = N;
        int sumADD = 0;
        int multResult = 1;
        do
        {
            //cout <<"该数字的各位数分别为:"<< temp % 10<<"  " << endl;
            sumADD = sumADD + temp % 10;
            multResult = multResult*(temp % 10);
            temp = temp / 10;
        } while (temp > 0);
        if (sumADD == multResult)
            return true;
        else
            return false;
    }
    int _tmain(int argc, _TCHAR* argv[])
    {
        for (int i = 0; i < 100; i++)
        {
            if (false==isSelectNum(i))
            {
                cout << i << "	" << endl;
            }
    
        }
    
    }

    法二:

    #include "stdafx.h"
    #include <iostream>
    using namespace std;
    int _tmain(int argc, _TCHAR* argv[])
    {
        int m = 0, n = 0;
        for (int i = 11; i < 100; i++)
        {
            m = i % 10;
            n = i / 10;
            if (m*n>m + n)
                cout << i << endl;
        }
        return 0;
    }

    2、求任意n个数中的最大数和最小数:先输入一个正整数n(个数),而后再输入任意n个实数,找出这n个数中的最大数及最小数并显示出来。

    法一:

    #include "stdafx.h"
    #include <iostream>
    #include <malloc.h>
    using namespace std;
    
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        int MAX, MIN;
        int nNumber;
         cin>> nNumber;
         int *p = (int *)malloc(sizeof(int)*nNumber);
         cout << "Please input " << nNumber << "numbers in truns.
    " << endl;
         cin >> p[0];
         MAX = p[0];
         MIN = p[0];
         for (int i = 1; i < nNumber; i++)
         {
             cin >> p[i];
             if (p[i]>MAX)
                 MAX = p[i];
             if (p[i] < MIN)
                 MAX = p[i];         
         }
         cout << "MAX=" << MAX << endl;
         cout << "MIN=" << MIN << endl;
         free(p);
        return 0;
    }

    法二:

    #include "stdafx.h"
    #include <iostream>
    using namespace std;
    void swap(int*m, int *n)
    {
        int temp = *m;
        *m = *n;
        *n = temp;
    };
    int _tmain(int argc, _TCHAR* argv[])
    {
        int n;
        cout << "hom many numbers do you want to input?" << endl;
        cin >> n;
        int *p = new int[n];
        cout << "please input " << n << "numbers in turns." << endl;
        for (int i = 0; i < n; i++)
            cin >> p[i];
    
        /*冒泡排序开始啦*/
        for (int i = 0; i < n; i++)
        {
            for (int j = i + 1; j < n; j++)
            {
                if (p[i]>p[j])
                {
                    /*
                    int temp = p[j];
                    p[j] = p[i];
                    p[i] = temp;
                    */
                    swap(p + i, p + j);
                }
            }
        }
        cout << "the max number is " << p[n - 1] << endl;
        cout << "the min number is " << p[0] << endl;
        delete []p;
        return 0;
    }

    B组】请从以下4-6题中任意选做一题

    4、对两个有序数组进行合并:设有如下数组A、B,并假设两个数组的元素都已经有序(从大到小降序排列)。编程序,合并A、B数组形成一个新的数组C,并使C的元素仍有序(从大到小降序排列)。

    int A[10]={123,49,86,86,33,15,7,0,-1,-3};

    int B[10]={64,51,50,27,19,15,12,5,2,1};

    #include "stdafx.h"
    #include "stdafx.h"
    #include  <iostream>
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        int i = 0, j = 0;
        int A[10] = { 123, 49, 86, 86, 33, 15, 7, 0, -1, -3 };
        int B[10] = { 100, 64, 51, 50, 27, 19, 15, 12, 5, 2 };
        int *p = (int*)malloc(sizeof(A)+sizeof(B));
        cout << "The array A :" << endl;
        for (int i = 0; i < 10; i++)
        {
            cout << A[i] << " ";
    
        }
        cout << endl;
        cout << "The array B :" << endl;
        for (int i = 0; i < 10; i++)
        {
            cout << B[i] << " ";
    
        }
        cout << endl;
    //===================================================
        int t = 0;
        do
        {
            if (A[i] > B[j])
            {
                p[t] = A[i];
                i++;
                t++;
            }
            if (A[i] < B[j])
            {
                p[t] = B[j];
                j++;
                t++;
            }
        } while (i < 10 && j < 10 && t<20);
    //===================================================
        cout << endl;
    
    
        for (int i = 0; i < 20; i++)
        {
            cout << p[i] << " ";
        }
        cout << endl;
        return 0;
    }

    5、有一个分数序列:1/2,1/3,1/4,1/5,1/6,1/7,……,编写函数求序列前n项之和,要求在主程序中提示用户输入整数n,并判断所输入数是否合法(大于0为合法),如果合法则调用求和函数并输出结果。

    #include "stdafx.h"
    #include <iostream>
    #include <iomanip>
    using namespace std;
    
     double sum(int n)
    {
         double t = 0;
        for (int i = 1; i <= n; i++)
        {
            t = t + double(1.0 /i);
            //cout << t << endl;
        }
        return t;
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        int N;
        double t = 0;
        cout << "please input a integer:" << endl;
        cin >> N;
        if (N > 0)
            t = sum(N);
        else
            cout << "error!" << endl;
        cout <<setw(15)<<setprecision(10)<< t<< endl;
        return 0;
    }

    6、计算两个日期之间的间隔天数:从键盘输入两个日期(如以year1,month1,day1以及year2,month2,day2的方式来输入它们),而后计算出这两个日期的间隔天数并在屏幕上显示出结果。

    要求编制具有如下原型的函数difs2Date:

    long difs2Date(int y1,int m1,int d1,int y2,int m2,int d2);

    它负责计算出两个日期的间隔天数并返回,要求将该函数的代码存放到一个叫做“difs2Date.h”的头文件中,而在main函数的主文件中通过include编译预处理命令将该头文件的内容包含进来,并在main主函数中通过调用difs2Date函数来实现所需的计算。

    //计算两个日期之间的天数 
    int DaysBetween2Date(string date1, string date2)
    {
        //取出日期中的年月日  
        int year1, month1, day1;  int year2, month2, day2;
        if (!StringToDate(date1, year1, month1, day1) || !StringToDate(date2, year2, month2, day2))
        {
            printf("输入的日期格式不正确。");   return -1;
        }
        //如果年、月都相同 
        if (year1 == year2 && month1 == month2)
        {
            return day1 > day2 ? day1 - day2 : day2 - day1;
        }
        //如果年相同、月不同
        else if (year1 == year2)
        {
            int d1, d2;
            d1 = DayInYear(year1, month1, day1);
            d2 = DayInYear(year2, month2, day2);
            return d1 > d2 ? d1 - d2 : d2 - d1;
        }
        //如果年不同  
        else
        {
            //确保year1年份比year2早   
            if (year1 > year2)
            {
                TSwap(year1, year2);
                TSwap(month1, month2);
                TSwap(day1, day2);
            }
            int d1, d2, d3;
            if (IsLeap(year1))
                d1 = 366 - DayInYear(year1, month1, day1);
            else
                d1 = 365 - DayInYear(year1, month1, day1);
            d2 = DayInYear(year2, month2, day2);
            d3 = 0;
            for (int year = year1 + 1; year < year2; year++)
            {
                if (IsLeap(year))
                    d3 += 366;
                else
                    d3 += 365;
            }
            return d1 + d2 + d3;
        }
    }
    //从字符串中取得年、月、日 //规定日期的格式是:yyyy-mmm-dd 
    bool StringToDate(string date, int& year, int& month, int& day)
    {
        year = atoi((date.substr(0, 4)).c_str());
        month = atoi((date.substr(5, 2)).c_str());
        day = atoi((date.substr(8, 2)).c_str());
        int DAY[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
        if (IsLeap(year))
            DAY[1] = 29;
        return year >= 0 && month <= 12 && month > 0 && day <= DAY[month] && day > 0;
    }
    //IsLeap函数判断一个年份是否为闰年,方法如下:
    bool IsLeap(int year)
    {
        return  (year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0);
    }
    //DayInYear能根据给定的日期,求出它是该年的第几天。代码如下:
    int DayInYear(int year, int month, int day)
    {
        int DAY[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
        if (IsLeap(year))
            DAY[1] = 29;
        for (int i = 0; i < month - 1; ++i)
            day += DAY[i];
        return day;
    }

    C组】请从以下7-10题中任意选做2

    7、声明并定义一个日期类CDate,其中数据成员m_iYear,m_iMonth,m_iDay,分别表示年、月、日,成员函数SetDate()用来设置年、月、日,成员函数IsLeapYear()用来判断当前的年份是否为闰年,构造函数带有默认形参值,可接收外部参数对m_iYear, m_iMonth, m_iDay进行初始化,另要求编写测试程序,定义一个CDate类对象,将其日期设置为2005年1月1日, 调用成员函数IsLeapYear()判断该年份是否为闰年并输出判断结果.

    说明:闰年的年份可以被4整除而不能被100整除,或者能被400整除.

    #include "stdafx.h"
    #include <iostream>
    using namespace std;
    
    class CDate
    {
    public:
        void SetDate(int Year,int Month,int Day)
        {
            m_iYear = Year;
            m_iMonth = Month;
            m_iDay = Day;
            cout << "Today is" << m_iYear << "" << m_iMonth << "" << m_iDay << "日。
    " << endl;
        };
        bool isLeapYear()
        {
            if (this->m_iYear % 4 == 0 && this->m_iYear % 100 != 0 || this->m_iYear % 400 == 0)
            {
                cout <<m_iYear<< "is Leap Year.
    " << endl;
                return true;
            }
                
            else
            {
                cout << m_iYear << "is not a Leap Year.
    " << endl;
                return false;
            }
        };
        CDate()
        {
            m_iYear = 1900;
            m_iMonth = 1;
            m_iDay = 1;
            cout << "构造函数。" << endl;
        };
        CDate(int year, int month, int day);
        ~CDate()
        {
            cout << "析构函数。
    " << endl;
        }
    private:
        int m_iYear;
        int m_iMonth;
        int m_iDay;
    };
    CDate::CDate(int year, int month, int day)
    {
        this->m_iYear = year;
        this->m_iMonth = month;
        this->m_iDay = day;
    };
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        CDate CurrDate;
        CurrDate.isLeapYear();
        CurrDate.SetDate(2014, 10, 21);
        CurrDate.isLeapYear();
        return 0;
    }

    -----------------------------------------------------------------------------------------------------------------------

    后续内容将继续更新!

    -----------------------------------------------------------------------------------------------------------------------

    8、编写一个程序计算两个给定长方形的面积,其中在设计类成员函数addarea()(用于计算两个长方形的总面积)时使用对象作为参数。

    9、设计一个时间类Time,包括3个数据成员,时(h)、分(m)、秒(s),另外包括存取各数据成员和设置时间的成员函数,按上、下午各12小时或按24小时输出时间的成员函数,以及默认构造函数,默认时间值为0时0分0秒。

    10、编写一个程序,输入3个学生的英语和计算机成绩,并按总分从高到低排序(要求设计一个学生类Student)。

    II、课程设计中期设计题目(28分×1)

    11. 求解一元二次方程。

    一元二次方程的定义为:

    ax2+bx+c=0

    (1)如果b2 -4ac>0,方程有两个不同的实根,分别是:

    clip_image001

    clip_image002

    (2)如果b2 -4ac< 0,方程没有实根,但有虚根;

    (3)如果b2 -4ac= 0,方程有一个实根。

    请你编写一个程序,使其能求出多个二次方程的根。该程序要询问用户是否想继续解下一个方程。用户输入1来继续,输入其它数字,则终止程序。程序要求用户输入a,b和c,然后根据前面的条件计算,并输出答案。

    要求:使用类实现,

    (1) a,b,c为该类的私有成员变量;

    (2) 求根的实现为该类的成员函数,形式为:

    //函数返回值:实根的个数;

    //参数:x- 用以返回实根值的数组;

    long CalResult(float x[]);

    (3) 该类还包含有参构造函数、析构函数。

    (4) 使用MFC工程实现,可酌情加分。

  • 相关阅读:
    【java基础】方法2
    【Java基础】方法
    [java基础]数组
    [Java基础]循环结构3
    [java基础]循环结构2
    [java基础]循环结构1
    [java基础]分支结构(2)
    mybatis-config.xml简单笔记
    applicationContext.xml简单笔记
    spring-servlet.xml简单示例
  • 原文地址:https://www.cnblogs.com/AmatVictorialCuram/p/4044278.html
Copyright © 2011-2022 走看看