C++程序设计-第八周上机实践项目

简介: 回到课程主页,链接:C++程序设计课程主页-2012级本周教学内容:第2章   数据类型和表达式。练习+上机验证练习1:阅读、理解程序  下列程序,在准备期写出程序的运行结果。上机时运行程序,与你的预期进行对照、理解。1.#include <iostream>using namespace std;int main(){ int a,b,c,d;

回到课程主页,链接:C++程序设计课程主页-2012级

本周教学内容:第2章   数据类型和表达式。


练习+上机验证


练习1:阅读、理解程序

  下列程序,在准备期写出程序的运行结果。上机时运行程序,与你的预期进行对照、理解。
1.

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

2.

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

3. 
#include <iostream>
#include<Cmath>
using namespace std;
int main()
{
  int a=1, b=2,c1,c2;
  c1=((a+b)+abs(a-b))/2; //abs()求绝对值
  a=a+b; 
  b=a-b; 
  a=a-b;
  c2=((a+b)+abs(a-b))/2;
  cout<<"a="<<a<<",b="<<b<<endl;
  cout<<"c1="<<c1<<",c2="<<c2<<endl;
  return 0;
} 


4.
#include <iostream>
using namespace std;
int main()
{
  int a=456, x,y,z;
    x=a/100;
    y=a/10-10*x;
    z=a%10;
  cout<<x<<","<<y<<","<<z<<","<<100*z+10*y+x<<endl;
    return 0;
}

练习2:表达式求值——教材P42第5题

  理解表达式求值
  请写出(1)-(8)各表达式的值,并通过上机进行验证、纠错。
  以(6)为例,给出下面的程序框架,供上机验证时参考:

#include <iostream.h>
using namespace std;
int main()
{
    int a=3,b;   //根据给出的初值,确定应该使用的数据类型
    cout<<((int)(a+6.5)%2+(a=b=5))<<endl;  //将要求值的表达式放在括号里,以免在运算优先级上,与<<运算符之间产生纠葛出麻烦
  cout<<.a<<"   "<<b<<endl;    //对于求值中可能改变变量值的表达式,再观察下变量值
    return 0;
}

练习3:表达式求值——P42第6题

  请写出(1)-(6)表达式运算后a的值,并通过上机进行验证、纠错。用于验证的程序请参考练习2.


 上机实战

项目1:尝试“撞错”

  方法指导:主动“撞错”
  在学习程序设计语言的语法时,常会提到这个不行,那个不许之类的,这些东西是记不住的。实际上,也不能去记,不能用那样的学法。
  主动“撞错”,也就是在程序中专门出现不允许出现的情况;但明知山有虎,偏向虎山行;告的你很清楚,这能这样干,你偏要这样干。自然,这样的程序或者在编译时,或者在运行时,总会出错。由于是主动撞错的,你有这样的思想准备,于是能够心平气和地观察这种错误发生后,究竟会有怎样的表现,理解这种要求,从而在自己编制程序时不犯这样的错误,或者当错误发生时,能“一下子”想到,至少能看懂提示的错误信息。
  通过主动“撞错”,你将得到体验,并且也见识了这种错误产生后的现象。当今后编制大程序无意中出现同类错误时,你会微微一笑:“小样,见过你了。” ——在错误中成长,错误是财富;主动试错,是种境界(后半句仅限于学习程序设计,程序中的错误不会造成计算机的损坏,放心去“撞错”)。
  例如,教材P29指出“如果a和b指定为实型变量,则不允许进行求余运算”,设计一个程序,其中包括

  double a=4.6, b=2,c;
  c=a%b;   //显然这种运算是非法的
  cout<<c<<endl;

  上机任务:深刻理解上面讲到的方法,完成下面的工作
  (1)选择本章中提及的你有疑惑的语法规则,设计验证程序,通过主动撞错进行观察和理解。例如(不限以下提示,可以是你在学习中的任务疑问。学习始于自己提出问题,要主动发问。)
求余运算(%)和除运算(/)的除数均不能是0,请“撞错”观察“后果”。
对求余运算(%),教材P32讲“多数编译系统采用……”,Visual C++是怎么做的?“向零取整”是什么意思?请设计实验进行验证。
对求余运算(%),正整数、负整数之间,正整数和负整数进行求余,将程序运行结果与自己的期望结果进行对比后得到结论。
  完成上机报告:针对(1)中的工作,选择其一提交博文介绍你的做法和得到的结论。
  再次强调:程序必须要有注释,这是行业规矩,也是方便读者阅读,以及日后自己整理的必要工作,要习惯于这样做。另外,博文中的代码,要用“插入代码”功能,不会的看老师写的指导文档,或请教老师同学。本事是在实践中练出来的,遇到不会做的事情去逃避,永远不会有进步。忽略难者不会,信奉会者不难。其实,这样的技能,真的不难。注释也是程序的一部分,作为代码一并插入。为防止出现各种可能的意外,请在编好程序后,在VC++6.0环境中写好注释,连同代码一起插入发表博文的页面里。
  下面是参考的报告格式。

上机内容:验证“……”的语法规则
上机目的:学会用“撞错”理解语法要求的方法

/* 
 * Copyright (c) 2012, 烟台大学计算机学院 
* All rights reserved. 
* 作    者:  
* 完成日期:2012 年  月  日 
* 版 本 号:v1.0 
* 
* 输入描述: 无
* 问题描述:设计一个包含错误的程序,验证“……”语法规则,学会“撞错”方法
* 程序输出: 
* 问题分析:
* 算法设计: 
*/  
#include<iostream>  
int main()  
{  
    //代码  
}  
结果(截屏):


观察及体会:(提示的错误、自己的理解、怎样修改程序将为正确,等等。)


我的总结:


  

项目2:计算定期还款额度

  编程序用来计算贷款的定期还款额度,比如买车的贷款。输入本金、贷款的时间长度、每年偿还的次数、贷款利率,程序就会计算出每次应该偿还的额度。
  计算定期还款金额的公式如下

       

  这里rate代表利率,principal代表本金,payPerYear代表每年偿还贷款的次数,numYears代表贷款的年限。
  注意设计出友好的输入输出界面。运行程序时,自拟多组输入数据,通过比较程序输出及手工计算的结果,验证程序是否正确完成计算。
  提交的博文要符合要求!!博文模板在项目1给出的基础上自行修改。
  如果在完成中遇到的困难,看下面的锦囊是否能帮你。
  (1)计算涉及到小数的运算,需要使用浮点类型的数据来进行计算,一般常用double类型。
  (2)本题要使用幂运算,C++中用pow()函数来完成求幂。result = pow ( base, exp); 得到的是base的exp次幂,其中base和exp都是double类型的数据,求值的结果也是double类型的。要调用pow()函数,必须在程序开始处写:#include<Cmath>
  (3)编出这个程序的步骤

  • 先定义程序中将使用到的变量:
 double principal; //原始的本金
 double rate; //利率,例如,0.075
 ……         //其他需要的变量,自己写出

  注意上面在变量声明后的注释,用于描述变量的作用,这样有助于别人阅读我们的程序,也能很容易地明白各个变量的作用。这种做法值得提倡,特别是当程序变得越来越大,越来越复杂的时候。
  • 输入用于计算的数值
 cout << "输入本金:";
 cin >> principal;
 ……      //类似的输入,自己写出
  • 设计用来计算的代码
  注意到本题中的式子比较复杂,直接写出来的表达式将是“懒婆娘的裹脚步”。实际上,出于对正确性、可读性方面的考虑,在计算时,并不一定要将一个复杂的计算公式用一个表达式写出来,通过加入新的变量,计算到中间结果,然后再计算最后结果,例如下面的实现中,引入了表示分子和分母的变量number、denom,和在求幂时表示底数和指数的变量b和e。请理解这种技巧。当然,在程序中,需要加入对这几个变量的定义。
  完成计算的式子可以是:
 number = rate * principal / payPerYEar;
 e = -(payPerYear * numYears );
 b = (rage / payPerYears )+1
 denom = 1 - pow(b,e);  
 payment = number / denom;
  • 最后,输出还款额
 cout << "Payment is " << Payment;

项目3:求两点间距离

  输入两个点的坐标,求两点之间的距离并输出。提示:(1)两点的坐标用4个变量x1,y1,x2,y2表示,输入坐标值后,按求两点间距离的公式计算出距离输出即可;(2)求距离要开平方,开平方需要调用函数sqrt()实现。例如,用sqrt(x)可以求出x的平方根。要调用sqrt()函数,必须在程序开始处写:#include<Cmath>(可以试试“撞错”,看看不加#include<Cmath>会怎样)。


项目4:关于圆的计算

  输入半径r和高h,计算并输出半径为r的圆的面积、周长,半径为r的球的体积、表面积,半径为r,高为h的圆柱、圆锥的体积、表面积等。要求π值用符号常量表示。
  

项目5:字符加密

  加密规则为用原来字母后面的第4个字母代替原来的字母。具体见P42第8题。




  

目录
相关文章
|
2月前
|
存储 算法 C++
【C++数据结构——查找】二分查找(头歌实践教学平台习题)【合集】
二分查找的基本思想是:每次比较中间元素与目标元素的大小,如果中间元素等于目标元素,则查找成功;顺序表是线性表的一种存储方式,它用一组地址连续的存储单元依次存储线性表中的数据元素,使得逻辑上相邻的元素在物理存储位置上也相邻。第1次比较:查找范围R[0...10],比较元素R[5]:25。第1次比较:查找范围R[0...10],比较元素R[5]:25。第2次比较:查找范围R[0..4],比较元素R[2]:10。第3次比较:查找范围R[3...4],比较元素R[3]:15。,其中是顺序表中元素的个数。
153 68
【C++数据结构——查找】二分查找(头歌实践教学平台习题)【合集】
|
2月前
|
存储 C语言 C++
【C++数据结构——栈与队列】顺序栈的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现顺序栈的基本运算。开始你的任务吧,祝你成功!​ 相关知识 初始化栈 销毁栈 判断栈是否为空 进栈 出栈 取栈顶元素 1.初始化栈 概念:初始化栈是为栈的使用做准备,包括分配内存空间(如果是动态分配)和设置栈的初始状态。栈有顺序栈和链式栈两种常见形式。对于顺序栈,通常需要定义一个数组来存储栈元素,并设置一个变量来记录栈顶位置;对于链式栈,需要定义节点结构,包含数据域和指针域,同时初始化栈顶指针。 示例(顺序栈): 以下是一个简单的顺序栈初始化示例,假设用C语言实现,栈中存储
167 77
|
2月前
|
存储 C++
【C++数据结构——树】哈夫曼树(头歌实践教学平台习题) 【合集】
【数据结构——树】哈夫曼树(头歌实践教学平台习题)【合集】目录 任务描述 相关知识 测试说明 我的通关代码: 测试结果:任务描述 本关任务:编写一个程序构建哈夫曼树和生成哈夫曼编码。 相关知识 为了完成本关任务,你需要掌握: 1.如何构建哈夫曼树, 2.如何生成哈夫曼编码。 测试说明 平台会对你编写的代码进行测试: 测试输入: 1192677541518462450242195190181174157138124123 (用户分别输入所列单词的频度) 预
72 14
【C++数据结构——树】哈夫曼树(头歌实践教学平台习题) 【合集】
|
2月前
|
存储 C++ 索引
【C++数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】
【数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】初始化队列、销毁队列、判断队列是否为空、进队列、出队列等。本关任务:编写一个程序实现环形队列的基本运算。(6)出队列序列:yzopq2*(5)依次进队列元素:opq2*(6)出队列序列:bcdef。(2)依次进队列元素:abc。(5)依次进队列元素:def。(2)依次进队列元素:xyz。开始你的任务吧,祝你成功!(4)出队一个元素a。(4)出队一个元素x。
67 13
【C++数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】
|
2月前
|
算法 C++
【C++数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】
【数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】 目录 任务描述 相关知识 测试说明 我的通关代码: 测试结果: 任务描述 本关任务:实现二叉排序树的基本算法。 相关知识 为了完成本关任务,你需要掌握:二叉树的创建、查找和删除算法。具体如下: (1)由关键字序列(4,9,0,1,8,6,3,5,2,7)创建一棵二叉排序树bt并以括号表示法输出。 (2)判断bt是否为一棵二叉排序树。 (3)采用递归方法查找关键字为6的结点,并输出其查找路径。 (4)分别删除bt中关键
66 11
【C++数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】
|
2月前
|
C++ 芯片
【C++面向对象——类与对象】Computer类(头歌实践教学平台习题)【合集】
声明一个简单的Computer类,含有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,以及两个公有成员函数run、stop。只能在类的内部访问。这是一种数据隐藏的机制,用于保护类的数据不被外部随意修改。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。成员可以在派生类(继承该类的子类)中访问。成员,在类的外部不能直接访问。可以在类的外部直接访问。为了完成本关任务,你需要掌握。
86 19
|
2月前
|
存储 编译器 数据安全/隐私保护
【C++面向对象——类与对象】CPU类(头歌实践教学平台习题)【合集】
声明一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,以及两个公有成员函数run、stop。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。​ 相关知识 类的声明和使用。 类的声明和对象的声明。 构造函数和析构函数的执行。 一、类的声明和使用 1.类的声明基础 在C++中,类是创建对象的蓝图。类的声明定义了类的成员,包括数据成员(变量)和成员函数(方法)。一个简单的类声明示例如下: classMyClass{ public: int
83 13
|
2月前
|
Java C++
【C++数据结构——树】二叉树的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现二叉树的基本运算。​ 相关知识 创建二叉树 销毁二叉树 查找结点 求二叉树的高度 输出二叉树 //二叉树节点结构体定义 structTreeNode{ intval; TreeNode*left; TreeNode*right; TreeNode(intx):val(x),left(NULL),right(NULL){} }; 创建二叉树 //创建二叉树函数(简单示例,手动构建) TreeNode*create
61 12
|
2月前
|
C++
【C++数据结构——树】二叉树的性质(头歌实践教学平台习题)【合集】
本文档介绍了如何根据二叉树的括号表示串创建二叉树,并计算其结点个数、叶子结点个数、某结点的层次和二叉树的宽度。主要内容包括: 1. **定义二叉树节点结构体**:定义了包含节点值、左子节点指针和右子节点指针的结构体。 2. **实现构建二叉树的函数**:通过解析括号表示串,递归地构建二叉树的各个节点及其子树。 3. **使用示例**:展示了如何调用 `buildTree` 函数构建二叉树并进行简单验证。 4. **计算二叉树属性**: - 计算二叉树节点个数。 - 计算二叉树叶子节点个数。 - 计算某节点的层次。 - 计算二叉树的宽度。 最后,提供了测试说明及通关代
60 10
|
2月前
|
算法 C++
【C++数据结构——图】最小生成树(头歌实践教学平台习题) 【合集】
【数据结构——图】最小生成树(头歌实践教学平台习题)目录 任务描述 相关知识 测试说明 我的通关代码: 测试结果:【合集】任务描述 本关任务:编写一个程序求图的最小生成树。相关知识 为了完成本关任务,你需要掌握:1.建立邻接矩阵,2.Prim算法。建立邻接矩阵 上述带权无向图对应的二维数组,根据它建立邻接矩阵,如图1建立下列邻接矩阵。注意:INF表示无穷大,表示整数:32767 intA[MAXV][MAXV];Prim算法 普里姆(Prim)算法是一种构造性算法,从候选边中挑
49 10

热门文章

最新文章