进制转换器beta 1

一.运行截图

二.拓展功能

检测进制数是否错误,若输错后无需返回菜单重新进行选择进制转换选项,可直接重新输入所需要转换的进制数

三.函数&功能

1.menu函数

void menu()          //菜单
{
    printf("                  \\ 我是菜单 /   \n");
    printf("                   (?ì _ í?)  \n");
    printf("        ——————十进制转换二进制  [1]——————  \n");
    printf("        \\     十进制转换八进制  [2]    /   \n");
    printf("          \\   十进制转换十六进制[3]  /   \n");
    printf("            \\ 二进制转换十进制  [4]/    \n");
    printf("             /八进制转换十进制  [5]\\  \n");
    printf("              十六进制转换十进制[6]     \n");
    printf("                  退     出     [0]   \n");
    printf("                     |  |    \n");
    printf("                     |  |    \n");
    printf("                    _|  |_   \n");
    printf("\n");
    printf("\n");
}

2.zio函数(十进制转二进制)

void zio()           //10->2
{
    int n,m, c = 1, i = 0;
    int a[100];
    printf("您的选择是十进制转二进制\n");
    printf("输入一个整数:");
    scanf("%d", &n);
    while(n > 0){
      m = n;
      a[i] = (m % 2);// 求模放进数组
      n = n / 2;     //用2辗转相除直至结果为1
      i++;
      c = 1;
    }
    while(n < 0){
      m = -n;
      a[i] = (m % 2);// 求模放进数组
      n = n / 2;     //用2辗转相除直至结果为1
      i++;
      c = 0;
    }
    printf("它的二进制数为 ");
    if(c == 1){
      for (i = i-1; i >= 0; i--)           //将数组倒序输出
      printf("%d", a[i]);
    }
    if(c == 0){
      printf("-");
      for (i = i-1; i >= 0; i--)           //将数组倒序输出
      printf("%d", a[i]);
    }
    if(m == 0)
    printf("0");
    printf("\n");
}

3.zeroone函数(十进制转八进制)

void zeroone()      //10->8
{
    int n,m, c = 1, i = 0;
    int a[100];
    printf("您的选择是十进制转八进制\n");
    printf("输入一个整数:");
    scanf("%d", &n);
    while(n > 0){
      m = n;
      a[i] = (m % 8);// 求模放进数组
      n = n / 8;     //用8辗转相除直至结果为1
      i++;
      c = 1;
    }
    while(n < 0){
      m = -n;
      a[i] = (m % 8);// 求模放进数组
      n = n / 8;     //用8辗转相除直至结果为1
      i++;
      c = 0;
    }
    printf("它的八进制数为 ");
    if(c == 1){
      for (i = i-1; i >= 0; i--)           //将数组倒序输出
      printf("%d", a[i]);
    }
    if(c == 0){
      printf("-");
      for (i = i-1; i >= 0; i--)           //将数组倒序输出
      printf("%d", a[i]);
    }
    if(m == 0)
    printf("0");
    printf("\n");
}

4.build函数(十进制转十六进制)

void build()        //10->16
{
        char arr[] = "0123456789ABCDEF";
        char hex[16];
        int i = 0;
        int j = 0;
        int n = 0,a = 0,b;
        printf("您的选择是十进制转十六进制\n");
        printf("请输入一个整数:");
        scanf("%d", &n);
        b = n;
        if(n < 0)
        n = -n;
        a = n;
        while (n)
        {
            hex[i++] = arr[n % 16];  //将模放进hex数组中
            n = n / 16;
        }
        printf("它的十六进制数为:");
        if(b == 0)
        printf("0");
        if(b<0)
        printf("-");
        for (j = i - 1; j >= 0; --j)
            printf("%c", hex[j]);
        printf("\n");
}      

5.geiz函数(二进制转十进制)

void geiz()         //2->10
{
        int n,a;
        int sum = 0, i = 0, m;
        printf("您的选择是二进制转十进制\n");
        printf("请输入一个二进制数: ");
        scanf("%d", &n);
        if(n%10 >= 2){         //判断输入的是否为二进制数
            printf("请检查输入的二进制数=(\n");
            return geiz();         //返回该函数进行重新输入
        }
        a = n;
        while (n != 0)
        {
            m = n % 10;
            n /= 10;
            sum += m*pow(2, i);
            ++i;
        }
        printf("该二进制的十进制为 %d\n",sum);
}

6.woz函数(八进制转十进制)

void woz()          //8->10
{
    int n, a;
    int sum = 0, i = 0, m;
    printf("您的选择是八进制转十进制\n");
    printf("请输入一个八进制数: ");
    scanf("%d", &n);
    if(n%10 >= 8){
    printf("请检查输入的八进制数=(\n");
    return woz();
    }
    a = n;
    while (n != 0)
    {
        m = n % 10;
        n /= 10;
        sum += m*pow(8, i);
        ++i;
    }
    printf("该八进制数转换为十进制为 %d\n",sum);
}

7.decade函数(十六进制转十进制)

void decade()       //16—>10
{
    char s[50];
    char a[50];
    printf("您的选择是十六进制转十进制\n");
    printf("请输入一个十六进制数:");
    scanf("%s", s);
    int t, i, count = 0, j = 0;
    long sum = 0;
    if (s[0] == ‘-‘) {
        for (i = 0;s[i];i++) {
            a[i] = s[i + 1];
        }
        for (i = 0;s[i];i++) {
            s[i] = a[i];
        }
        j = 1;
    }
    for (i = 0;s[i];i++) {
        if (s[i] > ‘F‘)
            count++;
    }
    if (count == 0) {
        for (i = 0;s[i];i++) {
            if (s[i] <= ‘9‘)
                t = s[i] - ‘0‘;
            else
                t = s[i] - ‘A‘ + 10;
            sum = sum * 16 + t;
        }
        printf("该十六进制数转换为十进制为:");
        if (j == 1) {
            printf("-");
        }
        printf("%ld\n",sum);
    }
    else {
        printf("请检查输入的十六进制数=(");
        return decade();
    }
    printf("\n");
}

四.main函数

int main()
{
    int x = 0;
    while(1)
    {
        menu();
        printf("      ————————————————————————————————————\n");
        printf("       请选择 [1] [2] [3] [4] [5] [6] [0]\n");
        printf("      ————————————————————————————————————\n");
        scanf("%d", &x);
        switch(x)
        {
            case 1:zio(); //10—>2
                break;
            case 2:zeroone();//10->8
                break;
            case 3:build();//10->16
                break;
            case 4:geiz();//2->10
                break;
            case 5:woz();//8—>10
                break;
            case 6:decade();//16->10
                break;
            case 0:
                printf("正在退出...\n");
                return 0;
                break;
            default:
                printf("请检查你的选项:(\n");
                break;
        }
    }
    return 0;
}

五.函数关系

六.问题解决

1.10->2数组倒序输出问题,需从i-1输出才能得到正确答案

2.10->2正负数判断问题,引入一个标记数更容易在后面的输出判断正负数

3.main程序中做到输出结果后不会立即退出程序,用while(1)循环控制程序进行可保证不会立即退出

4.字符串应为%s而不是%d输入

七.总结

加深对函数的理解与循环语句的应用。

善用数组来满足需求。

分离的函数部分使主程序不会过于繁杂,更容易确定问题所在。

原文地址:https://www.cnblogs.com/bob3000/p/11808704.html

时间: 2024-08-29 23:47:34

进制转换器beta 1的相关文章

我学C#的第一天之进制转换器

两天的时间实现了一个功能——进制转换器 今天最大的收获就是如何在文本框中限制输入 如下: private void txtDecimal_KeyPress(object sender, KeyPressEventArgs e) { if ("1234567890".IndexOf(e.KeyChar) == -1 && e.KeyChar != 8) e.Handled = true; 这比在textBox文本中用Message.Show方便且没有bug.

进制转换器

1 /* 2 进制转换器 3 P进制数x转为Q进制数z 4 过程模拟,先转十进制再转目标进制 5 */ 6 #include<cstdio> 7 #include<algorithm> 8 #include<stack> 9 using namespace std; 10 int main(){ 11 int p,q; 12 int x,y=0,z; 13 int a=1; 14 stack<int> sta; 15 scanf("%d%d%d&q

数据结构12: 实践项目之进制转换器

进制转换器项目要求:用户提供需要转换的数据和该数据的进制,以及要转换的进制,进制转换器提供给用户最终的正确转换的结果. 转换器实例 例如,用户提供了一个十进制数:10,要求将此数据以二进制形式转换,则通过进制转换器转换的最终结果应该:1010. 提示:此进制转换器可以在 2-36 进制之间对数据进行任意转换.各进制中对应的数字如下表: 设计思路 当用户给定 2 - 36 进制中的任意一进制数时,最简单的方法是使用顺序存储结构进行存储,即使用字符串数组存储. 转化时,最直接的思路就是先将该数转化为

2~16进制间任意进制转换器

一.程序运行截图(仅列举部分) 正数: (1)10->8 (连续五次不输入程序会自动结束哦) (2)10->2 (3)16->10 (4)8->16  负数: (1)10->2 (2)10->2 (3)8->16  二.扩展功能 1.可以识别正负数并输出,当输出为二进制时会自动将其补为有符号位的八位或十六位. 2.能在2至16所有进制间任意转换: 3输入错误时会报错并让你重新输入: 4.加了一个没卵用的随机数来使最后一句话随机输出. 三.介绍函数及其使用的全局变量

【曾经】进制转换器C#

1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Threading.Tasks; 9 using System.Windows.Forms; 10 11 namespace nu

使用qt写的进制转换器

没有使用什么数据结构,直接使用qt自带的进制转换函数, 实时出结果,代码在后面的链接中,由于初学qt,好多不会,代码构造就有点乱 截图如下 代码 http://pan.baidu.com/s/1Ppwxo

我写的第三个程序(进制转换器)

填写你需要转换的数值,然后填写数值的进制,就可以转换成十进制的数值: a=input('请输入数值:') b=int(input('请输入进制:')) c=int(a,base=b) print(c) 原文地址:https://www.cnblogs.com/shengbei/p/8848353.html

函数+进制转换器

一.运行截图 注释:正常操作由二进制数转换为八进制数. 注释:如果输入输出前后进制类型相同,输出输入的值. 注释:如果输入进制类型不是规则给定的,输出错误. 注释:如果输入进制类型不是规则给定的,输出错误. 注释:如果输入的数与该数进制类型不符,输出错误. 二.函数介绍 ①二进制→八进制 void twoTOeight(int x){ if(x%10>1){ printf("ERROR!"); return; } int result1=0,result2=0,i=0,remai

10进制转换成2、8、16进制の转换器

目前只能实现简单的功能 1 #include <stdio.h> 2 #include <limits.h> 3 #include <math.h> 4 #include <string.h> 5 #include <stdlib.h> 6 #include <ctype.h> 7 int size; 8 char string[CHAR_BIT * sizeof(int) + 1]; 9 void change_to_16(void