[学习笔记]达内纪录片day02 进制转换作业

    选择打赏方式

今天学的东西,没什么可以记录的,主要就是作业要记录一下。

临下课10分钟,老师留的作业,0-127范围内的整数 十进制转二进制。

不让用循环,递归,条件判断。。。

我真的不知道怎么做,一行行的复制粘贴???exm?


在达内写了下,琢磨了20分钟,都没搞定正序输出,回家5分钟就重写并且找到了原因。

其实,liunx下那个vim,没办法下断点,没办法看变量监视表,没办法查看内存。

好吧,不找借口了,根本原因就是,我菜,菜就是原罪。


当时的实现思路如下:

声明一个char数组,索引移到最后(\0之前)一位

一个整数变量,接收用户输入

一个while循环体,变量/2不等于0就循环,否则循环结束,转换完毕

每次把余数存进去,然后索引-1

变量=变量/2


最后输出字符串


思路是没错,但是,我忘记了前面给字符数组赋初值是0,也就是所有的字符都是‘\0’,而最大的127,二进制也就是0111 1111而已,这个字符串第一位是‘\0’,也就是ASCII码的0,而不是字符0的48。

所以格式化输出printf,发现字符串第0位是0,直接结束了输出,什么都没有输出出来。


正确的处理方法是,前移字符,使得前面有效位不是'\0',或者在二进制转换结束后,将前面的‘\0’替换为字符0占位。


代码实现(循环方法):

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int i = 7, j = 0;
	char ch[9] = { 0 };

	s1:
	printf("请输入一个0-127之间的整数:");
	scanf_s("%d",&j);

	//判断用户输入是否在0-127之间
	if (j < 0 || j>127)
		goto s1;

	while (j!=0)
	{
		if (j % 2==0)
			ch[i--] = '0';
		else
			ch[i--] = '1';
		j = j / 2;
	}

	//如果前面存在\0,字符串就不会输出,而是printf函数遇到\0直接结束
	//可以换成普通的数字0占位,字符0的ASCII码是48,而\0ASCII码是0

	for (i = 0; i <=7; i++)
	{
		if (ch[i] == '\0')
			ch[i] = '0';
	}
	printf("结果:%s\n",ch);
	system("pause");
	return 0;
}


结果:

TIM截图20190701211942.png


又写了个递归的版本

其实,递归才是最简单的方法,不接受反驳。

递归,逐层进入,逐层退出。

进到最后一层call,满足退出条件,自然也就能把目标数%2的结果从最后一次逐层退出倒序输出(倒倒得正)

代码实现(递归方式):

#include <stdio.h>
#include <stdlib.h>


void _10to2(int n) 
{
	if (n == 0)
		return;
		
	_10to2(n/2);

	printf("%d", n % 2);

}

int main()
{
	int j = 0;

	s1:
	printf("请输入一个0-127之间的整数:");
	scanf_s("%d",&j);

	//判断用户输入是否在0-127之间
	if (j < 0 || j>127)
		goto s1;
	
	_10to2(j);

	system("pause");
	return 0;
}



THE END! 完结撒花





版权声明:若无特殊注明,本文皆为《 8964CN 》原创,转载请保留文章出处。
本文链接:[学习笔记]达内纪录片day02 进制转换作业 http://www.8964cn.net/?post=63
正文到此结束

热门推荐

发表吐槽

你肿么看?

你还可以输入 250 / 250 个字

嘻嘻 大笑 可怜 吃惊 害羞 调皮 鄙视 示爱 大哭 开心 偷笑 嘘 奸笑 委屈 抱抱 愤怒 思考 日了狗 胜利 不高兴 阴险 乖 酷 滑稽

评论信息框

吃奶的力气提交吐槽中...

已有1条吐槽

Jarredlib

2019-11-28 04:49 意大利 CZ88.NET
嗨,这是金星硬币项目。

金星硬币是一种在3500亿美元的夜娱乐市场(俱乐部,酒吧,约会俱乐部,性习俗等)中使用的新型加密货币。

我们已经开发了钱包应用程序,在全球范围内下载量超过100,000,现在可以在该市场的15,000家商店中结算。

金星硬币计划在2020年2月在全球最大的交易所上市,我们决定在上市前开始最大的交易。

在此交易中,您可以在上市前以70%的价格获得维纳斯硬币,所以不要错过这个机会。

交易所挂牌价:$ 0.1
推荐代码可享70%折扣:$ 0.1→$ 0.03

——————————————
推荐代码:9`aw*e2DwL
*截止日期2019年12月31日
购买:https://venuscoin.ge/purchase/
——————————————

易于购买
1.安装Venus Walle应用
iPhone→https://apps.apple.com/jp/app/venus-wallet/id1447838722?l=zh-CN
android→https://play.google.com/store/apps/details?id=ge.cryptolive.venuswallet&hl=zh-CN
2.输入表格和推荐代码→http://venuscoin.ge/purchase/
3.输入您想要购买并使用BTC或ETH支付的金额。
4.您将在购买后的3个工作日内收到金星硬币。
最低购买量为0.05 BTC〜

首席执行官兼创始人千叶敬介表示,到2022年,金星硬币的价格将提高30美元以上,这笔交易是您获得此价格的最后机会,所以请不要错过它!

如有任何疑问或疑虑,请随时与我们联系。

<关于金星硬币>
官方网站:https://Venuscoin.ge/

推特:@venus_coin
Instagram的:@venus_coin_project
脸书:@vnsproject
YouTube:https://www.youtube.com/channel/UCIk_9GAYAttM0n8WwzBJDCQ/

Skype:CryptoLiveJapan
电报:https://t.co/rObAKQz0mQ?amp = 1
线:@ 514zrjrz

<公司>
CryptoLive OU
纳尔瓦5号塔林,哈林10117
+ 372-618-9563
https://cryptolive.ge
 未知操作系统   未知浏览器