第二章 数据和C

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转化为浮点值。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,539评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,594评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,871评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,963评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,984评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,763评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,468评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,850评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,002评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,144评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,823评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,483评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,026评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,150评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,415评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,092评论 2 355