文章目录[隐藏]
第3章 数据和C
本章介绍以下内容:
-
关键词
-
运算符:sizeof()
-
函数scanf()
-
整数类型和浮点数类型的区别
-
如何书写整型和浮点型常数,如何声明这些类型的变量
-
如何使用printf()和scanf()函数读写不同类型的值
C语言提供两大系列的多种数据类型。本章详细介绍:整数类型和浮点类型(还将介绍常量和变量的区别)3.1 示例程序
//platinum.c -- your weight in platinum #include<stdio.h> int main() { float weight; //你的体重 float value; //相等重量的白金价值 printf("Are you worth your weight in platinum?\n"); printf("Let't check it out.\n"); printf("Please enter your weight in pounds:"); //获取用户的输入 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; }
getchar()可以让一闪而过的终端等待你的键入;
3.1.1程序中的新元素
-
float类型可以存储带小数的数字
-
打印新类型的变量,在printf()中使用%f来处理浮点值.%.2f中的.2用于精确控制输出,指定输出的浮点数只显示小数点后面两位。
-
scanf()函数用于读取键盘的输入。%f说明scanf ()要读取用户从键盘输入的浮点数,&weight告诉scanf()把输入的值赋给名为weight的变量。scanf()函数使用&符号表明找到weighht变量的地点。
-
人机交互
3.2 变量与常量数据
有些数据类型在程序使用之前已经预先设定好了,在整个程序的运行过程中没有变化,这些称为常量(constant)。其他数据类型在程序运行时期可能会改变或被赋值,这些称为变量(variable)
3.3 数据:数据类型关键字
-
在C语言中,用int关键字来表示基本的整数类型。后3个关键字(long、short、unsigned)和C99新加的signed用于提供基本整数类型的变式。
-
char关键字用于指定字母和其他字符,另外char类型也可以表示较小的整数。
-
float、double和long double表示带小数点的数。
-
_book类型表示布尔值(true和false)
-
_Complex和 _Imaginary分别表示复数和虚数。
-
计算机存储方式分为两大类:整数类型和浮点数类型
位、字节和字是描述计算机存储单元的术语.这里主要指的是存储单元。
最小的存储单元是位(bit),可以存储0或1(or开关)。位是计算机内存的基本够块。
字节(byte)是常用的计算机存储单位。1byte=8bit。
8位(一字节)可以表示0-255的整数或者一组字符
字(word)是设计计算机时给定的自然存储单位。对于8位的微型计算机、一个字只有八位。计算机的字长越大,其数据转移越快,允许的内存访问也更多。3.3.1 整数和浮点数
3.3.2整数
整数是没有小数部分的数。计算机以二进制存数。
3.3.3浮点数
3.16E7表示
3.16\times 10^7
计算机把浮点数分成为小数部分和指数部分来表示,而且分开存储这两部分。 -
整数没有小数部分,浮点数有小数部分
-
浮点数可以表示的范围比整数大。
-
对于一些算术运算,浮点数损失的精度更多。
-
因为在任何区间都存在无穷多个实数,所以计算机的浮点数不能表示区间内的所有数,浮点数通常只是实际值的近似值。
-
过去,浮点运算比整数运算慢。现在CPU加入了浮点处理器
3.4 C语言基本数据类型
3.4.1 int类型
一般而言,存储一个int要占一个机器字长
- 声明int变量
如何赋值:
(1)赋值 x=1;
(2)通过函数scanf()获得
(3)初始化变量 - 初始化变量
初始化(initialize)变量就是为变量赋一个初始值。int hogs=21; int cows=32,goats=14; int dogs,cats=94; //有效;但是容易让人误解;真实只赋值了cats
声明变量创造和标记存储空间,并未其指定初始值;
- int类型常量
C语言把不含小数电和指数的数作为整数。 - 打印int值
可以使用printf()打印int类型的值。%d称为转换说明
- 声明int变量
//print1.c -printf()的一些特性
#include<stdio.h>
int main(void)
{
int ten =10;
int tw0 =2;
printf("Doing it right:");
printf("%d minus %d is %d \n",ten,2,ten-two);
printf("Doing it wrong:");
printf("%d minus %d is %d \n",ten); //漏掉两个参数
return 0;
}
运行后的结果
未报错,问题出在printf("")函数的参数数目不定,可以有多个。
注意使用printf()函数时候,要确保转换说明的数量与待打印值的数量相等
- 八进制和十六进制
10000H表示十进制为65536
在C语言中,用特定的前缀表示使用哪种进制,0x和0X前缀表示十六进制;
0前缀表示表示八进制例如十进制的十六用十六进制表示为0x10或者0X10;用八进制表示为020.- 使用不同进制是为了方便,不会影响被存储的方式。(因为计算机内部都是以二进制进行编码的)
-
显示八进制和十六进制
以十进制显示,使用%d
以八进制显示,使用%o
以十六进制显示,使用%x。
另外,要显示个各进制前端的0、0x、和0X,必须风别写%#o、%#x、%#X//bases.c ----以十进制、八进制、十六进制打印十进制数100 #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;hex = %#x\n",x,x,x); return 0; }
显示结果为:
3.4.2 其他整数类型
C语言提供了3个附属关键字修饰基本整数类型:short、long、unsigned。
- short int类型(或简写short)占用的存储空间可能比int少,常用于较小数之的场合。与int相比,short是由符号类型;
- long int或者long 占用的存储空间可能比int多,适用于大数值场合,与int相比,long long是由符号类型;
- long long int或long long(C99标准加入)占用的存储空间可能比int多,适用于较大数值场合。该类型至少占64位。与int相比,long long是由符号类型;
- usigned int 或unsigned 只用于非负数场合。这种类型与有符号数表示的范围不同。例如:16位的usigned int永续的取值范围位0~65535,而不是-32768~32767.用于表示正负号的位现在用于表示另一个二进制位,所以无符号整型可以表示更大的数。
- 在C90标准中,添加了unsigned long int 或者unsigned long和 usigned short int或usigned short类型;
- C99标准又添加了usigned long long int或者usigned long long;
- 在仍和有符号数类型前面加上signed,刻意强调使用有符号类型的意图。
留坑
叨叨几句... NOTHING