微社区 > 全部版块 > C > 帖子

于樣同学   发表于 2017-01-05 18:38:37

收藏 41 0

【转义字符与运算符】转义字符使用实例、运算符

转义字符使用实例

下面这个例子演示了 \a、\b、\t、\r,以及 \n 的作用。其中 \b,\t 和 \r 的概念可以追溯到电脑仍然使用**机作为输出设备的时候,所以对于现代的一些电脑来说,它们可能不起作用。在某些麦金托什机(Macintosh)上,它们的作用就和我们下面所说的不一样。首先请认真看一下以下程序,然后编译运行一下,看看运行结果和您想象的是否一样,然后再看后面的详细解说。

/* esc_sq.c -- 使用转义字符 */
#include <stdio.h>
 
int main(void)
{
    float height;
 
    printf("\aPlease enter your height: _____ cm\b\b\b\b\b\b\b\b");
    scanf("%f", &height);
    printf("\tYour height is %.2f.\rOh!\n", height);
 
    return 0;
}

第一个 printf 通常会引起一声鸣响(\a),同时显示以下提示

Please enter your height: _____ cm

其中活跃位置(光标)在下划线的开端。活跃位置之所以会位于下划线的开端,是因为那八个 \b 把活跃位置后退了八个位置。顺带一题,下划线 _____ 由五个 _ 构成。注意:一般来说,\b 不会擦除前面输出的字符,但是在某些系统,\b 却会擦除前面输出的字符,导致显示结果为 Please enter your height: 。\a 产生的效果取决于硬件。一般来说,输出 \a 会产生鸣响。但是在某些系统,输出 \a 不会产生任何效果,或者仅仅显示一个特殊字符。

    输入一个数后(比如输入 180.5),屏幕的显示会变成

Please enter your height: 180.5 cm

我们输入的数字取代了原来的下划线。接着我们需要按回车确定我们的输入。按下回车键后,

活跃位置会移动到下一行的开端。

       第二个 printf 运行结束后,屏幕显示如下:

    
    Please enter your height: 180.5 cm
    Oh!     Your height is 180.50.


这是因为 \t 使活跃位置向后移动了若干个位置(通常是八个),然后输出

Your height is 180.50. 。接着 \r 使活跃位置返回当前行的开端,然后输出 Oh! ,

最后 \n 引起换行。

 

 1. 加法运算符(Adding Operator): +

加法运算符使它左右两边的值相加。例如:

printf("%d", 9 + 11);

 

输出结果为 20。加法运算符的操作数可以是常量,也可以是变量。例如:

var = var_1 + var_2;

 

这个语句先把 var_1 的值和 var_2 的值相加,然后把相加的结果赋值给 var。

 

 

2. 减法运算符(Subtraction Operator): –

 

减法运算符导致左边的操作数减去右边的操作数。例如:

var = 100 – 40;

 

100 – 40 的值是 60,然后这个 60 被赋值给 var。

 

加法运算符和减法运算符被称为二目运算符(binary operator),因为它们需要两个操作数。

 

 

3. 正负运算符(Sign Operator): – 和 +

 

例如:

var_1 = -5;
var_2 = -var_1;
var = +5

 

var_1 的值是 -5,var_2 的值是 5,var 的值是 5。

 

正负运算符被称为单目运算符(unary operator),因为它们只需要一个操作数。

 

 

4. 乘法运算符(Multiplication Operator):*

    * 是乘法运算符。以下语句:

      meter = 100 * cm;


常量 100 和变量 cm 相乘,乘积被赋值给变量 meter。

 

5. 除法运算符(Division Operator):/

    C 使用 / 作为除法运算符。/ 左边的操作数除以右边的操作数。也就是说,/ 左边是被除数,右边是除数。例如:

 var = 6/2;


6 除以 2 得 3,然后 3 被赋值给变量 var。

    整数相除和浮点数相除有所不同。浮点数相除得到浮点数,整数相除得到整数。C 语言规定,整数相除产生的小数部分一律被抛弃,这就是所谓的截断(truncation)。例如:7/4 的结果是 1,而不是 1.75,也不是 2。

    下面我们来看一个小程序。

  /* divide.c */
        #include <stdio.h>
        int main(void)
        {
            printf("integer division:  7/4   is %d \n", 7/4);
            printf("floating division: 7./4. is %f \n", 7./4.);
            printf("mixed division:    7./4  is %f \n", 7./4);
            return 0;
        }


输出为:

        integer division:  7/4   is 1
        floating division: 7./4. is 1.750000
        mixed division:    7./4  is 1.750000


最后一个 printf 中,我们用浮点数除以整数,得到的结果和第二个 printf 一样。这是因为 C 自动把这两个操作数的类型转换成了同一种类型。本例中,整数 4 被转换成了浮点类型,然后再和浮点数 7. 相除。

    C99 之前,正整数和负整数相除,如果产生小数部分,则相除的结果是不确定的。例如:7/-4 的结果可能是 -2,也可能是 -1。C99 规定,正整数和负整数相除,产生的小数部分一律被抛弃。也就是说,C99 中,7/-4 的结果是确定的,一定是 -1。


全部回复共0条
电梯直达
我要回复
返回顶部
邀请好友 App下载 意见反馈