- 实验目的
本次实验通过设计实现几道简单的程序,以熟悉 C++中的简单类型、基本表达式、基本的控制结构相关概念,并能够灵活运用相应机制,提高学生的编程水平。
- 实验环境
操作系统:Windows10
开发工具:Visual Studio2015
实验内容
题目1(§6.6习题3)
Read a sequence of possibly whitespace-separated (name,value) pairs, where the name is a single whitespace-separated word and the value is an integer or a floating-point value. Compute and print the sum and mean for each name and the sum and mean for all names. Hint: §6.1.8.
题目2(§6.6习题16)
Write a function atoi(const char*) that takes a string containing digits and returns the corresponding int. For example, atoi("123") is 123. Modify atoi() to handle C++ octal and hexadecimal notation in addition to plain decimal numbers. Modify atoi() to handle the C++ character constant notation.
题目3(§6.6习题17)
Write a function itoa(int i, char b[]) that creates a string representation of i in b and returns b.
实验步骤
题目1(§6.6习题3)
实验思路:先定义一个结构体wordInfo并用构造函数给出初始值(防止不当输入),用来记录每个特定name出现的次数和总和,使用map定义一个容器,包含特定name和该name的wordInfo;定义一个getInfo()函数用于获取键盘输入信息,保存数据是需要注意判断该name是否已经存在;最后用迭代器遍历map容器的所有数据,计算并得到最后结果。
关键数据结构定义和类的接口定义:
struct wordInfo {
int count;
double sum;
wordInfo() { count = 0; sum = 0; } //构造函数,给出初始值
};
实验源码:
西电软工oop上机题目1(§6.6习题3)实验源码-C++文档类资源-优快云下载
遇到的问题:如何判断name的值是否已经存在?
解决方案:使用操作符 [] 来获得 name 的信息之引用,查看调用该信息即可查看name的属性count是否为0,不为0则已经存在。
题目2(§6.6习题16)
实验思路:程序中除了main函数用于测试外,还定义了三个函数:
symbol()函数,接收每个字符串的首个字符,判断是正负数;
islegal()判断传入的字符串是否符合题目要求的进制数(二、八、十、十六进制) ;
atoi()函数用于将字符串转化为整型数;
首先调用symbol函数,判断正负,然后调用atoi函数,atoi函数内先调用islegal函数判断字符串是否合格,然后从左到右读取字符串。
关键数据结构定义和类的接口定义:无数据结构和类的定义。
实验源码:
西电软工oop上机题目1(§6.6习题16)实验源码6.6-16.cpp-C++文档类资源-优快云下载
遇到的问题:atoi函数在读取字符串进行转换时,正负数的开始位置不同,应该如何控制?
解决方案:在symbol函数判断是否为正负数时,判断完正负数后返回一个能正确读取的位置索引,并将该索引传递给atoi函数即可解决问题。
题目3(§6.6习题17)
实验思路:main函数从键盘获取一个数字,将数字传递给itoa函数,先对数字正负判断,然后判断数的进制,将其他进制的数转换为十进制,对是十进制数从右至左遍历的每一位,借助ASCLL,将每个数字转化为字符。
关键数据结构定义和类的接口定义:无数据结构和类的定义。
实验源码:
西电软工oop上机题目1(§6.6习题17)实验源码6.6-17.cpp-C++文档类资源-优快云下载
遇到的问题:从左至右的遍历时,应该如何每次获取最右边的数字?
解决方案:改用从右至左遍历,每次对数字模10取余,然后再除以10用于下次读取,该方法更为简单。
- 实验结果
题目1
输入:Xi 60 wei 50 .2
Jin 100 wei 40.5 wei 1.1 Jin 200.0
输出:
Xi 总和=60, 平均数=60
Jin 总和=300,平均数=150
wei 总和=91.8,平均数=30.6
总和=451.8, 平均数=75.3
题目2
输入:123 -123 012 -012 0x10 -0x10
输出:123 -123 10 -10 16 -16
题目3
输入:123 0x73 0173 -123 0XFFFFFF85 037777777605
输出:123 123 123 -123 -123 -123
- 实验总结
本次实验通过设计实现几道简单的程序,让我熟悉了C++中的简单类型、基本表达式、基本的控制结构的相关概念,并能在编程中对其灵活运用;掌握了map容器相关概念和基本的使用;实践中,学会了如何对整数进行序列化,整数转换为十进制字符串、或八进制、或十六进制、或二进制字符串;加深我对课堂讲授内容的理解,通过实验上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握C++语言的语法规定,并能够灵活运用相应机制,提高我的编程水平。