西电软工oop面向对象程序设计实验一上机报告

本次实验旨在通过实现C++程序,加深对简单类型、表达式和控制结构的理解。实验涉及处理(name, value)对的求和与平均值计算,整数字符串转换,并将整数转换为不同进制的字符串。实验中运用了map容器,自定义结构体及函数,解决了数据存储和字符串处理的问题,提升了编程技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 实验目的

本次实验通过设计实现几道简单的程序,以熟悉 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++语言的语法规定,并能够灵活运用相应机制,提高我的编程水平。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值