C Primer Plus 第3章 数据和C 笔记

示例程序

#include 
int main()
{
    float weight;
    float value;
    printf("Are you worth your weight in platinum?\n");
    printf("Let's check it out.\n");
    printf("Please enter your weight in pounds:\n");
    scanf("%f",&weight);
    value = 1700.0 * weight * 14.5833;
    printf("Your weight in platinum is worth $%.2f.\n",value);
    printf("You are easily worth that! If platinum prices drop,\n");
    printf("eat more to maintain your value.\n");
    return 0;
}

结果:


在这里插入图片描述

本例使用了浮点数类型(float)的变量,以便处理更大范围的数据。float类型可以存储带小数的数字。

在printf()中使用%f来处理浮点值。%.2f中的.2用于精确控制输出,指定输出的浮点数只显示小数点后面两位。

scanf()函数用于读取键盘的输入。%f说明scanf()要读取用户从键盘输入的浮点数,&weight告诉scanf()把输入的值赋给名为weight的变量。scanf()函数使用&符号表明找到weight变量的地点。

变量与常量数据

有些数据类型在程序使用之前已经预先设定好了,在整个程序的运行过程中没有变化,这些称为常量(constant)
其他数据类型在程序运行期间可能会改变或被赋值,这些称为变量(variable)

数据:数据类型关键字

在C语言中,
用int关键字来表示基本的整数类型。后3个关键字(long、short和unsigned)和C90新增的signed用于提供基本整数类型的变式,例如unsigned short int和longlong int。
char关键字用于指定字母和其他字符(如,#、$、%和*)。另外,char类型也可以表示较小的整数。
float、double和long double表示带小数点的数。_Bool类型表示布尔值(true或false),_Complex和_Imaginary分别表示复数和虚数。
通过这些关键字创建的类型,按计算机的存储方式可分为两大基本类型:整数类型和浮点数类型。

位、字节和字

位、字节和字是描述计算机数据单元或存储单元的术语。这里主要指存储单元。

最小的存储单元是位(bit),可以存储0或1(或者说,位用于设置“开”或“关”)。

字节(byte)是常用的计算机存储单位。对于几乎所有的机器,1字节均为8位。

既然1位可以表示0或1,那么8位字节就有256(2的8次方)种可能的0、1的组合。通过二进制编码(仅用0和1便可表示数字),便可表示0~255的整数或一组字符

字(word)是设计计算机时给定的自然存储单位。对于8位的微型计算机(如,最初的苹果机),1个字长只有8位。从那以后,个人计算机字长增至16位、32位,直到目前的64位。计算机的字长越大,其数据转移越快,允许的内存访问也更多。

整数和浮点数

整数

和数学的概念一样,在C语言中,整数是没有小数部分的数。

浮点数

浮点数与数学中实数的概念差不多。

关键要理解浮点数和整数的存储方案不同。计算机把浮点数分成小数部分和指数部分来表示,而且分开存储这两部分。因此,虽然7.00和7在数值上相同,但是它们的存储方式不同。


在这里插入图片描述

C语言基本数据类型

int类型

int类型是有符号整型,即int类型的值必须是整数,可以是正整数、负整数或零。其取值范围依计算机系统而异。一般而言,存储一个int要占用一个机器字长。

早期的16位IBM PC兼容机使用16位来存储一个int值,其取值范围(即int值的取值范围)是-32768~32767。目前的个人计算机一般是32位,因此用32位存储一个int值。现在,个人计算机产业正逐步向着64位处理器发展,自然能存储更大的整数。

声明int变量

int a;
int b,c,d;

赋值

a=1;

初始化变量

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

int a=1;
int b=2,c=3;

简而言之,声明为变量创建和标记存储空间,并为其指定初始值


在这里插入图片描述

int类型常量

上面示例中出现的整数(1、2、3)都是整型常量或整型字面量。

打印int值

可以使用printf()函数打印int类型的值。
%d指明了在一行中打印整数的位置。%d称为转换说明,它指定了printf()应使用什么格式来显示一个值。格式化字符串中的每个%d都与待打印变量列表中相应的int值匹配。这个值可以是int类型的变量、int类型的常量或其他任何值为int类型的表达式。

#include 
int main()
{
    int a=1;
    printf("a=%d",a);
    return 0;
}
在这里插入图片描述

显示八进制和十六进制

八进制显示数字,使用%o;以十六进制显示数字,使用%x。另外,要显示各进制数的前缀0、0x和0X,必须分别使用%#o、%#x、%#X。

#include 
int main()
{
    int x=100;
    printf("%d;%o;%x\n",x,x,x);
    printf("%d;%#o;%#x\n",x,x,x);
}
在这里插入图片描述

其他整数类型

  • short 占用的存储空间可能比int类型少,常用于较小数值的场合以节省空间。

  • long int或long占用的存储空间可能比int多,适用于较大数值的场合。与int类似,long是有符号类型。

  • long long int或long long(C99标准加入)占用的存储空间可能比long多,适用于更大数值的场合。该类型至少占64位。与int类似,long long是有符号类型。

  • unsigned int或unsigned只用于非负值的场合。这种类型与有符号类型表示的范围不同。例如,16位unsignedint允许的取值范围是0~65535,而不是-32768~32767。用于表示正负号的位现在用于表示另一个二进制位,所以无符号整型可以表示更大的数。

  • 在C90标准中,添加了unsigned long int或unsignedlong和unsigned short int或unsigned short类型。C99标准又添加了unsigned long long int或unsignedlong long。

声明其他整数类型

    long int a;
    long b;
    short int c;
    short d;
    unsigned int e;
    unsigned f;
    unsigned long h;
    unsigned short y;
    long long j;

整数溢出

#include 
int main()
{
    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;
}
在这里插入图片描述

可以把无符号整数j看作是汽车的里程表。当达到它能表示的最大值时,会重新从起始点开始。整数i也是类似的情况。它们主要的区别是,在超过最大值时,unsigned int类型的变量j从0开始;而int类型的变量i则从−2147483648开始。注意,当i超出(溢出)其相应类型所能表示的最大值时,系统并未通知用户。因此,在编程时必须自己注意这类问题。

打印unsigned int类型的值,使用%u转换说明;打印long类型的值,使用%ld转换说明。如果系统中int和long的大小相同,使用%d就行。

char类型

char类型用于存储字符(如,字母或标点符号),但是从技术层面看,char是整数类型。因为char类型实际上存储的是整数而不是字符。计算机使用数字编码来处理字符,即用特定的整数表示特定的字符。美国最常用的编码是ASCII编码,本书也使用此编码。

声明char类型变量

char a;
char b,c;

字符常量和初始化

char a='A';

打印字符

#include 
int main()
{
    char a='C';
    printf("%c\n",a);
    printf("%d",a);
}
在这里插入图片描述

在这里插入图片描述

_Bool类型

C99标准添加了_Bool类型,用于表示布尔值,即逻辑值true和false。因为C语言用值1表示true,值0表示false,所以_Bool类型实际上也是一种整数类型。但原则上它仅占用1位存储空间,因为对0和1而言,1位的存储空间足够了。

转义字符

在这里插入图片描述

你可能感兴趣的:(C Primer Plus 第3章 数据和C 笔记)