这是一个C语言 do while 循环示例:统计十进制正整数 n 转换为二进制数后,其二进制序列中包含的 1 和 0 的个数。
输入:一个正整数。
输出:两个整数:1 的个数和 0 的个数。
将十进制数 n 转换成二进制数,一般采用“除 2 取余,倒序输出”的方法。
本题只是统计转换成的二进制数中 1 和 0 的个数,因而只要在“除 2 取余”的过程中不断判断并累计 1 和 0 的个数即可(见图 1)。
代码清单 1:统计十进制正整数 n 转换为二进制数后,其中包含的 1 和 0 的个数
#include <stdio.h>
#include <stdlib.h>
int main( )
{
int n,s1=0,s0=0;
printf("输入一个正整数:\n");
scanf("%d",&n);
do
{
if(n % 2 == 1)
s1++; //余数为1,则s1加1
else
s0++; //余数为0,则s0加1
n /= 2; //n=n/2
}
while(n != 0); //非0,则重复“除2取余”转换
printf("二进制序列中1的个数是:%d\n",s1);
printf("二进制序列中0的个数是:%d\n",s0);
system("pause");
return 0;
}
运行结果:
输入一个正整数:
78
二进制序列中1的个数是:4
二进制序列中0的个数是:3
至于输出正整数 n 的二进制数序列,有很多方法,图 3 所示的就是其中一种。
代码清单 2:输出十进制正整数 n 的二进制数序列
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main( )
{
int n,i=0;
double D=0;
printf("输入一个正整数:\n");
scanf("%d",&n);
do{
if(n % 2 == 1) D += pow(10,i); //D = (n % 2) * pow(10,i)
n /= 2; //n = n / 2
i++; //i = i + 1
}while(n != 0); //非 0,则重复“除 2 取余”转换
printf("二进制数序列是:%.0lf\n",D);
system("pause");
return 0;
}
运行结果:
输入一个正整数:
78
二进制数序列是:1001110