C Primer Plus 第3章 数据和C

3.1示例程序程序员

程序清单3.1 rhodium.c程序函数

------编码

/*rhodium.c用金属铑衡量您的体重*/
#include <stdio.h>
int main (void)
{
folat weight,value;//folat类型能够处理带有小数点的数字

printf("Are you worth you weight in rhodium? \n");
printf("Let's check it out. \n");
printf("Please enter your weight in pounds: ");
scanf("%f",&weight);//%f指示scanf从键盘读取一个浮点值,&weight指定将输入值赋给名为weight的变量中;
value=770*weight*14.5833;
printf("Your weight in rhodium is worth $%.2f. \n",value);//%f使用.2修饰词使浮点值显示到小数点后两位;
printf("You are easily worth that ! If rhodium prices drop,\n");
printf("eat more to maintain your value.\n");
return 0;
}

3.2 变量与常量数据指针

有些数据能够在程序使用以前预先设定并在整个运行过程当中没有变化,这称为常量;code

另外的数据在程序运行过程当中可能变化或被赋值,这称为变量。字符串

变量与常量的区别在于,变量的值能够在程序执行中变化与指定,而常量则不能够。原型

3.3 数据类型关键字编译器

C的数据关键字数学

原来的K&R关键字 C90添加2个关键字 C99添加3个关键字
int(基本的整数类型) signed(提供基本类型的变种) _Bool(布尔值)
long(提供基本类型的变种) void _Complex(复数)
short(提供基本类型的变种)   _Imaginary(虚数)
unsigned(提供基本类型的变种)    
char(表示字母及其余字符或者小的整数)    
float(带有小数点的数)    
double(带有小数点的数)    

这些类型能够按其在计算机中的存储方式划分为两个系列,即整数(integer)类型和浮点(floating-point)类型。it

3.3.1 整数类型与浮点数类型

对于计算机而言,区别在于它们的存储方式。

3.3.2 整数

整数就是没有小数部分的数。

整数以二进制数字存储。

3.3.3 浮点数

浮点数差很少能够和数学中的实数概念相应。实数包含了整数之间的那些数。

加了小数点的数是浮点型值,因此7是整数,而7.00是浮点型。

浮点数与整数的存储方法不一样,浮点数表示法将一个数分为小数部分和指数部分并分别存储。

整数和浮点数的区别:

*整数没有小数部分,而浮点数能够有小数部分;

*浮点数能够表示比整数范围大的多的数;

*对于一些大的算术运算,使用浮点数会损失更多的精度。

*因在任何区间内都存在无数个实数,因此计算机浮点数不能表示区域内全部的值。浮点数每每只是实际值的近似的值。

*浮点运算一般比整数运算慢。

3.4 数据类型

3.4.1 int 类型

C提供多种整数类型。

各类整数类型的区别在于所提供数值的范围,以及数值是否能够取负数。

int是有符号整数,即INT类型的值必须是整数,能够是正的、负的或者是0,其取值范围依赖于计算机系统。

通常的,int类型存储在计算机的一个字中。系统经过使用一个指示正负符号的位来表示有符号整数。

1、声明int变量

int关键字用于声明基本的整数变量。

能够直接赋值,也能够经过scanf()函数为变动赋值。

2、初始化变量

初始化(initialize)变量就是为变量赋一个初始值。

简言之,声明语句为变量建立、标定存储空间并为其指定初始值。

3、int类型常量

C把不含有小数点和指数的数做为整数。把大多数整数看做是Int类型。

4、打印int类型

%d说明符能够指示在一行中的什么位置打印整数。

记住,使用printf()函数时,格式说明符的数目和要显示的值的数目必定要相同。

5、八进制和十六进制

在C中,由专门的前缀代表是哪种进制。ox或OX表示使用十六进制值,0表示使用八进制。

6、显示八进制和十六进制数

八进制说明符:%0;十六进制说明符:%x;

若是想显示C语言前缀,可使用说明符%#0、%#x、%#X,要显示0和ox前缀,必须在说明符中加入#符号。

3.4.3 使用字符:char类型

char类型用于存储字母和标点符号之类的字符。可是技术实现上char倒是整数类型。

这是由于char类型实际存储的是数字而不是字符。为了处理字符,计算机使用一种数字编码,用特定的整数表示特定的字符。

c把一个字节(byte)定义为char类型使用的位(bit)数。

1、声明char类型变量

2、字符常量及其初始化

char broiled;

broiled='T';

若是不使用单引号,编译器会将T视为一个变动名;若是使用双引号,编译器将其初为一个字符串。

C将字符常量视为int类型而非char类型。

3、非打印字符

转义序列

给一个字符变量进行赋值时,转义序列必须用单引号括起来。

若是想用一个数值的八进制ASCII码表明它,能够在编码值前加一个反斜杠(\)并用单引号引发来。

beep='\007'

‘07’、‘7’、这种写法会使数值被解释为八进制。

关于转义序列的三个疑问

一、不管普通字符仍是转义序列,若是做为双引号字符集合的一部分,则无需单引号。不在转义序列中的数字将像普通字符那样被打印出来。

二、若是要在某个转义序列和其对应的ASCII码之间作出选择,则应当使用转义序列。

三、当须要使用数值编码时,为何使用'\032'而不是032?首先,'\032'能更清晰的表达程序员表示一个字符编码的意图;其次'\032'这样的转义序列能够嵌入到C字符串中,好比“Hello!\007\n”中就嵌入了'\007'.

4、打印字符

printf()使用%c说明符打印一个字符。

5、有符号仍是无符号

根据C90标准,C容许在关键字char前使用signed和unsigned。这样使用字符类型处理小整数十分有用。

若是处理字符,则只须使用不带修饰词的标准char类型。

3.4.4 _Bool类型

_Bool类型由C99引入,用于表示布尔值。由于C用1表示true,用0表示false,因此_Bool类型实际上也是整数类型,只是原则上它仅须要1位来存储。

3.4.5 可移植的类型:inttypes.h

3.4.6 float、double、long double

C语言中的浮点数包括float\double\long double类型。

浮点数表示相似于科学记数法。

C标准规定,folat类型必须至少能表示6位有效数字,取值范围至少10的-37次方到10的37次方。

一般,系统使用32位存储一个浮点数。其中8位表示指数及其符号,24位用于表示非指数(称为尾数或有效数字)部分及其符号。

C还提供一种称为double(意为双精度)的浮点类型。

double类型和float类型具备相同的最小取值范围,但它必须最少能表示10位有效数字。

通常的,double使用64位而不是32位长度。

C提供第三种浮点类型long double,以知足比double类型更高的精度。不过C只保证long double类型至少同double类型同样的精确。

1、声明浮点变量

浮点变量的声明与初始化方法同整形变量相同。

2、浮点常量

一个浮点常量最基本的形式是:包含小数点的一个带符号的数字序列,接着是字母e或E,而后是表明10的指数的一个有符号值。

-1.56E+12

2.87e-3

能够省略正号。能够没有小数点(2E5)或指数部分(19.28),但不能同时没有二者。

能够省略纯小数部分(3.E16)或整数部分(.45E-6),但二者不能同时省略。

默认状况下,编译器将浮点常量看成double类型。

C使您能够经过f或F后缀使编译器把浮点常量看成folat类型,好比2.3f或9.11E9F。l或L后缀使一个数字成为long double类型,好比54.3l或4.32e4L,建议使用L。

没有后缀的浮点常量为double类型。

C99为表示新浮点常量添加了种十六进制格式。这种格式使用前缀ox或OX,接着是十六进制数字,而后是p或P(而不是E或e),最后是2的指数。

oxa.1fp10

3、打印浮点值

printf()函数使用%f格式说明符打印十进制记数法的float或double数字,用%e打印指数记数法的数字。

若是系统支持C99的十六进制格式浮点数,您可使用a或A代替e或E。

打印long double类型,须要%Lf、%Le、%La说明符。

注意,float和double类型的输出都使用%f,%e、%a说明符。这是因为当它们向那些未在原型中显示说明参数类型的函数(如printf())传递参数时,C自动将float类型的参数转换为double类型。

4、浮点值的上溢和下溢

当计算结果是一个大得不能表达的数时,会发生上溢。

以十进制为例,把一个包含4位有效数字的数0.1234E-10除以10,将获得结果0.0123E-10,可是损失了一位有效数字,此过程称为下溢。

C将损失了类型精度的浮点值称为低于正常的。

3.4.7 复数和虚数

有3种复数类型:float_Complex  double_Complex 和 long double_Complex;

有3种虚数类型:float_Imaginary  double_Imaginary 和 long double_Imaginary;

若是您 包含了头文件complex.h,就能够用complex代替_Complex,用Imaginary代替_Imiginary.

3.4.8 其余数据类型

C从基本类型中衍生出其余数据类型,包括数据、指针、结构和联合。


3.4.9类型大小

C的内置运算符sizeof以字节为单位给出类型的大小。

3.5 使用数据类型

3.6参数和易犯的错误

注意,使用%d显示float值不会把该float值转换为近似的int值,而是显示垃圾值。与之相似,使用%f显示int值也不会把该int值转换为浮点值。并且,参数数目的不足和类型不匹配所形成的结果也将随平台不一样而不一样。

相关文章
相关标签/搜索