计算机的组成
计算机:俗称“电脑”,命名者希望计算机有一天能够像人一样,能够同人一起交流,所以命名为电脑。
计算机系统:一种能够按照事先存储的程序自动、高效的对数据进行输入、处理、存储和输出的系统。
计算机=软件+硬件,硬件:计算机系统中所有实体部件和设备的统称。
由中央处理器(CPU)、存储器和输入输出设备等核心部件组成。除此之外还有一些输入输出设备,比如输入设备:鼠标、键盘;输出设备:显示屏、打印机等。
在软件的配合下完成输入、处理、存储和输出等基本操作。
人们控制计算机的手段就是编写软件,软件-------计算机的思想和灵魂 | 硬件:计算机的肉体和躯壳。
程序与软件的区别:
- 程序:为了实现特定的目标或解决具体的问题,而使用计算机语言编写的指令的有序集合。
- 程序是否是软件的全部:不是。程序、数据、文档
人与计算机交流使用什么语言?
-
计算机只能识别二进制指令
-
机器语言
- 用及其语言编写的一组机器指令的集合,称为机器代码,简称“机器码”。
- 用一系列的二进制0和1组成的二进制代码代表不同的及其指令。可以说简单的1+1都是天书一般。
因为二进制很难让人们所理解,于是出现了汇编语言,将01用一些语言来进行标记。
汇编语言:低级语言,与计算机硬件的距离的级别较低,对硬件依赖性强--------可移植性较差。
为了更好的与人机交流,于是出现了“高级语言”:有一个更高级别的编程;不依赖于硬件;远离了及其语言;具有可移植性。
如何将高级语言翻译成机器语言?编译型语言:解释型语言:就是将所有的程序执行完毕后再进行解释,java就属于解释型语言。逐字逐句的进行翻译,翻译一条执行一条。
高级语言的特点:既非英语,也不是机器语言,更像英语;高级语言程序必须通过编译器翻译成机器语言形式的目标代码,才能被计算机识别和执行;易学、易用、易懂、强大、可移植。
高级语言的发展历程:1954年约翰·巴克斯发明第一个高级语言FORTRAN,百家争鸣,据统计,不完全统计有2500种。但影响最大,寿命最长的非C语言莫属。在高级语言中,很多都是C语言发展过来的!
高级语言的分类:
过程式语言:典型代表“C语言”,命令驱动,面向动作(语句),即将计算看做是动作(语句)的序列,程序由一系列的语句构成。
函数式语言:典型代表“LISP语言”,注重程序实现的功能,程序的编写过程是从已有函数出发构造出更复杂的函数,应用这些函数直至计算求得最终结果。
面向对象语言:典型代表“SmallTalk,c++,java”,程序的编写过程是直接从问题本身出发分析问题,并把数据和操作封装在一起构成对象,用数据描述对象属性,用对数据的操作描述对象行为。
逻辑式语言:典型代表“PROLOG”,基于规则的具有推理功能的语言。
阿兰·图灵:现代计算机科学之父的英国数学家。在计算机领域有一个奖项称之为图灵奖,相当于诺贝尔奖。
数据类型
数据是如何在计算机里面进行存储的?(冯·诺依曼计算机)
指令和数据同样存储在内存中;都以二进制形式存储在内存中。
对于计算机系统和本身硬件而言,数据类型的概念其实是不存在的。冯·诺依曼体系结构中,程序代码和数据以二进制进行存储。
引入数据类型的主要目的:
- 有效的组织数据,把数据分成所需内存大小不同的数据
- 规范数据的使用
- 提高程序的可读性
- 方便用户的使用
数据类型分类:
基本类型:
- 整型: 基本整型:int、 长整型:long int、 短整型:short int、 无符号整型:unsigned。
- 实型(浮点型): 单精度实型:float、 双精度实型:double、 长双精度实型:long double。
- 字符型:char
- 枚举类型:
构造类型:
- 数组类型
- 结构体类型
- 共用体类型
指针类型:
空类型:
C语言程序中,有哪几种数据形式?
常量: 在程序中不能改变其值的量。
变量: 其值在程序执行过程中是可以改变的。
常量包括哪几种类型:
-
在程序中不能改变其值的量。具体如下:
-
包括:
-
整型: 如:0,67(十进制整型),2,123L(后面有一个L表示长整型),123u(无符号整型),022(前面一个数字0表示八进制),0x12(前面加上数字0和x,表示十六进制数)
- 默认为基本整型int
-
实型: 如:2.3(十进制小数),1.2e-5(表示10的-5次方,指数形式),2.73F(表示的是单精度实型),2.73L(表示的是长双精度实型)
- 默认为双精度实型double
-
字符型: 如:'Z' , '3' , '$',字符两边用单引号引起来;
- 字符串: 如:"uKM","5a","1"。两边用双引号引起来的称为字符串。
-
枚举型:
如何声明变量的类型:
-
变量的值在声明变量的过程中是可以改变的。
-
变量的声明:
-
类型关键字 变量名;
main(){ int a;//基本整型 float b;//单精度实型 char c;//字符型 a = 1; b = 2.5; c = 'A'; }
-
-
使用变量的基本原则:变量必须先声明,后使用。
-
一条声明语句可声明若干个同类型的变量
- int a, b, c; 注:声明的顺序无关紧要!
如何给变量进行赋值:
- 声明变量同时为变量赋值-----------变量的初始化。
a = 1; b = 2.5; c = 'A';
未被初始化的变量的值会是什么?
其值为随机值(乱码)
- 赋值表达式语句:变量 = 表达式;
规则:变量 <------ 表达式 左值和右值类型一致!
//正确的赋值方法
int a;
a = 0;
//错误示范
int a;//左右数据类型不一致
a = 0.75;
- 简单赋值 : 变量 = 表达式; 每个赋值表达式都有一个值。
- 多重赋值:变量1 = 变量2 = 表达式; 相当于 变量1 = (变量2 = 表达式); 注:从右向左赋值
//值没有进行初始化,在这里的值是一个随机的值
int a,b;
float x,y;
//多重赋值语句
a = b = 0; //这里的值是先赋值给b再赋值给a
x = y = 100.0; //这里的值是先赋值给y,再给x
变量有哪些属性
- 变量的值:保存在分配内存的空间里,变量分配多大的内存空间,取决于数据类型。
- 变量名:声明变量的一个特定的字符。
- 变量的地址:起始字节的地址作为变量的地址。
- 变量的数据类型(变量被分配的内存大小)。
变量的类型决定了什么?
- 占用内存空间的大小
- 数据的存储形式
- 合法的取值范围
- 可参与的运算种类
不同类型数据占用的内存大小不同
-
int------基本整型,在大多系统上占4个字节;
-
short int-----短整型,简称short。2个字节;
-
long int------长整型,简称long,4个字节;
-
unsigned-------无符号整型(正整数和0),用来修饰int,short,long;
-
float--------单精度实型,4个字节;
-
double-------双精度实型,8个字节;
-
long double----------长双精度实型,系统相关。在vc++中占8个字节;
-
char---------字符型,1个字节。
不同类型数据的存储形式不同
- Intel CPU上的整型数:分为
| 低位字节 | 高位字节 |
|---|
前者为低位字节,后者为高位字节,如果是摩托罗拉的话就是两者相反
-
实行数:
-
定点数:小数点固定的数,如:12.36987
-
浮点数(小数点可以浮动):小数点可以移动,幂会不相同;如:12.34567*10^0
123456.7*10^-4
1.234567*10^1
-
ANSI C未规定 3种浮点类型的长度,精度和表数范围;
有的系统用位来存储小数部分(尾数)
- 增加了数值有效数字位数,提高了数值精度,但表数范围缩小
有的系统使用更多的位存储指数部分(阶码)
浮点数并非真正意义上的实数,只是在某种范围内的近似
字符型数据以二进制编码方式存储在内存中
- 一个字节保存一个字符(英文字母,数字,控制字符)
- 字符常数就是一个普通整数
字符编码方式取决于计算机系统所使用的字符集。
简单的算数运算和表达式
当变量赋值超出其表数范围的数值时,结果会怎样?
结果会溢出,得到一堆乱码。
数据溢出的危害?
- 编译器对它熟视无睹
- 在平台间移植时会出现问题,导致数据丢失或者溢出;
- 当程序从高位计算机移向低位计算机移植(比如从64位系统移植到32位系统)时,可能会出现溢出。
对策:
- 了解处理问题的规模,选择取值范围更大的变量类型
- 同种类型在不同平台起占字节数不尽相同
- 不要对变量所占的内存空间字节数想当然
- 用sizeof获得变量或者数据类型的长度
整型:加、减、乘、除、求余
实型:加、减、乘、除
字符型:
-
加、减(整数),乘除没有意义
-
对ASCLL码值的运算
如何计算变量占内存空间的大小?
-
用sizeof运算符。
-
C(sizeof)运算符,并非函数
- 计算类型占用的字节数
-
语法形式 运算结果 sizeof(类型) 类型占用的字节数 sizeof(表达式) 表达式值所属类型占用的字节数C程序的开发工具: 开发工具:
Visual c++
- Windows上最流行的C/C++集成开发环境之一
Code::Blocks(简称CB)
-
认识C语言从程序开始(经典案例):
第一个程序范例,打印“hello world!”。
#include <stdio.h>//以#开头,表示编译预处理指令;stdio,这里的io表示的是标准的输入输出,h(haid)表示的是头文件
main()//主函数,标准C都会有一个主函数
{
printf("hello world!\n");//输出语句,最后有一个\n表示的是换行处理
}
考考你:如何吧"hello world!"分别打印在两行?
- 有两种办法。1.在hello后面加上换行符\n;2.输出两条语句,首先输出hello,再输出一条语句world即可!
C程序中常见的符号有哪些
-
关键字:又称保留字;例如:return,int都是关键字(保留字)
-
标识符:
-
系统预定义的标识符。比如函数名,变量名,printf。
-
用户自定义标识符:变量名,函数名,··· ···
1.运算符:
-
算数运算符:+、-、*、/、%(求余)、++(自增)、--(自减)。
-
关系运算符:
== 检查两个操作数的值是否相等,如果相等则条件为真。 != 检查两个操作数的值是否相等,如果不相等则条件为真。 检查左操作数的值是否大于右操作数的值,如果是则条件为真。 < 检查左操作数的值是否小于右操作数的值,如果是则条件为真。 >= 检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。 <= 检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。
-
-
逻辑运算符:
&& 与 称为逻辑与运算符。如果两个操作数都非零,则条件为真。 || 或 称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。 ! 非 称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。 - 位运算符:
位运算符 描述 “按位与”运算符(&) 参加运算的两个数据,按二进制位进行“与”运算。如果两个相应的二进制位都为1,则该位的结果值为1;否则为0。这里的1可以理解为逻辑中的true,0可以理解为逻辑中的false。 “异或”运算符(^) 若参加运算的两个二进制位值相同则为0,否则为1。 “取反”运算符(~) 这是一元运算符,用于求整数的二进制反码,即分别将操作数各二进制位上的1变为0,0变为1。 左移运算符(<<) 左移运算符是用来将一个数的各二进制位左移若干位,移动的位数由右操作数指定(右操作数必须是非负值),其右边空出的位用0填补,高位左移溢出则舍弃该高位。 右移运算符(>>) 右移运算符是用来将一个数的各二进制位右移若干位,移动的位数由右操作数指定(右操作数必须是非负值),移到右端的低位被舍弃,对于无符号数,高位补0。对于有符号数,某些机器将对左边空出的部分用符号位填补(即“算术移位”),而另一些机器则对左边空出的部分用0填补(即“逻辑移位”)。注意:对无符号数,右移时左边高位移入0;对于有符号的值,如果原来符号位为0(该数为正),则左边也是移入0。如果符号位原来为1(即负数),则左边移入0还是1,要取决于所用的计算机系统。有的系统移入0,有的系统移入1。移入0的称为“逻辑移位”,即简单移位;移入1的称为“算术移位”。 - 赋值运算符:
= 简单的赋值运算符,把右边操作数的值赋给左边操作数 C = A + B 将把 A + B 的值赋给 C += 加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数 C += A 相当于 C = C + A -= 减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数 C -= A 相当于 C = C - A *= 乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数 C *= A 相当于 C = C * A /= 除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数 C /= A 相当于 C = C / A %= 求模且赋值运算符,求两个操作数的模赋值给左边操作数 C %= A 相当于 C = C % A <<= 左移且赋值运算符 C <<= 2 等同于 C = C << 2 >>= 右移且赋值运算符 C >>= 2 等同于 C = C >> 2 &= 按位与且赋值运算符 C &= 2 等同于 C = C & 2 ^= 按位异或且赋值运算符 C ^= 2 等同于 C = C ^ 2 |= 按位或且赋值运算符 C |= 2 等同于 C = C | 2 - 杂项运算符----sizeof & 三元:
sizeof() 返回变量的大小。 sizeof(a) 将返回 4,其中 a 是整数。 & 返回变量的地址。 &a; 将给出变量的实际地址。 * 指向一个变量。 *a; 将指向一个变量。 ? : 条件表达式 如果条件为真 ? 则值为 X : 否则值为 Y -
C中运算符的优先级:
| 类别 | 运算符 | 结合性 |
|---|---|---|
| 后缀 | () [] -> . ++ - - | 从左到右 |
| 一元 | + - ! ~ ++ - - (type)* & sizeof | 从右到左 |
| 乘除 | * / % | 从左到右 |
| 加减 | + - | 从左到右 |
| 移位 | << >> | 从左到右 |
| 关系 | < <= > >= | 从左到右 |
| 相等 | == != | 从左到右 |
| 位与 AND | & | 从左到右 |
| 位异或 XOR | 从左到右 | |
| 位或 OR | | | 从左到右 |
| 逻辑与 AND | && | 从左到右 |
| 逻辑或 OR | || | 从左到右 |
| 条件 | ?: | 从右到左 |
| 赋值 | = += -= *= /= %=>>= <<= &= ^= |= | 从右到左 |
| 逗号 | , | 从左到右 |
2.空格符:
- 空格、回车/换行、逗号等
3.其他符号:
- {和}标识函数体或语句块
- /* 和 */或//是程序注释的定界符
4.常量 常量值又称为字面常量,它是通过数据直接表示的,因此有很多种数据类型,像整型和字符串型等。