首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C语言实例:巧妙运用递归实现字符串的输出

学习C语言编程看这篇就够了,信息量很大,建议收藏【置顶】十大排序算法,来这看看-基本思想+动画演示+C语言实现【置顶】 一个好玩的小游戏(纯C语言编写)【置顶】程序员离职后躲老家山洞 2 年,敲出 45...【置顶】 c语言学生信息管理系统(基于文件、链表)【必读】 一文搞懂C语言对文件的操作 | 经典【必读】 23种设计模式的通俗解释,看完秒懂【必读】 10分钟,快速掌握C语言指针【必读】 17 张程序员壁纸...(使用频率很高)【必读】 要想让输入的字符串输出有很多种方法,我们可以用字符串处理函数,也可以将字符数组内的元素进行交换,在这里,我们用递归的方式来封装一个可以将字符串输出的函数。...首先我们知道,递归程序层层递归,在递归之后的程序一定是最后才执行的,既然我们要打印字符串,第一个字符一定是最后才打印的,然而很巧的是,我们这个输出函数传址传的也是第一个字符的地址,所以我们就可以写成...='\0') { reverse_string(string+1); } printf("%c",*string); } 如果递归到最后一个字符时, string + 1

1.1K20
您找到你想要的搜索结果了吗?
是的
没有找到

C语言复习_进制

什么是机器数 顾名思义 机器数就是能被计算机识别的二进制形式的数 我们建设计算机的字长为8(就是存储一个字的长度) 十进制3转换二级制的数等于0000 0011 如果是-3 二进制表现形式是1000 0011...在刚开始接触进制的时候,我有一个疑惑,为什么不可以用原码编码直接表示二进制,1用00000001表示 -1用10000001表示 1+(-1)=0 可是我们经过原码计算结果是错误的 结果是-2 为了解决原码计算减法的错误...比如下午两点 我们可以写作 14 12+14 12-10 都表示的是下午两点 这里涉及的数学的一个同余概念 就是有两个数a,b 除以一个整数如果余数相等 则称这a,b同余 比如 14 26 2在表盘上表现的形式都是一样的...1 有符号二进制数 有符号二进制数的范围是[-127,128] 通过补码可以实现有符号二进制运算适用无符号二进制运算规则 首先解决了两个0的问题 10000000表示的是-128 其次解决了原码减法运算的错误...补码的计算方法 1.原码 经过取反 得到反码 再+1 变成补码(正数的补码是其本身) 2.负数X+Mod = Sum 比如-3的补码在八位字长计算机中的计算方法 -3+256=253 253的二进制1111

66310

C语言常见的进制转换

前言 生活中最常见的进制是十进制,而有一类编程题会要求将十进制转换为其他进制,本篇博客将主要讲述C语言中常见的几类进制转换问题。...一、十进制数转换为二进制数、八进制数 方法:举例将十进制数100转换为二进制数,就是将100与2相除,得到商以及余数,再将商与2不断相除,最终除到商为0。...最后的值正好是余数的个数 x /= n; } for (j = i - 1; j >= 0; j--) { printf("%d", arr[j]);//余数输出...A\B\C\D\E\F等字符,所以还需要将取得的余数做进一步转换。...x /= 10; } printf("%d\n", sum); return 0; } 四、十六进制数转换为十进制数 十六进制中含A\B\C\D\E\F等字符,所以在输入的时候可以将其看成输入一个字符串

6810

进制转换二进制C语言

然后输出 如:十进制数为出格式类似:十进制数7对应的二进制数为111,对应的八进制数为7 掌握要点: 1.十进制转换成二进制的方法 2.堆栈特点巧妙运用(先进后出,实现) 相关文献: 十进制整数转换为二进制整数采用...具体做法是:用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来...---- 运算过程 要点:除二取余,排列解释:将一个十进制数除以二,得到的商再除以二,依此类推直到商等于一或零时为止,取将除得的余数,即换算为二进制数的结果例如把52换算成二进制数,计算结果如图:...200除以2得到的余数依次为:00010011,排列,所以200对应的二进制数就是11001000。...由于计算机内部表示数的字节单位都是定长的,以2的幂次展开,或者8位,或者16位,或者32位....。于是,一个二进制数用计算机表示时,位数不足2的幂次时,高位上要补足若干个0。本文都以8位为例。

4K20

【优质题解】题解1110:2^k进制数 减法思维(C语言描述)

题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数。 (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位。...将S从右起划分为若干个长度为k 的段,每段对应一位2^k进制的数,如果S至少可分成2段,则S所对应的二进制数又可以转换为上述的2^k 进制数r。 例:设k=3,w=7。...则r是个八进制数(2^3=8)。...int n,int m) //C(n-1)(m)计算排列数,其中n为最大数值+1(进制),m为当前位置 { int i; long sum=1; for(i=1...既小于二进制余出来的位数所能得到的最大数又小于X进制减位数 for(i=2;i<wei;i++) //从第二位开始(从右往左),对每一位数(除最高位)计算排列数 sum+=C

86420

江哥带你玩转C语言 | 09 - C语言进制和位运算

.089-109 +178 0b325 0b0010 0xffdc 96f 96.0f 96.oF -.003 ---- 进制转换 10 进制2 进制2取余, 余数; 得到的序列就是二进制表示形式...位运算就是直接对整数在内存中的二进制位进行操作 C语言提供了6个位操作运算符, 这些运算符只能用于整型操作数 符号 名称 运算结果 & 按位与 同1为1 | 按位或 有1为1 ^ 按位异或 不同为1 ~...,称为“字符型” char类型变量占1个字节存储空间,共8位 除单个字符以外, C语言的的转义字符也可以利用char类型存储 字符 意义 \b 退格(BS)当前位置向后回退一个字符 \r 回车(CR),...= 6; // 存储的是数字 6 练习 定义一个函数, 实现输入一个小写字母,要求转换成大写输出 ---- 类型说明符 类型说明符基本概念 C语言提供了说明长度和说明符号位的两种类型说明符, 这两种类型说明符一共有...long 长整型 (说明长度) signed 有符号型 (说明符号位) unsigned 无符号型 (说明符号位) 这些说明符一般都是用来修饰int类型的,所以在使用时可以省略int 这些说明符都属于C语言关键字

1.3K00

C语言:十进制、BCD码互换

目录 1、复杂版 2、简易版 ---- 最近写单片机 RTC 日期、时间配置,需要实现十进制、BCD码互换,将示例Demo分享给各位朋友: BCD是指用二进制来表示十进制数的编码,即:用4位二进制来表示一位十进制数...,代码如下所示: int bcd_decimal_code( int bcd) { int sum = 0, c = 1; // sum返回十进制c每次翻10倍 for(int i = 1;...bcd > 0; i++) { if( i >= 2) { c*=10; } sum += (bcd%16) * c; bcd /= 16; // 除以16同理与十进制除...10将小数点左移一次,取余16也同理 } return sum; } 2、简易版 十进制转换为BCD码,代码如下所示: int bcd_decimal_code( int bcd) { return...(decimal>>4) * 6); } ---- 参考资料: 1、十进制与BCD码转换的算法 2、十进制转BCD码在线工具

1.8K30

C语言进制转换以及原码、反码、补码

例如123=3*10^0+2*10^1+1*10^2 2.1 其他进制转10进制的方法          在此之前先讲讲2进制转10进制2进制和10进制是类似的,只不过2进制的每⼀位的权重,从右向左是...1*2^0+0*2^1+1*2^2+1* 2^3=13 所以2进制转10进制,只要将每一位的数乘以他对应的权重并相加就可以了! 同理,8进制和16进制转10进制也是通过这样的方法去实现!...2.3.1 2进制转8进制       8进制的数字每⼀位是0~7的,0~7的数字,假如各⾃写成2进制,最多有3个2进制位就⾜够了,⽐如7的2进制是111,所以在2进制转8进制数的时候,从2进制序列中右边低位开始向左每...3个2进制位会换算⼀ 个8进制位,剩余不够3个2进制位的直接换算。...2.3.2 2进制转16进制       16进制的数字每⼀位是0~9,a ~f 的,0~9,a ~f的数字,各⾃写成2进制,最多有4个2进制位就⾜够了, ⽐如 f 的⼆进制是1111,所以在2进制转16

21310

蓝桥杯 2^k 进制数 (动态规划+大数求和)-------C语言—菜鸟级

/* 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数。 (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位。...将S从右起划分为若干个长度为k 的段,每段对应一位2k进制的数,如果S至少可分成2段,则S所对应的二进制数又可以转换为上述的2k 进制数r。 例:设k=3,w=7。则r是个八进制数(2^3=8)。...由于w=7,长度为7的01字符串按3位一段分,可分为3段(即1,3,3,左边第一段只有一个二进制位),则满足条件的八进制数有: 2位数:高位为1:6个(即12,13,14,15,16,17),高位为2...k 进制数完整的分组 有几组 即 除了最高位余下还有几位 2^3 7 2进制中 //7分成 1 3 3 有两组完整 k=(1<<k)-1;//确定进制数...k 为最大该进制数 8进制 最大进制数为 7; t=(1<<t)-1;// 特殊组 的可取范围 7 分 1 3 3 特殊的是 1为2进制 最高位只能 取 1 如果是 2^3 8 的

38520

进制?十进制!(C语言刷题)(位运算)

专栏:https://blog.csdn.net/2301_79293429/category_12545690.html 题目描述 给定两个十进制整数 : A,B 你需要把它们的二进制形式以十进制的运算法则相加输出结果...例如: A=3,B=2的时候,A 的二进制表示是 : 11 , B 的二进制表示是 10 ,你需要输出答案为 : 21 输入描述: 一行两个十进制整数: A,B 输出描述: 一行一个整数,表示相加的结果...示例1 输入 2 3 输出 21 示例2 输入 5 4 输出 201 备注: 对于 100 % 的数据: 1<=A,B<=32768 #define _CRT_SECURE_NO_WARNINGS 1...() { int a, b; scanf("%d%d", &a, &b); ll sum=0,m=1; /*注意开long long*/ while (a||b) { int a2...= a & 1, b2 = b & 1; sum += (a2 + b2)*m; m *= 10; a >>= 1;/**/ b >>= 1;/**/ } printf("%lld\

6110
领券