编写一个英制和公制换算的程序如下:
#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 :::