帮忙做一下这道C语言题目。

2024-11-12 17:53:07
推荐回答(2个)
回答(1):

第四个(即将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;
}

回答(2):

#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);
}

示例运行结果截图如下: