初学C语言,望哪位高人讲解下此程序
#include<stdio.h>void main()
{
char c;
int a={0};
int i=0,j;
scanf("%s",c);
while(c)
{
if(c>='0'&&c<='9')
c=c-48;
else if(c>='A'&&c<='Z')
c=c-55;
else if(c>='a'&&c<='z')
c=c-87;
else
{
puts("error\n");
return;
}
}
i=0;
while(c){
for(j=3;j>=0;j--)
{
a=c%2;
c/=2;
}
for(j=0;j<4;j++)
printf("%d",a);
i++;
}
} #include<stdio.h>
void main()
{
char c;//定义个可以装18个字符的一位数组
int a={0};//二维数组
int i=0,j;
scanf("%s",c);//输入字符串给c数组
while(c)//把c内的字符转换为对应的数字 比如0》09》9a》10b》11
{
if(c>='0'&&c<='9')
c=c-48;
else if(c>='A'&&c<='Z')
c=c-55;
else if(c>='a'&&c<='z')
c=c-87;
else
{
puts("error\n");
return;
}
}
i=0;
while(c)//把数字转化为4位的二进制数,并输出
{
for(j=3;j>=0;j--)
{
a=c%2; //取余
c/=2; //除
}
for(j=0;j<4;j++)
printf("%d",a);
i++;
}
} 功能就如楼上所说的
首先说明:
scanf 这个函数接收我们输入的,全是字符,就算我们输入‘123’,在计算机来讲,是字符‘1’ ‘2’ ‘3’,而不是数字123,计算机是当成 49 50 51 来处理,这个可以对照 ASCII表来查字符和十进制
开始的定义一个存放18个字符的字符数组
定义一个18行4列的二维数据存放18个四位二进制
通过scanf函数接收输入的字符串到字符数组
第一个while里面是一个个把字符数组里面的字符转成我们输入时想要的数字
比如我们输入‘1’,符合第一个条件,计算机内是49,49-48,正好是1,这样就把计算机内的49变成1,如果你把1以字符形式输出,是一个奇怪的样子
第二个while就是把转换过的字符数组
一个个取出来,通过十进制和二进制转换规则,把一个字符转换成四位二进制,第一个字符就是对应二维数组中第一行,然后输出,第二个字符就对应第二行,然后输出...............
不过这里面,第一个while里面的赋值似乎是有问题的
c=c-48;
这种写法不好,只能省篇幅,又容易出错,应该分开写成
c=c-48;
i++; a5123058 发表于 2013-9-29 00:41 static/image/common/back.gif
#include
void main()
{
谢谢我再好好研究研究 laofuz1024 发表于 2013-9-29 05:32 static/image/common/back.gif
功能就如楼上所说的
首先说明:
灰常感谢,我的好好看看
页:
[1]