第四个(即将d)要求和题目有冲突,题目要求输入的是正整数,这个要求是选作的,这里不作。实现本题,使用检测各个位的值是否为1即可,是1时,打印出1,否则打印0。使用循环来检测8个位。以下是在手机上用易历知食软件里的微C程序设计功能编写的一个示例,实现题目中前三个要求。手机上的代码如下图(为方便,这里定义输入0时就退出):
手机上的运行结果如下图:
附代码:
#include
int main()
{
int n,i,mask;
printf("请输入一个正整数(小于256,输入0则退出)\n");
while(1){
scanf("%d",&n);
if (n == 0){
break ;//输入0退出
} else if (n >= 256){
printf("输入的数超出范围\n");
} else {
printf("%d 的二进制数是 ",n);
mask = 0x80;//从最高位开始
for (i=0;i < 8;i++){
if (n & mask){ //检测位是否为 1
printf("1");
} else {//位为0
printf("0");
}
mask >>= 1;//移向低位
}
printf("\n");//每个数单独一行
}
}
return 0;
}
#include
#include
#define N 20
void Decimal2Binary(char *arr,int n)
{
int i=0,len;
char tmp;
while(n!=0)
{
if(n&1==1)
arr[i]='1';
else
arr[i]='0';
n>>=1; //右移一位
i++;
}
arr[i]='\0';
//若转换成的二进制数不够八位,则在前面添“0”补足八位
if(strlen(arr) < 8)
{
while(i<8)
{
arr[i]='0';
i++;
}
}
arr[i]='\0';
len=i;
//逆置字符数组
for(i=0;i{
tmp=arr[i];
arr[i]=arr[len-i-1];
arr[len-i-1]=tmp;
}
}
int main(void)
{
int n;
char str[N];
printf("输入一个小于256的十进制正整数: ");
scanf("%d",&n);
if(!(n>0 && n <256))
{
printf("Input Invalid!\n");
return -1;
}
Decimal2Binary(str,n);
printf("%s\n",str);
return(0);
}
示例运行结果截图如下: