首页 > 试题广场 >

编写一个与练习6所描述的功能相同的程序。使用一个unsign

[问答题]

编写一个与练习6所描述的功能相同的程序。使用一个unsigned long来保存字体信息,使用位运算符而不是位成员来管理这些信息。

推荐
#include <stdio.h>
unsigned long font;
char f = 0;   //id
unsigned long fm = 0xff<<f;  //id_mask
char s = 8;
unsigned long sm = 0x7f<<s;
char a = 15;
unsigned long am = 0x3<<a;
char b = 17;
unsigned long bm = 0x1<<b;
char i = 18;
unsigned long im = 0x1<<i;
char u = 19;
unsigned long um = 0x1<<u;
char align[3][7]={"left", "center", "right"};
char on_off[2][4]={"off", "on"};
int main(void)
{
 int n;
 char command[5];
 while(1)
 {
 printf("%-14s%-14s%-14s%-14s%-14s%-14s\n", "ID", "SIZE", "ALIGNMENT", "B", "I", "U");
 printf("%-14d%-14d%-14s%-14s%-14s%-14s\n", (font&fm)>>f, (font&sm)>>s, align[(font&am)>>a], on_off[(font&bm)>>b], on_off[(font&im)>>i], on_off[(font&um)>>u] );
 printf("f)change font    s)change size    a)change alignment\n");
 printf("b)toggle bold    i)toggle italic  u)toggle underline\n");
 printf("q)quit\n");
 gets(command);
 switch(command[0])
 {
 case 'f' : printf("Enter font ID (0-255): ");
 scanf("%d", &n);
 getchar();
 font = font & ~fm | n<<f;
 break;
 case 's' : printf("Enter font size (0-127): ");
 scanf("%d", &n);
 getchar();
 font = font & ~sm | n<<s;
 break;
 case 'a' : printf("Select alignment:\nl)left   c)center   r)right\n");
 gets(command); 
 switch(command[0])
 {
 case 'l' : font = font & ~am | 0<<a; break;
 case 'c' : font = font & ~am | 1<<a; break;
 case 'r' : font = font & ~am | 2<<a; break;
 default  : puts("error!");    break;
 }
 break;
 case 'b': font ^= 1<<b;
 break;
 case 'i': font ^= 1<<i;
 break;
 case 'u': font ^= 1<<u;
 break;
 default : puts(command);
 return 0;
 }
 }
}

发表于 2018-03-14 14:38:22 回复(0)