C语言实现的LCD数学

在看编程珠玑,第三章,最后一题,额。。。。。好像用C语言做比较麻烦,因为要涉及到字符串的应用,用C++或Java之类的可能更简单些,但算法一样、

#include <stdio.h>
 #include <string.h>
 int size=5,count;//size是改变数字的大小
 
 
 //flag代表每个数字对应h,v,h,v,h的值.
 int flag[10][5]={
 	{ 1, 3, 0, 3, 1 },
 	{ 0, 1, 0, 1, 0 },
 	{ 1, 1, 1, 2, 1 },
 	{ 1, 1, 1, 1, 1 },
 	{ 0, 3, 1, 1, 0 },
 	{ 1, 2, 1, 1, 1 },
 	{ 1, 2, 1, 3, 1 },
 	{ 1, 1, 0, 1, 0 },
 	{ 1, 3, 1, 3, 1 },
 	{ 1, 3, 1, 1, 1 }
 };
 /*
 对于h(代表水平方向)的状态,有两个值
 0:代表空。1:代表有值要画size个'-'
 对于v(代表垂直方向)的状态,有四个值
 0:代表空。1:代表左边有值,要画size个'|'。2代表只有右边有值,要画size个'|'。
 3代表左右两边都有值,所以左右两边都要画size个'|'
 对于d,表于结束
 */
 char lcdStates[6]={'h','v','h','v','h','d'};
 
 char datas[100];
 char *line = datas;
 
 void addNull(char temp[])
 {
 	for(count=0;count<size;count++)
 		{
 			strcat(temp," ");
 	}
 }
 
 char* getH(int h)
 {
 	char t[20];
 	strcpy(t," ");
 	if(h==1)
 	{
 		for(count=0;count<size;count++)
 		{
 			strcat(t,"-");
 		}
 		strcat(t," ");
 		addNull(t);
 		return t;
 	}
 	else if(h==0)
 	{
 		addNull(t);
 		strcat(t," ");
 		addNull(t);
 		return t;
 	}
 	
 	return "";
 }
 char* getV(int v)
 {
 	char temp[20];
 	if(v==1){
 		strcpy(temp," ");
 		addNull(temp);
 		strcat(temp,"|");
 		addNull(temp);
 		return temp;
 	}else if(v==2){
 		strcpy(temp,"|");
 		addNull(temp);
 		strcat(temp," ");
 		addNull(temp);
 		return temp;
 	}else if(v==3){
 		strcpy(temp,"|");
 		addNull(temp);
 		strcat(temp,"|");
 		addNull(temp);
 		return temp;
 	}
 	return "    ";
 }
 
 void display()
 {
 	int i,j,k;
 	memset(datas,'\0',sizeof(datas));
 
 	for(i=0;i<6;i++)
 	{
 		if(lcdStates[i]=='h')
 		{
 			line="";
 			strcpy(datas,line);
 			for(j=0;j<10;j++)
 			{
 				line = getH(flag[j][i]);
 				strcat(datas,line);
 			}
 			printf("%s\n",datas);
 		}
 		else if(lcdStates[i]=='v')
 		{
 			for(k=0;k<size;k++)
 			{
 				line="";
 				memset(datas,'\0',sizeof(datas));
 				strcpy(datas,line);
 				for(j=0;j<10;j++)
 				{
 					line = getV(flag[j][i]);
 					strcat(datas,line);
 				}
 				printf("%s\n",datas);
 			}
 		}
 		else
 		{
 			break;
 		}
 	}
 
 }
 int main()
 {
 	/*
 	int digits[11],i;
 	char str[11];
 	while(scanf("%s",str)!=EOF)
 	{
 		for(i=0;i<11;i++)
 			if(str[i]!='\0')
 				digits[i]=str[i]-'0';
 
 		display(digits);
 	}
 	*/
 	display();
 	return 0;
 }



显示效果如下图:

C语言实现的LCD数学_第1张图片

你可能感兴趣的:(算法,C语言,5段显,LCD数学)