上海交大 数据结构 实验报告

《数据结构》实验报告

说明:本软件在win7 64位系统测试通过,需要安装.net 3.5以上

版本

七、数制转换问题

1.问题描述

对于输入的任意一个非负十进制整数,输出与其等值的其他进制数(二进制、八进制或十六进制)。

2.任务要求

⑴ 建立模型,确定存储结构;

⑵ 对任意十进制数,实现进制转换问题。

3.实验指导

(1) 实验类型:

设计实验。本实验要求同学们针对“数制转换”这个经典的问题,应用栈的存储结构,自己设计一个方案,并上机实现。此实验的目的是培养学生对数据结构的简单应用能力。 (2) 预备知识:

栈的基本定义、栈的基本操作算法、栈的存储结构。 (3) 实现方法提示:

1) 以十进制转换为八进制为例。将十进制数整除8,计算过程中得到的余数依次进栈,按出栈序列输出栈中的内容即为与输入的十进制数对应的八进制数。设Conversion函数执行数制转换的操作,对(1348)10 转换为8进制的过程如下:

N 1348 168 21 2

2) 设计数制转换的算法。

N div 8 168 21 2 0

N mod 8 4 0 5 2

4.实现方案

1) 方案描述:

本方案采用C#语言实现,实现十进制与其他进制直接的转换 2) 实现代码:

主要实现代码如下

using System;

using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text;

using System.Windows.Forms;

namespace 进制转换器 {

public partial class MainFrm : Form {

public MainFrm() {

InitializeComponent(); }

private void MainFrm_Load_1(object sender, EventArgs e) {

txtStart.Focus(); }

///

/// 十进制转换为八进制 ///

///

private void radio_dto_Click_1(object sender, EventArgs e) {

txtEnd.Text = \;

if (txtStart.Text.Length != 0)

{

// TODO: 十进制转为八进制。 Int32 i; try {

i = Convert.ToInt32(txtStart.Text.Trim()); lblTitle.Text = \十进制转为八进制\; txtEnd.Text = Convert.ToString(i, 8); } catch {

MessageBox.Show(\请输入合法的十进制数\, \提示\, MessageBoxButtons.OK, MessageBoxIcon.Warning); } } else {

MessageBox.Show(\请提供转换数据!\, \提示\, MessageBoxButtons.OK, MessageBoxIcon.Warning); }

txtStart.Focus(); }

///

/// 十进制转换为十六进制 ///

///

private void radio_dth_Click(object sender, EventArgs e) {

txtEnd.Text = \;

if (txtStart.Text.Length != 0) {

// TODO: 十进制转换为十六进制。 Int32 i; try {

i = Convert.ToInt32(txtStart.Text.Trim()); lblTitle.Text = \十进制转换为十六进制\; txtEnd.Text = Convert.ToString(i, 16); } catch {

MessageBox.Show(\请输入合法的十进制数\, \提示\,

MessageBoxButtons.OK, MessageBoxIcon.Warning); } } else {

MessageBox.Show(\请提供转换数据!\, \提示\, MessageBoxButtons.OK, MessageBoxIcon.Warning); }

txtStart.Focus(); }

///

/// 十进制转换为二进制 ///

///

private void radio_dtb_Click(object sender, EventArgs e) {

txtEnd.Text = \;

if (txtStart.Text.Length != 0) {

// TODO: 十进制转换为二进制。 Int32 i; try {

i = Convert.ToInt32(txtStart.Text.Trim()); lblTitle.Text = \十进制转换为二进制\; txtEnd.Text = Convert.ToString(i, 2); } catch {

MessageBox.Show(\请输入合法的十进制数\, \提示\, MessageBoxButtons.OK, MessageBoxIcon.Warning); } } else {

MessageBox.Show(\请提供转换数据!\, \提示\, MessageBoxButtons.OK, MessageBoxIcon.Warning); }

txtStart.Focus(); }

///

/// 八进制到十进制 ///

///

private void radio_otd_Click(object sender, EventArgs e) {

txtEnd.Text = \;

if (txtStart.Text.Length != 0) {

// TODO: 八进制到十进制。 try {

lblTitle.Text = \八进制到十进制\; txtEnd.Text =

Convert.ToString(Convert.ToInt32(txtStart.Text.Trim(), 8));//八进制转为十进制 } catch {

MessageBox.Show(\请提供合法的八进制数\, \提示\, MessageBoxButtons.OK, MessageBoxIcon.Warning); } } else {

MessageBox.Show(\请提供转换数据!\, \提示\, MessageBoxButtons.OK, MessageBoxIcon.Warning); }

txtStart.Focus(); }

///

/// 十六进制到十进制 ///

///

private void radio_htd_Click(object sender, EventArgs e) {

txtEnd.Text = \;

if (txtStart.Text.Length != 0) { try {

// TODO: 十六进制到十进制。

lblTitle.Text = \十六进制到十进制\;

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4