C语言实现的LCD数学

来源:互联网 发布:coc野蛮人升级数据 编辑:程序博客网 时间:2024/05/18 03:57

在看编程珠玑,第三章,最后一题,额。。。。。好像用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; }



显示效果如下图:

原创粉丝点击