C语言是一种计算机程序设计语言。它既有高级语言的特点,又具有汇编语言的特点。它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。因此,它的应用范围广泛。
C语言对操作系统和系统使用程序以及需要对硬件进行操作的场合,用C语言明显优于其它解释型高级语言,有一些大型应用软件也是用C语言编写的。
C语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画。它是数值计算的高级语言。
一.c语言的发展史和编程基础
1.发展史
C语言是一门优秀的程序设计语言 C语言是在1973年由美国贝尔实验室开发的。 1983年, ANSI( American National Standard Institute)为C语言制定了新的标准, 称为ANSIC, 并于1989年最终完成。 目前使用较多的版本有ANSI C, Borland C, Turbo C, Microsoft C/C++ , Visual C++等。
2.编程基础
2.1理解什么是编程基础
编程语言(Programming Language):计算机解决问题所需的一系列指令的集合。编程语言有很多种,常用的有C语言、C++、Java、C#、Python、PHP、JavaScript、Go语言等,每种语言都有自己擅长的方面。
C语言(C Language)是编程语言的一种,学习C语言,主要是学习它的格式和词汇。
compiler:编译器
compile:编译
object :目标,对象。
error : 错误。
undeclared : 未声明
identifier : 标识符,用来表示函数,变量名字的。
debug:调试版。
release:发布版。
executable:可执行的。
standart input/output 标准输入输出
decimal 十进制
binary 而精致
hexadecimal 十六进制
byte 字节,8个bit为1字节
bit 比特
address :地址
i nteger 整型
character 字符
compiler
源代码(.c,.cpp)----------------------------------->目标代码(.obj)
源代码(.c,.cpp)----------------------------------->目标代码(.obj) 连接 link
. --------->(.exe文件)
源代码(.c,.cpp)----------------------------------->目标代码(.obj)
源代码(.c,.cpp)----------------------------------->目标代码(.obj)
下面是一个C语言的完整例子
#include <stdio.h> //预编译头 //包含stdio.h这个文件,相当于把这个文件中的内容,所有代码放到这个位置。
c语言先声明后使用的语言。
int main() //函数头 //main()程序入口,程序就从这个位置开始运行,void:空,无返回值的函数。
{ //{}函数体 一个函数由函数头和函数体组成
printf(“欢迎来到蚂蚁软件!"); //函数调用 注意函数日调用格式 , “ ” 表示字符串
return 0;
}
// 单行注释
/*..........*/ 多行注释
关于生成的文件:.cpp 源代码文件
.dsp 项目文件
.dsw工作区文件 记录哪些项目属于这个工区。总结:一个工作区包含多个项目文件,一个项目可以包含多个文件,
.exe 可执行文件。程序给谁用的最终成果。
这些具有特定含义的词汇、语句,按照特定的格式组织在一起,就构成了源代码(Source Code),也称源码或代码(Code)。
C语言肯定规定了源代码中每个词汇、语句的含义,也规定了它们该如何组织在一起,这就是语法(Syntax)。
编写源代码的过程就叫做编程(Program)。
2.1c语言的特点
C语言是结构化程序设计语言(structured language 结构化语言 )
结构化语言,到底有哪些结构?
1.顺序结构
2.循环结构
3.选择(分支)结构询问年龄,
例如:实现计算机大于35岁输出:你好成熟,小于35输出:你好年轻
#include <stdio.h>
void main()
{
重点 int age=0;// 定义一个变量。有四件事发生
第一件:比照类型分配对应大小的空间。
第二件:空间命名为age。
第三件:赋初值为0。
第四件:一定有个首地址,记为:&age
while(1) //循环结构 对于(1)条件,条件成立旧执行循环体。c语言中1代表为正,0代表为假。
{
printf("您今年多大了?");
scanf("%d",&age);//调用了scanf这个函数,这个函数要求第一个参数需要用字符串的方式
//给定读取的格式,%d:d是decimal 十进制读取。如果这里写“%o”那就是
//按八进制读取了。第二个参数表示读取后,数据放到哪里。
//&为取地址符号。
if(age > 35) //分支结构的头,如果age > 35 成立,则执行大括号包含的体部分。
{
printf("您好成熟啊");
}
else
{
printf("您好年轻啊");
}
}
}
}
功能强大,具有丰富的数据类型及运算符。
简洁紧凑,使用方便灵活。
C语言具有自我扩充能力
C语言具有汇编语言的功能
可移植性好
3 进制详解 二进制、八进制、十六进制
3.1十进制到任意进制
78(十进制) → 10011110(二进制)
78/2=39.......0
39/2=19.......1
19/2=9.......1
9/2=4.......1
4/2=2.......0
2/2=1.......0
1/2=0.......1
156(十进制) → 234(八进制)
156/8=19.......4
19/8=2.......3
2/8=0.......2
742(十进制) → 2E6(十六进制)
742/16=46.......6
46/16=2.......14=E
2/16=0.......2
3.2 任意进制到十进制
1001110(二进制) → 78(十进制)
=1*2^6+0+0+1*2^3+1*2^2+1*2^1+0=78
234(八进制) → 156(十进制)
=2*8^2+3*8^1+4*8^0=156
2E6(十六进制) → 742(十进制)
=2*16^2+14*16^1+6*16^0=72
3,3 二进制到八进制,十六进制
10 011 001 (二进制) = 231 (八进制) 每三位转换为一个八进制数
1111 0011 1011(二进制)= E38(十六进制) 每四位转换为一个十六进制数
2.3数据在内存中的存储
2.3.1数据在内存中的存储
计算机要处理的信息是多种多样的,如数字、文字、符号、图形、音频、视频等,这些信息在人们的眼里是不同的。但对于计算机来说,它们在内存中都是一样的,都是以二进制的形式来表示。
要想学习编程,就必须了解二进制,它是计算机处理数据的基础。
内存条是一个非常精密的部件,包含了上亿个电子元器件,它们很小,达到了纳米级别。这些元器件,实际上就是电路;电路的电压会变化,要么是 0V,要么是 5V,只有这两种电压。5V 是通电,用1来表示,0V 是断电,用0来表示。所以,一个元器件有2种状态,0 或者 1 我们通过电路来控制这些元器件的通断电,会得到很多0、1的组合。例如,8个元器件有 2^8=256 种不同的组合,16个元器件有 2^16=65536 种不同的组合。虽然一个元器件只能表示2个数值,但是多个结合起来就可以表示很多数值了。
1个元器件称为1比特(Bit)或1位,8个元器件称为1字节(Byte) 那么16个元器件就是2Byte,32个就是4Byte,
以此类推:8×1024个元器件就是1024Byte,简写为1KB;
8×1024×1024个元器件就是1024KB,简写为1MB;
8×1024×1024×1024个元器件就是1024MB,简写为1GB。
2.3.2 载入数据
对于读写速度,内存 > 固态硬盘 > 机械硬盘
不管是运行QQ还是编辑Word文档,都是先将硬盘上的数据复制到内存,才能让CPU来处理,这个过程就叫作载入内存(Load into Memory)。
完成这个过程需要一个特殊的程序(软件,如:爱奇艺播放器),这个程序就叫做加载器(Loader)
总结:CPU直接与内存打交道, CPU直接从内存中读取数据,处理完成后将结果再写入内存。
2.3.3 ASCII编码(美国信息交换标准代码)
计算机是以二进制的形式来存储数据的,它只认识 0 和 1 两个数字,我们在屏幕上看到的文字,在存储之前都被转换成了二进制(0和1序列),在显示时也要根据二进制找到对应的字符。 特定的文字必然对应着固定的二进制,否则在转换时将发生混乱。
字符集为每个字符分配一个唯一的编号,类似于学生的学号,通过编号就能够找到对应的字符。一种专门针对英文的字符集——ASCII编码。(American Standard Code for Information Interchange)
总计128个字符:32个控制字符 + 96个打印字符;对应的十进制数是:0—127。
常用并需记忆的字符及其对应的十进制数:
5个控制字符:a(7)---响铃;(8)---退格; (9)---横向制表; (10)---换行;v(11)---纵向制表。
10个数字字符:’0’(48) —— ‘9’(57)。
26个大写英文字母:’A’(65) —— ‘Z’(90)。
26个小写英文字母:’a’(97) —— ‘z’(122)。
程序设计的基本方法
1.面向过程的程序设计
基本思想: 把一个需要求解的复杂问题分为若干个模块来处理,每个模块处理一个子问题;设计时遵循自顶向下、逐步细化、模块化设计和结构化编码的原则。
例如:把大象关进冰箱
- 打开冰箱 2.把大象装进去 3.关上冰箱
优点:编程简单、结构性强、可读性好; 遵循这种结构的程序只有一个入口和一个出口。
缺点:存在数据与程序模块的分离和程序的可重用性差等问题。
总结:将一个复杂的问题 分解成 若干个步骤 按照步骤 去一步一步执行 每一步(一个函数)
2.面向对象的程序设计
3.程序设计的基本方法
程序:一系列指令的集合 不同的语言有不同规则的指令 c语言的规则
重要性: 正确 可读 可维护 可移植 高效
程序=数据结构+算法+程序设计方法+语言工具
数据结构是数据的类型和数据的组织形式。
算法是为解决一个问题而采用的方法和有限的步骤。
程序设计方法
确定语言和编程环境
3.1数据结构
数据的存放方式以及他们之间的关系
int a = 0;
关键字 int 代表这是一个可以存储整数的空间
- 根据数据类型(关键字int)分配 四个字节大小的空间 用来存储数据
- 给空间命名为a a为变量名 称变量a的类型是整型
- 给空间内赋初值为0 32个元器件 代表控制计算机将32个元器件全部断电 32个0
- 必定有地址为 &a &(取值运算符) &a 代表a这个内存块再内存中的位置、
3.1.1基本类型
C语言中基本数据类型分为三类:整数型(整型)、实数型(浮点型)和字符型,也可分为数值类型和字符类型 数值类型分整数型和实数型。
整数型分三类:整型int、短整型short、长整型long。 占用内存大小:short占2byte,int占4byte,long占4byte
浮点型分单精度型float、双精度型double。 占用内存大小:short占2byte,int占4byte,long占4byte,
字符型:char。 占用内存大小:char占1byte(不同的平台可能占用内存大小不一样,具体的可以用sizeof测试下)。
3.1.2结构化程序设计
C语言是结构化程序设计语言, 有三种基本结构。 顺序结构,选择结构,循环结构。
顺序结构:按顺序执行
选择结构:根据条件的真或假选择执行不同的操作内容。当条件成立执行语句A,否则执行语句B。
If()
{
;
}
单分支选择结构 if 为真 则执行对应的语句 if为假则不执行 可选可不选
双分支选择结构 只会执行一种可能 二选一
多分支 :判断多种情况的时候 多选一 else 代表的是其余的可能性
循环结构 重复执行
循环变量赋初值 循环结束条件 更改循环变量
for (循环变量赋初值 循环结束条件 更改循环变量)
{
;
}
3.2 算法
解决某一问题所采取的方法和步骤
3.2.1算法的特性
有穷性 一个算法的操作步骤应当是有限的;
确定性 算法中的每一个步骤应当有确定的意义,不能 有二义性;
有效性 算法中的每一个步骤应当正确、可行, 并且能 有效地执行;
有零个或多个输入 执行算法时需要从外界获取的信息;
有一个或多个输出 执行算法后应当得到正确的结果。
3.2.3算法的表示方法
常用的算法描述方法有: 自然语言描述、伪代码、流程图、N-S图、PAD图等。
3.24如何衡量一个算法的优劣:
1,时间复杂度(算法复杂度):运算次数
2,空间复杂度:占用空间的大小。
常见的表示方法:
O(1) :算法的时间复杂度或者是空间复杂度,不随着数据量的大小而发生改变,是一个常数值。
例如求1到n的和,如果用公式(1+n)* (n/2),那么这种算法的运算次数就不随着n这个数量的改变而发生变化,而是一个常量值(为1).
O(n): 算法的时间复杂度或者是空间复杂度,随着数据量的大小而发生线性变化
例如求1到n的和,可以1循环加到n,n如果100,就要循环计算100次数,n如果是1000,那就 要循环计算1000次,循环次数(计算次数)随着n这个
量的变化而线性变化。
O(n的多少次)(这里是表示意思,实际不这么写,多少次方应该上角标): 算法的时间复杂度或者 是空间复杂度,随着数据量的大小而发生指数变化
如果n为2,计算4次,n为3 计算9次,n为4 计算16次,n为5,计算25次,则计为o(n2)
例如 两层循环的嵌套,就是o(n2)
4 C语言程序基本结构
一个C程序由一个或多个函数组成, 其中必须有一个主函数main( )。程序执行时总是从主函数开始,main( )可以置于程序的任何位置。
程序中需有预处理命令(如 #include <stdio.h> ),预处理命令通常放在程序的最前面。
分号是C语句结束的标志, 每个语句和数据定义后必须有一个分号。预处理命令、函数头和花括号“}”之后不能加分号。
C程序书写灵活,一行可以写几个语句, 一个语句可以写在多个程序行上。
C语言本身没有输入输出语句, 输入输出的操作是由库函数 scanf( ) 和printf( ) 等函数完成的。
C程序严格区分大小写。一般变量、语句等用小写字母书写;符号常量等用大写字母书写。
标识符、保留字之间必须至少加一个空格以示分隔。
例如:求一个长方体的表面积和体积
#include<stdio.h> //预编译头
void main() //定义主函数
{
i nt a = 0; //定义声明变量 初始化一个变量
int b = 0;
int c = 0;
int s = 0;
int v = 0;
scanf("%d%d%d",&a,&b,&c);
s = 2*(a*b+b*c+a*c);
v=a*b*c;
printf("表面积为%d 体积为%d ",s,v);
}
4.2 C语言的字符集、关键字和标识符
字符集: C语言允许使用字符的集合
字符集的组成: 26个小写字母 abcdefghi ...... z
26个大写字母 ABCDEFG ......Z
10个数字 0~9
其他符号 + - * / = , . _ : ; ? ” ’ ~ | & ^ ! %# ( ) [ ] { } < >
空格(SPACE)
制表符(Tab)
关键字: C语言中预定的具有特定含义的词, 也称 保留字。共有32个。
分四类: 类型说明: int , long,float,…。
语句定义: if…else, while, for …。
存储类: auto,static,…。
长度运算符: sizeof
标识符: 用来标识变量、符号常量、数组、函数的名字。
标识符的命名规则:(7点)重点! *****
(1)只能由字母、数字、下划线构成;
(2)不能以数字开头;(以数字开头的变量名与C支持的常量表示法有重合的部分,编译时会产生二义性)
(3)有效长度是1—255个字符;
(4)严格区分大小写;
(5)不能和关键字、库函数名、用户自定义函数名重名;
(6)尽量避免使用下划线开头命名;(因’.h’头文件中经常使用以下划线开头命名的内部变量名)
(7).要见名知意
分隔符 分隔符主要有逗号和空格两种。 逗号用于分隔变量或参数, 空格用于分隔单词(在关键字和标识符之间必须用空格分隔)。
如何衡量一个算法的优劣:
1,时间复杂度(算法复杂度):运算次数 2,空间复杂度:占用空间的大小。常见的表示方法: O(1) :算法的时间复杂度或者是空间复杂度,不随着数据量的大小而发生改变,是一个常数值。 例如求1到n的和,如果用公式(1+n)* (n/2),那么这种算法的运算次数就不随着n这个数 据量的改变而发生变化,而是一个常量值(为1). O(n): 算法的时间复杂度或者是空间复杂度,随着数据量的大小而发生线性变化 例如求1到n的和,可以1循环加到n,n如果100,就要循环计算100次数,n如果是1000,那就 要循环计算1000次,循环次数(计算次数)随着n这个量的变化而线性变化。 O(n的多少次)(这里是表示意思,实际不这么写,多少次方应该上角标): 算法的时间复杂度或者 是空间复杂度,随着数据量的大小而发生指数变化 如果n为2,计算4次,n为3 计算9次,n为4 计算16次,n为5,计算25次,则计为o(n2) 例如 两层循环的嵌套,就是o(n2)