*
分别以十进制、八进制、十六进制输出123,
浮点数形式 标准十进制 和科学型表示123.4
*/
void test_31()
{
/*
十进制常量前没有前缀,取值为0~9
八进制常量的前缀为0,取值为0~7
十六进制常量的前缀为0x或者0X,取值为0~9,A~F或a~f
*/
printf("%d,%d,%d\n", 0123, 0x123, 123);//以整型的形式输出
printf("%f,%f\n", 123.4, 1.234e2);//以浮点型格式输出
}
/*
求100~200之间的全部素数
*/
bool is_su(int num)
{
for (int i = 2; i < num; ++i)//只能被1和本身整除
{//或者让num% 2~根号num :for(int i=2;i<=sqrt(i);++i)
if (num%i == 0)
{
return false;
}
}
return true;
}
void test_33()
{
for (int i = 100; i <= 200; ++i)
{
if (is_su(i))
printf("%d\t", i);
}
}
/*
十进制转换为二进制
*/
int arr[20];//可以将数组作参数进行传址,并且动态开辟数组,
int trans(int num)
{
int i;
for (i = 0; num / 2 != 0;++i,num=num/2)//循环结束条件是 商为0时
{
arr[i] = num % 2;//用数组存储每次对2取余的结果
}
arr[i] = num % 2;
return i;
}
void test_35()
{
int num = 12;//可以由用户输入num
int len=trans(num);
for (int i = len; i >= 0; --i)
{
printf("%d", arr[i]);
}
printf("\n");
}
/*
任意输入一个数,并输入几进制
将其转换成十进制 并输出
*/
void test_36()
{
char num[50];
printf("请输入数字:");
gets(num);
int len = strlen(num);
int ch = 10;
do{
printf("请输入进制(2或8或16):");
scanf("%d", &ch);
int flag = 1;
if (ch != 2 && ch != 8 && ch != 16)
printf("输入错误,重输\n");
else if (ch == 2)
{
for (int i = 0; i < len; ++i)
{
if (num[i] >= '2')
{
flag = 0;
printf("输入错误,重输\n");
break;
}
}
if (flag)
break;
}
else if (ch == 8)
{
for (int i = 0; i < len; ++i)
{
if (num[i] >= '8')
{
flag = 0;
printf("输入错误,重输\n");
break;
}
}
if (flag)
break;
}
else if (ch == 16)
{
for (int i = 0; i < len; ++i)
{
if (num[i] >= '16')
{
flag = 0;
printf("输入错误,重输\n");
break;
}
}
if (flag)
break;
}
} while (1);
int num_10 = 0;
if (ch == 16)
{
for (int i = len - 1, j = 0; i >= 0; --i, ++j)
{
switch (num[i])
{
case 'A': num_10 += pow(ch, j) * 10; break;
case 'B': num_10 += 11 * pow(ch, j); break;
case 'C': num_10 += 12 * pow(ch, j); break;
case 'D': num_10 += 13 * pow(ch, j); break;
case 'E': num_10 += 14 * pow(ch, j); break;
case 'F': num_10 += 15 * pow(ch, j); break;
default: num_10 += (num[i] - 48) * pow(ch, j);
break;
}
}
}
else{
for (int i = len - 1, j = 0; i >= 0; --i, ++j)
{
num_10 += (num[i] - 48) * pow(ch, j);
}
}
printf("十进制:%d\n", num_10);
}
判断输入的数字与进制是否吻合 应该有更简单的方法。
/*
输入二进制格式的IP地址 输出十进制的IP格式
*/
int bin_Dec(int x, int n)//将二进制转化成十进制
{
if (n == 0)
return 1;
return x*bin_Dec(x, n - 1);
}
void test_40()
{
int ip[4] = { 0 };
char a[33];
printf("请输入二进制数:\n");
scanf("%s", a);
for (int i = 0; i < 8; ++i)
{
if (a[i] == '1')
ip[0] += bin_Dec(2, 7 - i);
}
for (int i = 8; i < 16; ++i)
{
if (a[i] == '1')
ip[1] += bin_Dec(2, 15 - i);
}
for (int i = 16; i < 24; ++i)
{
if (a[i] == '1')
ip[2] += bin_Dec(2, 23 - i);
}
for (int i = 24; i < 32; ++i)
{
if (a[i] == '1')
ip[3] += bin_Dec(2, 31 - i);
if (a[i] == '\0')
break;
}
printf("ip:%d.%d.%d.%d\n", ip[0], ip[1], ip[2], ip[3]);
}