【C语言】2

数据类型

冯.诺依曼计算机

  • 指令和数据都同样存储在内存中
  • 都以二进制(Binary)形式存储在内存中

为什么用二进制存储?

  • 二进制在电器元件中容易实现,双稳态元件很多 电压的高和低、电容器的充电与放电、脉冲的有与无、晶体管的导通与截止
  • 二进制运算比进行十进制运算简单得多
  • 二进制易于实现物理上对数据的存储(如光盘等),且与逻辑判断正好可以形成一一对应的关系 用1表示“真”,用0表示“假”
  • 诠释了计算机哲学——复杂事物由简单事物构成

何为二进制?

十进制数

  • 用0~9这10个数中的一个表示十进制的一位数
  • “逢10进1”的进位原则,基为10
  • 每位数字都有一个权值,是10的幂次
  • 十进制表示的数值可以写成按位权展开的多项式之和 

二进制数

  • 用0或1表示二进制中的一位数
  • “逢2进1”的进位原则,基为2
  • 每位数字都有一个权值,是2的幂次
  • 可写成按位权展开的多项式之和

如何表示二进制的正与负?

有符号和无符号整数的区别在于怎样解释其最高位

  • 对无符号整数,最高位被C编译器解释为数据位
  • 对有符号整数,最高位被解释为符号位(0为正,1为负)

0怎么办?0的表示还能唯一吗?

  • +0的二进制是00000000 00000000
  • -0的二进制是10000000 00000000

负数以二进制补码(Complement)形式存储

  • 便于用统一的形式来表示0
  • 便于将减法运算也转化为加法运算来处理

补码如何计算?

  • 正数的反码、补码与其原码都是相同的
  • 负数补码,符号位不变,原码变反码,反码+1变补码
  • +0和-0的补码是相同的

-1的补码如何计算?

  • 将最高位解释为符号位,则该数就是-1
  • 将最高位解释为数据位,则该数就是

计算机的内存是如何编址的?

  • 内存——计算机内的存储部件
  • 内存的特点:速度快,可随机访问,但掉电即失
  • 内存中的存储单元是一个线性地址表
  • 内存地址按字节(Byte)编址:每个字节都用唯一的一个整数字来标识——地址 ;地址是一个十六进制无符号整数
  • 32位计算机的内存地址编码是32位,从0x00000000到0xFFFFFFFF

如何衡量内存空间的大小?

计算机存储数据的最基本单元

  • 衡量物理存储器容量的最小单位——位,也称比特

一个位(bit)有多大?

  • 只能是0或者1,二进制
  • 一个位无法表示太多数据,所以须将许多位合起来使用

字节(Byte):8位(bit)

字节(Byte)是最小的可寻址的存储器单位

  • 通常用字节数的多少来衡量内存空间的大小
  • 标识字符的最小单位

引入数据类型

对计算机系统和硬件本身而言,数据类型(Data Type)的概念其实是不存在的

  • 冯· 诺依曼体系结构中,程序代码和数据以二进制存储

引入数据类型的主要目的

  • 有效地组织数据,把数据分成所需内存大小不同的数据
  • 规范数据的使用
  • 提高程序的可读性
  • 方便用户的使用

C语言中有哪些数据类型

不同数据类型可参与的运算不同

整型

加、减、乘、除、求余(模)

实型

加、减、乘、除

字符型

加、减(整数)

对ASCII码值的运算

常量与变量

常量:在程序中不能改变其值的量

变量 :其值在程序执行过程中是可以改变的

在程序中不能改变其值的量

整型 默认为int

实型 默认为double

字符型 用\开头的字符为转义字符, 代表1个字符

字符串

枚举型

整型常量

整型常量就是整数,包括正整数、负整数和0

C语言中整型常量可以用以下三种形式表示:

① 十进制整数:有效数字为0~9。20  %d

② 八进制整数:有效数字为0~7,且以0开头,如020。%o

③ 十六进制整数:有效数字为0~9和a~f(或A~F),且以0x开头,如0x20。%x

实型常量

定义:实型常量是带小数点的数 表示形式:      

①十进制小数形式       由正负号、数字0~9和小数点组成。小数点不能省       如:  3.14   0.8    .8    0.0   -36.625     100.00    100.  

②指数形式(或称科学记数法)   由正负号、数字0~9、小数点和字母e或E组成。   表示形式:    me±n 或  mE±n 。   表示m×10^(±n) ,其中m为整型数或实型数,n为整型数,m和n都不能省略,格式中“+”可以省略。

字符常量

定义:用一对单引号括起来的一个字符。         如’a’、’7’、’#’、’$’。

字符常量的值:是该字符的ASCII码。    

‘0’ 的ASCII码48     ‘A’ 的ASCII码为65     ‘a’ 的ASCII码为97      ’\n’的ASCII码为10

C的转义字符:以“\”开头的字符序列。 反斜线后面跟一个字符或一个代码值表示

字符串常量

  • 定义:用双引号(“”)括起来的字符序列,可以是零个、一个或多个字符
  • 字符串长度:字符序列中含有的字符个数
  • 存储:每个字符串尾自动加一个‘\0’作为字符串结束标志
  • 字符串在内存中的存储长度=字符串长度+1。
  • 区分字符常量与字符串常量不同
  • 字符串常量中的字符可以是转义字符,转义字符代表一个字符。

例题:字符串“ab\n\\cd\xe”的长度是?

利用系统提供的strlen函数可以测试字符串的长度。 注意使用前必须用下面文件包含命令:

#include <string.h>
//测试举例:
#include <stdio.h>
#include <string.h>
int main( )
{   
   	printf("length=%d",strlen("ab\n\\cd\xe"));
	return 0;
}

〖运行结果〗:  length=7

例题:字符串“\”EOF\n=-\61\“”的长度是

利用sizeof运算符可以测试字符串在内存中的大小(字节数)。

#include <stdio.h>
#include <string.h>
int main( )
{   
          printf("%d ", sizeof("ab\n\\cd\xe"));
	return 0;
}
sizeof(int);
sizeof(a);  //变量a

〖运行结果〗:   8

标识符

用来标识变量名、函数名、数组名、类型名、文件名等的字符序列

组成: 只能由字母、数字、下划线组成, 第一个字母必须是字母或下划线(但一般不用下划线)

命名原则: 区分大小写 不能与关键字重复 见名知意,尽量不用下划线开头 避免同名(在同一层次定义的标识符不能同名)

符号常量

定义:用标识符代表常量

定义格式:                  

#define   标识符    常量值

习惯上,符号常量用大写字母表示,以便与其他标识符相区别。

变量

变量的值在程序执行过程中是可以改变的

为什么要使用变量?

计算机处理的所有数据都必须在内存中,通过定义变量在内存中分配一定(数据类型)字节数的存储单元用来存放数据。

用途:变量通常用来保存程序运行过程中的数据输入、中间结果和最终结果。

注意:C语言中没有字符串变量,在C中它用字符数组来表示。

变量定义(声明)的一般格式:

变量是通过它的名字来使用的,必须先定义后使用

字符数据和整型数据的关系

字符型数据和整型数据之间可以通用:

①字符常量与其对应的ASCII码通用。例:’A’和65

②带符号字符变量和值在-128~127之间的整型变量通用。

③无符号字符变量和值在0~255之间的整型变量通用。

#include <stdio.h>
int main()
{ int i=65; char ch=’A’;
  printf("i=%d ch=%c\n",i,ch); /*输出:i=65 ch=A*/
  printf("i=%c ch=%d\n",i,ch); /*输出:i=A ch=65*/
  i=’A’;  /*把字符常量赋给整型变量*/
  ch=65;  /*把整型常量赋给字符变量*/
  printf("i=%d ch=%c\n",i,ch); /*输出:i=65 ch=A*/
  printf("i=%c ch=%d\n",i,ch); /*输出:i=A ch=65*/
  return 0;
}

格式控制符: %c按字符形式输出一个字符

一个字符数据既可以以字符形式输出,也可以以整数形式输出。

以字符形式输出时,系统先将存储单元中的ASCII码转换成相应字符,然后再输出;

以整数形式输出时,直接将ASCII码作为整型数输出。

char与int数据间可进行算术运算

本质:对字符型数据的ASCII码进行算术运算

#include <stdio.h>
int main()
{    char   a = ‘D’,b=‘A’,c;
      int  d;     
      c = b+5; 
      d = a- b+‘b’;
      printf(“a=%c,b=%c,c=%c,d=%d\n”,a,b,c,d);
      return 0;
}

输出结果:a=D,b=A,c=F,d=101

指针变量

内存中每个字节有一个编号——地址

编译程序根据数据类型为变量分配存储空间  

变量的地址:变量分配的存储单元的第一个字节的地址。

char  c;    

int  i=10;

float  f=2.2;

指针变量的引用

注意事项:

  • 指针变量一定要先赋值再使用,否则不安全,严重时会造成系统瘫痪。
  • 不能将普通类型数据(0除外)直接赋给指针变量。例如  int *p=100;/*error*/
  • 原因:类型不匹配,不能赋值。             100是整型数据,p是一个指针
  • 可以定义空类型的指针变量,空类型的类型标识符为void。   
  • 例:void  *p;
  • p为空类型的指针变量,仅表示p指向内存的某个地址位置,而它所指向的内存单元的大小没有指定。
  • 若想使用void型的指针变量,必须通过强制类型转换。   例:void  *p;      (int *)p;
  • void  *类型通常用作函数的参数或返回值

运算符和表达式

基本输入和输出函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值