极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10776|回复: 4

初学C语言,望哪位高人讲解下此程序

[复制链接]
发表于 2013-9-28 15:49:59 | 显示全部楼层 |阅读模式
#include<stdio.h>
void main()
{
char c[18];
int a[18][4]={0};
int i=0,j;
scanf("%s",c);
while(c[i])
  {
   if(c[i]>='0'&&c[i]<='9')
    c[i]=c[i++]-48;
   else if(c[i]>='A'&&c[i]<='Z')
    c[i]=c[i++]-55;
   else if(c[i]>='a'&&c[i]<='z')
    c[i]=c[i++]-87;
   else
   {
    puts("error\n");
    return;
   }
}
i=0;
while(c[i]){
  for(j=3;j>=0;j--)
  {
   a[i][j]=c[i]%2;
   c[i]/=2;
  }
  for(j=0;j<4;j++)
   printf("%d",a[i][j]);
  i++;
}
}
回复

使用道具 举报

发表于 2013-9-29 00:41:31 | 显示全部楼层
#include<stdio.h>
void main()
{
char c[18];//定义个可以装18个字符的一位数组
int a[18][4]={0};//二维数组
int i=0,j;
scanf("%s",c);//输入字符串给c数组
while(c[i])  //把c内的字符转换为对应的数字 比如0》0  9》9  a》10  b》11
   {
    if(c[i]>='0'&&c[i]<='9')
     c[i]=c[i++]-48;
    else if(c[i]>='A'&&c[i]<='Z')
     c[i]=c[i++]-55;
    else if(c[i]>='a'&&c[i]<='z')
     c[i]=c[i++]-87;
    else
    {
     puts("error\n");
     return;
   }
}
i=0;
while(c[i])  //把数字转化为4位的二进制数,并输出
        {
   for(j=3;j>=0;j--)
   {
   a[i][j]=c[i]%2;   //取余
    c[i]/=2; //除
   }
   for(j=0;j<4;j++)
    printf("%d",a[i][j]);
   i++;
}
}
回复 支持 反对

使用道具 举报

发表于 2013-9-29 05:32:07 | 显示全部楼层
功能就如楼上所说的

首先说明:
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[i]=c[i++]-48;
这种写法不好,只能省篇幅,又容易出错,应该分开写成
c[i]=c[i]-48;
i++;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-29 15:58:27 | 显示全部楼层
a5123058 发表于 2013-9-29 00:41
#include
void main()
{

谢谢  我再好好研究研究
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-29 15:58:58 | 显示全部楼层
laofuz1024 发表于 2013-9-29 05:32
功能就如楼上所说的

首先说明:

灰常感谢,我的好好看看
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-5 13:53 , Processed in 0.039855 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表