⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bin2dec1.c

📁 这是有关数据结构的例程序
💻 C
字号:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

#define INITSIZE  20   //顺序表初始空间分配量
#define INCREMENT  5   //顺序表空间分配增量

short flag=1, flag2=0; //定义全局变量

typedef char ElemType; //定义ElemType代表的数据类型

typedef struct{
	ElemType *elem;             //存储空间基址
	unsigned int length;        //当前长度
	unsigned int listsize;      //当前空间分配量
	int power;                  //存储乘方次数
}Sqlist;

short InitList(Sqlist *);   //创建顺序表
short InputList(Sqlist *);  //输入二进制数字
double cal(Sqlist *);       //计算

int main()
{
    Sqlist L;

	if( InitList(&L) ){//如果创建顺序表失败,则退出
		printf("Not Enough Memory!\n");
		return 1;
	}

	if( InputList(&L)==1 ){//输入错误或者内存不足,退出
		printf("Invailid Input Or Not Enough Memory!\n");
		return 1;
	}

	printf("%g\n", cal(&L));//输出计算结果

	free(L.elem);//释放内存	
	return 0;//无误退出
}

short InitList(Sqlist *L) //创建顺序表
{
	L->elem=(ElemType *)malloc(INITSIZE*sizeof(ElemType));//分配空间
	if(!L->elem)
		return 1;//创建失败返回1
	L->length=0;
	L->listsize=INITSIZE;
	return 0;//创建失败返回0
}

short InputList(Sqlist *L) //输入二进制数字
{
	int i=0;
	ElemType *newbase;

	L->power=-1;
	while( ( L->elem[i]=getchar() )!='\n' ){
		if(L->elem[i] < '0' || L->elem[i] > '1'){//输入合法性检查
			if( !i && L->elem[i]=='-' && flag==1){
				flag=-1;//负数
				continue;
			}
			else if(!flag2 && L->elem[i]=='.')//小数
				flag2=1;
			else
				return 1;
		}
		L->length++;
		if(L->length==L->listsize){//如果输入数字等于listsize个,则重新分配空间
			newbase=(ElemType *)realloc(L->elem, (L->listsize+INCREMENT)*sizeof(ElemType) );
			if(!newbase)
				return 1;
			L->elem=newbase;
			L->listsize += INCREMENT;
		}
		i++;
		if(!flag2)
			L->power++;
	}

	return 0;
}

double cal(Sqlist *L)
{
	unsigned int i=0;
	double dec=0;

	if(flag2){//整数转换
		while(L->elem[i] != '.'){
			L->elem[i] -= 48;
			dec += L->elem[i] * pow(2, L->power);
			i++;
			L->power--;
		}
		L->power=-1;
		i++;
	}
	while(L->elem[i] != '\n'){//小数转换
		L->elem[i] -= 48;
		dec += L->elem[i] * pow(2, L->power);
		i++;
		L->power--;
	}
	return flag*dec;//返回转换结果
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -