C语言程序设计
序言
为了应对即将到来的考试,突发感慨,仅用于个人笔记和知识点的记录。
C语言程序设计,这一份就够了!
我会尽可能的详细:)
使用的教材是C程序设计(第四版)[谭浩强 著]
使用其他教材的可以参考,应该会有所出入,但是不大。
祝大家可以顺利通过考试!
第一章 程序设计和C语言
1.1计算机程序的概念
是一组计算机能识别和执行的指令集。每一条指令可以让计算机执行特定的操作。
计算机会自动执行各条指令,有条不紊的进行工作。
1.2计算机语言
计算机和人都能识别的语言。
计算机语言的发展阶段:机器语言、符号语言、高级语言
机器语言
计算机能直接识别和接受的二进制代码称为机器指令。
机器指令的集合就是计算机的机器语言
例如:1011011000000000
【计算机工作是基于二进制,计算机只能识别和接受由0和1组成的指令。】
机器语言的特点:与人的习惯语言差距大,难写难记难检查难修改难推广。
符号语言(低级语言)
计算机不能直接识别和执行符号语言的指令,需要用一种汇编程序的软件把符号语言的指令转换成机器指令。
ADD代表+ 例:ADD A,B
即:A+B
符号语言的特点:通用性差
高级语言
计算机不能直接识别,需要一个称为编译器的软件将高级语言编写的程序(源程序)转换为机器指令的程序(目标程序),然后让计算机执行机器指令程序。
第一个高级语言是FROTRAN。
高级语言的发展阶段:
- 非机构化的语言:BASIC、FORTRAN、ALOGOL
- 结构化语言:QBASIC、C
- 面向对象的语言:C++、C#、JAVA、Python
1.3简单的C语言程序举例
#include <stdio.h> //这是编译预处理指令
void main() //定义主函数,程序总是从main函数开始执行
{ //函数开始标志
printf("hello world\n"); //输出所指定的一行信息,分号是一个代码结束标志
}
注释:用来对代码进行解释说明。
在程序进行编译时,会将注释替换为空格。
- //:单行注释
- /* 内容 */:块式注释(内容可以包含多行,也可以一行)
1.4运行程序的步骤与方法
- 上机输入和编辑源程序,生成一个.c后缀的文件
- 对源程序进行编译,编译时会检查代码有无语法错误,无错误时,会把源程序转换为二进制目标程序。生成一个.obj文件
- 进行连接处理。把所有发的编译后得到的目标模块连接起来装配起来,再与函数库相连接成一个整体,打包成一个整体文件.exe,也称为可执行文件。
1.5程序设计的任务
- 问题分析
- 设计算法
- 编写程序
- 对源程序进行编辑、编译和连接
- 运行程序,分析结果
- 编写程序文档
第二章 三种基本结构
2.1顺序程序设计
2.1.1数据形式
常量和变量
数据的两种表现形式:常量和变量
常量
定义:在程序运行过程中,值不能被改变的量称为常量。
- 整型常量:例:123,-12,0
- 实型常量:
- 十进制小数形式:3.1415;0.123;0.0;8.0
- 指数形式:例:12.34e3(12.34103);0.13E-7(0.1310-7)
- 注:e或E之前必须有数字,且e或E后面必须为整数,例:e4;3e2.5
- 字符常量:
- 普通字符:用单引号括起来的一个字符 例:‘a’ ‘A’ ‘1’
- 转义字符:以字符\开头的字符序列
注:字符常量储存在计算机储存单元中,并不是存储字符,而是以其代码存储
ASCII码
- 字符串常量:用双引号把若干个字符括起来,例:“apple” “3.14”
注:单引号内只能包含一个字符,双引号内可恶意包含一个字符串 - 符号常量:用一个符号代表一个常量 例: # define PI 3.1415926
优点【①含义清楚 ②一改全改】
变量
定义:变量代表一个有名字、具有特定属性的一个存储单元。用来存放数据,也就是存放变量的值。
在程序运行期间,变量的值是可以被改变的。
注:变量必须先定义,后使用。
常变量
const |
---|
定义:不允许改变变量对应的值
标识符
定义:变量名、符号变量名、函数名、数组名、类型名等的统称。
命名规则:
- 只能由字母、数字、下划线3种字符组合
- 且第一个字符必须为字母或下划线
注:大小写字母是两个不同的字符。
2.1.2数据类型
由于计算机存储空间是有限的,不能无限存储数据。C语言要求在定义所有的变量时都要指定变量的类型。
基本类型【前面以基本类型为主】
整型类型
基本整型(int)
编译系统分配给int型数据2个字节或4个字节。
值范围是-2147483648~2147483647
短整型(short int或short)
分配2个字节,值范围是-32768~32767
基本整型(long int或long)
分配4个字节,值范围是-2147483648~2147483647
双长整型(long long int或long long)
分配8个字节,值范围是-9223372036854775808~9223372036854775807
整数变量的无符号属性(unsigned)
有些数据只有正数值(如学号、数量等),为了充分利用整型数据值的范围,可以将变量定义为”无符号“类型。
字符型(char)
由于字符是按其代码(整数)形式存储的。因此字符型数据作为整数类型的一种。
占1个字节,对应ASCII码范围是:0~127
浮点类型
数据是以指数形式存放在存储单元中。
float型(单精度浮点型)
分配4个字节,6位有效数字,数值范围:-3.4✖10-38~3.4✖1038
double型(双精度浮点型)
分配8个字节,15位有效数字,数值范围:-1.7✖10-308~1.7✖10308
long double型(长双精度浮点型)
分配8个字节,15位有效数字,数值范围:-1.7✖10-308~1.7✖10308
枚举类型(enum)
空类型(void)
派生类型
指针类型(*)
数组类型([])
结构体类型(struct)
共用体类型(union)
函数类型
2.1.3 运算符和表达式
求余运算符
自增(++)、自减(➖➖)运算符
自增自减运算符的作用是使变量的值+1或-1
例:
算术表达式和运算符的优先级和结合性
不同类型数据间的混合运算
- +、-、*、/运算的两个数中有一个数为浮点型,将数值转换为double型,结果为double型。
- 字符char型数据与整型数据进行运算,是把字符的ASCII码与整型数据进行运算。如果与浮点数进行运算,将对应字符的ASCII码转换为double型数据,再进行计算。
强制类型转换运算符
利用强制类型转换运算符将一个表达式转换成所需类型。
例如:
- (double)b——将b的值强制转换为double型
- (int)(a+b)——将a+b的结果强制转换为int型
- (float)(5%3)——将5%3的结果强制转换为float型
2.1.4赋值语句
赋值运算符(=)
将一个数据赋给一个变量
复合赋值运算符(如+=)
在=之前加上其他运算符,可以构成复合的运算符。如a += 3 等价于a = a + 3
赋值表达式
赋值运算符按照“自右而左”的结合顺序。如a = (b = 5)等效于b = 5,a = b
赋值过程中的类型转换
- 如果赋值运算符两侧的类型一致,则直接进行赋值。
- 如果赋值运算符两侧的类型不一致,则在赋值时需要进行类型转换;转换规则如下:
- 浮点数赋值给整型变量时,先对浮点数取整(舍弃小数部分),再赋值给变量。
- 整型数据赋值给浮点数时,数值不变,但以浮点数形式存储到变量中。
- 将一个double型数据赋给float变量时,先将双精度数转换为单精度,再进行存储。
- 字符型数据赋给整型变量时,将字符的ASCII码赋给整型变量。
- 将一个占字节多的整型数据赋给一个占字节少的整型变量或字符变量时,只将低字节原封不动的送到被赋值的变量(发生截断)
变量赋初值
例如:int a = 1,b = 2,c = 3
2.1.5 数据的输入输出
从计算机向输出设备(显示器、打印机等)输出数据称为输出
从输入设备(键盘、鼠标、扫描仪等)向计算机输入数据称为输入
printf函数输出数据
printf函数格式:
格式字符:
其他格式字符:
scanf 函数输入数据
scanf 函数格式:
格式字符:
注意事项:
- scanf函数中的格式控制后面应当是变量地址,而不是变量名
- 如果在格式控制字符串中除了格式声明以外还有其他字符,则在输入数据时在对应的位置上应输入与这些字符相同的字符
- 在用%c格式声明输入字符时,空格字符和转义字符中的字符都作为有效字符输入
- 在输入数值数据时,如果输入空格、回车、Tab键或遇到非法字符(不属于数字的字符),认为该数据结束。
字符输入输出函数
putchar 函数(输出一个字符)
putchar函数的一般形式:
getchar 函数(输入一个字符)
getchar函数的一般形式: