跳转至

复习题

第四章 字符串和格式化输入/输出 复习题

  1. 再次运行程序清单 4.1 ,但是在要求输入名时,请输入名和姓(根据语文书写习惯),名和姓中间有个空格,看看会发生什么情况?为什么?

    程序不能正常运行
    name中的scanf只能读取用户输入的名而输入的姓则被放在临时存储区等待下一个scanf() 语句来读取所以体重会被读成姓
    

  2. 假设下列示例是完整程序中的一部分,他们打印的结果分别是什么?

    1
    2
    3
    4
    5
    a. printf("He sold the painting for $2.2f.\n",2.345e2); // 输出:He sold the painting for $234.50.
    b. printf("%c%c%c\n",'H',105,'\41'); // 输出:Hi! ASCII值转换而来。
    c. #define Q "His Hamlet was funny without being vulgar."
        printf("%s\n has %d characters.\n",Q,strlen(Q)); // 输出:His Hamlet was funny without being vulgar. // 注意换行符 has 42 character.
    d. printf("Is %2.2e the same as %2.2f?\n",1201.0,1201.0); // 输出:Is 1.20e+003 the same as 1210.00?
    

  3. 在第2题中的c中,要输出包含双引号的字符串Q,应如何修改?

    #define Q "His Hamlet was funny without being vulgar."
        printf("\"%s\"\n has %d characters.\n",Q,strlen(Q)); 
    

  4. 找出下面程序中的错误

    define B booboo
    define X 10
    main(int)
    {
        int age;
        char name;
        printf("Please enter your first name.");
        scanf("%s",name);
        printf("All right, %c, what's your age ?\n",name);
        scanf("%f",age);
        xp = age + X;
        printf("That's a %s! You must be at least %d .\n",B,xp);
        rerun 0;
    }
    
    修改后的完成程序如下:
    #include <stdio.h>
    #define B "booboo"
    #define X 10
    int main(void)
    {
        int age,xp;
        char name[40];
        printf("Please enter your first name.");
        scanf("%s",name);
        printf("All right, %s, what's your age ?\n",name);
        scanf("%d",&age);
        xp = age + X;
        printf("That's a %s! You must be at least %d .\n",B,xp);
        return 0;
    }
    

  5. 假设一个程序的开头是这样:

    1
    2
    3
    4
    5
    6
    #define BOOK "War and Peace"
    int main(void)
    {
        float cost = 12.99;
        float percent = 80.0;
    }
    
    构造一个使用BOOK、cost和percent的printf() 语句,打印以下内容:
    This copy of "War and Peace" sells for $12.99.
    That is 80% of list

printf("This copy of \"%s\" sells for %.2f.\nThat is %d%% of list",BOOK,cost,percent);
  1. 打印下列各项内容要分别使用什么转换说明? a. 一个字段宽度与位数相同的十进制整数
    b. 一个形如8A、字段宽度为4的十六进制数
    c. 一个形如232.346、字段宽度为10的浮点数
    d. 一个形如2.33e+002、字段宽度为12的浮点数
    e. 一个字段宽度为30、左对齐的字符串

    1
    2
    3
    4
    5
    6
    // 具体使用的转换说明符如下:
    a. %d
    b. %4x
    c. %10.3f
    d. %12.2e
    e. %-30s // + 表示右对齐 - 表示左对齐