数制转换(数据结构-C语言)

合集下载

c语言数制转换课程设计

c语言数制转换课程设计

c语言数制转换课程设计一、课程目标知识目标:1. 理解数制的概念,掌握二进制、十进制、八进制和十六进制的基本转换方法;2. 学会使用C语言进行不同数制间的转换,并理解其编程原理;3. 掌握C语言中的位运算符及其应用。

技能目标:1. 能够运用数制转换知识,解决实际问题,如编写程序进行十进制到二进制的转换;2. 培养逻辑思维能力和编程技能,通过编写数制转换程序,提升代码编写和调试能力;3. 学会分析问题,将实际问题转化为数制转换问题,并运用C语言进行求解。

情感态度价值观目标:1. 培养学生的编程兴趣,激发他们对计算机科学的热爱;2. 培养学生合作学习、互相帮助的精神,提高团队协作能力;3. 培养学生勇于尝试、积极探究的学习态度,增强克服困难的信心。

分析课程性质、学生特点和教学要求,本课程目标注重理论与实践相结合,旨在让学生在掌握数制转换知识的基础上,通过实际编程操作,提高解决问题的能力。

课程目标具体、可衡量,便于教师进行教学设计和评估,同时引导学生明确学习方向,提高学习效果。

二、教学内容1. 数制基本概念:二进制、十进制、八进制、十六进制的定义及特点;2. 数制转换原理:不同数制之间的转换方法,如十进制转二进制、二进制转十进制等;3. C语言数制转换编程:使用C语言实现数制转换算法,包括位运算符的使用;4. 教材章节关联:《C语言程序设计》第四章第三节,涉及位运算和数制转换;5. 教学大纲:a. 第一课时:数制基本概念及转换原理;b. 第二课时:C语言数制转换编程基础,位运算符讲解;c. 第三课时:实例分析,编写数制转换程序;d. 第四课时:课堂练习,分组讨论,程序调试与优化;e. 第五课时:总结数制转换方法,拓展相关知识,提高编程能力。

教学内容科学系统,注重理论与实践相结合,按照教学大纲安排进度,确保学生能够逐步掌握数制转换知识和编程技能。

同时,教学内容与教材紧密关联,便于学生查找资料,巩固所学知识。

数据结构—数制转换

数据结构—数制转换

数据结构—数制转换数制转换1.数制的基本概念数制是人们用来表示和处理数的方式和方法,常见的数制包括十进制、二进制、八进制和十六进制。

在计算机科学中,数制转换是一项基本且重要的操作,可以实现不同进制数的相互转换。

2.十进制转其他进制2.1 二进制转换:________将十进制数转换为二进制数的方法是除二取余,从低位到高位依次得到余数。

2.2 八进制转换:________将十进制数转换为八进制数的方法是除八取余,从低位到高位依次得到余数。

2.3 十六进制转换:________将十进制数转换为十六进制数的方法是除十六取余,从低位到高位依次得到余数。

在十六进制中,带有10-15的余数使用A-F来表示。

3.其他进制转十进制3.1 二进制转换:________将二进制数转换为十进制数的方法是将每一位的数字乘以相应的权值,并将结果相加。

3.2 八进制转换:________将八进制数转换为十进制数的方法是将每一位的数字乘以相应的权值,并将结果相加。

3.3 十六进制转换:________将十六进制数转换为十进制数的方法是将每一位的数字乘以相应的权值,并将结果相加。

在十六进制中,带有A-F的字符使用10-15来表示。

4.其他进制之间的转换4.1 二进制与八进制的转换:________将二进制数转换为八进制数可以先将二进制数每三位分组,然后将每组转换为相应的八进制数。

4.2 二进制与十六进制的转换:________将二进制数转换为十六进制数可以先将二进制数每四位分组,然后将每组转换为相应的十六进制数。

4.3 八进制与十六进制的转换:________将八进制数转换为十六进制数可先将八进制数转换为二进制数,然后将二进制数每四位分组,再将每组转换为相应的十六进制数。

5.附件本文档无附件。

6.法律名词及注释无。

栈的应用-数制转换(C语言数据结构)

栈的应用-数制转换(C语言数据结构)

栈的应⽤-数制转换(C语⾔数据结构)数制转换在计算机中经常⾯对不同数制的转换问题,如将⼀个⼗进制数N转换为d进制B。

数制转换的解决⽅法很多,其中⼀个简单的转换算法是重复下述两步。

直到N等于零为⽌。

x = N mod dN = N div d其中,N为需要转换的⼗进制数,d为转换后的进制,x值为转换后各个数位上的数,div为整除运算,mod为求余运算。

算法的运⾏过程为:第⼀次求出的x值为d进制数的最低位,最后⼀次求出的x值为d进制数的最⾼位,所以上述算法是从低位到⾼位顺序产⽣d进制的各位,然后逆序输出,因为它按“后进先出”的规律进⾏的,所以⽤栈这种结构处理最合适。

根据这个特点,利⽤栈来实现上述数制转换,即将计算过程种⼀次得到的d进制数码按顺序栈进栈。

计算结束后,再返顺序出栈,并按出栈顺序打印输出。

这样即可得到给定的⼗进制数对应的d进制数,由此可以得到数制转换的算法。

实现代码利⽤顺序栈实现数制转换(以⼗进制转换为⼆进制为例)1 #include <stdlib.h>2 #include <stdio.h>3 #define MAXSIZE 102445 /*定义顺序栈*/6 typedef int elemtype;7 typedef struct SequenStack8 {9 elemtype data[MAXSIZE];10 int top;11 }SequenStack;1213 /*判(顺序栈)栈空*/14 SequenStack * Init_SequenStack()15 {16 SequenStack * S;17 S = (SequenStack *)malloc(sizeof(SequenStack));1819 if (S == NULL)20 {21 return S;22 }23 S->top = -1;24 return S;25 }2627 /* 判空栈(顺序栈)*/28 int SequenStack_Empty(SequenStack * S)29 {30 if (S->top == -1)31 {32 return 1;33 }34 else35 {36 return 0;37 }38 }3940 /* ⼊栈(顺序栈) */41 int Push_SequenStack(SequenStack * S, elemtype x)42 {43 if (S->top >= MAXSIZE-1)44 {45 return 0;46 }47 S->top++;48 S->data[S->top] = x;49 return 1;50 }5152 /* 出栈(顺序栈) */53 int Pop_SequenStack(SequenStack * S, elemtype * x)54 {55 if (S->top == -1)56 {57 return 0;58 }59 else60 {61 S->top--;62 *x = S->data[S->top+1];63 return 1;64 }65 }6667 /* 进制转换算法 */68 void SequenStackConversion(int N)69 {70 int x;71 SequenStack * S = Init_SequenStack();72 while (N > 0)73 {74 Push_SequenStack(S, N % 2);75 N = N / 2;76 }77 while (! SequenStack_Empty(S))78 {79 Pop_SequenStack(S, &x);80 printf("%d", x);81 }82 }8384 int main()85 {86 int N;87 printf("Please enter the decimal number you want want to convert:\n");88 scanf("%d", &N);89 printf("The converted binary number is:\n");90 SequenStackConversion(N);91 }实现结果:利⽤链栈栈实现数制转换(以⼗进制转换为⼆进制为例)1 #include <stdio.h>2 #include <stdlib.h>34 /*定义链栈*/5 typedef int elemtype;6 typedef struct LinkedStackNode7 {8 elemtype data;9 struct LinkedStackNode *next;10 }LinkedStackNode, *LinkedStack;11 LinkedStack top;1213 /*链栈的初始化*/14 LinkedStack Init_LinkedStack()15 {16 LinkedStack top = (LinkedStackNode *)malloc(sizeof(LinkedStackNode));1718 if(top != NULL)19 {20 top->next = NULL;21 }22 return top;23 }2425 /*判栈空*/26 int LinkedStack_Empty(LinkedStack top)27 {28 if (top->next == NULL)29 {30 return 1;31 }32 else33 {34 return 0;35 }3637 }3839 /*⼊栈*/40 int Push_LinkedStack(LinkedStack top, elemtype x)41 {42 LinkedStackNode *node;43 node = (LinkedStackNode *)malloc(sizeof(LinkedStackNode));4445 if (node == NULL)46 {47 return 0;48 }49 else50 {51 node->data = x;52 node->next = top->next;53 top->next = node;54 return 1;55 }5657 }5859 /*出栈*/60 int Pop_LinkedStack(LinkedStack top, elemtype * x)61 {62 LinkedStackNode *node;63 if (top->next == NULL)64 {65 return 0;66 }67 else68 {69 node = top->next;70 *x = node->data;71 top->next = node->next;72 free(node);73 return 1;74 }7576 }7778 /*进制转换*/79 void ListStackConversion(int N)80 {81 int x;82 LinkedStack S = Init_LinkedStack();83 while (N > 0)84 {85 Push_LinkedStack(S, N % 2);86 N = N / 2;87 }88 while (! LinkedStack_Empty(S))89 {90 Pop_LinkedStack(S, &x);91 printf("%d", x);92 }9394 }9596 int main()97 {98 int N;99 printf("Please enter the decimal number you want want to convert:\n"); 100 scanf("%d", &N);101 printf("The converted binary number is:\n");102 ListStackConversion(N);103 }实现结果:把顺序栈和链栈两种功能综合在⼀起实现数制转换(以⼗进制转换为⼗六进制为例)1 /* 进制转换 */2 #include <stdlib.h>3 #include <stdio.h>4 #define MAXSIZE 100 /*定义顺序栈的长度*/56 /*定义顺序栈*/7 typedef int elemtype;8 typedef struct SequenStack9 {10 elemtype data[MAXSIZE];11 int top;12 }SequenStack;1314 /*定义链栈*/15 typedef int elemtype;16 typedef struct LinkedStackNode17 {18 elemtype data;19 struct LinkedStackNode *next;20 }LinkedStackNode, *LinkedStack;21 LinkedStack top;2223 /* 顺序栈初始化 */24 SequenStack * Init_SequenStack()25 {26 SequenStack * S;27 S = (SequenStack *)malloc(sizeof(SequenStack));2829 if (S == NULL)30 {31 return S;32 }33 S->top = -1;34 return S;35 }3637 /*链栈的初始化*/38 LinkedStack Init_LinkedStack()39 {40 LinkedStack top = (LinkedStackNode *)malloc(sizeof(LinkedStackNode));4142 if(top != NULL)43 {44 top->next = NULL;45 }46 return top;47 }4849 /*判栈(顺序栈)空*/50 int SequenStack_Empty(SequenStack * S)51 {52 if (S->top == -1)53 {54 return 1;55 }56 else57 {58 return 0;59 }60 }6162 /* 判栈(链栈)空 */63 int LinkedStack_Empty(LinkedStack top)65 if (top->next == NULL)66 {67 return 1;68 }69 else70 {71 return 0;72 }7374 }7576 /* ⼊栈(顺序栈)*/77 int Push_SequenStack(SequenStack * S, elemtype x)78 {79 if (S->top >= MAXSIZE-1)80 {81 return 0;82 }83 S->top++;84 S->data[S->top] = x;85 return 1;86 }8788 /* 出栈(顺序栈) */89 int Pop_SequenStack(SequenStack * S, elemtype * x)90 {91 if (S->top == -1)92 {93 return 0;94 }95 else96 {97 S->top--;98 *x = S->data[S->top+1];99 return 1;100 }101 }102103 /* ⼊栈(链栈) */104 int Push_LinkedStack(LinkedStack top, elemtype x)105 {106 LinkedStackNode *node;107 node = (LinkedStackNode *)malloc(sizeof(LinkedStackNode)); 108109 if (node == NULL)110 {111 return 0;112 }113 else114 {115 node->data = x;116 node->next = top->next;117 top->next = node;118 return 1;119 }120121 }122123 /* 出栈(链栈) */124 int Pop_LinkedStack(LinkedStack top, elemtype * x)125 {126 LinkedStackNode *node;127 if (top->next == NULL)128 {129 return 0;130 }131 else132 {133 node = top->next;134 *x = node->data;135 top->next = node->next;136 free(node);137 return 1;138 }139140 }141142 /* 使⽤顺序⽅式进⾏进制转换的函数 */143 void SequenStackConversion(int N)144 {145 int x;146 SequenStack * S = Init_SequenStack();147 while (N > 0)149 Push_SequenStack(S, N % 16); 150 N = N / 16;151 }152 while (! SequenStack_Empty(S))153 {154 Pop_SequenStack(S, &x);155 switch (x)156 {157 case 10:158 printf("A");159 break;160 case 11:161 printf("B");162 break;163 case 12:164 printf("C");165 break;166 case 13:167 printf("D");168 break;169 case 14:170 printf("E");171 break;172 case 15:173 printf("F");174 break;175 default:176 printf("%d", x);177 break;178 }179 }180 }181182 /* 使⽤链栈⽅式进⾏进制转换的函数 */ 183 void ListStackConversion(int N)184 {185 int x;186 LinkedStack S = Init_LinkedStack(); 187 while (N > 0)188 {189 Push_LinkedStack(S, N % 16);190 N = N / 16;191 }192 while (! LinkedStack_Empty(S))193 {194 Pop_LinkedStack(S, &x);195 switch (x)196 {197 case 10:198 printf("A");199 break;200 case 11:201 printf("B");202 break;203 case 12:204 printf("C");205 break;206 case 13:207 printf("D");208 break;209 case 14:210 printf("E");211 break;212 case 15:213 printf("F");214 break;215 default:216 printf("%d", x);217 break;218 }219220 }221222 }223224 void function()225 {226 printf("-------------------------------------------\n"); 227 }228229 /* 主函数调⽤进制转换函数 */230 int main()231 {232 int N, x;233 printf("Please enter the decimal number you want want to convert:\n");234 scanf("%d", &N);235 function();236 printf("Choose using sequential stack or list stack\n");237 printf("1:Sequential stack 2:list stack:\n");238 function();239 scanf("%d", &x);240 printf("The converted binary number is:\n");241 switch (x)242 {243 case 1:244 SequenStackConversion(N);245 break;246 case 2:247 ListStackConversion(N);248 break;249 default:250 printf("error");251 break;252 }253254 return 0;255 }值得注意的是,当⼗进制转换为⼗六进制的时候,需要考虑输出现实⼤于9的⼗六进制位数,这⾥我们考虑可以使⽤switch开关实现。

数据结构数制转换

数据结构数制转换

数据结构数制转换第一点:二进制与十进制的转换二进制与十进制之间的转换是计算机科学和信息技术中的基础。

二进制仅使用两个数字:0和1,而十进制使用10个数字:0到9。

1.1 二进制转十进制二进制转十进制是通过将每个二进制位(bit)乘以其权重(2的幂次),然后将结果相加得到十进制数。

例如,二进制数1101转换为十进制数的过程如下:• 1 * 2^3 = 1 * 8 = 8• 1 * 2^2 = 1 * 4 = 4•0 * 2^1 = 0 * 2 = 0• 1 * 2^0 = 1 * 1 = 1将上面的结果相加:8 + 4 + 0 + 1 = 13因此,二进制数1101等于十进制数13。

1.2 十进制转二进制十进制转二进制则是通过不断除以2,并记录余数的过程,最后将余数从下到上(从最后一个余数到第一个余数)排列得到二进制数。

例如,十进制数13转换为二进制数的过程如下:1.13 / 2 = 6 ... 余数 12. 6 / 2 = 3 ... 余数 03. 3 / 2 = 1 ... 余数 14. 1 / 2 = 0 ... 余数 1将余数从下到上排列:1101因此,十进制数13等于二进制数1101。

第二点:八进制与十进制的转换八进制与十进制之间的转换相对简单,因为八进制使用的是0到7的八个数字,与二进制和十进制的基数不同。

2.1 八进制转十进制八进制转十进制的方法与二进制转十进制类似,都是通过将每个位上的数字乘以其权重(8的幂次),然后相加。

例如,八进制数725转换为十进制数的过程如下:•7 * 8^2 = 7 * 64 = 448• 2 * 8^1 = 2 * 8 = 16• 5 * 8^0 = 5 * 1 = 5将上面的结果相加:448 + 16 + 5 = 479因此,八进制数725等于十进制数479。

2.2 十进制转八进制十进制转八进制则可以通过不断除以8,并记录余数的过程,最后将余数从下到上排列得到八进制数。

数据结构—数制转换

数据结构—数制转换

数据结构—数制转换正文:一、引言数制转换是计算机科学中的重要概念之一。

在计算机中,数字通常以二进制(基数为2)形式表示,但在实际应用中,我们经常需要将数字转换为其他进制,如十进制(基数为10)、八进制(基数为8)或十六进制(基数为16)。

本文将介绍数制转换的基本原理和常见的转换方法。

二、二进制到十进制二进制是计算机最常用的数制,但在人类的日常生活中,我们更习惯于使用十进制。

二进制到十进制的转换方法如下:1、将二进制数按权展开,从右往左依次为2的0次幂、2的1次幂、2的2次幂:::,逐个乘以对应的二进制位权值。

2、将计算结果求和,即可得到十进制数。

三、十进制到二进制十进制到二进制的转换方法如下:1、用2除以十进制数,得到的商和余数分别记录下来。

2、将得到的余数从下往上排列,即可得到对应的二进制数。

四、二进制到八进制在计算机科学中,八进制是一种常用的数制,特别适合表示和处理比特位数为3的数据。

二进制到八进制的转换方法如下:1、将二进制数从右往左逐三位分组。

2、将每组三位二进制数转换为对应的八进制数。

五、八进制到二进制八进制到二进制的转换方法如下:1、将八进制数的每一位转换为对应的三位二进制数。

2、将得到的三位二进制数拼接起来,即可得到二进制数。

六、二进制到十六进制十六进制常用于表示大量二进制数据或内存地质。

二进制到十六进制的转换方法如下:1、将二进制数从右往左逐四位分组。

2、将每组四位二进制数转换为对应的十六进制数。

七、十六进制到二进制十六进制到二进制的转换方法如下:1、将十六进制数的每一位转换为对应的四位二进制数。

2、将得到的四位二进制数拼接起来,即可得到二进制数。

八、附件本文档无附件。

九、法律名词及注释1、二进制:计算机中最常用的数制,由0和1两个数字组成。

2、十进制:人类日常生活中常用的数制,由0至9十个数字组成。

3、八进制:计算机中常用的数制,由0至7八个数字组成。

4、十六进制:计算机中用于表示大量二进制数据或内存地质的数制,由0至9和字母A至F共16个字符组成。

数制转换c语言课程设计

数制转换c语言课程设计

数制转换c语言课程设计一、课程目标知识目标:1. 学生能理解数制的基本概念,掌握二进制、十进制、十六进制之间的转换方法;2. 学生能运用C语言编写程序实现数制转换,理解程序设计中的逻辑运算和位运算;3. 学生了解计算机中数值存储的方式,理解数制转换在计算机科学中的应用。

技能目标:1. 学生能够运用所学知识,独立编写和调试简单的数制转换C语言程序;2. 学生通过实际操作,提高编程解决问题的能力,培养逻辑思维和算法设计能力;3. 学生能够运用数制转换技能,解决实际问题,为后续学习计算机科学与技术打下基础。

情感态度价值观目标:1. 学生通过数制转换的学习,培养对计算机科学的兴趣和求知欲,激发学习积极性;2. 学生在小组合作学习过程中,培养团队协作精神和沟通能力;3. 学生在解决实际问题的过程中,树立正确的价值观,认识到科技对生活的影响,增强社会责任感。

课程性质:本课程为信息技术学科选修课程,以实践操作为主,结合理论讲解,培养学生的编程能力和逻辑思维。

学生特点:学生处于高中年级,具备一定的计算机操作基础,对编程有一定了解,好奇心强,喜欢动手实践。

教学要求:教师需关注学生的个体差异,提供个性化的指导,注重理论与实践相结合,提高学生的编程技能和解决问题的能力。

通过教学评估,确保学生达到课程目标,为后续学习打下坚实基础。

二、教学内容1. 数制基本概念:二进制、十进制、十六进制特点及表示方法;2. 数制转换原理:不同数制间的转换规则,重点讲解二进制与十进制的转换;3. C语言数制转换编程:位运算符的使用,逻辑运算符的应用,编写转换程序;4. 计算机中数值存储:了解计算机内部数值的存储方式,理解补码概念;5. 实践操作:分组讨论,编写和调试数制转换程序,进行案例分析;6. 知识拓展:数制转换在计算机中的应用,如IP地址转换、字符编码转换等。

教学内容安排:第一课时:数制基本概念及转换原理学习;第二课时:C语言数制转换编程方法讲解;第三课时:计算机中数值存储方式学习,实践操作指导;第四课时:分组讨论,编写和调试数制转换程序,进行案例分析;第五课时:知识拓展,了解数制转换在实际应用中的作用。

用C语言解决数制转换问题

用C语言解决数制转换问题

用C语言解决数制转换问题摘要数据结构是计算机存储、组织数据的方式。

数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。

一般认为,一个数据结构是由数据元素依据某种逻辑联系组织起来的。

对数据元素间逻辑关系的描述称为数据的逻辑结构;数据必须在计算机内存储,数据的存储结构是数据结构的实现形式,是其在计算机内的表示;此外讨论一个数据结构必须同时讨论在该类数据上执行的运算才有意义。

在许多类型的程序的设计中,数据结构的选择是一个基本的设计考虑因素。

许多大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都严重的依赖于是否选择了最优的数据结构。

许多时候,确定了数据结构后,算法就容易得到了。

有些时候事情也会反过来,我们根据特定算法来选择数据结构与之适应。

不论哪种情况,选择合适的数据结构都是非常重要的。

本课程设计主要使用不同的数据结构解决数制转换的问题。

在课程设计中,系统开发平台为Windows7,程序设计设计语言采用C语言,程序运行平台为Windows 98/2000/XP/7。

关键词程序设计;数制转换;C;课程设计;数据结构1 引言1. 课程设计目的高速发展的现代社会,计算机浩浩荡荡地成为了人们生活中不可缺少的一部分,帮助人们解决通信,联络,互动等各方面的问题。

计算机在处理数字是和人是不同的,计算机使用的是二进制,人们在日常生活中使用十进制,但是在一些特定场合使用其他进制的表示,所以需要进行不同进制之间的转换。

本课程设计主要解决不同的进制之间的转换问题,并且采用不同的数据结构进行存储和转换,实现普通的进制之间的转换。

在程序设计中,可以用使用很多种方法解决该问题。

例如:数组、栈、递归。

不同的方法实现转换的原理基本相同,只是代码的细节不同。

在我的程序中不同的方法所需的函数在一个单独的头文件里面,便以管理和修改。

2. 数据结构设计(1)数组的结构由于处理简单的情况,最大的数字将不大于整形的范围,在VS2008整形为4个字节,因此开辟的数组为33个元素。

c语言编程集 数据结构 顺序表 点链表 数制转换 矩阵转置

c语言编程集  数据结构  顺序表  点链表 数制转换  矩阵转置

#include "stdio.h" #include "malloc.h"/*typedef struct {int *elem;int length;int listsize;}sqlist;*/int *elem,*fadd;int *pl=p+a;int *ql=q+b;elem=(int *)malloc(sizeof(int));fadd=elem;while((p<=pl)&&(q<=ql)){if(*p<=*q){*elem=*p;elem++;p++;}else{*elem=*q;q++;elem++;}}while(p<=pl){*elem++=*p++; }while(q<=ql){*elem++=*q++; } while(fadd<=elem-1){printf("%d\n",*fadd);fadd++;}}main(){int a[3]={1,2,3};int b[3]={1,2,3};#include "malloc.h"#define sizep 3typedef struct {int *elem;int length;int listsize;}sqlist;sqlist scant(sqlist *p){printf("请输入串xx:");scanf("%d",&(*p).length);//scanf("%d",&(*p).listsize);(*p).elem=(int *)malloc(sizeof(int)); return *p;}sqlist shuru(sqlist *m){int *p=(*m).elem;while(p<=(*m).elem+(*m).length-1){ scanf("\n%d",p);p++;}p=(*m).elem;/*while(p<=(*m).elem+(*m).length){ printf("%d\n",*p);p++;sqlist r;int *fadd;int *pl=(*p).elem+(*p).length-1;int *ql=(*q).elem+(*q).length-1;r.length=(*p).length+(*q).length;r.elem=(int *)malloc(sizeof(int));fadd=r.elem;//printf("%d",r.elem);while((*p).elem<=pl&&(*q).elem<=ql){ if(*((*p).elem)<=*((*q).elem)){*(r.elem)=*((*p).elem);r.elem++;(*p).elem++;}else{*(r.elem)++=*((*q).elem)++;}}while((*p).elem<=pl){*(r.elem)++=*((*p).elem)++;}while((*q).elem<=ql){*(r.elem)++=*((*q).elem)++;}//printf("%d\n",*fadd+1,fadd+r.length-1); //printf("%d",fadd+r.length-1);printf("排序数组为:");while(fadd<=r.elem-1){printf("%-3d",*fadd);fadd=fadd+1;}printf("\n");}main(){sqlist p,q,r;scant(&p);shuru(&p);scant(&q);shuru(&q);#include "malloc.h"#define max 101typedef struct lnode{int data;int i,j;}syz;typedef struct {int row,col,tn;syz data[max];}link;void creat(link *k){int s,p,q,r;printf("请输入矩阵的行数和列数:\n");scanf("%d",&(*k).row);scanf("%d",&(*k).col);printf("请输入非零元的个数:\n");scanf("%d",&(*k).tn);printf("请输入一个三元组:\n");for(s=0;s<=(*k).tn-1;s++){scanf("%d",&r);(*k).data[s].i=r;scanf("%d",&q);(*k).data[s].j=q;scanf("%d",&p);(*k).data[s].data=p;}printf("\n");}void transform(link *k,link *t){int p,q,r;(*t).row=(*k).col;(*t).col=(*k).row;(*t).tn=(*k).tn;r=0;for(p=1;p<=(*k).col;p++){for(q=0;q<=(*k).tn-1;q++){if((*k).data[q].j==p){(*t).data[r].j=(*k).data[q].i;(*t).data[r].i=(*k).data[q].j;(*t).data[r].data=(*k).data[q].data; r++;}}}}/*void print(link *t){int p;for(p=0;p<=(*t).tn-1;p++){printf("%-3d",(*t).data[p].i); printf("%-3d",(*t).data[p].j); printf("%-3d",(*t).data[p].data); printf("\n");}}*/void print(link *t){int p,q,r,l,flag;l=0,flag=100;for(q=1;q<=(*t).row;q++){for(r=1;r<=(*t).col;r++){for(p=0;p<=(*t).tn-1;p++){if((*t).data[p].i==q&&(*t).data[p].j==r) flag=p;}if(flag!=100){printf("%-2d",(*t).data[flag].data);flag=100;}else{printf("%-2d",l);}}printf("\n");}}main(){link m,t;creat(&m);//初始化矩阵transform(&m,&t);//矩阵转置print(&t);//矩阵打印}/*#include "stdio.h" #include "malloc.h"typedef struct lnod{int data;struct lnod *next;}lnode,*link;void scant(link r,int n){int i;//r=(link)malloc(sizeof(lnode));//这里是重新生成一个起始地址,所以要将其返回,此处如不在动态给r分配地址,则用(*r).next=0;//结构体变量p传过来的地址,因此此处地址一旦改变就必须重新返回给p,这个地址是for(i=n;i>0;i--){//链表的首地址,只要知道了首地址就可以顺指针依次访问其他元素,因此首地址是很重要的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验名称:数制转换
实验目的:更加了解栈的使用,栈的各项操作。

熟悉C语言的编程。

实验程序:
#include<stdio.h>
#include<stdlib.h>
#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("%d",&n);
while(n){
push(s,n%8);
n=n/8;
}
while(s.top!=s.base)
{
pop(s,e);
printf("%d",e);
}
printf("\n");
}
实验总结:
在编程的时候应该注意大小写,变量的定义。

对于细节还是应该注意,往往一个小小的出错就可以造成程序运行不了的后果。

通过实验对于栈的基本使用方法有了了解。

每种结构都有其优缺点,在以后的学习中我想应该总结各个结构的优缺点,合理的把它们用在编程。

相关文档
最新文档