范文一:数制转换数据结构
西安文理学院软件学院 课程设计报告
设计名称:
设计题目:数制转换
学生学号:1402120335
专业班级:12级 3班
学生姓名:王康琦
学生成绩:
指导教师(职称) :
课题工作时间:2014.6.16 至 2014.6.27
说明:
1、报告中的任务书、进度表由指导教师在课程设计开始前填写并发给每个 学生。
2、学生成绩由指导教师根据学生的设计情况给出各项分值及总评成绩。
3、所有学生必须参加课程设计的答辩环节,凡不参加答辩者,其成绩一律 按不及格处理。答辩由指导教师实施。
4、报告正文字数一般应不少于 3000字,也可由指导教师根据本门综合设 计的情况另行规定。
5、平时表现成绩低于 6分的学生,取消答辩资格,其本项综合设计成绩按 不及格处理。
软件学院课程设计任务书
指导教师:杨全 院长:
日 期:2014年 6月 16日
软件学院课程设计进度安排表
学生姓名:王康琦 学号:1402120327专业:软件工程 班级:12级三班
指导教师签名:
2014年 6月 16日
成绩评定表
学生姓名:王康琦 学号:1402120327 专业:软件工程 班级:12级三班
目录
第一章 课题背景 . ........................................................................................................................................ 1 1.1 引言 . ................................................................................................................................................. 1 1.1.1 课程设计目的 . ...................................................................................................................... 1 第二章 设计简介及设计方案论述 . ............................................................................................................ 2 2.1 选题分析 . ......................................................................................................................................... 2 2.1.1数组的结构 . ........................................................................................................................... 2 2.1.2栈的结构 . ............................................................................................................................... 2 2.1.3递归的结构 . ........................................................................................................................... 2 第三章 详细设计 . ........................................................................................................................................ 3 3.1 算法说明 . ......................................................................................................................................... 3 3.1.1 数组的算法 . .......................................................................................................................... 3 3.1.2 栈的算法 . .............................................................................................................................. 4 3.1.3 递归的算法 . .......................................................................................................................... 4 3.2 变量设计 . ......................................................................................................................................... 4 3.3 函数功能设计 . ................................................................................................................................. 5 第四章 设计结果及分析 . ............................................................................................................................ 6 4.1 运行与调试说明及分析 . ................................................................................................................. 6 总结 . .............................................................................................................................................................. 10 参考文献 . .......................................................................................................................................................11
摘 要
摘要:在生活中我们经常会遇到各式各样的数制,例如 2, 8, 10, 16进制,其实数制 之间的转换问题不仅仅是数学问题,还是我们计算机需要研究的范围之一,其中包括有 数据结构, C 语言中的递归算法与数组的存储问题。本设计在 2, 8, 10, 16进制之间, 能实现对输入的任意数制进行相对应的数制转换。 在此程序设计中我采用了 C 语言中的数 组与递归的算法,以及数据结构中的栈, 实现了如下功能:1. 对输入的任意数制能够求出此数 的 10进制值 2. 实现在 2, 8, 10, 16进制之间对输入的任意数制 x 向任意的一个非 M 进制数的 转换。 3. 至少用两种或两种以上的算法实现上述功能要求。 系统开发平台为 Windows7,程序 设计设计语言采用 C 语言,程序运行平台为 VC++6.0。
关键词:程序设计;数制转换; C ;课程设计;数据结构
第一章 课题背景
1.1 引言
1.1.1 课程设计目的
在生活中我们经常会遇到各式各样的数制,例如 2, 8, 10, 16进制,其实数制之 间的转换问题不仅仅是数学问题,还是我们计算机需要研究的范围之一。高速发展的现 代社会,计算机浩浩荡荡地成为了人们生活中不可缺少的一部分,帮助人们解决通信, 联络,互动等各方面的问题。计算机在处理数字是和人是不同的,计算机使用的是二进 制,人们在日常生活中使用十进制,但是在一些特定场合使用其他进制的表示,所以需 要进行不同进制之间的转换其中包括有数据结构, C 语言中的递归算法与数组的存储问 题。本设计在 2, 8, 10, 16进制之间,能实现对输入的任意数制进行相对应的数制转 换。在此程序设计中我采用了 C 语言中的数组与递归的算法,以及数据结构中的栈, 实现了如下功能:1. 对输入的任意数制能够求出此数的 10进制值 2. 实现在 2, 8, 10, 16进制之间对输入的任意数制 x 向任意的一个非 M 进制数的转换。 3. 至少用两种或 两种以上的算法实现上述功能要求。在程序设计中,可以用使用很多种方法解决该问 题。例如:数组、栈、递归。不同的方法实现转换的原理基本相同,只是代码的细节不 同。 在我的程序中不同的方法所需的函数在一个单独的头文件里面,便以管理和修改。
第二章 设计简介及设计方案论述 2.1 选题分析
2.1.1数组的结构
为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来的一种形式。 这些按序排列的同类数据元素的集合称为数组。由于处理简单的情况,最大的数字将不 大于整形的范围,整形为 4个字节,因此开辟的数组为 33个元素。
2.1.2栈的结构
栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按 照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数 据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来) 。栈具有记忆作用,对 栈的插入与删除操作中,不需要改变栈底指针。在此程序中我首先定义了一个结构体, 结构体中包含栈元素的首地址、栈顶位置、栈顶位置、栈的最大范围。栈元素的存储空 间在程序中再动态开辟。和上面一样,栈的最大为 33。
2.1.3递归的结构
递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明 中有直接或间接调用自身的一种方法, 它通常把一个大型复杂的问题层层转化为一个与 原问题相似的规模较小的问题来求解, 递归策略只需少量的程序就可描述出解题过程所 需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定 义对象的无限集合。在这个程序中,递归不需要自己定义存储空间,大量的减少了需要 定义变量所需要的存储空间。
第三章 详细设计
3.1 算法说明
在此程序的算法设计中,我采用了数组,栈,递归的算法。
3.1.1 数组的算法
M 进制转十进制:从该 M 进制数的最后一位开始算,依次列为第 0、 1、 2...n 位并 分别乘以 M 的 0、 1、 2...n 次方,将得到的次方相加便得到对应的十进制数。由于输入 的 M 进制的数可能出现字符,所以使用了字符数组进行存储。并在输入后将字符全部 转换为数字,并存储到全局变量 s 数组里面,每个数组元素存储一位。
图 3-1 M进制转十进制处理流程图
十进制转换为其他进制:首先取 x 对需要转换的进制 n 取余,然后再对其取整,将 取到的余数存入数组中,然后重复上面的步骤,将得到的余数依次存入数组中,知道 x 变成 0。然后将数组反向输出。输出的数可能大于 10,所以进行了必要的判断。
3.1.2 栈的算法
算法思路和上面基本相同, 只是将取到的余数依次入栈, 输出时只要依次出栈就行。
3.1.3 递归的算法
递归过程中不需要另外的存储取到的余数,只需要在递归返回时输出相应的结果就
行。
3.2 变量设计
#define MAX 0x7fffffff 定义了整形数的最大值,防止数字溢出。 int m; 用于表示输入的数据是哪个进制的数。
char s[33]; 输入时用于存储输入的十进制数 x 的 m 进制表示。
处理过程中用于存储 m 进制表示的每一位所代表的的数字。
int n; 要将输入的 m 进制数转换成的进制。 int len; 输入的字符数据有多长。
注:其他变量在程序中均有说明。
3.3 函数功能设计
表 5-1 程序中的函数
第四章 设计结果及分析 4.1 运行与调试说明及分析
程序开始运行时提示用户按照规定的输入格式输入数据
数据的进制不能超过 36,因为 36
后不好表达。 数据中也不能出现除 a..z,A..Z,0..9之外的字符
m 进制数中的每一位不可能大于等于 m ,否则数据应该是错的。
当数据输入正确时将给出不同进制之间的转换结果
输出完成后,程序将正常结束。
总结
数据结构是一门纯属于设计的科目,它需用把理论变为上机调试。在学习科目的第 一节课起,老师就为我们阐述了它的重要性。它对我们来说具有一定的难度。它是其它 编程语言的一门基本学科。
刚开始学的时候确实有很多地方我很不理解,每次上课时老师都会给我们出不同的 设计题目,对于我们一个初学者来说,无疑是一个具大的挑战,撞了几次壁之后,我决 定静下心来, 仔细去写程序。 老师会给我们需要编程的内容一些讲解, 顺着老师的思路, 来完成自己的设计,我们可以开始运行自己的程序,可是好多处的错误让人看的可怕, 还看不出到底是哪里出现了错误, 但是程序还是得继续下去, 我多次请教了老师和同学, 逐渐能自己找出错误,并加以改正。 VC++6.0里检查错误有时候真是让你难以找到为什 么错。经过了这次课程设计,现在已经可以了解很多错误的原因,这对我来说是一个突 破性的进步,眼看着一个个错误通过自己的努力在我眼前消失,觉得很是开心。在这一 段努力学习的过程中,我的编程设计有了明显的提高。
虽然程序中不是很完美,还未能实现对小数之间的数制转换问题,但是对于我来说 已经不错了,今后还需继续努力。
参考文献
[1] 谭浩强 . C 语言程序设计教程 . 北京:清华大学出版社, 2008 [2] 严蔚敏,吴伟民 . 数据结构(C 语言版) . 清华大学出版社, 2010 [3] 王晓东 . 计算机算法设计与分析 . 电子工业出版社, 2007
附录 1:源程序清单
//程序名称:课程设计 .c
//程序功能:分别采用数组、栈、递归实现进制间的转换
//程序作者:余岁
//最后修改日期:2014-6-24
#include #include #include #include #include #include #include int main() { int x, i; while ( 1 ) { system( system( //提示用户按照正确的格式输入数据 printf( //读入数据 scanf( if ( m == n ) { printf( } else if ( m>36 || n>36 ) { printf( } else { //计算数字用 m 进制表示时的位数 len = strlen( s ); //数据的位数 for ( i=0; i if ( s[i]<48 ||="" (="" s[i]="">=58 && s[i]<=64 )="">=64> ( s[i]>=91 && s[i] <= 96="" )="" ||="" s[i]="">122 ) break; if ( i != len ) { printf( continue; } Convert( s ); //将字符数据转换为数字,并存入数组中 for ( i=0; i if ( s[i] > m ) break; if ( i != len ) { printf( continue; } break; } } //计算出 x 的十进制表示,便以后面的使用 //输出使用数组计算出的结果 printf( //输出使用递归计算出的结果 printf( //x的 n 进制表示,用数组实现 printf( Turnx( x ); //x的 n 进制表示,用递归实现 printf( Recursion( x ); //x的 n 进制表示,用堆栈实现 printf( UseStack( x ); return 0; } //头文件名称:array.h /****************************************\ *功能:将 m 进制的数转换成十进制数 *参数:l: s数组元素的个数 \****************************************/ int Turn10( int l ) { int a[32]={1}, i=0, result; //数组 a 存储 m 的 k 次幂 , result为转换后的十进制数 //当 a[i]*m不会超出整形范围 while ( a[i] <= max/m="">=> { 第 14页 共 27 页 ++i; } i = result = 0; //初始化 result for ( --l; l>=0; --l, ++i ) //当 s 的下标减少时, a 的下标应该增加 { result += s[l]*a[i]; //将得到的次方乘以 x 中一位相乘后相加 } return result; //返回得到的十进制数 } /****************************************\ *功能:将十进制的数转换成 n 进制数 *参数:x: 十进制数值 \****************************************/ void Turnx( int x ) { int i=0, t; char result[32]; //n进制表示的每一位 while ( x ) //当 x 不为 0时 { t = x%n; //用 t 保存 x 对 n 的余数,便以下面判断 if ( t > 9 ) result[i++] = t-10+'A'; //大于 9的数用字母 A..F 表示 else result[i++] = t+'0'; //小于 9的数用字符 0..9表示 x /= n; } for ( --i; i>=0; --i ) //逆向输出每一位 第 15页 共 27 页 printf( } //头文件名称:public.h #define MAX 0x7fffffff int m; //输入的数据为哪个进制 int n; //要转换成哪个进制 int len; //输入的字符串的长度 char s [33]; //m进制数 /****************************************\ *功能:将输入的数据转换成数字 *参数:s :输入的 x 的 m 进制的字符串指针 \****************************************/ void Convert( char *s ) { int i = 0; //从字符串的 0地址开始 while ( s[i] ) //当 s[i]! =0的 { //字符转换成对应的数字 if ( s[i]>='a' && s[i]<='z'>='z'> s[i] = s[i]-'a'+10; else if ( s[i]>='A' && s[i]<='z'>='z'> s[i] = s[i]-'A'+10; else s[i] -= '0'; ++i; } } 第 16页 共 27 页 //头文件名称:Recursion.h /****************************************\ *功能:将 m 进制转换成 10进制 *参数:k :初始化时为 s 数组元素的个数,递归时为数组的下标 c :m 的 k-1次方 \****************************************/ int CalcRecursion( int k, int c ) { if ( k >= 0 ) //下标 >=0时 { //返回 k 对应的元素乘以对应的次方 return s[k]*c + CalcRecursion( k-1, c*m ); } else return 0; } /****************************************\ *功能:将十进制数 x 转换成 n 进制数 *参数:x:十进制数 x \****************************************/ void Recursion( int x ) { int t; if ( x > 0 ) { Recursion( x/n ); t = x%n; if ( t > 10 ) printf( 第 17页 共 27 页 else printf( } } //头文件名称:stack.h #include #define MAXSTACK 33 //堆栈的最大位置 //定义栈数据结构 typedef struct _stack { int *addr; //栈的存储地址 int length; //栈的最大长度 int top; //栈顶 int bottom; //栈底 }STACK, *PSTACK; /****************************************\ *功能:初始化栈 *参数:s :栈的地址 \****************************************/ void InitStack( PSTACK s ) { s->addr = malloc( MAXSTACK*sizeof( int ) ); //申请空间 s->length = MAXSTACK; //设定栈的最大长度 s->top = -1; s->bottom = 0; //初始化栈指针 } /****************************************\ *功能:将一个元素压入栈中 第 18页 共 27 页 *参数:s :栈的地址 x :要压入的元素 \****************************************/ void Push( PSTACK s, int x ) //压入栈 { ++s->top; //栈顶上移 s->addr[s->top] = x; //数据进栈 } /****************************************\ *功能:取出栈顶元素 *参数:s :栈的地址 \****************************************/ int Pop( PSTACK s ) //弹出数据 { int t; t = s->addr[s->top]; //取出栈顶元素 --( s->top ); //栈顶下移 return t; //返回栈顶元素 } /****************************************\ *功能:将十进制数 x 转换成 n 进制数 *参数:x :要转换的十进制数 \****************************************/ void UseStack( int x ) { STACK s; //定义栈变量 int t; 第 19页 共 27 页 InitStack( &s ); //初始化堆栈 //当 x 不为 0,将 x 除 n 的余数进栈 while ( x ) { Push( &s, x%n ); x /= n; } while ( s.top >= s.bottom ) //未到栈底 { t = Pop( &s ); //取出栈顶元素 if ( t > 10 ) //判断元素是否大于 10 printf( else printf( } printf( } 第 20页 共 27 页 实验一 栈的应用 数制转换 1(程序设计简介 该程序以顺序栈为工具,实现十进制数到其他一至十六进制数的转换。 设计中采用了一个循环,使得用户可重复进行数制转换。需转换的十进制数和要转换的 数制均通过交互方式输入。因采用了顺序栈,程序中包含SqStack.h 。 2(源程序 #include template void convert(T n,T m) {//把十进制数n转换为m进制数 T e; char c; SqStack cout<><> while(n) { try { s.Push(n%m);} catch(char *err) { cout<> n=n/m; } cout<><><<"进制数为:";><"进制数为:";> while(!s.StackEmpty()) { try { e=s.Pop (); if(e<10)>10)> cout<><<'\t';><'\t';> else { c='A'+e-10; cout<><<'\t';><'\t';> } } catch(char *err) { cout<> }// cout } void main() { int n,m;//分别存放被转换的数及转换数制 char ans; //工作变量,存放是否继续的应答 int flag=1;//工作变量,是否继续的标志 while(flag) { cout<<"输入需转换的十进制数: ";=""><"输入需转换的十进制数:> cin>>n; cout<<"输入需转换的数制: ";=""><"输入需转换的数制:> cin>>m; convert(n,m); cout<<"继续吗(y><"继续吗(y> cin>>ans; if(ans=='Y'||ans=='y') flag=1; else { flag=0; cout<> } }//while }//main 3(程序运行结果 实验二 表达式括号匹配配对判断问题 1(问题描述 假设一个算法表达式中包括圆括号、方括号两种,设计判别表达式中括号是否正确匹配的算法。 2(基本要求 (1)表达式用字符串表示,以初始化方式创建或以交互方式创建; (2)借助栈进行算法设计; (3)输出:显示表达式,并给出匹配处理结果:匹配、不匹配(右括号多、左括号多等)。 3(思想 step1:创建一个栈; step2:从左到右扫描表达式,直至表达式结束; 2.1:如果是左括号,入栈;取下一个字符; 2.2:如果是右括号: 2.2.1:与栈顶括号匹配,则出栈,消去一个左括号,取下一个字符; 2.2.2:与栈顶括号不匹配,得到“不匹配”,结束; 2.2.3:栈空,得到“不匹配”,结束; step3:若栈空,则表达式中括号匹配,否则不匹配。 4(源程序 #include #include"process.h"//exit() #include"stdio.h"//EOF,NULL struct Node { int top; char data[stacksize]; }; Node node; void InitStack( ) // 初始化栈 { node.top=-1; } sqstack(int n) { base=newT[m]; if(base=NULL){ cout<<"创栈失败";><"创栈失败";> exit(1); } stacksize=m;top=-1;} } voidPush(charx) { if(node.top==stacksize-1); node.top++; node.data[node.top]=x; } void Pop(char &x) { if(node.top==-1); x=node.data[node.top--];} for(i=0;*(p+i)!='\0'&&count!=0;i++) { switch (*(p+i)) { case '(' : Push(*(p+i)) ; break ; case '[' : Push(*(p+i) ) ; break ; case ')' : { Pop(e) ; if ( e!='(' ) count=0 ; }; break ; case ']' : { Pop(e) ; if ( e!='[' ) count=0 ; }; break ; default:break; } } if ( !StackEmpty () || count==0 ) { cout<> cout<<"继续吗,(y><"继续吗,(y> cin>>s; if(s=='y'||s=='Y') goto input; else if(s=='n'||s=='N') cout<> return 0; } else { cout<> cout<<"继续吗,(y><"继续吗,(y> cin>>s; if(s=='y'||s=='Y') goto input; else if(s=='n'||s=='N') cout<> return 0; } 5(程序运行结果: 总结与心得: 这次实验中有些C++语句有些遗忘,编写源代码时还顺带复习了一下大一的C++知识, 才还算可以地解决了问题,但自己做的程序还有不足之处,比如要求给出匹配处理结果:匹 配、不匹配(右括号多、左括号多等),由于时间和能力关系我只能给出“匹配”、“不匹配”, 不能判断是右括号多还是左括号多,但以后我将请教圆满实现了该程序的同学,将自己的思 想、程序进行改善,争取更大的进步~ 作业:十进制转化为n进制 #include #include #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 //typedef char SElemType; typedef int SElemType; typedef struct{ SElemType *base; SElemType *top; int stacksize; }SqStack; void InitStack(SqStack &S){ S.base=(SElemType *)malloc(STACK_INIT_SIZE *sizeof(SElemType)); if(!S.base) printf("存储分配失败"); S.top=S.base; S.stacksize=STACK_INIT_SIZE; } int Empty(SqStack S){ if(S.top==S.base) return 1; else return 0; } int GetTop(SqStack S,SElemType &e){ if(Empty(S)) return 0; e=*(S.top-1); return 1; } int Push(SqStack &S,SElemType e){ if(S.top-S.base>=S.stacksize){ S.base=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType)); if(!S.base) printf("OVERFLOW"); S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *S.top++=e; return 1; } int Pop(SqStack &S,SElemType &e){ if(Empty(S)) return 0; e=*--S.top; return 1; } void DispStack(SqStack S){ SElemType *p; p=S.top; if(Empty(S)) printf("空栈"); else{ while(p!=S.base){ printf("%c",*--p); } } } void Conversion(){ SqStack S; int N,a,e; InitStack(S); printf("要转换为几进制,"); scanf("%d",&a); printf("请输入待转换数"); scanf("%d",&N); while(N){ Push(S,N%a); N=N/a; } while(!Empty(S)){ Pop(S,e); printf("%d",e); } printf("\n"); } void main(){ Conversion(); } 实验名称:数制转换 实验目的:更加了解栈的使用,栈的各项操作。 熟悉 C 语言的编程。 实验程序: #include #include #define stackintsize 100 #define stackment 10 typedef int status; typedef int elemtype; typedef struct{ elemtype *base; elemtype *top; int stacksize; } stack; bool InitStack(stack &s) { s.base=(elemtype * )malloc(stackintsize * sizeof(elemtype)); if(!s.base)exit(0); s.top=s.base; s.stacksize=stackintsize ; return true; } bool push(stack &s,elemtype e) { if(s.top-s.base>=s.stacksize){ s.base=(elemtype*)realloc(s.base,(s.stacksize+stackment)*sizeof(elemt ype)); if(!s.base)exit(0); s.top=s.base+s.stacksize; s.stacksize+=stackment; } *s.top++=e; return true; } bool pop(stack &s,elemtype &e) { if(s.base==s.top)return false; e=*--s.top; return true; } main() { elemtype n,e; stack s; InitStack(s); scanf( while(n){ push(s,n%8); n=n/8; } while(s.top!=s.base) { pop(s,e); printf( } printf( } 实验总结: 在编程的时候应该注意大小写, 变量的定义。 对于细节还是应该注意, 往往一个 小小的出错就可以造成程序运行不了的后果。 通过实验对于栈的基本使用方法有 了了解。 每种结构都有其优缺点, 在以后的学习中我想应该总结各个结构的优缺 点,合理的把它们用在编程。 数制转换 题目:数制转换 问题描述:存在一十进制数 (正整数 )n ,以及一个进制 m ,编写程序将 n 转换为 m 进制表示 并输出。 基本要求:使用栈来完成该程序。 m 至少为 2。 一、需求分析: 用栈结构实现进制转换。 栈结构的特性是“先进后出” 。 二、概要设计: 1. 建立一个的结构体。 2. 栈为空。 3. 把 n 转换成 m 进制数并且压入栈 4. 将栈内数据弹出栈。 5. 输出时将 0及其以上的数字转换成对应 的字符。 三、详细设计: 结构体定义: struct stack { int data; struct stack *next; }; 函数入栈: push(t,x) struct stack **t; int x; { struct stack *temp; temp=(struct stack *)malloc(sizeof(struct stack)); temp->data=x; temp->next=*t; *t=temp; } 函数出栈: pop(t) struct stack **t; { int x; struct stack *t1=*t; if(!stackempty(t1)) { x=t1->data; *t=t1->next; free(t1); return(x); } 数据输入进制转换: void conversion() { struct stack *s; int e,n, m; Initstack(&s); do { printf( scanf( }while (n<> do { printf( scanf( }while (m<2||m>36); while(n){ push(&s,n%m); n=n/m; } while(!stackempty(s)){ e=pop(&s); if(e<> printf( else switch(e) { case 10: printf( case 16: printf( case 17: printf( case 18: printf( case 19: printf( case 20: printf( case 21: printf( case 22: printf( case 23: printf( case 24: printf( case 25: printf( case 26: printf( case 27: printf( case 28: printf( case 29: printf( case 30: printf( case 31: printf( case 32: printf( case 33: printf( case 34: printf( case 35: printf( } } } 主函数调用: main() { conversion(); getch(); } 四、调试分析: 当进制大于 10的时候输出的是 10,用户分布清楚是十进制表示的 2还是是 10。 故在输出的时候当输出的是(10~~35)用对应的(A~~Z)输出显示。 当输入的 n 大于 32767时,会产生溢出。结果会出错。 五、用户手册: 该程序能进行进制转换的最小值 1, 最大值为 32767。最多转换成 36进制的数。 六、测试结果: 结果正确。 结果正确。 (当输入 n 值大于 32767是重新输入直到小于输入的值小于 32767再输入 m 的值,当 m 的 值大于 36是重新输入直到一个小于 37的值 . 得到正确的结果。 ) 结果正确。 结果正确。 七、源程序清单: #include struct stack { int data; struct stack *next; }; stackempty(s) struct stack *s; { return (s==NULL); } void Initstack(struct stack **ps) { *ps=NULL; } push(t,x) struct stack **t; int x; { struct stack *temp; temp=(struct stack *)malloc(sizeof(struct stack)); temp->data=x; temp->next=*t; *t=temp; } pop(t) struct stack **t; { int x; struct stack *t1=*t; if(!stackempty(t1)) { x=t1->data; *t=t1->next; free(t1); return(x); } } void conversion() { struct stack *s; int e,n,m; Initstack(&s); do { printf( scanf( }while (n<> do { printf( scanf( }while (m<2||m>36); while(n){ push(&s,n%m); n=n/m; } while(!stackempty(s)){ e=pop(&s); if(e<> printf( else switch(e) { case 10: printf( } } main() { conversion(); getch(); }范文二:数据结构—数制转换
范文三:数据结构:数制转换
范文四:数制转换(数据结构-C语言)
范文五:数据结构实验数制转换