C语言基础(一)
注:基于谭浩强《C语言程序设计》
一、C语言概述
1.1 C语言特点
(1)语言简洁,紧凑,使用灵活:32个关键字,9种控制语句,程序形式自由。
(2)运算符和数据类型丰富:34种运算符,具有现代语言的各种数据结构。
(3)程序设计结构化,模块化。
(4)生成目标代码质量高。
(5)可移植性好.
1.2 C程序的结构和执行步骤
1.2.1 结构示例
#include <stdio.h> /*文件包含*/
void main() /*主函数*/
{ /*函数体开始*/
printf ( "hello world!\n" ) ; /*输出语句*/
} /*函数体结束*/
格式特点:
(1)习惯用小写字母
(2)大小写敏感
(3)不使用行号,无程序行概念
(4)可使用空行或空格
(5)常用锯齿形书写格式
1.2.2 执行步骤
(1)编辑:程序代码的录入,生成源程序*.c
(2)编译:语法分析查错,翻译生成目标程序*.obj
(3)链接:与其他目标程序或库链接装配,生成可执行程序*.exe
(4)执行
1.3 算法的特征和表示
1.3.1 程序的组成
对数据的描述: 数据结构(data structure)
对操作的描述: 算法 (algorithm)
程序=数据结构+算法
完整的程序设计应该是:数据结构+算法+程序设计方法+语言工具
1.3.2 算法的概念
广义的说,为解决一个问题而采取的方法和步骤,就称为“算法”。
对同一个问题,可有不同的解题方法和步骤。要求:正确(结果对),质量(步骤少),简单(易理解)。
1.3.3 算法的特征
(1)有穷性:包含有限的操作步骤。
(2)确定性:算法中的每一个步骤都应当是确定的。
(3)有零个或多个输入:输入是指在执行算法时需要从外界获得的必要的信息。
(4)有一个或多个输出:算法的目的是为了求解,“解”就是输出。
(5)有效性:算法中的每一个步骤都应当能有效地执行,并得到确定的结果。
1.3.4 算法的表示
可以用不同的方法表示算法,常用的有:自然语言,传统流程图,结构化流程图,N-S流程图,伪代码,PAD图等。
二、数据类型,运算符与表达式
2.1 C语言的数据类型
在C语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用 的空间,以及如何解释存储的位模式。
C中的类型可分为以下几种:
(1)基本类型:
它们算是算术类型,包括整数类型和浮点类型。
(2)枚举类型:
也算是算术类型,被用来定义在程序中只能赋予其一定的离散整数值的变量 。
(3)void类型:
类型说明符void表示没有可用的值。
(4)派生类型:
包括:指针类型,数组类型,结构类型,共用体类型和函数类型。
数组类型和结构类型统称为聚合类型。函数的类型指的是函数返回值类型。
ps 类型区分方法不唯一
2.2 常量和变量
常量:在程序的运行过程中,值不能改变
直接常量:整形常量,实型常量(浮点型),字符型常量
符号常量:例如 :#define PRICE 30
变量: 变量表示内存中的一个存储区域(不同的数据类型,占用的空间大小不一样)
int num; /*变量要先声明,后使用*/
num = 30;
标识符:
(1)关键字
(2)预定义标识符
(3)用户自定义标识符:英文字母,数字,下划线组成。开头字符一定是字母或下划线。
2.3 基本数据类型
2.3.1 整数数据
整数常量的表示方法:十进制整数,十六进制整数,八进制整数
整型变量:int i=10;
内存中存储为:0000000000001010
整形变量分类
类型说明符 | 数的范围 | 字节数 | |
---|---|---|---|
基本型 | int | -32768~32768 即 -2^15 ~( 2^15-1) | 2 |
无符号基本型 | unsigned int | 0~65535 即 0~(2^16-1) | 2 |
短整形 | short int | -32768~32768 | 2 |
无符号短整型 | unsigned short int | 0~65535 | 2 |
长整形 | long int | -2147483648 ~ 2147483647即-2^31 ~ (2^31-1) | 4 |
无符号长整形 | unsigned long | 0~4294967395 即 0~(2^32-1) | 4 |
字符型 | char | -128~127 或 0~255 | 1 |
2.3.2 实数数据
实数常量的表示方法:十进制数形式,指数形式
实型变量:3.14159在内存中存放形式
+ | .314159 | 1 |
---|---|---|
数符 | 小数部分 | 指数 |
实型变量的分类:
类型说明符 | 比特数(字节数) | 有效数字 | 数的范围 | |
---|---|---|---|---|
单精度 | float | 32(4) | 6~7 | 10^-37 ~ 10^38 |
双精度 | double | 64(8) | 15~16 | 10^-307 ~ 10^308 |
长双精度 | long double | 128(16) | 18~19 | 10^-4931 ~ 10^4932 |
2.3.3 字符型数据
转义字符及其含义
转义字符 | 转义字符的含义 | ASCII码 |
---|---|---|
\n | 回车换行 | 10 |
\t | 换行跳到下一制表位置 | 9 |
\b | 退格 | 8 |
\r | 回车 | 13 |
\f | 走纸换页 | 12 |
\\ | 反斜线符“\” | 92 |
\’ | 单引号符 | 39 |
\“ | 双引号符 | 34 |
\a | 鸣铃 | 7 |
字符数据在内存中的存储及使用方法:
例如: “x”的ASCII码为120
a=‘x’ ;在内存中存储为:01111000
字符常量与字符串常量比较:
形式 | 字符数 | 内存空间 | |
---|---|---|---|
字符常量 | ’ x ’ | 单个 | 一个字节 |
字符串常量 | “ hello ” | 一个或多个 | 字符串中字节数加1 |
字符串被存储在char类型的数组中,数组末尾为\0,这是空字符,C语言用它标记字符串的结束。
2.4 基本数据类型间的混合运算
2.4.1 自动转换
1)若参与运算的值的类型不同,先转换成同一类型,然后再运算。
2)转换按数据长度增加的方向进行,以保障精度不降低。
3)所有浮点运算都是以双精度进行的。
4)char型和short型参与运算时,必须先转换成int型。
5)在赋值运算中,赋值号两边的数据类型不同时,赋值号右边的值的类型转换为左边值的类型。
规则:
(1)实型赋予整形,舍去小数部分。
(2)整型赋予实型,数值不变,但将以浮点形式存放,即增加小数部分(小数部分的值为0)。
(3)字符型赋予整型,由于字符型为一个字节,而整型为两个字节,故将字符符ASCII码值放到整型量的低八位中,高八位为0。整型赋予字符型,只把低八位赋予字符型。
2.4.2 强制类型转换
一般形式: (类型说明符)(表达式)
如: (float)a 把a转换为浮点型
2.5 运算符
2.5.1C运算符:
算术运算符 | + - * / % |
关系运算符 | > < == >= <= != |
逻辑运算符 | ! && 丨丨 |
位运算符 | << >> ~ 丨 ^ & |
赋值运算符 | = |
条件运算符 | ? : |
逗号运算符 | , |
指针运算符 | * & |
求字节数运算符 | sizeof |
强制类型转换运算符 | (类型) |
下标运算符 | [ ] |
++i | i自增1后再参与其它运算 |
–i | i自减1后再参与其它运算 |
i++ | i参与运算后,i的值再自增1 |
i– | i参与运算后,i的值再自减1 |
2.5.2 运算符的优先级及结合性
优先级 | 运算符 | 含义 | 要求运算对象的个数 | 结合方向 |
---|---|---|---|---|
++ | 自增运算符 | 1(单目运算符) | 自右至左 | |
2 | - | 自减运算符 | 1 | 自右至左 |
(类型) | 类型转换运算符 | 1 | 自右至左 | |
3 | * | 乘法运算符 | 2(双目运算符) | 自左至右 |
3 | / | 除法运算符 | 2 | 自左至右 |
3 | % | 求余运算符 | 2 | 自左至右 |
4 | + | 加法运算符 | 2 | 自左至右 |
4 | - | 减法运算符 | 2 | 自左至右 |
2.6 表达式
算术表达式:用算术运算符和括号将运算对象(操作数)连接起来的,符合C语言语法规则的式子。
赋值表达式:<变量> <赋值运算符><表达式>