现在的位置: 首页 > 02 运算和数据类型 > 正文

基本数据类型:整型和浮点型

2012年10月15日 02 运算和数据类型 ⁄ 共 1317字 ⁄ 字号 暂无评论

C语言中有多种数据类型,其中用的最多的就是整型、字符型和浮点型。

学习各种数据类型时,需要注意的就是如何读入这些数据和输出这些数据。

下面的例子显示了浮点数的输入和输出。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
int main(int argc, char *argv[])
{
    int a, b;
    double c, d;
 
    scanf("%d%d", &a, &b);
    scanf("%lf%lf", &c, &d);
    printf("%d\n", (a+b)/2);
    printf("%.3f\n", (c+d)/2.0);
 
    return 0;
}

变量是整数类型的需要注意除法。 在C语言中,两个整数相除,结果一定是整数,结或者果是却掉小数部分,并不是四舍五入。 例如,8/5 结果是1,不是1.6或者2。 整数还有一个非常重要的特点,就是可以进行取余运算。 8/5 = 1,余数是 3。所以,在C语言中,8/5 = 1, 8 % 5 = 3,其中 % 是取余运算。

在上面的例子中, a 和 b 是整型变量,所以 a % b 是有意义的(b不等于0),a / b 的结果一定是整数。

上面的例子中, c 和 d 是实数,或者成为浮点数。 浮点数有两种表示,分布是 float 和 double。double类型的浮点数称为双精度浮点数,float 类型的浮点数称为单精度浮点数,从名字上也很好理解,double类型的精确程度更高。C语言中的数学库函数都采用的是double类型进行运算,为的就是获得更高的精度。

建议:在你设计的程序中,遇到实数(浮点数)运算,如果没有特别说明,请采用 double 类型。

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
 
int main(int argc, char *argv[])
{
    float e, f;
 
    scanf("%f%f", &e, &f);
    printf("%.3f\n", (e+f)/2.0);
 
    return 0;
}

提示: float和double的输入(scanf)存在区别,输出(printf)没有区别,都是用 %f 的形式。

整数和浮点数也可以进行转换,下面的程序运行会出现奇怪的结果

1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
 
int main(int argc, char *argv[])
{
    int a, b;
 
    scanf("%d%d", &a, &b);
    printf("%.3lf\n", (a+b)/2);
	return 0;
}

上面的程序存在问题,是因为 %.3lf 表示的是浮点类型,而 (a+b)/2 确是整型,所以输出是 0.000。

正确的代码应该如下所示:

1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
 
int main(int argc, char *argv[])
{
    int a, b;
 
    scanf("%d%d", &a, &b);
    printf("%.3lf\n", (a+b)/2.0);
	return 0;
}

表达式 (a+b)/2.0 中2.0是浮点数,只要表达式的结果自动转换成了浮点数,就能够输出正确的结果了。

下面的例子展示了浮点数转换成整型数。

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
#include <math.h>
 
int main(int argc, char *argv[])
{
    int n;
    double f;
 
    scanf("%lf", &f);
    n = sqrt(f);
    printf("%d\n", n);
	return 0;
}

sqrt(f) 表示求 f 的平方根,返回的是一个浮点数,但由于 n 是整数,所以平方根自动被转换成了整型数(舍去整数后面的小数点部分)。

抱歉!评论已关闭.