精华内容
下载资源
问答
  • 十进制数N和其它d进制数的转换是计算机实现计算的基本问题,其解决方案很多,其中最简单方法基于下列原理:即除d取余法。
  • //头文件和结构体 #include <stdio.h> #include <stdlib.h> #define MAXSIZE 1024 typedef int elemtype;...//top栈顶元素的下标 }SequenStack; //初始化栈 elemtype *init_SequenStack() { Seq

    //头文件和结构体

    #include <stdio.h>
    #include <stdlib.h>
    #define MAXSIZE 1024
    
    typedef int elemtype;
    typedef struct SequenStack
    {
        elemtype data[MAXSIZE];//栈的容量大小
        int top;//top为栈顶元素的下标
    }SequenStack;
    

    //初始化栈

    elemtype *init_SequenStack()
    {
        SequenStack *S;//指向栈的指针
        S = (SequenStack *)malloc(sizeof(SequenStack));
        if(S == NULL){
            return S;
        }else{
            S -> top = -1;
            return S;
        }
    }
    

    、、进栈操作

    int push_SequenStack(SequenStack *S,elemtype x)
    {
        if(MAXSIZE - 1 <= S ->top){
            return 0;
        }
        S -> top ++;
        S -> data[S -> top] = x;
        return 1;
    }
    

    //出栈操作

    int pop_SequenStack(SequenStack *S,elemtype *e)
    {
        //e为了接收栈顶元素
        if(-1 == S -> top){
            return 0;
        }
        *e = S -> data[S -> top];
        S -> top --;
        return 1;
    }
    

    //转换的核心算法

    void conversion(SequenStack *S,int x,int m)
    {//x为传入的十进制数,m是您想转化成进制
        int i,j;
        elemtype temp;
        while(x != 0){
            temp = x % m;
            push_SequenStack(S,temp);
            x = x / m;
        }
    }
    

    下面是完整代码

    #include <stdio.h>
    #include <stdlib.h>
    #define MAXSIZE 1024
    /*通过建立栈来实现进制转换*/
    
    typedef int elemtype;
    typedef struct SequenStack
    {
        elemtype data[MAXSIZE];//栈的容量大小
        int top;//top为栈顶元素的下标
    }SequenStack;
    
    //初始化栈
    elemtype *init_SequenStack()
    {
        SequenStack *S;
        S = (SequenStack *)malloc(sizeof(SequenStack));
        if(S == NULL){
            return S;
        }else{
            S -> top = -1;
            return S;
        }
    }
    
    //进栈操作
    int push_SequenStack(SequenStack *S,elemtype x)
    {
        if(MAXSIZE - 1 <= S ->top){
            return 0;
        }
        S -> top ++;
        S -> data[S -> top] = x;
        return 1;
    }
    
    //出栈操作
    int pop_SequenStack(SequenStack *S,elemtype *e)
    {
        //e为了接收栈顶元素
        if(-1 == S -> top){
            return 0;
        }
        *e = S -> data[S -> top];
        S -> top --;
        return 1;
    }
    
    //转换的核心算法
    void conversion(SequenStack *S,int x,int m)
    {
        //x为待转化的十进制数,m为您想转化的进制数
        int i,j;
        elemtype temp;
        while(x != 0){
            temp = x % m;
            push_SequenStack(S,temp);
            x = x / m;
        }
    }
    int main()
    {
        SequenStack *S;
        elemtype *e,k;
        int i,num;
        e = &k;
    
        S = init_SequenStack();
        printf("请输入您想转化的10进制数!\n");
        scanf("%d",&num);
        while(1){
            printf("1、十 -> 二:\n");
            printf("2、十 -> 八:\n");
            printf("请输入您想转化成几进制!输入3可退出当前程序\n");
            scanf("%d",&i);
            switch(i){
            case 1:
                {
                    printf("转化结果为:");
                    conversion(S,num,2);
                    while(-1 != (S -> top)){
                        pop_SequenStack(S,e);
                        printf("%d",*e);
                    }
                    printf("\n\n");
                    break;
                }
            case 2:
                {
                    conversion(S,num,8);
                    while(-1 != (S -> top)){
                      pop_SequenStack(S,e);
                      printf("%d",*e);
                     }
                   printf("\n\n");
                   break;
                }
            case 3:
                {
                    return;
                }
            }
        }
    }
    

    运行结果如下:
    在这里插入图片描述

    小伙伴有什么不懂的可以在下面评论哦,当然也可以私聊我
    对您有帮助的话点个赞支持一下吧

    展开全文
  • 对于刚开始学习C语言的来说,我们知道%d可以表示十进制的数,%o可以表示八进制的数,%x用来表示十六进制的数,但却没有来表示二进制数的。 这就是相对应的八进制数和十六进制数#include &lt;stdio.h&gt; ...

        对于刚开始学习C语言的来说,我们知道%d可以表示十进制的数,%o可以表示八进制的数,%x用来表示十六进制的数,但却没有来表示二进制数的。

        这就是相对应的八进制数和十六进制数

    #include <stdio.h>
    int main()
    {
    	int n;
    	printf("请输入一个十进制的整数:\n");
    	scanf("%d",&n);
    	printf("八进制数为:%o\n",n);
    	printf("十六进制数为:%x\n",n); 
    	return 0;
    } 


        那么如何输入一个相对应的二进制数尼?我们知道,对于一个二进制数,只有0和1;一个十进制数转化为二进制数,就是不断模2,并且最后将模2的结果逆序输出。

        下面的代码比较容易理解,但特别的繁琐。

    #include <stdio.h>
    #define Maxsize 100
    int main()
    {
    	int n=0,count=0,j=0;
    	int a[Maxsize],b[Maxsize];
    	printf("请输入一个十进制整数:\n");
    	scanf("%d",&n);
    	if(n>=0){
    		while(n!=0){
    			a[count]=n%2;
    			n=n/2;
    			count++;
    		}
    		for(int i=count-1;i>=0;i--)//将数组逆序输出 
    		printf("%d",a[i]);
    	}
    	else{
    		n=-n;
    		while(n!=0){
    			a[count]=n%2;
    			n=n/2;
    			count++;
    		}
    		for(int i=count-1;i>=0;i--){//将逆序输出的结果保存在另一个数组中 
    			b[j]=a[i];
    			j++;
    		}
    		for(int i=0;i<count;i++){   //取反码 
    			if(b[i]==0)
    				b[i]=1;
    			else
    				b[i]=0;
    		}
    		for(int i=count-1;i>=0;i--){  //将反码加1 
    			if(b[i]==0){
    				b[i]=1;
    				break;
    			}		
    			else{
    				b[i]=0;
    			}
    		}
    		for(int i=0;i<count;i++)
    		printf("%d",b[i]);
    	}
    	printf("\n");
    	return 0;
    }


    下面的代码比较简单,但不太容易理解。
    #include <stdio.h>
    int main()
    {
    	int n;
    	printf("请输入一个十进制数:\n");
    	scanf("%d", &n);
    	unsigned int i = 1u << 15;
    	for ( ; i ; i >>= 1) {
    		printf("%d",n&i?1:0);
    	}
    	printf("\n");
    	return 0;
    }


        上述代码用的是移位,用这个方法,代码中的i必须用unsigned int 无符号整型来表示,初始化i=1,后面的u表示的就是unsigned,<<15表示向左移位15个bit(本代码输出的是十六位的二进制数,如果想输出32位的二进制数,只需将15变为31即可),将0000000000000001中的1向左移位15就得到了1000000000000000,接下来就是for循环,就是单纯的让1慢慢向后移一位,例如第二次循环就变为了0100000000000000,同理下去。&表示的是按位与运算符。

        举一个简单的例子,八位的二进制数,假设i循环为了00100000,而算求的二进制数为xx1xxxxx,我们只看与i 中的1相对应位置的数字,假设为0,则最后结果二进制数的该位就是0,若为1,最后结果二进制数的该位就为1,不需要去考虑其他的位置。注意,该方法加入输入一个负数,前面某几位会是。

        上述的代码都只适用于整数。

    展开全文
  • C语言实验(十一)实验内容实验一:勒让德多项式程序实验二:进制转换实验三:计算阶乘总结反思 实验内容 实验一:勒让德多项式程序 用递归法求n阶勒让德多项式的值。 实验步骤 1、首先,观察该多项式需要有n及x两...

    实验内容

    实验一:勒让德多项式程序

    用递归法求n阶勒让德多项式的值。
    在这里插入图片描述
    实验步骤
    1、首先,观察该多项式需要有n及x两个值才可以求解它的值。所以需要有两个输入。

    2、然后,将该多项式的求值方法封装成一个函数,在main()函数中调用这个函数。把结果输出。

    3、在勒让德多项式求值的函数中,需要将x,n作为参数传入。根据题示的式子,判断n的取值,使用多重选择语句设置不同的计算方法。在n不等于0或1时,有递归。

    实验代码

    #include <stdio.h>
    #include <stdlib.h>
    int legendre(int n,int x);
    
    int main()
    {
        int n,x;
        float s;
        printf("Input n:");
        scanf("%d",&n);
        printf("\n");
        printf("Input x:");
        scanf("%d",&x);
        s = legendre(n,x);
        printf("勒让德多项式的值为%.2f",s);
        return 0;
    }
    
    int legendre(int n,int x)
    {
        if (n == 0)
            return 1;
        else if (n == 1)
            return x;
        else
            return ((2*n-1)*x-legendre(n-1,x)-(n-1)*legendre(n-2,x))/n;
    }
    

    运行结果

    在这里插入图片描述
    在这里插入图片描述


    实验二:进制转换

    编写一个函数将输入的十进制转化为8进制。

    实验步骤

    1、首先,了解十进制转换为八进制的基本方法“除8取余”。输入一个十进制的数字,通过一个转换的函数转化为十进制。将“除8取余”方法封装成一个函数,在main()函数中调用这个函数。把结果输出。

    2、在十进制转化成八进制的过程中,同样使用了递归的方法。“除8取余”的思想,将每一次的上次取余的结果乘以10得到上一位,加上本次模运算的结果即为最终结果。

    实验代码

    #include <stdio.h>
    #include <stdlib.h>
    int transform(int n);
    
    int main()
    {
        int n,t;
        printf("十进制:");
        scanf("%d",&n);
        printf("八进制:%d",transform(n));
        return 0;
    }
    
    int transform(int n)
    {
        if (n < 8)
        {
            return n;
        }
        else
        {
            return (transform(n / 8) * 10 +n % 8);
        }
        return 0;
    }
    

    运行结果
    在这里插入图片描述


    实验三:计算阶乘

    编写一个函数将计算10以下的阶乘。

    实验步骤
    1、计算10以下的阶乘。最重要的是阶乘的算法实现,前面的实验也用到过。

    2、阶乘的实质就是不断与之前的数相乘,n=1为判断结束条件,实现起来比较容易。加上特殊的条件0的阶乘是1.

    3、完成阶乘函数之后,在main()函数中计算10以下的阶乘即可。

    实验代码

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        int i;
        for(i=0;i<10;i++)
            printf("%d的阶乘结果为%d\n",i,fac(i));
        return 0;
    }
    
    int fac(int n)
    {
        if(n == 1||n == 0)
            return 1;
        else
            return n*fac(n-1);
    }
    

    运行结果
    在这里插入图片描述

    总结反思

    这次实验主要练习了函数的使用以及递归的思想。练习了三个比较简单的实验:求解勒让德多项式的值、十进制整数转换为八进制及求10以内的阶乘。

    递归的思想在高中数学中就已经学习到了。求最大公约数的辗转相除法、阶乘的方法、斐波那契数列及十进制转换为二进制的“除2取余”这些方法都有一种递归(迭代)的思想在。在编程的过程中,递归的思想通过函数自身调用实现。这个方法可以解决很多使用常规思路难以解决的问题。函数结合递归使用是一种很方便的编程技巧。

    判断能否使用递归需要判断两个条件:1、存在限制条件,当满足这个条件时,递归不再继续。2、每次递归调用之后越来越接近这个限制条件。

    展开全文
  • 可能大家刚接触,有些不习惯吧,因为我们已经十几年来只习惯十进制的计算,突然让大家丢到十进制的计算,真没那么容易。这篇文章讲十进制的逻辑运算,这个简单,就是与、或、非。什么要讲这个,因为计算机的本质...

    前言

    前面的课程有粉丝评论说没看懂,本id回去细看了一下,确实写得有些深奥,或者说有些混乱。可能大家刚接触,有些不习惯吧,因为我们已经十几年来只习惯十进制的计算,突然让大家丢到十进制的计算,真没那么容易。

    这篇文章讲十进制的逻辑运算,这个简单,就是与、或、非。

    为什么要讲这个,因为计算机的本质就是这些二进制的逻辑运算。计算机之所以用二进制,是因为受硬件条件的制约。但是即便是这么简单的0和1,照样能实现强大的功能,什么阿法狗打败国际象棋大师,人脸识别,人工智能等等,无论功能如何炫酷,到计算机底层还是0和1的逻辑运算实现的。

    逻辑或运算

    只要有一个1,运算结果就是1 。在汇编中用 or 表示,在C语言中用“|”表示。

    b12a53669e053c7f93923990251caa08.png

    看上图,学过物理的应该很容易理解这个电路图,无论开关1,开关2,任何一个闭合,灯泡就会亮,当然两个都闭合那也肯定亮。

    逻辑与运算

    只有两个都为1时,运算结果才为1,其他情况结果都为0。在汇编中用and表示,在C语言中用“&”表示。

    b81347576ab0d8d24ede89a2da65f4d3.png

    看上面的电路图,只有开关1和开关2都闭合,灯泡才会亮,其他情况灯都不亮。

    逻辑异或运算

    只有两个数不同时,运算结果才为1,其他情况都为零。在汇编中用xor表示,在C语言中用“^”表示。

    045a141ab9ca25ab0c690246bbb4b51e.png

    看上面的电路图,只有开关1和开关4同时闭合、开关2和开关3同时闭合时,灯才会亮,如果只是同一边的开关闭合,那么灯是不会亮的。

    异或运算在加密算法中常用。看上面的例子,在竖式中,第二个数是秘钥,把第一次运算的结果再和秘钥进行异或运算,得到的结果是原来的数。

    这个式子算是程序员的花式表白了,有看明白的吗?(提示:转成十进制)

    逻辑非运算

    取反,是1则变成0,是0则变成1。在汇编中用not表示 ,在C语言中用“!”表示。

    3a51531124e47b93ba21e6ea7f1b04e0.png

    写于2020.3.7 21:21

    展开全文
  • { /* 输入任意的十进制数转换成想换成的进制数*/  int m;  Initstack(s);  do  {  push(s, p%n);  p = p / n;  } while (p);  while (s->base != s->top)  {  m = Pop(s);  if (m...
  • 十进制到十六进制的转化 相关知识: 十进制:%d 八进制:%o 十六进制:%x #include<stdio.h> int main() { int x ; scanf("%d",&x); printf("%x",x); //%x换成%o即转换为八进制 return 0; } ...
  • 使用C语言将一个八进制转化为十进制数,用户根据提示输入一个任意的八进制数,程序将八进制转化为十进制数并进行输出显示。 完整代码 #include<stdio.h> #include<stdlib.h> int main() { int n=0,...
  • ##不甘平凡#最近在学习python,不过跟着课本的作业题目:分别就计算二进制110110011、八进制256和十六进制的数字a4b5,并转化为十进制求和。不过写过程中遇到了个问题:如何在python中输入二进制数字?在网上百度了...
  • C语言——十进制转为二进制、八进制、十六进制的函数转换 /*** * Copyright(C) 2011, ...* 功 能:输入一个十进制数,将其转化为二进制、八进制、十六进制 * * 作 者:zhanghbboy * 完成日期:11.07.27
  • 前沿:次随笔对应的是第十七天到第十天的学习任务任务需求: IFE ECMAScript 转化为二进制 运算结果 实现当点击转化按钮时,将输入的十进制数字转化为二进制,并显示在result的p标签内转化显示后的二进制数为bin-...
  • java进制转换(十进制八进制十进制转二进制,十六进制转八进制) 这几天在复习C语言的数据结构栈和队列那一章的时候,看到利用栈的特性FILO实现的...十进制怎么转化为二进制呢? public void Dex2Bin(int n...
  • 2、十六进制数由数字和字母“A/B/C/D/E/F”组成,在将十六进制转为二进制时,需要先判断十六进制数每一位是数字还是字母,并转化为十进制,再转为二进制(按位转化),并存储到二进制数组中。 3、需要注意是从后往前...
  • 输出十六进制、八进制分别用%x %o,这样不管输入的数据的进制,转化为相应的输出格式。如果声明十六进制、八进制分别在数据前加上0x、0.如果要表明输出的数据的进制则在%x、%o中加上‘#’,如%#x、%#o。
  • 十进制转r进制:整数部分–除r取余,直至商0,余数倒置即可,小数部分–乘r取整,直至积0,整数正序排列即可 二进制转10进制:8421码 补码的相关知识在介绍补码之前先来认识其他的一些二进制码: 1、原码: 也叫...
  • 在实际开发中,我们可能会...1、自定义的二进制字符串转十进制bintodec 思路:把二进制字符串从最高位(左边第一位)开始用商乘以2再加余数(该位的数字),如此循环,左边第一位的商肯定是0。 例如1111011转化成十...
  • //二进制(B)、八进制(O)、十进制(D)、十六进制(前缀OX,后缀H)之间的转化 #include <stdio.h> int main () { int x; printf("请你输入x:"); scanf("%d",&x); printf("十六进制:%x\...
  • 进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由...19世纪爱尔兰逻辑学家乔治布尔对逻辑命题的思考过程转化为对符号
  • 我们之前已经学过进制转化的方法,都是手动转换:模某个数取余 在C语言中有直接进制转换的...%o:将整数输出为八进制数 #include<bits/stdc++.h> using namespace std; int main() { int x; while(~scanf(...
  • 机器语言是用0和1来处理问题的,在C语言中通过设定不同的显示格式在屏幕上将显示不同的进制格式的数据,比如:十六进制,八进制,二进制,十进制等等,这些都是常用的一些进制. 回想起关于进制的故事还是很多的,曾经刚刚...

空空如也

空空如也

1 2 3 4
收藏数 64
精华内容 25
关键字:

十进制转化为八进制c语言

c语言 订阅