计算(数据类型)
Suzhou 411 0

编写一个英制和公制换算的程序如下:

#include <stdio.h>

int main()
{
    printf("请分别输入身高的英尺和英寸,如身高5英尺7英寸,则输入(5 7)");
    int foot;
    int inch;
    scanf("%d %d",&foot,&inch);
    printf("身高是%f米\n",(foot+inch/12)*0.3048);
    return 0;
}

对函数foot、inch赋值7 2:

$ cpp main.c -o main.ii
$ cc main.ii -o main
$ ./main
请分别输入身高的英尺和英寸,如身高5英尺7英寸,则输入(5 7)7 2
身高是2.133600米
Program exited with status 0

对函数foot、inch赋值7 9:

$ cpp main.c -o main.ii
$ cc main.ii -o main
$ ./main
请分别输入身高的英尺和英寸,如身高5英尺7英寸,则输入(5 7)7 9
身高是2.133600米
Program exited with status 0

上述程序发现,inch变量赋值后再运算中没有起到作用,原因是两个整数的运算结果只能是整数,小数点后的内容被程序丢弃,在运算inch/12的过程中,输入的inch的值小于12,运算结果为0.xxxx,小数点后被丢弃后,inch/12的运算结果为0。

#include <stdio.h>

int main()
{
    printf("%d\n",10/3*3);
    return 0;
}
$ cpp main.c -o main.ii
$ cc main.ii -o main
$ ./main
9
Program exited with status 0

C语言中,10和10.0是两个不同概念,包含小数点的数字称为浮点数。 浮点数表示带有小数点的数值。 ::: tip 整数和浮点数进行运算时,C语言会把整数转换为浮点数在进行浮点数运算。 :::


上述的错误表示有两种改法。 1.浮点数:

#include <stdio.h>

int main()
{
    printf("输入身高英尺 英寸");
    int foot;
    int inch;
    scanf("%d %d",&foot,&inch);
    printf("身高是%f米",(foot+inch/12.0)*0.3048);  (使用浮点数12.0和%f)
    return 0;
}
$ cpp main.c -o main.ii
$ cc main.ii -o main
$ ./main
输入身高英尺 英寸5 7
身高是1.701800米Program exited with status 0

2.类型 在错误的写法中,foot和inch都是int的变量类型,整形的变量类型只能表示整数。 因为整数和浮点数进行运算时,C语言会把整数转换为浮点数在进行浮点数运算,所以只用修改inch/12中的其中之一,就可以进行浮点数的运算。第一种方式是将整数12改为浮点数12.0。也可以将inch的类型从整形改成浮点数类型。 ::: tip double是双精度浮点数的第一个单词,可以表示浮点数类型。(除了double,float表示单精度浮点数。) :::

#include <stdio.h>

int main()
{
    printf("输入身高英尺 英寸");
    double foot;
    double inch;
    scanf("%lf %lf",&foot,&inch);         (使用%lf表示输入一个浮点数)
    printf("身高是%f米",(foot+inch/12)*0.3048);
    return 0;
}
$ cpp main.c -o main.ii
$ cc main.ii -o main
$ ./main
输入身高英尺 英寸5 7
身高是1.701800米Program exited with status 0

::: warning 整数int输入输出都使用%d 浮点数double输入scanf使用%lf,输出printf使用%f :::

评论区