1、示例程序
#include<stdio.h>
int main(void)
{
float weight;
float value;
printf("Are you worth your weight in rhodium?\n");
printf("Let's chheck it out.\n")
printf("Please enter your weight in pounds:");
scanf("%f",&weight);
value = 770 * weight * 14.5833;
printf("your weight in rhodium is worth $%.2f.\n",value);
printf("You are easily worth that! If rhodium prices drop,\n");
printf("eat more to maintain your value.\n");
return 0;
}
2、变量与常量数据
有些数据在程序实验之前与先设定好并在整个运行过程中没有变化,称为常量。另外的数据在程序运行中可能变化或被赋值,称为变量。在示例程序中,weight是变量,而14.5833是常量。变量与常量的区别在于,变量的值可以在程序执行过程中变化和指定,而常量则不可以。
3、数据类型关键字
C通过识别11个基本的数据类型做到区分,其中有int、long、short、unsigned、char、float、double、signed、void、_Bool、_Complex、_Imaginary。
int关键字提供C的基本的整数类型,long、short、unsigned、signed提供基本类型的变种。char关键字用于表示字母以及其他字符(如#、$、%,和*)。char类型也可以表示小的整数。float、double和long double表示带有小数点的数。_Bool表示布尔值(true和false)。_Complex和_Imaginary表示复数和虚数。
这些类型可以按其在计算机中的存储方式分类两个系列,整数(integer)和浮点数(floating-point)。
3.1、整数类型和浮点数类型
整数就是没有小数部分的数。如2、-23和2456都是整数,整数以二进制数字存储。
浮点数和数学中的实数概念相对应,包含了整数那些数,比如2.75、3.16E7、7.00和2e-8都是浮点数。最重要的是浮点数和整数的存储方案不同,浮点数表示法将一个数分成小数部分和指数部分并分别存储。所以尽管7.00和整数7有相同的值,但存储方式不同。
- 整数没有小数部分,浮点数可以有小数部分。
- 浮点数可以表示比整数范围大得多得数。
- 对于一些算术运算(例如两个很大的数相减),使用浮点数会损失更多精度。
- 浮点运算通常比整数运算慢。
4、C数据类型
4.1、int类型
int类型是有符号整数,即int类型的值必须是整数,可以是正。负或0,其取值范围依赖于计算机系统,一般int类型存储在计算机的一个字中。旧的PC有16位的字,因此使用16位来存储一个int值,取值范围为-32768到32767,这也是int类型的最小范围。
八进制和十六进制,前缀0x和0X表示使用十六进制值,所以16用十六进制表示为0x10或0X10,前缀0表示八进制。C要用八进制显示整数可以用%0代替%的,要显示十六进制整数,可以使用%x,如果想显示C语言前缀,可以使用说明符%#o、%#x和%#X分别生成0、0x、0X前缀。
C提供三个附属关键字修饰基本整数类型:short、long、unsigned。
- short int类型(或简写为short)可能占用比int类型更少的存储空间,用于仅需小数值的场合,最大的short不能大于最大的int整数,short最少16位长。
- long int类型(或简称long)可能占用比int更多的存储空间,用于打数值的场合,不小于最大的int数值,最少32位长。如果想要把一个较小的常量作为long类型对待,可以使用l或L后缀,整数7作为16为存储,而整数7L作为32位数存储。
- long long int类型(long long)可能占用比long类型更多的存储空间,不小于最大的long整数值,最少64位长。
- unsigned int类型 (unsigned)用于只使用非负值的场合,例如16位的unsigned int取值范围为0到65535。还可以使用unsigned long int、unsigned short int、unsigned long long int类型。printf()使用%u说明符显示unsigned int类型的值。
- signed可以有任何有符号类型一起使用,使数据的类型更加明确。
%u符号来打印unsigned int数字,打印long数值,可以用%ld说明符,%lx表示以十六进制格式打印长整数,%lo表示以八进制格式打印长整数。
首先可以对short类型使用h前缀,%hd表示以十进制显示short整数,%ho表示以八进制显示short整数,%lu表示unsigned long类型。
4.2、char类型
char类型用于存储子母河标点符号之类的字符。但在技术实现上char却是整数类型,char类型实际存储的是整数而不是字符。使用ASCII码来表示特点字符。
序列 | 意义 |
---|---|
\a | 警报(ANSI C) |
\b | 退格 |
\f | 走纸,将活动位置移到下一页的开始处 |
\n | 换行,将活动位置移到下一行的开始处 |
\r | 回车 |
\t | 水平制表符,将活动位置移到下一个水平制表点 |
\v | 垂直制表符,将活动位置移到下一个垂直制表点 |
\\ | 反斜杠(\) |
\' | 单引号(') |
\" | 双引号(") |
\? | 问号(?) |
\0oo | 八进制值(o表示一个八进制字) |
\xhh | 十六进制值(h表示一个十六进制字) |
4.3、_Bool类型
_Bool类型用于表示布尔值,即逻辑true和false,用1表示true,用0表示false。所以_Bool其实也是一种整数类型。
4.4、可移植的类型:inttypes.h
知道一个变量是int类型并不能告诉你有多少位,为了解决这问题,提供了一个可选的名字集合,例如:int16_t表示一个16位有符号整数类型,uint32_t表示一个32位无符号整数类型。
要使这些名字有效,要在程序中包含inttypes.h头文件。
4.5、float、double和long double类型
C标准规定,float类型必须至少能表示6位有效数字,取值范围至少为10-37至10+37。double类型和float类型具有相同的最小取值范围要求,但它要求至少能表示10位有效数字,一般double使用64位而不是32位长度。long double类型能满足比double更高的精度要求。
书写浮点常量有很多选择,可以省略正号,可以没有小数点或指数部分,但不能同时没有二者。不能没有空格。一般形式是:
-1.56E+12
2.87e-3
3.14159
.2
4e16
.8E-5
100.
C可以通过F或f后缀使编译器把浮点常量当作float类型,如2.3f和9.11E9F。l或L后缀使一个数字成为long double类型,如54.3l和4.32e4L。printf()使用%f打印十进制计数法的float和double,用%e打印指数记数法的数字,如果支持16进制格式浮点数,可以用a或A代替e或E。
特殊的浮点数NaN(Not-a-number)。输入参数大于范围要求,返回NaN值。
4.6、复数和虚数类型
有三种复数类型,分别是float_Complex、double_Complex、long double_Complex。float_Complex包含两个float值,一个表示复数的实部,一个表示复数的虚部,与之类似有三种虚数类型为float_Imaginary、double_Imaginary和long double_Imaginary。如果包含了complex.h头文件,可以用complex替换_Complex,用imaginary代替_Imaginary,用符号I表示-1的平方根。
4.7、类型大小
C的内置运算符sizeof以字节为单位给出类型的大小,使用%u打印sizeof数值。
类型名 | 字节数 |
---|---|
char | 1 |
_Bool | 1 |
short | 2 |
int | 4 |
long | 4 |
long long | 8 |
float | 4 |
double | 8 |
long double | 16 |
5、使用数据类型
很多程序员都有系统化的变量命名规则,比如使用i_前缀表示int变量,使用us_表示unsigned short变量,由此可以确定i_smart为int类型,us_verysmart为unsigned short类型。
使用%d显示float值不会吧该float值转化为int值,而是显示垃圾值。同样使用%f显示int值也不会把int转化为浮点值。