一.常量和变量
常量:有些数据可以在程序使用之前预先设定并在整个运行过程中没有变化。编译器可以直接通过数据书写来辨认其类型,比如:42是整数,42.00则是浮点数。
变量:在程序运行过程中可能变化或赋值的其他数据。它需要在声明语句中指定其类型。
二.关键字
我们已知int关键字,提供基本的整数类型。接下来将接触其他的关键字:
char:用于表示字母以及其他字符(如#、¥、%、*等),也可以表示小的整数。
float、double和组合long double表示带有小数点的数。
_Bool类型表示布尔值(true和false)。
_Complex和_Imaginary分别表示复数和虚数。
三.int类型
打印int值时,切记格式说明符的数目和要显示的值的数目一定要保持一致,即有多少个%d其后就有多少个参数个数。
- 八进制和十进制
在c中,有专门的前缀表示进制。前缀0x或者0X表示十六进制。前缀0表示八进制。它并不影响数字的存储,数字还是使用二进制编码进行存储。
而显示哪种进制,则需使用一定的方法:要显示十六进制整数,使用%x。要显示八进制整数,使用%o。如果还想显示出前缀,则使用说明符%#o、%#x和%#X分别生成0、0x和0X前缀。
例如程序:
#include<stdio.h> int main(void) { int x=100; printf("dec=%d;octal=%o;hex=%x\n",x,x,x); //显示不同进制的整数 printf("dec=%d;octal=%#o;hec=%#x\n",x,x,x); //显示前缀 return 0; }//其中为小写字母o
结果为:
dec=100;octal=144;hex=64
dec=100;octal=0144;hec=0x64
- 其他整数类型
c提供3个附属关键字修饰基本的整数类型:short、long和unsigned.
- short int(简写为short):可能占用比int类型更少的存储空间,用于仅需小数值的场合以节省空间。
- long int(简写为long):与上相反。打印时用%ld。
- long long int(简写为long long):与上同。
- unsigned int(简写为unsigned):只使用非负值的场合,无符号类型。表示比int更大的数。打印时用%u。
- 关键字signed可与任何有符号类型一起使用,使数据的类型更加明确。
为什么说“可能”占用?因为c仅保证short类型不会比int类型长,并且long类型不比int类型短。
- 整数溢出
#include<stdio.h> int main(void) { int i = 2147483647; unsigned int j = 4294967295; printf("%d %d %d\n",i,i+1.i+2); printf("%u %u %u\n",j,j+1,j+2); return 0; }
输出结果为:
2147483647 -2147483648 -2147483647
42949697295 0 1
无符号整数j达到最大值后将溢出到起始点,整数i也如此。主要区别在于前者起始点是0,后者起始点是 -2147483648。
使用printf()语句时,切记每个要显示的值都必须对应自己的格式说明符,并且显示值的类型要同说明符相匹配。
- char类型
char类型用于存储字母和标点符号之类的字符,而实际存储的是整数而不是字符。计算机使用特定的整数表示特定的字符,即ASCII码。它肯定是1字节。
-
- 声明
char ch='A'; char ch=65;
前者使用单引号表示c的一个字符常量,也可以直接用ASCII码表示,前者更佳。
-
- 转义字符
属于非打印字符,应用于printf()函数双引号中,产生一系列动作。例如:\a产生蜂鸣,\b、\f、\n、\r、\t和\v对输出内容的显示位置的影响。
例如:
#include<stdio.h> int main(void) { float salary; printf("\aEnter your desired monthly salary:"); printf(" $_______\b\b\b\b\b\b\b"); scanf("%f",&salary); printf("\n\t$%.2f a month is $%.2f a year.",salary,salary*12.0); printf("\rGee!\n"); return 0; }
输入5000000,结果为:
Enter your desired monthly salary: $5000000
Gee! $5000000.00 a month is $60000000.00 a year.
\\、\'和\"可以让您引用\、'和"字符常量,例如:
#include<stdio.h> int main(void) { printf("Any says\"Who are you?\"\n"); return 0; }
输出结果为:
Any says"Who are you?"
-
- 打印
使用%c打印一个字符,使用%d则打印对应的码值。
四.浮点型(float、double和long double)
- float类型至少表示6位有效数字,double类型至少表示10位有效数字。
- 默认情况下,编译器将浮点常量当作double类型,您可以通过f或F后缀将其当作为float类型。
- 使用%f打印十进制记数法,使用%e打印指数记数法。
- 浮点数上溢和下溢
假设系统中最大float值为3.4E38,如下:
#include<stdio.h> int main(void) { float toobig=3.4E38*100.0f; printf("%e\n",toobig); return 0; }
显示结果:
1.#INF00e+000
当计算结果是一个大的不能再大的数值时,会发生上溢,此时C语言要求为toobig赋予一个代表无穷大的特殊值,printf()函数显示此值为inf或infinity(或其他这个意义的名称)。
而float数字被分为指数和尾数部分进行存储,若指数以达到最小值,还要除以2,则计算机只好将尾数部分的位进行右移,空出首位二进制位,并丢弃最后一位二进制值。如一个四位有效数字的数0.1234E-10除以10,将得到结果0.0123E-10,但是损失了一位有效数字,此过程为下溢。
五.sizeof运算符
以字节为单位给出数据的大小,打印时使用%u。
#include<stdio.h> int main(void) { printf("Type int has a size of %u bytes.\n",sizeof(int)); printf("Type char has a size of %u bytes.\n",sizeof(char)); printf("Type long has a size of %u bytes.\n",sizeof(long)); printf("Type double has a size of %u bytes.\n",sizeof(double)); return 0; }
结果为:
Type int has a size of 4 bytes.
Type char has a size of 1 bytes.
Type long has a size of 4 bytes.
Type double has a size of 8 bytes.