c语言问题:输入一个十进制数,将其转化为二进制数后存放在数组中并输出

如题所述

第1个回答  2022-12-11

#include<stdio.h>

#define uint unsigned int

#define ushort unsigned short

//求2的N次方

int cifang(int n)

{

int i=0,sum=1;

for(i=n;i>0;i--)

{

sum*=2;

}

return sum;

}

//十进制正数转换成二进制数

uint transform_data_zhengshu(uint frequence,ushort*pwm_table)

{

uint temp=frequence;

int pwm_index=0;

while(temp)

{

pwm_table[pwm_index]=(temp&0x01);

temp=temp>>1;

pwm_index++;

}

return pwm_index-1;

}

uint transform_data(int frequence,ushort*pwm_table)

{

int temp=frequence;

int pwm_index=0;

ushort pwm_temp[15]={0};

//负数

if(frequence<0)

{

//先将负数转换成正数

temp=-frequence;

//求出这个正数temp的二进制并存放在pwm_temp中

transform_data_zhengshu(temp,pwm_temp);

//将这个正数temp的二进制pwm_temp取反并转换成十进制数sum

int sum=0;

int i=0;

for(i=0;i<15;i++)

{

if(pwm_temp<i>==0)

pwm_temp<i>=1;

else

pwm_temp<i>=0;

sum+=cifang(i)*pwm_temp<i>;

pwm_temp<i>=0;

}

//将转换出来的十进制数sum加一

sum+=1;

//printf("sum=%d\n",sum);

//最后再转成二进制pwm_table

return transform_data_zhengshu(sum,pwm_table);

}

//正数

return transform_data_zhengshu(frequence,pwm_table);

}

int main(){

int frequence=-2;

//scanf("%d",&frequence);

ushort pwm_table[15]={0};

uint off_set;

off_set=transform_data(frequence,pwm_table);

int i=0;

for(i=off_set;i>=0;i--)

{

printf("%d",pwm_table<i>);

}

return 0;

}

扩展资料:

①printf()函数是格式化输出函数,一般用于向标准输出设备按规定格式输出信息。

格式输出,它是c语言中产生格式化输出的函数(在stdio.h中定义)。用于向终端(显示器、控制台等)输出字符。格式控制由要输出的文字和数据格式说明组成。

要输出的文字除了可以使用字母、数字、空格和一些数字符号以外,还可以使用一些转义字符表示特殊的含义。

简单点理解就是,在一段程序中你正确使用该函数,可以在该程序运行的时候输出你所需要的内容。

②printf函数是一个标准库函数,它的函数原型在头文件“stdio.h”中。但作为一个特例,不要求在使用printf函数之前必须包含stdio.h文件。

printf()函数的调用格式为:printf("<格式化字符串>",<参量表>)。

其中格式化字符串用于指定输出格式。格式控制串可由格式字符串和非格式字符串两种组成。

格式字符串是以%开头的字符串,在%后面跟有各种格式字符,以说明输出数据的类型、形式、长度、小数位数等。

如“%d”表示按十进制整型输出,“%ld”表示按十进制长整型输出,“%C”表示按字符型输出等。

相似回答