第二章算法——程序的灵魂
算法+数据结构=程序
数据结构
对数据的描述。在程序中要指定用到哪些数据,以及这些数据的类型和数据的组织形式。
算法
对操作的描述。即要求计算机进行操作的步骤。
广义的说,为解决一个问题而采取的方法和步骤,就称为“算法”。
对同一个问题,可以有不同的解题方法和步骤。为了有效地进行解题,不仅需要保证算法的正确,还要考虑算法的质量,选择合适的算法
第三章数据类型及其运算
3.1常量和变量
在计算机高级语言中,数据的两种表现:
A常量 B变量
1、常量:在程序运行过程中,其值不能被改变的量。
1.整型常量…1000,122345,0,-345
2.实型常量…小数形式123.456;指数形式12.34e3,-34.8E-23
3.字符常量…普通字符‘a’,‘Z’,‘3’,’?’,’#’;转义字符‘\n‘,‘\012‘,‘h1B’
4.字符串常量…“123”,“boy”
5.符号常量…#definePI3.1416//注意行末没有分号
转义字符 | 字符值 | 输出结果 |
---|---|---|
\’ | 一个单撤号(’) | 输出单撤号字符’ |
\" | 一个双撤号(") | 输出双撤号字符‘’ |
\? | 一个问号(?) | 输出问号字符? |
\ \ | 一个反斜杠() | 输出反斜线字符\ |
\a | 警告(alert) | 产生声音或视觉信号 |
\b | 退格(backspace) | 将光标当前位置后退一个字符 |
\f | 换页(form feed) | 将光标当前位置移到下一页开头 |
\n | 换行 | 将光标当前位置移到下一行的开头 |
\r | 回车(carriage return) | 将光标当前位置移到本行的开头 |
\t | 水平制表符 | 将光标当前位置移到下一个Tab位置 (相当于空格) |
\v | 垂直制表符 | 将光标当前位置移到下一个垂直制表对齐点 |
\o、\oo或\ooo其中o代表一个八进制数字 | 与该八进制码对应的ASCII字符 | 与该八进制码对应字符 |
\xh[h…]其h代表一个十六进制数字 | 与该十六进制码对应的ASCII字符 | 与该十六进制码对应字符 |
2、变量
变量代表一个有名字的、具有特定属性的一个储存单元。
变量用来存放数据,也就是存放变量的值。
在程序运行期间,变量的值是可以改变的。
变量必须先定义,后使用。(重要)
变量定义的一般形式:类型名 变量名=初值
int a,b,c //定义a,b,c为整型变量
float m=3.5,n=-7.8,p //定义m,n,p为浮点型变量并对m和n指定初值
3、标识符 (重要,考选择题)
标识符就是一个对象的名字。用于标识变量、符号常量、函数、数组、类型等
标识符只能由字母、数字和下划线 3种字符组成,且第一个字符必须为字母或下划线
注意:
· 变量名中区分大小写字母
· 不能使用关键字作为变量名
· 变量的名字应该尽量反应变量在程序中的作用与含义
C语言中的(32个)关键字
union联合数据类型 | break | case | while |
char字符 | continue | default | do |
double双精度 | else | switch | return |
float浮点型 | for | goto | if |
int整型 | long长整型 | extern外部变量(存储类型) | const(其他) |
short短整型 | signed有符号类型 | static静态变量(存储类型) | sizeof(其他) |
struct结构体 | enum枚举类型 | auto自动变量(存储类型) | typedef(其他) |
unsigned无符号型 | void无返回值类型 | register寄存器变量(存储类型) | volatile(其他) |
未标注的为数据类型关键字
黄色标注为控制语句关键字
3.2数据类型
所谓类型,就是对数据分配储存单元的安排,包括储存单元的长度(占了多少字节)以及数据的存储形式。
不同的类型分配不同的长度和存储形式
基本类型int | |||
短整型 short int | |||
整型类型 | 长整型long int | ||
基本类型 | *双长整型 long long int | ||
字符型 char | |||
*布尔型bool | |||
单精度浮点型float | |||
浮点类型 | 双精度浮点型double | ||
复数浮点型float_complex,double_complex,long long_complex | |||
数据类型 | 枚举类型enum | ||
空类型void | |||
指针类型 * | |||
派生类型 | 数组类型[ ] | ||
结构体类型 union | |||
函数类型 |
3.3整型数据
整型常量的形式
1、 十进制整数
如:123,-456,4
2、 八进制整数
以0开头的数是八进制数,如:0123表示八进制数123
3、 十六进制整数
以0x开头的数是十六进制数,如:0x123表示十六进制123
1、整型数据在内存中的存储方式
int i; //定义i为整型变量
i=10; //给i赋以整数10
十进制10的二进制形式是1010,在内存中存放的情况:
0000000000001010
实际上数值是以补码表示的。正整数的补码与原码一样。负整数的补码值是
第一步:将此数绝对值的二进制形式;
第二步:除最高位符号位外其他数取反;
第三步:加1。-10的补码:
原码:1000000000001010
11111111111110101
补码: 1111111111110110
2、整型数据的分类
整型数据类型名称 | 整型数据类型 | 字节数 | 取值范围 |
---|---|---|---|
基本型 | int | 4(基本型根据用的编辑器不同而不同,有的是2) | -2147483648~ 2147483647(-2131~2131-1) |
短整型 | short int/short | 2(字节数x8=16位) | -32768~ 32767(-215~215-1) |
长整型 | long int/long | 4 (32位) | -2147483648~2147483647(-2131 ~ 231-1) |
双长整型 | long long int/long long | 8 (64位) | -9223372036854775807(-263~262-1) |
说明:C标准没有具体规定各种类型数据所占用存储单元的长度,只要求sizeof(short)≤sizeof(int)≤sizeof(long)≤sizeof(long long),具体由各种编译系统自行决定的。
sizeof是测量类型或变量长度的运算符。
3、整型数据的溢出
【例3.1】整型数据的溢出
#include<stdio.h>
int main()
{
short int a,b;
a=32767;
b=a+1;
printf("a=%d,a+1=%d\n",a,b);
return 0;
}
a:0111111111111111→32767
b:1000000000000000→ -32768
一个字节的短整型变量只能容纳-32768~32767的数,无法表示大于32768或小于-32768的数。遇到此情况就发生==“溢出”==,如果将变量b改为int或long型就能得到正确的结果32768。
** 说明** :用计算机实现计算和数学上的纯理论计算是不相同的,计算机的计算是通过工程的方法实现的。
4、无符号整型变量(重要)
在定义int,short int和long int类型变量时,都可以加 修饰符 unsigned,以指定为“无符号整数”。加修饰符signed或缺省,则表示“有符号整数”。
对无符号整数用“%u”格式输出,表示无符号十进制数。对有符号整数一般用“%d”格式输出。
在将一个变量定位为无符号整型后,不应向它赋予一个负值,否则会得到错误的结果。
整型数据类型 | 缺省形式的整型数据类型 | 字节数 | 取值范围 |
---|---|---|---|
[signed] int | int | 4 | -2147483648~ 2147483647(-2131~2131-1) |
unsigned [int] | unsigned | 4 | <