第二次博客作业: 函数+进制转换器v1.0beta
一,运行截图**
二,函数介绍
1,二进制转十进制
int f(int x)
{
int i,m,q,sum=0;
m = x;
for (i=0; ;i++) {
q = m%10;
m = m/10;
sum = sum + q*pow(2,i);
if (m==0) {
break;
}
}
return sum;
}
2,二进制转八进制
int g(int x)
{
int sum,k;
k= f(x);
sum = m(k);
return sum;
思路:先将二进制转换为十进制,再将十进制转换为八进制。
3,八进制转二进制
int h(int x)
{ int m,sum;
m = j(x);
sum = c(m);
return sum;
}
思路:先将八进制转化为十进制,再将十进制转换为二进制。
4,八进制转十进制
int j(int x)
{
int i, m, q, sum = 0;
m = x;
for (i = 0; ; i++) {
q = m % 10;
m = m / 10;
sum = sum + q * pow(8, i);
if (m == 0) {
break;
}
}
return sum;
}
5,十进制转二进制
int c(int x)
{
int sum, m, i,t;
sum = 0;
t = x;
for (i = 0; ; i++) {
m = t % 2;
t = t / 2;
sum = sum + m * pow(10, i);
if (t == 0) {
break;
}
}
return sum;
}
6,十进制转八进制
int m(int x)
{
int sum, m, i, t;
sum = 0;
t = x;
for (i = 0; ; i++) {
m = t % 8;
t = t / 8;
sum = sum + m * pow(10, i);
if (t == 0) {
break;
}
}
return sum;
}
三,main函数
#include <stdio.h>
#include <math.h>
int f(int x);//二进制转十进制
int g(int x);//二进制转八进制
int h(int x);//八进制转二进制
int j(int x);//八进制转十进制
int c(int x);//十进制转二进制
int m(int x);//十进制转八进制
int main()
{
int n,number;
printf("进制转换器\n");
printf("请用数字输入您的进制数与您的数字:");
scanf("%d %d",&n,&number);
if (n==2) {
int i,r,t,flag=0;
t=number;
for (i=1; ;i++) {
r=t%10;
t=t/10;
if(t==0) {
break;
}
if(r>=2) {
flag++;
}
}
if (flag!=0) { //判断是否合法
printf ("对不起,您输入的数字与进制不匹配\n");
}
else {
int s,b;
s = f(number);
b = g(number);
printf("十进制:%d\n八进制:%d\n",s,b);
printf("感谢您的使用\n");
}
}
else if(n==8) { //判断是否合法
int i,r,t,flag=0;
t=number;
for (i=1; ;i++) {
r=t%10;
t=t/10;
if (r>=8) {
flag++;
}
if (t==0) {
break;
}
}
if (flag!=0) {
printf("对不起,您输入的数字与进制不匹配\n");
}
else {
int e,s;
e = h(number);
s = j(number);
printf("二进制:%d\n十进制:%d\n",e,s);
printf("感谢您的使用\n");
}
}
else if (n==10) { //判断是否合法
int e,b,l;
e = c(number);
b = m(number);
printf("二进制:%d\n八进制:%d\n",e,b);
printf("感谢您的使用\n");
}
else {
printf("对不起,暂时不支持此进制的转换\n");
}
return 0;
}
四,思维导图、
五,遇到的问题
1,一开始完全弄不懂各个进制之间转换如何通过C语言实现,后来通过函数解决了。
2,数组的知识不熟悉,写的代码不能够实现较大的数的转换。
3,十六进制与其他进制的转换的方法不清楚。
4,函数名称不够明确,经常把我自己写的函数搞混。
5,界面不够清晰,没有人性化的设置。
六,代码互评
林洁颖
int binaryconversion(int number){
if(number/2==0){
return number%2;
}
else{
return number%2+binaryconversion(number/2)*10;
}
}
运用了递归法,代码简洁,清晰,相比之下,我的转换方法过于直接,也过于厚重,要耗费很长的时间。
七,总结与收获
1,通过这次博客园的作业,我充分了解二进制,八进制,十进制之间的转换关系。
2,加强我对函数的理解,让我能够更加熟练的运用函数解决问题,简化代码。
3,了解到了自己定义的函数可以互相引用,从而简化过程。
4,深刻的了解了自己在数组这方面的薄弱,也了解到了数组的用途。