4.34k likes | 4.44k Views
C 语言程序设计 Copyer:Vigiking. 第一章 计算机语言与 C 语言概述. 1.1 计算机语言概念 ■ 计算机语言定义 计算机能够识别和接受的语言。 要使计算机按自己的意图工作,必须使用计算机所能接受、理解和执行的指令指挥计算机工作。. ■ 计算机语言的种类 机器语言 低级语言 汇编语言 ( 面向计算机 ) BASIC 入门语言 F77 科学计算 高级语言 Foxpro 数据库管理 ( 面向问题 ) C 多用途. 计算机语言. ……. ……. • 机器语言 最早问世,用二进制代码构成指令。
E N D
C语言程序设计 Copyer:Vigiking
第一章 计算机语言与C语言概述 1.1 计算机语言概念 ■计算机语言定义 计算机能够识别和接受的语言。 要使计算机按自己的意图工作,必须使用计算机所能接受、理解和执行的指令指挥计算机工作。
■计算机语言的种类 机器语言 低级语言汇编语言 (面向计算机) BASIC入门语言 F77科学计算 高级语言Foxpro数据库管理 (面向问题 )C多用途 计算机语言 …… ……
•机器语言 最早问世,用二进制代码构成指令。 如: 100000 (+) 110000 (-) 用机器语言编程的缺点: ─繁琐、不直观、不易调试。 如计算y=2x2+3x-1需要七八条指令。 ─移植性差。 依赖于计算机。
•汇编语言 用符号构成指令,如:MOV、ADD 用汇编语言编程: 相对直观,但仍繁琐,仍是面向计算机的语言。 汇编语言是计算机间接接受的语言
•高级语言 与低级语言相比,有根本性的区别: 是面向问题的语言。 高级语言的一条指令(语句): y=2*x*x+3*x-1; 对应于:y=2x2+3x-1 y=sin(x); 对应于:y=sinx 用高级语言编程: 直观、易懂、移植性好(不依赖于具体计算机)
上机运行高级语言程序需经过编译: 编译执行 要上机完成一个计算问题,主要的任务就是用高级语言编写出相应的源程序。即至少要学会一种计算机语言。 高级语言源程序 机器指令 目的程序 结果 编译程序
1.2 C语言的特点 集高级语言和低级语言的优点于一身: ●能实现低级语言的大部分功能(如直接访问内存物理地址、进行位操作等)。 ●图形功能强。 ●运算符和数据结构丰富。 ●语法限制不太严格,程序设计自由度大。 ●生成目标代码质量高,程序执行效率高。
1.3 简单的C程序介绍 例1: main()主函数说明 { 程序框架 printf(“abcdef”);函数体 } 语句 程序的功能是输出字符串:abcdef
例2:求两数之和。 main() { int a,b,c;a a=100; b=50;b c=a+b;c printf(“\n c=%d”,c); } 程序运行结果:c=150
例3:求两数中的最大值。函数类型 函数名 形参 main()int max (int x,int y) {int a,b,c;{ int z; scanf(“%d,%d”,&a,&b); if(x>y) z=x; c=max(a,b); else z=y; printf(“\nmax is:%d”,c); return(z); } } ax by c z (两个函数组成) 3 3 5 5 5 5
总结上例可知: (1) C程序由函数构成。 (2) 函数由两部分组成: 函数说明部分:函数名、函数类型、形参名、形参类型。 函数体:实现函数的具体操作;由语句构成。 (3) 程序总是从main函数开始执行。 (4) 书写格式自由。 (5)语句必须有分号。 :
第二章 算法 2.1 算法的概念 要利用计算机处理问题,光学习语言的语法规则还不够,最重要的是要学会针对各类型的问题,拟定出有效的解题方法和步骤。解题方法和步骤就是算法。
算法: 为了解决一个问题而采取的有限步骤。 计算机算法: 如何使计算机一步一步地工作的具体过程。
利用计算机处理问题的步骤: 1)设计好算法——算法设计; 2)用计算机语言实现算法——程序设计。 算法必须是“有效”的。 算法设计还要充分考虑算法的好坏。 衡量算法好坏的主要标准: ① 程序简练。 ② 执行速度快。 ③ 占空间少。
10 s=∑i 1 例:考虑 的算法。 算法①:直接表达。 直接用语句 s=1+2+3+4+5+6+7+8+9+10 当项数较多时该算法不适用
算法②:迭代法(累加求和法) s=1+2+3+4+5+6+7+8+9+10 算法步骤: s i ① 使s=0 + ② 使i=1累加器 记数器 ③ s+i→s ④ i+1→i ⑤ 若i≤10转③,否则转⑥ ⑥ 输出s 0 1 3 6 10 1 2 3 4 5 该算法通用,是好算法
2.2 算法的表示 算法需要有统一的表示方法 常用的表示方法有: 自然语言 流程图 结构化流程图 N-S流程图.
1、自然语言 对于计算s=1+2+3+4+5+6+7+8+9+10 用自然语言表示为: ①使s=0(s为累加器) ②使i=1(i为计数器) ③s+i→s(累加求和公式) ④i+1→i(计数器加1) ⑤若i≤10转③,否则转⑥ ⑥输出s的值 特点:通俗易懂、文字冗长、含义不大严格。
2、流程图 用流程图符号表示算法。 常用的流程图符号 起止框输入输出框 处理框流程线 判断框
直观形象,易于理解,次序清楚 s+i → s 对于计算 s=1+2+3+4+5+6+7+8+9+10 用流程图表示为: i+1 → i 0 → s S+i → s S+i → s Y i≤10 1 → i N 输出s
3、结构化流程图 传统的流程图有一个弊端:对流程线没有严格的限制,对于较复杂的算法可能会变成乱麻一般(BS型算法)。 为克服这一弊端,提出了由三个基本结构组成算法流程图的思想: 结构化流程图
三个基本结构: ①顺序结构 按固定顺序(从上到下或从左到右)执行的结构。 a A B b
a ②选择结构 根据条件P选择执行哪一个分支。 成立不成立 成立 p 不成立 A B b
例:计算 y= 1/x 当x≠0时 y= 10000 当x=0时 的算法流程图图: 选择结构 输入x Y X=0? N 10000→y 1/x→y 输出y
③循环结构 重复执行某些操作的结构。 分为两种: 当型循环和直到型循环。 当型循环直到型循环 a a A A P1 Y P2 N N Y b b
可以看出,每个基本结构都只有一个入口和一个出口,因此,用三个基本结构构成的流程图不会象乱麻一般,用三个基本结构构成的流程图就成为结构化流程图,用结构化流程图描述的算法称为结构化算法,相应的程序设计就称为结构化程序设计。可以看出,每个基本结构都只有一个入口和一个出口,因此,用三个基本结构构成的流程图不会象乱麻一般,用三个基本结构构成的流程图就成为结构化流程图,用结构化流程图描述的算法称为结构化算法,相应的程序设计就称为结构化程序设计。
观察前例: S+i → s 0 → s 顺序结构 循环结构 i+1 → i 1 → i y i≤10 n 输出s
4N-S流程图 N-S流程图的三个基本结构: 顺序结构 选择结构 P 成立 不成立 A B A B B 循环结构 当P1 A 直到P2
例:计算 y= 1/x 当x≠0时 y= 10000 当x=0时 的N-S流程图: 输入x X=0? 是 否 10000→y 1/x→y 输出y
例: 计算 s=1+2+3+4+5+6+7+8+9+10 的N-S流程图: i≤10 直到i>10 直到型当型 0 → s 0 → s 1 → i 1 → i s+i → s i+1 → i s+i → s i+1 → i 输出s 输出s
第三章 数据类型、运算符与 表达式3.1 C 的数据类型●基本类型 (整型、实型、字符型、枚举型)●构造类型 (略)●指针类型 (略)●空类型 各类型包含常量与变量
3.2 常量与变量 ■常量与符号常量 常量 在程序运行过程中其值保持不变的量。 符号常量 用来代表一个常量的标识符。 #define PI 3.1415926
例: #define PI 3.1415926 main() { float r=2,c; c=2*PI*r; printf(“%f”,c); }
■变量 其值可以改变的量。 变量的三要素: ①变量名 每个变量有一个名字,作为识别该变量的标识符。 ② 变量的值 每个变量有一个值,变量的值是随时可以改变的。
③变量的存储单元 每个变量占据一个内存单元,用于存放变量的值。 变量名 a 变量值 存储单元 3
变量的命名规则: 由字母、数字和下划线组成 以字母或下划线开头 a、x1、y_2、_b1、_1c 合法 1x、a+2、Ф、Ω 不合法 变量必须先定义后使用。 程序中何时使用常量?何时使用变量?
3.3 整型数据 ■整型常量 即整常数,c的整常数有三种形式: ①十进制整数 与数学中的整数一致,如:100,123,15等。 ②八进制整数 以0开头的整数,如:010,07,020等。 ③十六进制整数 以0x开头的整数,如:0x10,0xff,0x2a等。
■整型变量 用于存放整数的变量。 分4种类型: ①基本型:int a 16位,可表示的数值范围:-32768—32767 ②短整型:short int b 16位,可表示的数值范围:-32768—32767 ③长整型:long int c 32位,数值范围:-2147483648—2147483647
④无符号型:加上 unsigned 只存放正数。 如:unsigned int x 变量x为无符号整数,16位全表示数码, 数值范围:0—65535 在程序设计中,如果要使用整型变量,必须首先选择以上类型符来定义变量,然后才能使用;
例: main() 定义 { int a,b,c; a=100; b=50; 使用 c=a+b; printf(“%d”,c); } 一般根据什么原则选择变量的类型?
3.4 实型数据 ■实型常量 可使用两种形式表示: ①小数形式:如 1.23, 3.1415926 15.48 ②指数形式:如 1e-20 1.23e5
■实型变量 用于存放实数的变量 分单精度和双精度两种: float a,b 定义a和b为单精度型变量 32位,7位有效数字,10-38—1038 double x,y 定义x和y为双精度型变量 64位,15位有效数字,10-308—10308
例: main() { float r,c; double r,c; r=5; c=2*3.1415926*r; printf(“%f”,c); }
3.5 字符型数据 ■字符常量 用单引号括起来的一个字符。 ’a’,’x’,’*’,’1’等 除此外,以’\’开头的字符如’\n’,’\t’等 称为转义字符,祥见书表3.3
■字符型变量 用于存放字符的变量。 char c1,c2 定义c1和c2为字符型变量 c1=’a’; c2=’b’; 字符赋值 字符型变量存放一个字符,占据一个字节
a 97 ■字符型数据的存储形式 存放ASCII码 不是 而是 如字符’a’在内存中存放97,’b’存放98。 与整数的存储形式一致,它们之间可以通用 一个字符数据既可以作字符用,也可以作整数用(取其ASCII代码)。 如:32+’a’相当于 32+97 若 int x; char c; 则 x=’a’; c=97; x=97; c=’a’; 都允许
■字符串常量 用双引号括起来的字符序列。 如:”abcde”,”china” ”a”也属字符串。 注意”a”与’a’的区别。 对于: char c; c=”a”;用法错误
字符串中每个字符各占一个字节,并且在字符串结尾加上一个结束标记’\0’字符串中每个字符各占一个字节,并且在字符串结尾加上一个结束标记’\0’ 如:”china”在内存中占6个字节。 c h i n a \0 C语言中专门的字符串变量,可用字符数组存放(以后介绍)。
3 3.6 变量赋初值 在定义变量的同时给相应的变量赋初值。 如: int a=3;a float b=5.2; char c=’a’; int x=y=z=6; 效果: 在给变量分配内存单元的同时在相应的单 元中存放初值。