《C Primer Plus》第15章复习题与编程练习

复习题

1. 将下列十进制数转换为二进制形式:

a. 3
b. 13
c. 59
d. 119

答:

a. 11
b. 1101
c. 111011
d. 1110111

2. 将下列二进制值转换为十进制、八进制和十六进制形式:

a. 00010101
b. 01010101
c. 01001100
d. 10011101

答:

a. 21, 025, 0x15
b. 85, 0125, 0x55
c. 76, 0114, 0x4C
d. 157, 0235, 0x9D

3. 计算下列表达式;假设每个值为8位:

a. ~ 3
b. 3 & 6
c. 3 | 6
d. 1 | 6
e. 3 ^ 6
f. 7 >> 1
g. 7 << 2

答:

a. 252
d. 2
c. 7
d. 7
e. 5
f. 3
g. 28

4. 计算下列表达式;假设每个值为8位:

a. ~ 0
b. !0
c. 2 & 4
d. 2 && 4
e. 2 | 4
f.2 || 4
g. 5 << 3

答:

a. 255
b. 1
c. 0
d. 1
e. 6
f. 1
g. 40

5. 因为ASCII码仅使用最后的7位,所以有时需要屏蔽掉其他位。相应的二进制掩码是什么?分别以十进制、八进制和十六进制形式如何表示这个掩码?

答:掩码在二进制中为1111111。它的十进制表示为127,八进制表示为0177,十六进制表示为0x7F。

6. 在程序清单15.2中,可以做以下替换,把:

while(bits-- > 0)
{
    mask |= bitval;
    bitval <<= 1;
}

用:

while(bits-- > 0)
{
    mask |= bitval;
    bitval *= 2;
}

替换,而程序仍将工作。这是否意味着*= 2等同于<<= 1?|=和+=又怎样?

答:
bitval *= 2和bitval << 1都把bitval的当前值加倍,所以他们是等效的。但是mask += bitval和mask |= bitval只有在bitval和mask没有同时设置为打开的位时才具有相同的效果。例如,2 | 4 = 6,但是3 | 6 = 7。

7. 考虑下面的程序段:

a. Tinkerbell计算机有一个硬件字节,可以将该字节读入程序。该字节包括下列信息:

含义
0~11.4MB软盘驱动器数量
2未使用
3~4CD-ROM驱动器数量
5未使用
6~7硬盘驱动器数量

Tinkerbell和IBM PC一样从右到左填充结构位字段。创建一个适于存放该信息的位字段模板。

b. Klinkerbell与Tinkerbell类似,但它从左到右填充结构。请为Klinkerbell创建相应的位字段模板。

答:
a.

struct tinkerbell {
    unsigned int diskdrivers   : 2;
    unsigned int                    : 1;
    unsigned int cdromdrivers: 2;
    unsigned int                    : 1;
    unsigned int harddrivers  : 2;
};

b.

struct klinkerbell {
    unsigned int harddrivers  : 2;
    unsigned int                    : 1;
    unsigned int cdromdrivers: 2;
    unsigned int                    : 1;
    unsigned int diskdrivers   : 2;
};

复习题

1. 把二进制字符串转换为一个数值

编写一个函数,把二进制字符串转换为一个数值。例如,有下面的语句:

char * pbin =01001001;

那么把pbin作为参数传递给该函数后,它应该返回一个int类型的值73。

程序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

int stoi(char *s);

int main()
{
    char *pbin = "01001001";
    printf("%s = %d\n", pbin, stoi(pbin));

    system("pause");
    return 0;
}

int stoi(char *s)
{
    int len = strlen(s);
    int ans = 0;

    for (int i = 0; i < len; i++)
        if (s[i] == '1')
            ans += pow(2, len - 1 - i);

    return ans;
}

运行结果:

在这里插入图片描述

2. ~运算符、&运算符、|运算符和^运算符

编写一个程序,通过命令行参数读取两个二进制字符串,对这两个二进制数使用~运算符、&运算符、|运算符和^运算符,并以二进制字符串形式打印结果(如果无法使用命令行环境,可以通过交互式让程序读取字符串)。

程序:

#include <stdio.h> //提供CHAR_BIT的定义,表示每字节的位数,在这是8位
#include <stdlib.h>
#include <string.h>
#include <limits.h>

const int SIZE = CHAR_BIT * sizeof(int);
const int LEN = SIZE + 1; // 字符数组最大长度33,最后一个是空字符

char *s_gets(char *s, int n);
bool check(const char *s);
int btoi(const char *s);
char *itob(char *s, int n);

int main()
{

    char input1[LEN], input2[LEN]; // 二进制字符串
    char temp[LEN];                // 临时数组
    int num1, num2;                // 字符串的十进制值

    printf("Please enter the first binary string: ");
    while (s_gets(input1, LEN) && check(input1) == false)
    {
        printf("Error! Try again: ");
    }
    printf("Please enter the second binary string: ");
    while (s_gets(input2, LEN) && check(input2) == false)
    {
        printf("Error! Try again: ");
    }

    num1 = btoi(input1);
    num2 = btoi(input2);

    printf("~%s = %s\n", input1, itob(temp, ~num1));
    printf("~%s = %s\n", input2, itob(temp, ~num2));
    printf("%s & %s = %s\n", input1, input2, itob(temp, (num1 & num2)));
    printf("%s | %s = %s\n", input1, input2, itob(temp, (num1 | num2)));
    printf("%s ^ %s = %s\n", input1, input2, itob(temp, (num1 ^ num2)));

    system("pause");
    return 0;
}

char *s_gets(char *s, int n) // 输入字符串
{
    char *ret_val;
    char *find;

    ret_val = fgets(s, n, stdin);
    if (ret_val)
    {
        find = strchr(s, '\n');
        if (find)
        {
            *find = '\0';
        }
        else
        {
            while (getchar() != '\n')
            {
                continue;
            }
        }
    }

    return ret_val;
}

bool check(const char *s) // 检查输入的字符串是否都为'0'和'1'
{
    bool is_bin = true; // 标记

    while (is_bin && *s != '\0') // 标记为1且没到字符串末尾
    {
        if (*s != '0' && *s != '1')
        {
            is_bin = false; // 字符串不是二进制,标记为0
        }
        s++;
    }

    return is_bin;
}
int btoi(const char *s)
{
    int total = 0; // 计数,计算二进制字符串的十进制值

    while (*s != '\0') // 没到字符串末尾
    {
        total = total * 2 + (*s - '0');
        s++;
    }

    return total;
}

char *itob(char *s, int n) // 十进制转成二进制字符串
{
    for (int i = SIZE - 1; i >= 0; i--) // 从字符串右端开始
    {
        s[i] = (01 & n) + '0'; // 掩码01,获取十进制在该位的值
        n >>= 1;
    }
    s[SIZE] = '\0'; // 结尾

    return s;
}

运行结果:

在这里插入图片描述

另一种程序,使用命令行接收参数:

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <limits.h>  // for CHAR_BIT 一个char的位数
#include <string.h>

int bstr_to_dec(const char * str);
char * itobs(int n, char * ps);
void show_bstr(const char * str);

int main(int argc, char *argv[])
{
    const size_t SLEN = CHAR_BIT * sizeof(int) + 1;
    char bin_str[SLEN];
    int value0, value1, value3;

    if(argc != 3)
    {
        printf("输入格式错误!\n");
        printf("请按照\"%s 字符串 字符串\"格式输入\n");
        exit(1);
    }
    value0 = bstr_to_dec(argv[1]);
    value1 = bstr_to_dec(argv[2]);
    printf("~%s = ", argv[1]);
    show_bstr(itobs(~value0, bin_str));
    printf("\n~%s = ", argv[2]);
    show_bstr(itobs(~value1, bin_str));
    value3 = value0 & value1;
    printf("\n%s & %s = ", argv[1], argv[2]);
    show_bstr(itobs(value3, bin_str));
    value3 = value0 | value1;
    printf("\n%s | %s = ", argv[1], argv[2]);
    show_bstr(itobs(value3, bin_str));
    value3 = value0 ^ value1;
    printf("\n%s ^ %s = ", argv[1], argv[2]);
    show_bstr(itobs(value3, bin_str));

    return 0;
}
int bstr_to_dec(const char * str)
{
    int val = 0;

    while(*str != '\0')
        val = 2 * val + (*str++ - '0');  // 二进制——>十进制太神奇了
    return val;
}
char * itobs(int n, char * ps)
{
    int i;
    static int size = CHAR_BIT * sizeof(int);

    for(i = size - 1; i >= 0; i--, n >>= 1)
        ps[i] = (01 & n) + '0';
    ps[size] = '\0';

    return ps;
}
/* 4位一组显示二进制字符串 */
void show_bstr(const char * str)
{
    int i = 0;

    while(str[i])
    {
        putchar(str[i]);
        if(++i % 4 == 0 && str[i])
            putchar(' ');
    }
}

3. 打开位的数量

编写一个函数,接受一个int类型的参数,并返回该参数中打开位的数量。在一个程序中测试该函数。

程序:

#include <stdio.h> //提供CHAR_BIT的定义,表示每字节的位数,在这是8位
#include <stdlib.h>
#include <limits.h>

const int SIZE = CHAR_BIT * sizeof(int);

char *itob(char *s, int n);
int bit_num(int n);

int main()
{
    int num;
    char temp[SIZE + 1];

    printf("Please input an integer: ");
    while (scanf("%d", &num) != 1 || getchar() != '\n')
    {
        while (getchar() != '\n')
        {
            continue;
        }
        printf("Error! Try again: ");
    }
    printf("%d = %s, open bit:%d\n", num, itob(temp, num), bit_num(num));

    system("pause");
    return 0;
}

char *itob(char *s, int n) // 十进制转成二进制字符串
{
    for (int i = SIZE - 1; i >= 0; i--) // 从字符串右端开始
    {
        s[i] = (01 & n) + '0'; // 掩码01,获取十进制在该位的值
        n >>= 1;               // 十进制右移一位
    }
    s[SIZE] = '\0'; // 结尾

    return s;
}

int bit_num(int n)
{
    int count = 0;

    for (int i = 0; i < SIZE; i++) // 从字符串右端开始
    {
        if ((01 & n) == 1) // 如果十进制n的最后一位为1
        {
            count++;
        }
        n >>= 1; // 右移一位
    }

    return count;
}

运行结果:

在这里插入图片描述

4. 位检测

编写一个程序,接受两个int类型的参数:一个是值;一个是位的位置。如果指定位的位置为1,该函数返回1; 否则返回0。在一个程序中测试该函数。

程序:

#include <stdio.h> //提供CHAR_BIT的定义,表示每字节的位数,在这是8位
#include <stdlib.h>
#include <limits.h>

const int SIZE = CHAR_BIT * sizeof(int);

char *itob(char *s, int n);
bool is_open(int num, int index);

int main()
{
    int num, index;
    char temp[SIZE + 1];

    printf("Please input an integer: ");
    while (scanf("%d", &num) != 1 || getchar() != '\n')
    {
        while (getchar() != '\n')
        {
            continue;
        }
        printf("Input integer error! Try again: ");
    }
    printf("Please input the index: ");
    while (scanf("%d", &index) != 1 || (!(index >= 0 && index <= 31)) || getchar() != '\n')
    {
        while (getchar() != '\n')
        {
            continue;
        }
        printf("Input index error! Try again: ");
    }
    printf("%d = %s\nThe position of the specified bit is %d\n", num, itob(temp, num), is_open(num, index));

    system("pause");
    return 0;
}

char *itob(char *s, int n) // 十进制转成二进制字符串
{
    for (int i = SIZE - 1; i >= 0; i--) // 从字符串右端开始
    {
        s[i] = (01 & n) + '0'; // 掩码01,获取十进制在该位的值
        n >>= 1;               // 十进制右移一位
    }
    s[SIZE] = '\0'; // 结尾

    return s;
}

bool is_open(int num, int index)
{
    num >>= index;
    if ((01 & num) == 1)
        return true;
    else
        return false;
}

运行结果:

在这里插入图片描述

5. 左旋位

编写一个函数,把一个unsigned int类型值中的所有位向左旋转指定数量的位。例如,rotate_1(x, 4)把x中所有位向左移动4个位置,而且从最左端移出的位会重新出现在右端。也就是说,把高阶位移出的位放入低阶位。在一个程序中测试该函数。

程序:

#include <stdio.h>
#include <stdlib.h>
#include <limits.h> // for CHAR_BIT(一个char的位数)

const int SIZE = CHAR_BIT * sizeof(int);

char *itobs(char *s, int n);
unsigned int rotate_1(unsigned int n, unsigned int b);

int main()
{
    char bin_str1[SIZE + 1], bin_str2[SIZE + 1];
    unsigned int number, count, result;

    printf("Enter an integer (q to quit): \n");
    while (scanf("%d", &number))
    {
        printf("Enter the number of bits to be rotated: \n");
        if (scanf("%d", &count) != 1)
            break;
        result = rotate_1(number, count);
        itobs(bin_str1, number);
        itobs(bin_str2, result);
        printf("%u rotated is %u.\n", number, result);
        printf("%s rotated is %s.\n", bin_str1, bin_str2);
        printf("Enter an integer (q to quit): \n");
    }

    system("pause");
    return 0;
}

char *itobs(char *s, int n)
{
    for (int i = SIZE - 1; i >= 0; i--, n >>= 1)
        s[i] = (01 & n) + '0';
    s[SIZE] = '\0';

    return s;
}

unsigned int rotate_1(unsigned int n, unsigned int b)
{
    unsigned int overflow;

    b %= SIZE;
    overflow = n >> (SIZE - b);
    return (n << b) | overflow;
}

运行结果:

在这里插入图片描述

6.

设计一个位字段结构以储存下面的信息。

字体ID: 0~255之间的一个数;
字体大小: 0~127之间的一个数;
对齐: 0~2之间的一个数,表示左对齐、居中、右对齐;
加粗: 开(1)或闭(0);
斜体: 开(1)或闭(0);
下划线: 开(1)或闭(0);

在一个程序中使用该结构来打印字体参数,并使用循环菜单来让用户改变参数。例如,该程序的一个运行示例如下:

	ID SIZE ALIGNMENT 	B 	I 	U
	1 	 12	  left	   off off off
f)change font	s)change size	a)change alignment
b)toggle bold	i)toggle italic	u)toggle underline
q)quit
s
Enter font size (0-127): 36

	ID SIZE ALIGNMENT 	B 	I 	U
	1 	 36	  left	   off off off
	
f)change font	s)change size	a)change alignment
b)toggle bold	i)toggle italic	u)toggle underline
q)quit

a
Select alignment:
l)1eft 		c)center	r)right
r

	ID SIZE ALIGNMENT 	B 	I 	U
	1 	 36	  right	   off off off
f)change font	s)change size	a)change alignment
b)toggle bold	i)toggle italic	u)toggle underline
q)quit
i

	ID SIZE ALIGNMENT 	B 	I 	U
	1 	 36	  right	   off  on off
	
f)change font	s)change size	a)change alignment
b)toggle bold	i)toggle italic	u)toggle underline
q)quit
q
Bye!

该程序要使用按位与运算符(&)和合适的掩码来把字体ID和字体大小信息转换到指定的范围内。

程序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* 字体是否粗体 */
#define BOLD_ON 1
#define BOLD_OFF 0
/* 字体对齐方式 */
#define LEFT 0
#define RIGHT 1
#define CENTER 2
/* 字体是否斜体 */
#define ITALIC_ON 1
#define ITALIC_OFF 0
/* 字体是否有下划线 */
#define UNDERLINE_ON 1
#define UNDERLINE_OFF 0
#define MASK 0xFFFFFF00
#define MASK1 0xFFFF80FF

struct font
{
    unsigned int font_id : 8;
    unsigned int font_size : 7;
    unsigned int : 1;
    unsigned int alignment : 2;
    unsigned int bold : 1;
    unsigned int italic : 1;
    unsigned int underline : 1;
    unsigned int : 3;
};

void show(const struct font *ft);
int getlet(const char *);
int getmenu(void);
void eatline(void);

int main()
{
    struct font ft = {1, 12, LEFT, BOLD_OFF, ITALIC_OFF, UNDERLINE_OFF}; // 初始化font结构
    int choice;
    int id, size, align;

    show(&ft);
    putchar('\n');
    while ((choice = getmenu()) != 'q')
    {
        switch (choice)
        {
        case 'f':
            printf("Enter font id (0-255): ");
            while (scanf("%d", &id) != 1 || id < 0 || id > 255)
            {
                printf("您输入的不是一个整数,或者范围不在0到255之间\n");
                while (getchar() != '\n')
                    ;
                continue;
                printf("Enter font id (0-255): ");
            }
            eatline();
            ft.font_id = (ft.font_id & MASK) | id;
            putchar('\n');
            show(&ft);
            break;
        case 's':
            printf("Enter font size (0-127): ");
            while (scanf("%d", &size) != 1 || size < 0 || size > 255)
            {
                printf("您输入的不是一个整数,或者范围不在0到127之间\n");
                while (getchar() != '\n')
                    ;
                continue;
                printf("Enter font size (0-127): ");
            }
            eatline();
            ft.font_size = ((ft.font_size & MASK1) >> 8) | size;
            putchar('\n');
            show(&ft);
            break;
        case 'a':
            printf("Select alignment: \n");
            puts("l) left c) center r)right");
            align = getlet("lcr");
            switch (align)
            {
            case 'l':
                ft.alignment = LEFT;
                break;
            case 'c':
                ft.alignment = CENTER;
                break;
            case 'r':
                ft.alignment = RIGHT;
                break;
            }
            putchar('\n');
            show(&ft);
            break;
        case 'b':
            ft.bold = BOLD_ON;
            putchar('\n');
            show(&ft);
            break;
        case 'i':
            ft.italic = ITALIC_ON;
            putchar('\n');
            show(&ft);
            break;
        case 'u':
            ft.underline = UNDERLINE_ON;
            putchar('\n');
            show(&ft);
            break;
        }
    }
    puts("Bye!");

    system("pause");
    return 0;
}

void show(const struct font *ft)
{
    printf("ID\tSIZE\tALIGNMENT\tB\tI\tU\n");
    printf("%d\t%d", ft->font_id, ft->font_size);
    switch (ft->alignment)
    {
    case LEFT:
        printf("%10s", "left");
        break;
    case RIGHT:
        printf("%10s", "right");
        break;
    case CENTER:
        printf("%10s", "center");
        break;
    default:
        printf("unknown alignment");
    }
    printf("%14s%8s%8s\n", ft->bold == BOLD_OFF ? "off" : "on",
           ft->italic == ITALIC_OFF ? "off" : "on",
           ft->underline == UNDERLINE_OFF ? "off" : "on");
    printf("\n");
}

int getlet(const char *s)
{
    char c;

    c = getchar();
    while (strchr(s, c) == NULL)
    {
        printf("请您在%s这串字符串中输入一个字符: \n", s);
        while (getchar() != '\n')
            continue;
        c = getchar();
    }
    while (getchar() != '\n')
        continue;
    return c;
}

int getmenu(void)
{
    int i;

    const char *str[7] = {
        "change font",
        "change size",
        "change alignment",
        "toggle bold",
        "toggle italic",
        "toggle underline",
        "quit"};
    const char pstr[8] = "fsabiuq";

    for (i = 0; i < 7; i++)
    {
        printf("%c) %s   ", pstr[i], str[i]);
        if (i % 3 == 2)
            putchar('\n');
    }
    if (i % 3 != 0)
        putchar('\n');

    return getlet(pstr);
}

void eatline(void)
{
    while (getchar() != '\n')
        continue;
}

运行结果:

在这里插入图片描述

7. 使用按位运算符管理结构信息

编写一个与编程练习6功能相同的程序,使用unsigned long类型的变量储存字体信息,并且使用按位运算符而不是位成员来管理这些信息。

程序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#define UNDERLINE 0x80000 // 1000 0000 0000 0000 0000
#define ITALIC 0x40000    // 0100 0000 0000 0000 0000
#define BOLD 0x20000      // 0010 0000 0000 0000 0000
#define LEFT 0x00000      // 0000 0000 0000 0000 0000
#define CENTER 0x08000    // 0000 1000 0000 0000 0000
#define RIGHT 0x10000     // 0001 0000 0000 0000 0000

#define ID_MASK 0xFF       // 0000 0000 0000 1111 1111
#define SIZE_MASK 0x7F00   // 0000 0111 1111 0000 0000
#define ALIGN_MASK 0x18000 // 0001 1000 0000 0000 0000

#define SIZE_SHIFT 8

typedef unsigned long font;

char do_menu(font *f);
void show_font(font f);
char get_choice(const char *);
void show_menu(void);
void eatline(void);
void get_id(font *f);
void get_size(font *f);
void get_align(font *f);

int main()
{
    // sample = 0100 0000 1100 0000 0001(斜体, 没有预留空隙)
    font sample = 1 | (12 << SIZE_SHIFT) | LEFT | ITALIC;
    // 从左到右(从高位到低位)依次为underline(1), italic(1), bold(1), alignment(2), font_size(7), font_id(8)
    while (do_menu(&sample) != 'q')
        continue;
    puts("Bye!");

    system("pause");
    return 0;
}

char do_menu(font *f)
{
    char response;

    show_font(*f);
    show_menu();
    response = get_choice("fsabiuq");
    switch (response)
    {
    case 'f':
        get_id(f);
        break;
    case 's':
        get_size(f);
        break;
    case 'a':
        get_align(f);
        break;
    case 'b':
        *f ^= BOLD;
        break;
    case 'i':
        *f ^= ITALIC;
        break;
    case 'u':
        *f ^= UNDERLINE;
        break;
    case 'q':
        break;
    default:
        printf("menu problem\n");
    }
    return response;
}

void show_font(font f)
{
    printf("%4s %4s %9s %3s %3s %3s\n", "ID", "SIZE", "ALIGNMENT", "B", "I", "U");
    printf("%4lu %4lu", f & ID_MASK, (f & SIZE_MASK) >> SIZE_SHIFT);
    switch (f & ALIGN_MASK)
    {
    case LEFT:
        printf("%7s", "left");
        break;
    case CENTER:
        printf("%7s", "center");
        break;
    case RIGHT:
        printf("%7s", "right");
        break;
    default:
        printf("%7s", "unknown alignment");
        break;
    }
    printf("%8s %3s %3s\n", (f & BOLD) == BOLD ? "on" : "off",
           (f & ITALIC) == ITALIC ? "on" : "off",
           (f & UNDERLINE) == UNDERLINE ? "on" : "off");
    putchar('\n');
}

char get_choice(const char *s)
{
    char ch;

    ch = getchar();
    ch = tolower(ch);

    while (strchr(s, ch) == NULL)
    {
        printf("Please enter one of the following: %s\n", s);
        eatline();
        ch = tolower(getchar());
    }
    eatline();
    return ch;
}

void eatline(void)
{
    while (getchar() != '\n')
        continue;
}

void show_menu(void)
{
    puts("f) change font   s) change size     a) change alignment");
    puts("b) toggle bold   i) toggle italic   u) toggle underline");
    puts("q) quit");
}

void get_id(font *f)
{
    int id;

    printf("Enter font id (0-255): ");
    scanf("%d", &id);
    id = id & ID_MASK;
    *f = (*f & ~ID_MASK) | id; // 相应位要先置为0之后再用|运算符
    eatline();
}

void get_size(font *f)
{
    int size;

    printf("Enter font size (0-127): ");
    scanf("%d", &size);
    *f &= ~SIZE_MASK;
    *f |= (size << SIZE_SHIFT) & SIZE_MASK;
    eatline();
}

void get_align(font *f)
{
    printf("Select alignment: \n");
    printf("l) left  c) center  r) right\n");
    switch (get_choice("lcr"))
    {
    case 'l':
        *f &= ~ALIGN_MASK;
        *f |= LEFT;
        break;
    case 'c':
        *f &= ~ALIGN_MASK;
        *f |= CENTER;
        break;
    case 'r':
        *f &= ~ALIGN_MASK;
        *f |= RIGHT;
        break;
    default:
        printf("unknown alignment\n");
    }
}

运行结果:

C:\Users\81228\Documents\Program\VScode C Program\chapter15>15.7

  ID SIZE ALIGNMENT   B   I   U
   1   12   left     off  on off

f) change font   s) change size     a) change alignment
b) toggle bold   i) toggle italic   u) toggle underline
q) quit
s
Enter font size (0-127): 36

  ID SIZE ALIGNMENT   B   I   U
   1   36   left     off  on off

f) change font   s) change size     a) change alignment
b) toggle bold   i) toggle italic   u) toggle underline
q) quit
a
Select alignment: 
l) left  c) center  r) right
r

  ID SIZE ALIGNMENT   B   I   U
   1   36  right     off  on off

f) change font   s) change size     a) change alignment
b) toggle bold   i) toggle italic   u) toggle underline
q) quit
i

  ID SIZE ALIGNMENT   B   I   U
   1   36  right     off off off

f) change font   s) change size     a) change alignment
b) toggle bold   i) toggle italic   u) toggle underline
q) quit
q
Bye!
请按任意键继续. . .

C:\Users\81228\Documents\Program\VScode C Program\chapter15>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值