16进制
沈 阳 航 空 工 业 学 院
学 号 2008040201062
班 级 84020102
姓 名 甘 琦
指导教师 刘 成
2009 年 9 月 19 日
沈阳航空工业学院
课程
任务
系:电子信息工程学院 专业:电子信息工程 班级:84020102 学号:2008040201062 题目:十六进制到十进制的数制转换 一、课程设计时间
2009年9月7日~9月11日,共计1周,20学时。
二、课程设计内容
用C语言写程序,实现一个整数从十六进制到十进制的转换。例如,若从键盘输入十六进制数3A(不超过4位),则输出其十进制的58;若输入十六进制数32,则输出其十进制的50。
三、课程设计
程序质量:
, 贯彻结构化的程序设计思想。
, 用户界面友好,功能明确,操作方便。
, 至少有“输入一个十六进制数”`“开始转换”`“退出”三个菜
单。
, 代码应适当缩进,并给出必要的注释,以增强程序的可读性。
课程设计说明书:
, 课程结束后,上交课程设计说明书和源程序。课程设计说明书的内容参见提供
的模板。
四、指导教师和学生签字
指导教师:________ 学生签名:________ 五、成绩
六、教师评语
沈 阳 航 院 设 计 用 纸
目录
一、需求分析 .......................................................... 1 二、程序
图 ...................................................... 2 三、核心技术的实现说明及相应程序段 ............... 4
四、个人总结 .......................................................... 7 五、参考文献 .......................................................... 8 六、源程序 .............................................................. 8
I
沈 阳 航 院 设 计 用 纸 一、需求分析
经过对程序设计题目的分析可知,整个程序的设计实现大致分为四个模块,他们的功能分别是:显示菜单,输入一个十六进制数,开始转换,清屏,主函数。这些函数的实现严格按照题目的要求,清晰的
达了题设的内容。
、 输入一个十六进制数 (input) 1
主要功能是实现对一个十六进制数的输入; 2、 开始转换 (zhuanhuan)
主要的功能是实现十六进制到十进制的转换; 3、 清屏 (clear)
主要的功能是实现清屏的功能;
除上面介绍的功能之外,程序还具有退出的功能.可以保证用户在程序出错或不需要时清除页面上的数据,并重新完成所要完成的要求。
1
沈 阳 航 院 设 计 用 纸 二、程序流程图
1、程序总体结构图
图1程序总体结构图
开始
输入一个十六开始转换 清屏 退出 进制数
2
沈 阳 航 院 设 计 用 纸
图2数字转换函数
char str[6],c; int a=0,i=0; gets(str);
if(strlen(str)>4)
否 是
while((c=str[i])!='\0
if(c>='0'&&c<='9') printf("
a=a*16+c-'0';
if(c>='a'&&c<='f') 输入错
a=a*16+c-'a'+10;
if(c>='A'&&c<='F') 误。");
a=a*16+c-'A'+10;
i++;
printf("\n转换为:%d\n",a);
3
沈 阳 航 院 设 计 用 纸
三、核心技术的实现说明及相应程序段
本程序主要由3个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他函数来实现要求的所有功能。在这些函数当中3个自定义函数是程序中较为核心的部分,下面分别进行说明。
、 输入数字函数 1
此函数以 input命名,实现输入一个十六进制的数的功能。因为十六进制数可能含有字母,所以定义一字符型数组,来达到对十六进制数的输入,具体函数如下:
4
沈 阳 航 院 设 计 用 纸 void input() //数据输入
{char str[6];
printf("输入一个十六进制数:");
gets(str);
}
、转换数字函数 2
此步为程序的中心,以zhuanhuan命名,用于将上步中输入的十六进制数转换为十进制,其过程是先用一个strlen函数来确保输入的数不超过四位,然后在用一个while函
来达到十六进数,运用公式把字符串转换为十进制数,
制到十进制的转换.具体函数如下:
void zhuanhuan()
{char str[6],c;
int a=0,i=0;
gets(str);
if(strlen(str)>4)
printf("输入错误。");
5
沈 阳 航 院 设 计 用 纸 else
{while((c=str[i])!='\0')
{
if(c>='0'&&c<='9') a=a*16+c-'0';
if(c>='a'&&c<='f') a=a*16+c-'a'+10; if(c>='A'&&c<='F') a=a*16+c-'A'+10; i++;
}
printf("\n转换为:%d\n",a); }
3.清屏函数
此函数以 clear命名,发出的一个DOS命令,来实现清屏的功能,具体函数如下:
void clear()
{
6
沈 阳 航 院 设 计 用 纸
system("cls");
menu();
}
四、个人总结
为期一周的C语言课程设计结束了,通过这一个星期的课设,使我对C语言有了更深入、更全面的了解,同时也发现自己的很多不足之处,对很多地方都不是特别懂,甚至对有些概念都还是很模糊的,但通过这次课程设计,让我知道了C语言是一门用途非常广泛的学科,同时也使我的C语言知识水平有了较大的进步。在此次课程设计当中遇到了许多问题和编译上的错误都是平时上课不注意听讲所造成的,所以今后一定要认真,努力学习所学专业和课程。
7
沈 阳 航 院 设 计 用 纸
五、参考文献
1 .C语言程序设计(北京:清华大学出版社,2008 2 .C语言程序设计实验指导与习题集(北京:中国铁道出版社,2006
六、完整源程序
#include "stdio.h"
#include "string.h"//定义strlen()函数
#include "conio.h"//定义getch()函数
#include "stdlib.h"//定义system()函数
void menu()//菜单
{ printf("\n (十六进制到十进制的数制转换)\n");
printf("\n <<
菜单>>\n ");
8
沈 阳 航 院 设 计 用 纸
printf("\n
-------------------------------------------------------- \n ");
printf("\n
-------------------------------------------------------- \n");
puts(" \n 1:输入一个十六进制数");
puts(" \n 2:开始转换");
puts(" \n 3:清屏 ");
puts(" \n 4:退出");
printf("\n
-------------------------------------------------------- \n");
printf("\n
9
沈 阳 航 院 设 计 用 纸 --------------------------------------------------------
\n");
}
void input() //数据输入
{char str[6];
printf("输入一个十六进制数:");
gets(str);
}
void zhuanhuan()
{
char str[6],c;
int a=0,i=0;
gets(str);
if(strlen(str)>4)
printf("输入错误。");
else
{while((c=str[i])!='\0')
{
10
沈 阳 航 院 设 计 用 纸
if(c>='0'&&c<='9')
a=a*16+c-'0';
if(c>='a'&&c<='f')
a=a*16+c-'a'+10;
if(c>='A'&&c<='F')
a=a*16+c-'A'+10;
i++;
}
printf("\n转换为:\n%d",a);
}
}
void clear()
{
system("cls");
menu();
}
void main() //主程序
{
11
沈 阳 航 院 设 计 用 纸
char choice;//定义choice变量
menu();//调用menu()子程序
while(1)
{
choice=getch();
switch(choice)//选择对应
{
case '1':input();break;
case '2':zhuanhuan();break;
case '3':clear();break;
case '4':return;
}
}
}
12