学习C语言笔记:数据和C

C Primer Plus (第6版)中文版第3章

学习内容:

1.关键字——int、short、long、unsigned、char、float、double、_Bool、_Complex、_Imaginary;

2.运算符——sizeof();

3.函数——scanf();

4.整数类型和浮点数类型的区别;

5.如何书写整型和浮点型常数,如何声明这些类型的变量;

6.如何使用printf()和scanf()函数读写不同类型的值。

程序离不开数据。把数字、字母和文字输入计算机,就是希望它利用这些数据完成某些任务。例如,需要计算一份利息或显示一份葡萄酒商的排序列表。这就需要学习如何读取数据,还要学习如何操控数据。

C语言提供两大系列的多种数据类型。这里先学习两大数据类型:整数类型和浮点数类型。

从一个简单的C程序示例开始

platinum.c程序

#include <stdio.h>
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: ");

    //获取用户的输入
    scanf("%f",&weight);
    /*
    假设白金的价格是每盎司$1700
    14.5833 用于把英磅常衡盎司转换为金衡盎司
    */
   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变量的地点。

常量:有些数据类型在程序使用之前已经预先设定好了,在整个程序的运行过程中没有变化。

变量:有些数据类型在程序运行期间可能会改变或被赋值。

C语言的基本类型关键字

见下表:

在C语言中,用int关键字来表示基本的整数类型。long、short、unsigned及signed用于提供基本整数类型的变式,例如 unsigned short int 和 long long int。char关键字用于指定字母和其他字符(如,#、$、%和*)。另外,char类型也可以表示较小的整数。float、double和long double表示带小数点的数。_Bool类型表示布尔值(turtle或false),_Complex和_Imaginary分别表示复数和虚数。

通过这些关键字创建的类型,按计算机的存储方式可分为两大基本类型:整数类型和浮点数类型。

位、字节和字

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

最小的存储单元是(bit),可以存储0或1(或者说,位用于设置“开”或“关”)。虽然1位存储的信息有限,但是计算机中位的数量十分庞大。位是计算机内存的基本构建块。

字节(byte)是常用的计算机存储单位。对于几乎所有的机器,1字节均为8位。这时字节的标准定义,至少在衡量存储单位时是这样的。既然1位可以表示0或1,那么8位字节就有256(2的8次方)种可能的0、1的组合。通过二进制编码(仅用0和1便可表示数字),便可表示0~255的整数或一组字符。

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

整数和浮点数

整数

“整数”和咱们之前理解的整数概念是一样的,整数是没有小数部分的数。计算机以二进制数字存储整数,例如,整数7以二进制写是111.因此,要在8位字节中存储该数字,需要把前5位都设置成0,后3位设置成1.

浮点数

浮点数与数学中的实数概念差不多。2.75、3.16E7、7.00和2e-8都是浮点数。注意,在一个值后面加上一个小数点,该值就成为一个浮点值。所以,7是整数,7.00是浮点数。显然,书写浮点数有多种形式。

e记数法:3.16E7表示3.16\times 10^{7}.7被称为10的指数。

浮点数与整数的存储方案不同,计算机把浮点数分成小数部分和指数部分来表示,而且分开存储这两部分。因此,虽然7.00和7在数值上相同,但是它们的存储方式不同。在十进制下,可以把7.0写成0.7E1,这里,0.7是小数,1是指数。当然,计算机在内部使用二进制和2的幂进行存储,而不是10的幂。

这两种类型的不同:

· 整数没有小数部分,浮点数有小数部分。

· 浮点数可以表示的范围比整数大。

· 对于一些算术运算(如,两个很大的数相减),浮点数损失的精度更多。

· 因为在任何区间内都存在着无穷多个实数,所以计算机的浮点数不能表示区间内所有的值。浮点数通常只有实际值的近似值。例如,7.0可能被存储位浮点值6.99999.

· 过去,浮点运算比整数运算慢。不过,现在许多CPU都包含浮点处理器,缩小了速度上的差距。

C语言基本数据类型

int型

C语言中的整数类型可表示不同的取值范围和正负值。一般情况使用int类型即可,但是为满足特定任务和机器的要求,还可以选择其他类型。

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

声明int变量时要先写上int,然后写上变量名,最后加上一个分号。如果要声明多个变量,可以单独声明每个变量,也可在int后面列出多个变量名,变量名之间用逗号分隔。

int erns;
int dogs, cows, goats;

初始化变量就是为变量赋一个初始值。在C语言中,初始化可以直接在声明中完成。只需在变量名后面加上赋值运算符(=)和待赋给变量的值即可。如下所示:

int hogs = 21;
int cows = 32, goats = 12;

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

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

使用字符:char类型

char类型用于存储字符,但是从技术层面看,char是整数类型。因为,char类型实际上存储的是整数而不是字符。计算机使用数字编码来处理字符,即用特定的整数表示特定的字符。标准ASCII码的范围是0~127,只需7位二进制数即可表示。通常, char类型被定义为8位的存储单元,因此容纳标准ASCII码绰绰有余。一般而言,C语言会保证char类型足够大,以存储系统(实现C语言的系统)的基本字符集。

C语言把1字节定义为char类型占用的位(bit)数,因此无论是16位还是32位系统,都可以使用char类型。

1.声明char类型变量

char类型变量的声明方式与其他类型变量的声明方式相同。例如,

char res;
char itable, latan;

以上声明创建了3个char类型的变量:res、itable和latan。

2.字符常量和初始化

如果要把一个字符常量初始化位字母A,不必背下ASCII码,用计算机语言很容易做到。通过初始化把字母A赋值给grade即可:

char grade = 'A';

在C语言中,用单引号括起来的单个字符被称为字符常量。编译器一旦发现'A',就会将其转换成相应的代码值。单引号必不可少。不可是双引号!

实际上,字符是以数值形式存储的,所以也可使用数字代码值来赋值。

3.非打印字符

单引号只适应于字符、数字和标点符号。

一些转义序列如下表

4.打印字符

printf()函数用%c指明待打印的字符。一个字符变量实际上被存储为1字节的整数值。因此,如果用%d转换说明打印char类型变量的值,打印的是一个整数。而%c转换说明告诉printf()打印该整数值对应的字符。

charcode.c程序

#include <stdio.h>
int main(void)
{
    char ch;

    printf("Please enter a character:\n");
    scanf("%c",&ch);
    printf("The code for %c is %d.\n",ch, ch);

    return 0;
}

 输出结果:

scanf()函数会读取用户输入的字符,&字符表示把输入的字符赋给变量ch。接着,printf()函数打印ch的值两次,第1次打印一个字符(%c),第2次打印一个十进制整数值(%d)。注意,printf()函数中的转换说明决定了数据的显示方式,而不是数据的存储方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笨小古

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值