C Primer Plus 第3章 数据和C 编程练习

   1、

/* 整数上溢 */
#include <stdio.h>
int main(void)
{
    int i = 2147483647;
    unsigned int j = 4294967295;

    /*
        无符号整数j像一个汽车里程指示表(形容的太好了,可参考《计算机科学导论》第3章 数据存储,有图),
        当达到最大值时,它将溢出到起始点。整数i也是同样。它们的主要区别是unsigned int变量j的起始点是0(正像里程
        指示表那样),而int变量i的起始点则是-2147483648。——参考《C Primer Plus》
    */
    printf("%d %d %d
", i, i+1, i+2);
    printf("%u %u %u
", j, j+1, j+2);
    return 0;
}

   浮点数上溢和浮点数下溢,于浮点数,以目前的知识最终是无法深究的,故留待以后探索。只能借《C Primer Plus》之意:

   当计算结果是一个大得不能表达的数时,会发生上溢。现在C语言要求为这样的数赋予一个代表无穷大的特殊值,以inf或infinity示之。

   用对浮点值可用的全部精度进行表示的最小数字(它具有最小的指数,并且仍具有可以由全部可用位进行表示的最小的尾数值),若此数除以2,通常这个操作将使指数部分减小,但是指数已经达到了最小值,所以计算机只好将尾数部分达到位进行右移,空出首位二进制位,并丢弃最后一位二进制位。此过程称为下溢。(举例说之:以十进制为例,把一个包含4位有效数字的数0.1234E-10除以10,将得到结果0.0123E-10,但是损失了1位有效数字)。

/* 浮点数上溢与下溢 */
#include <stdio.h>
int main(void)
{
    float toobig = 3.4e38 * 100.0f;
    float toosmall = 0.1234e-2 / 10;

    printf("%e
", toobig);    // 输出为inf
    printf("%f
", toosmall);  // 损失1位有效数字
    return 0;
}

    2、  

#include <stdio.h>
int main(void)
{
    int ch;
    printf("请输入一个ASCII码值: ");
    scanf("%d", &ch);
    printf("%d相应的字符为: %c", ch, ch);
    return 0;
}

   3、

#include <stdio.h>
int main(void)
{
    printf("aStartled by the sudden sound, Sally shouted, ");
    printf(""By the Great Pumpkin, what was that! "
");
    return 0;
}

   4、

#include <stdio.h>
int main(void)
{
    float input;
    printf("请输入一个浮点数: ");
    scanf("%f", &input);
    printf("The input is %f or %e.", input, input);
    return 0;
}

   5、

#include <stdio.h>
int main(void)
{
    int age;
    printf("请输入您的年龄: ");
    scanf("%d", &age);
    printf("您的年龄合%e秒", age * 3.156e7);
    return 0;
}

   6、  

#include <stdio.h>
int main(void)
{
    int kua;
    printf("请输入水(单位为夸脱)的夸脱数: ");
    scanf("%d", &kua);
    printf("%d夸脱水中包含%e个水分子", kua, kua * 950 / 3.0e-23);
    return 0;
}

   7、

#include <stdio.h>
int main(void)
{
    float feet;
    printf("请输入您的身高(单位为英寸): ");
    scanf("%f", &feet);
    printf("%.2f inches = %.2f cm", feet, feet * 2.54);
    return 0;
}
原文地址:https://www.cnblogs.com/yerenyuan/p/5180359.html