实验二  C++简单应用程序(4 学时)
1、实验目的和要求:
  (1)学会简单使用编程工具提供的调试工具。
  (2)熟悉c++基本数据类型与表达式。
(3)掌握算法的基本控制结构;
(4)掌握算法的自然流程图描述形式;
(5)掌握算法设计的基本技术: 输入输出分析、存储设计、算法基本思想分析(顶层设计)、算法细化。
(6)掌握选择结构的常用算法设计与实现;
(7)掌握循环结构的常用算法设计与实现;
(8)熟练运用逐步求精方法完成综合应用算法设计与实现(多分支结构、循环结构、循环分
支相互嵌套);
(9)培养良好的编程风格。(对象命名见名知意遵循匈牙利规则、缩排风格、注释要求20%以上)
(10)了解面向过程与面向对象思维方法的相辅相成。
2、实验内容:
          (1)学习 debug 调试功能。
(2)顺序结构简单编程;
          (3)选择结构设计与实现;;
(4)循环结构设计与实现;
(5)综合应用;
          (6)类内函数设计与编写及应用*(选做)。
3、实验步骤或环节:
          (1) 选择某种熟悉的开发环境(例如Codeblocks Visual Studio Eclipse IDE for C/C++ Developers),学习 debug 调试功能:单步执行、设置断点、观察变量值,完成以下参考程序的编译、修改、运行和调试。(编译通过后单步运行拍照、变量值观察窗口拍照、设置断点拍照(各一个图)修改代码部分拍照、1次运行结果拍照)
参考程序如下:见实验课程网站资料
//lab2_1.cpp
#include <iostream>
using namespace std ;
const float PI = 3.1416;
int main()
{
    int iType;
    float radius, len, width, area;
    cout << "图形的类型为?(1-圆形 2-长方形 3-正方形):"; cin >> iType;
    switch(iType)
    {
        case 1:
            cout << "圆的半径为:";
            cin >> radius;
            area = PI * radius * radius;
        case 2:
            cout << "矩形的长为:";
            cin >> len;
            cout << "矩形的宽为:";
            cin >> width;
            area = len * widh;
        case 3:
            cout << "正方形的边长为:";
            cin >> len; area = len * len;
        default:
            cout << "不是合法的输入!"<<endl;
    }
        cout<<"面积<<area<<endl;
    return 0;
}
一个程序,特别是大型程序,编写完成后往往会存在这样或那样的错误。 有些错误在编译连接阶段可以由编译系统发现并指出,称为语法错误。当修改完语法错误生成了可执行程序后,并不意味着程序已经正确。我们常常会发现程序运行的结果与我们预期的结果相去甚远,有时甚至在运行过程中程序中止或发生死机,这种错误称为运行错误,是因为算法设计不当或编程实现时的疏忽造成的。所谓调试就是指在发现了程序存在运行错误以后,寻错误的原因和位置并排除错误。这一工作是非常困难的,对于初学者而言尤其如此。
虽然编译系统不能像对待语法错误那样,明确指出运行错误的原因和位置,但大多数开发环境都为我们提供了辅助调试工具,可以实现单步运行、设置断点、观察变量和表达式的值等功能,使我们可以跟踪程序的执行流程、观察不同时刻变量值的变化状况。
(2)顺序结构简单编程。请为每个程序设计任务建立一个工程。(代码拍照、2次以上运行结果拍照)
      (2-1)将输入的分钟数转换为某某小时某某分钟。
       运行样例: 输入78 ; 输出:1小时18分
    (2-2)设银行定期存款的年利率为3.15%,设存款年限,存款本金由键盘输入,试编程计算到后的本利之和。
            运行样例:输入15000 3c编程网站 ; 输出:15625.75
      (2-3)将输入的一个小写字符转换为大写形式输出;
                  运行样例: 输入a ;输出 A
      (2-4)输入三个数,利用条件表达式计算三个数的最大值并输出。
运行样例: 输入5 8 7 ;输出 8
                       
  (3)选择结构算法设计与实现(流程图拍照,代码拍照、2次以上运行结果拍照)
      (3-1)计算应付款
图书城开展优惠活动,如果客户一次性购买某书100本以上(包括100本),则8折优惠;如果客户一次购买某书50本以上(包括50本),则9折优惠,其余情况不打折量。设计程序从键盘输入购买书的数量和单价,输出应付款。
3-2)输入年月日三个整数,输出第二天的日期。需考虑闰年。(对于实现根据月份判断天数的选择结构流程的实现分别用if、switch实现)
(4)循环结构算法设计与实现(流程图拍照,代码拍照、2次以上运行结果拍照)
(4-1)输入整数n,打印从n*1到n*9的值
运行样例:
输入:3
输出:3*1=3  3*2=6  3*3=9
(4-2)打印九九乘法表(提示:用双重循环)
   1*1=1 
   2*1=2     2*2=4 
   3*1=3     3*2=6     3*3=9     
 … 
    9*1=9    9*2=18      …     9*9=81
(4-3)牛顿迭代法求平方根输入一个正数,求该数平方根。
牛顿迭代法:为求n的平方根,即计算x2= n的解,令f(x)=x2-n,相当于求解f(x)=0的解。首先取猜测x0(例如可以设初次猜测值为x/2),如果x0不是解,做一个经过(x0,f(x0))这个点的切线,与x轴的交点为x1。 同理,如果x1不是解,做一个经过(x1,f(x1))这个点的切线,与x轴的交点为x2。 以此类推。 以这样的方式得到的xi会无限趋近于f(x)=0的解。 判断xi是否是f(x)=0的解有两种方法: 一是直接计算f(xi)的值判断是否为0,二是判断前后解xi和xi-1是否无限接近(例如二者差值小于0.000001)。经过(xi, f(xi))这个点的切线方程为f(x) = f(xi) + f’(
xi)(x - xi),其中f'(x)为f(x)的导数,本中为2x。令切线方程等于0,即可求出xi+1=xi - f(xi) / f'(xi)。化简可得到迭代公式xi+1=xi - (xi2 - n) / (2xi) = xi - xi / 2 + n / (2xi) = xi / 2 + n / 2xi = (xi + n/xi) / 2。
运行:输入6.0;输出 2.249495
5)综合应用:验证欧拉版哥德巴赫猜想。输入一个两个大于2的偶数,输出该数可以表达成哥德巴赫猜想的方案数目及具体方案。(流程图拍照,代码拍照、2次以上运行结果拍照)
运行样例:
输入10
输出:
2
10=3+7
10=5+5
(注意:10=7+3为10=3+7的等效方案)
(6)*选做为实验1中simpledate.cpp该程序设计的Date类增加add_oneday()函数,使该函数能对当前日期类对象日期增加1天。在主函数内对testdate该对象设定新日期,使该对象调用add_oneday()函数后再调用show_date()函数输出该对象的日期数据信息。。(自编写代码部分、2次以上运行结果拍照)