学习要点:
关键字int,short,long,unsigned,char,float,double,_Bool, _Complex,_Imaginary
sizeof()运算符
两大数据类型,整数类型和浮点数(小数)类型
常量和变量(交互式)
使用printf()和scanf()函数读写不同类型的值
C 数据类型
在 C 语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。
C 中的类型可分为以下几种:
实例:
序号 类型与描述
1 基本类型: 它们是算术类型,包括两种类型:整数类型和浮点类型。
2 枚举类型: 它们也是算术类型,被用来定义在程序中只能赋予其一定的离散整数值 的变量。
3 void 类型: 类型说明符 void 表明没有可用的值。
4 派生类型: 它们包括:指针类型、数组类型、结构类型、共用体类型和函数类型。
#include<stdio.h> int main(){ int a,b; a=6; printf("这是一个美元转换人民币的程序\n"); printf("输入你的美元数量\n"); scanf("%d",&b); b=a*b; printf("对应的人民币数量为%d",b); return 0; }
***
问题:
对于乱码问题,注意中文编码格式有UTF-8和GB2312
对于程序一闪而过,可以用getchar();函数解决,此函数读取下一个输入字符,因此程序会等待输入,还可以使用system(“pause”);他是C函数库stdlib.h中的一个函数,pause是dos下的一个命令,功能是暂停批处理的执行,显示一个中文信息,请按任意键继续。或英文信息Press key to continue……
scanf()函数用于获取键盘的输入,%d说明要获取的数据类型是整型,&表示取地址符,简单说就是找到一个地址放变量名为b的数据。以后会深入研究。这段程序里的a是常量,b是变量。
输入输出两个函数结合起来,就可以建立人机双向通信,让计算机变得更加有趣,让程序更加灵活,不用重写程序了。
#include<stdio.h> int main(){ float a; a=6.234; printf("%0.2f",a); return 0; }
这里使用了float小数类型,注意在printf()中使用%0.2f用于精确控制输出,从实践结果可以发现他的作用是指定浮点数只显示小数点后面的两位。
整数类型
int类型是有符号整型,什么意思你,就是包含负整数,int类型的值必须是整数,可以是正整数,0和负整数,其取值因计算机系统而异。16位机器int型的存储范围是 -32768~32767,目前32位,64位的更是大的惊人! ISO国际标准化组织C规定int的取值范围最小为-32768~32767
int类型的声明和初始化
//声明:int+变量名+; int a; int a,b; //初始化变量就是为变量赋一个初始值,在C语言中,初始化可以直接在声明中完成。 int age = 19; int age1 = 19, age2 = 10; int age1, age2 = 23;/*有效,但这种书写格式很糟糕!!!*/ //最不要把初始化的变量和未初始化的变量放在同一条声明里 简单讲,因为C接近底层,能用指针等控制硬件,避免不了一些严格的的规范以确保安全。 声明以及初始化为变量创建和标记存储空间,并为其指定初始值。
八进制和十六进制
通常,C语言都假定整数常量是一个十进制数。然而,很多程序员👨💻很喜欢使用八进制和十六进制数,因为8和16都是2的整数幂,而10不是。显然,八进制和十六进制计数系统在表达与计算机相关的值时很方便。
要清楚,使用不同的进制数是为了方便,不会影响数的存储形式。也就是说,无论把数字写成16,020,还是0x10,储存该数的方式都相同,因为计算机内部都以二进制进行编码。
显示我们的八进制和十六进制
C程序里,既可以使用和显示不同进制的数。
不同的进制要用不同的转换说明。以十进制显示数字,使用%d;以八进制,使用%o ;十六进制,使用%x
另外,要显示八进制和十六进制的前缀必须使在转换说明中加入#,比如:%#o,%#x
手撕代码
#include<stdio.h> int main(){ int a=10; printf("十进制 八进制 十六进制\n"); printf("a=%d; a=%o a=%x\n",a,a,a); printf("a=%d; a=%#o a=%#x\n",a,a,a); return 0; }
结果:
好👌,没得问题
其他整数类型
初学C,int类型应该能满足大多数程序的整数类型需求。尽管如此,还应该了解一下整数的其他形式
C语言提供了3个附属关键字修饰基本数据类型:short, long, unsigned
short int 类型(可以简记为short)占用的储存空间可能比int类型少,用于较小数值的场合以节省空间。short是有符号型
long int 或long占用的存储空间可能比int多,适用于较大场合。long是有符号型
long long int 或long long(C99新加入)占用的储存空间可能比long多,适用与更大数值的场合。该类型至少占64位。long long是有符号型。
unsigned 类型只用于非负值的场合。这种类型与有符号型表示的范围不同。
singed,强调使用有符号类型的意图。
C语言只规定了short占用的储存空间不能多于int,long占用的储存空间不能少于int。
这样规定是为了适应不同的机器。
void 类型
void 类型指定没有可用的值。它通常用于以下三种情况下:
序号 类型与描述
1 函数返回为空 C 中有各种函数都不返回值,或者您可以说它们返回空。不返回值的函数的返回类型为空。例如 void exit (int status);
2 函数参数为空 C 中有各种函数不接受任何参数。不带参数的函数可以接受一个 void。例如 int rand(void);
3 指针指向 void 类型为 void * 的指针代表对象的地址,而不是类型。例如,内存分配函数 void *malloc( size_t size ); 返回指向 void 的指针,可以转换为任何数据类型。
浮点类型
下表列出了关于标准浮点类型的存储大小、值范围和精度的细节:
类型 | 存储大小 | 值范围 | 精度 |
float | 4 字节 | 1.2E-38 到 3.4E+38 | 6 位小数 |
double | 8 字节 | 2.3E-308 到 1.7E+308 | 15 位小数 |
long double | 16 字节 | 3.4E-4932 到 1.1E+4932 | 19 位小数 |
sizeof运算符
sizeof是C的内置运算符,以字节为单位给出指定类型的大小。
#include<stdio.h> int main(){ printf("int is %d bytes.\n",sizeof(int)); printf("char is %d bytes.\n",sizeof(char)); printf("long is %d bytes.\n",sizeof(long)); printf("float is %d bytes.\n",sizeof(float)); printf("double is %d bytes.\n",sizeof(double)); return 0; }
变量和常量
C 语言也允许定义各种其他类型的变量,比如枚举、指针、数组、结构、共用体等等
变量的名称可以由字母、数字和下划线字符组成。它必须以字母或下划线开头。大写字母和小写字母是不同的,因为 C 是大小写敏感的。
在整个程序运行的过程中没有变化,这些成为常量(constant)
数据类型在运行过程中可能会改变或被赋值,这些成为变量(variable)
简单说
常量:a=1;
变量:a;
c语言数据类型关键字
最初K&R给出的关键字 int , long , short , unsigned , char , float , double
C90标准添加的关键字 signed , void
C99标准添加的关键字 _Bool (布尔false,true) , _Complex (复数) , _Imaginary(虚数)
按照计算机的储存的方式可以分为两大基本类型:整数类型,浮点数类型
C 中的左值(Lvalues)和右值(Rvalues)
C 中有两种类型的表达式:
左值(lvalue):指向内存位置的表达式被称为左值(lvalue)表达式。左值可以出现在赋值号的左边或右边。
右值(rvalue):术语右值(rvalue)指的是存储在内存中某些地址的数值。右值是不能对其进行赋值的表达式,也就是说,右值可以出现在赋值号的右边,但不能出现在赋值号的左边。
变量是左值,因此可以出现在赋值号的左边。数值型的字面值是右值,因此不能被赋值,不能出现在赋值号的左边。下面是一个有效的语句:
int g = 20;
但是下面这个就不是一个有效的语句,会生成编译时错误:
10 = 20;
位,字节,字
最小的储存单位是位(bit),它可以存储0和1(换句话说,位用于设置开和关),虽然1位储存的信息有限,但是计算机中位的数量十分庞大,位是计算机内存的基本构建块
字节(Byte)是计算机常用的储存单位。几乎所有的机器,1个字节均位8位。这是字节的标准定义,01和8位就有了2的八次方256种可能的01组合,通过二进制编码,便可以表示0~255的整数或一组字符
字(word)是设计计算机时给定的自然存储单位。个人计算机字长增加到16位,32位,当前64位。计算机字长越大,其数据转移越快,允许访问的内存也更多。
过去,浮点运算比整数运算慢。不过,现在许多CPU都包含浮点处理器,缩小了速度上的差距。
printf和scanf %d 十进制有符号整数 %u 十进制无符号整数 %f 浮点数 %s 字符串 %c 单个字符 %p 指针的值 %e 指数形式的浮点数 %x, %X 无符号以十六进制表示的整数 %o 无符号以八进制表示的整数 %g 把输出的值按照 %e 或者 %f 类型中输出长度较小的方式输出 %p 输出地址符 %lu 32位无符号整数 %llu 64位无符号整数
scanf 学习
printf 学习