编辑代码

#include <stdio.h>
#define Max_voltage 5.0
#define Max_value 4095

void approaching(float inputvotlage,int j,int results[12],int compare_voltage,int set_voltage,float guess_voltage) 
{
    int i;
 if(j<12)
 {
    if(guess_voltage>=compare_voltage+set_voltage)
        {
            results[j]=1;
            compare_voltage=compare_voltage+set_voltage;
            approaching( guess_voltage, j+1,results,compare_voltage,set_voltage/2,guess_voltage);
        }
     else
        {
            approaching( guess_voltage, j+1, results,compare_voltage,set_voltage/2,guess_voltage);
        }   
 }
}


int main () {
   printf("请输入0——5V的电压值:");
   float input_votlage;
   scanf("%f",&input_votlage);
   int i;
   int set_voltage=2048;
   int compare_voltage=0;
   float step=Max_voltage/Max_value;
   float guess_voltage=input_votlage/step; //量化电压
   int j=0;
 int results[12];
     for(i=0;i<12;i++)   //人为初始化一个二进制的值
  {
      results[i]=0;
  }
    if(input_votlage>5)  //限制电压值在0——5V的范围
  {
      input_votlage=5;
  }
  else if(input_votlage<0)
  {
      input_votlage=0;
  }
   //在12位AD转换器中,有4096个可能的数字输出,这对应于分辨率为(基准电压/4096),在这种情况下,每个数字的变化对应着(基准电压/4096)的电压变化。
  printf("基于12位AD转换的量化电压为:") ;
  printf("%.1f\n",guess_voltage);

   approaching(input_votlage,j,results,compare_voltage,set_voltage,guess_voltage);
   printf("最终二进制值为:");
   for(i=0;i<12;i++)
   {
       printf("%d",results[i]);
   }
    return 0;
}