目录
前言
计算机信息的编码有很多种,二进制,八进制,十进制及十六进制,现在就让我们解决它们之间的转换。
一、十进制转换为二进制
1.编程要点
1)用数组来储存二进制数。
2)用两次for循环,第一次for循环0到14,(本题只考虑正数的转换,有兴趣的小以自己 敲下负整数),第二次for为15到0。注不是0到15。存入是从a[0]开始的。
3)%,/ 的应用。
2.主要程序代码如下
#include<stdio.h>
int main()//将10进制转换成二进制。
{
int i,j,m,n;
int a[16] = { 0 };//注意数组一定要定义为0。
printf("please input decimalism number(0-32767):\n");
scanf("%d", &m);
for (i = 0; i < 15; i++)
{
a[i] = m % 2;
m = m / 2;
}
for (i = 15; i >= 0; i--)
{
printf("%d", a[i]);
if (i % 4 == 0)
printf(" ");
}
return 0;
}
3.运行
程序运行结果示例1:
二、n进制转换为十进制
1.编程要点
1)注意分别讨论有字母的情况
2)要统一字母的格式
2.主要程序代码如下
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void change(char t[])
{
int i = 0;
for (i = 0; i < strlen(t); i++)
{
if (t[i] >= 'a' && t[i] <= 'z')
t[i] = t[i] - 32;
}
}
int main() //将n进制转换成10进制
{
long t1 = 0;
int i=0, n=0, t=0, t3=0;
char a[100];
printf("please input a number string:\n");
gets(a); //输入n进制数到数组a中。
change(a); //将a中的小写字母转换成大写字母。
t3 = strlen(a); //求数组a的长度。
printf("please input n(2 or 8 or 16):\n");
scanf("%d",&n);
for (i = 0; i < t3; i++)
{
if (a[i] - '0' >= n && a[i] <= 'A' || a[i] - 'A' + 10>=n)
//判断输入数据和进制数是否相符。
{
printf("data error!!");
exit(0); //中断程序
}
if (a[i] >= '0' && a[i] <= '9')
t = a[i] - '0'; //转换成10进制
else if (n >= 11 && (a[i] > 'A' && a[i] <= 'A' + n - 10)) //判断是否为字母
t = a[i] - 'A' + 10; //转换成10进制
t1 = t1 * n + t; //注意是*n
}
printf("the decimal is %ld\n", t1);
return 0;
}
3.运行
程序运行结果示例1:
程序运行结果示例2:
程序运行结果示例3:
三、以IP地址形式输出
1.编程要点
1)将输入的二进制位以每8位数为一个单位
2.主要程序代码如下
#include<stdio.h>
int bin_dec(int x, int n)
{
if (0 == n) //递归结束条件
{
return 1;
}
return x * bin_dec(x, n - 1); //调用递归。
}
int main()
{
int i;
char a[33];
int ip[4] = { 0 };
printf("please input binary number:\n");
gets(a);
for (i = 0; i < 8; i++) //每8位二进制为一个单位
if (a[i] == '1')
ip[0] += bin_dec(2, 7 - i);
for (i = 8; i < 16; i++)
if (a[i] == '1')
ip[1] += bin_dec(2, 15 - i);
for (i = 16; i < 24; i++)
if (a[i] == '1')
ip[2] += bin_dec(2, 23 - i);
for (i = 24; i < 32; i++)
{
if (a[i] == '1')
ip[3] += bin_dec(2, 31 - i);
if ('\0' == a[i])
break;
}
printf("ip:\n");
printf("%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]);
return 0;
}
3运行
程序运行结果示例1:
总结
本次练习了字符串中大小写字母的转换,数字分离,创建子函数等知识点。
让我们每天进步一小步。