程序设计基石与实践之实现数字七段显示与发扑克牌问题

来源:互联网 发布:推荐初学c语言的书籍 编辑:程序博客网 时间:2024/05/22 17:03

数字七段显示

问题描述:

我们经常看到的计算器上显示的数字,或电梯中显示的表示楼层的数字,实际上都是由7个发光器件组成的.如下所示.当不同器件被点亮时,可组合出不同的数字.你的任务是,对给定的一个整数,按这种形式把给定整数显示出来,并且数字是可以按比例放大的.

在字符终端上显示这样的数字时,一个最小数字需占5行3列,所谓"数字是可以按比例放大"包含横向放大和纵向放大.其中,横向放大w倍是指显示数字所占3列的中间一列放大w倍,即中间一列变为占w列;而纵向放大h倍是指显示数字所占5行的第2行和第4行放大h倍,即第2行和第4行要占用h行.

参考源代码:

#include <stdio.h>char dt[11][5][3]={{ {' ','_',' '},{'|',' ','|'},{' ',' ',' '},{'|',' ','|'},{' ','_',' '}},//0{ {' ',' ',' '},{' ',' ','|'},{' ',' ',' '},{' ',' ','|'},{' ',' ',' '}},//1{ {' ','_',' '},{' ',' ','|'},{' ','_',' '},{'|',' ',' '},{' ','_',' '}},//2{ {' ','_',' '},{' ',' ','|'},{' ','_',' '},{' ',' ','|'},{' ','_',' '}},//3{ {' ',' ',' '},{'|',' ','|'},{' ','_',' '},{' ',' ','|'},{' ',' ',' '}},//4{ {' ','_',' '},{'|',' ',' '},{' ','_',' '},{' ',' ','|'},{' ','_',' '}},//5{ {' ','_',' '},{'|',' ',' '},{' ','_',' '},{'|',' ','|'},{' ','_',' '}},//6{ {' ','_',' '},{' ',' ','|'},{' ',' ',' '},{' ',' ','|'},{' ',' ',' '}},//7{ {' ','_',' '},{'|',' ','|'},{' ','_',' '},{'|',' ','|'},{' ','_',' '}},//8{ {' ','_',' '},{'|',' ','|'},{' ','_',' '},{' ',' ','|'},{' ','_',' '}} //9};int main(){   int i,j,w,h,k,n,p,m =0,a[10];   while(1){     scanf("%d%d%ld",&w,&h,&n); if(w ==0) break;   while(n){ a[m++] = n%10;n/=10;}for( i =0;i<5;i++){for(p =0;p<h;p++){ for (k = m-1;k>=0;k--){printf("%c",dt[a[k]][i][0]);for(j =0; j<w;j++)printf("%c",dt[a[k]][i][1]);printf("%c",dt[a[k]][i][2]);printf(" ");}printf("\n");if(i !=1&&i!=3) break;}}   }      return 0;}

测试结果

如下所示:


发扑克牌

问题描述:

在计算机上玩发扑克牌是一种常见的游戏,现在按玩升级的规则,模拟4个玩家发牌,打印出每个玩家的12张牌和6张底牌.

参考源代码:

#include <stdio.h>#include<stdlib.h>#include <time.h>int main(){int x,y,a[55],i,j,z,fg;char d[] ={"xA234567891JQK"};srand((unsigned int) time (NULL));for(i =0; i<54; i++){while(1){x= rand()%4+1;y = rand()%14;z =x*100+y;if(z==300||z==400) continue;fg =0;for(j =0; j<i ; j++)if(z==a[j]){fg =1;break;}if(fg==0) break;}a[i] =z;}printf("\n%8c%8c%8c%8c",'E','S','W','N');for(i =0; i<54; i++){if(i%4 ==0) printf("\n");if(i ==48) printf("\n________\n");if(a[i] ==100||a[1] ==200)printf("%8c",a[i]/100);else if(a[i]%100 ==10)printf("%6c10",a[i]/100+2);else printf("%7c%c",a[i]/100+2,d[a[i]%100]);}printf("\n");return 0;}

测试结果

如下所示:




关于程序设计基石与实践更多讨论与交流,敬请关注本博客和新浪微博songzi_tea.


0 0
原创粉丝点击