资源描述
第一章C语言及程序设计概述
本章要求:
了解C语言的特点、C语言与其它高级语言相比有什么异同;
了解C程序在PC机上的建立、编译和运行过程;
了解C语言程序设计思想的基本篇;
重点:①C语言的主要特点;
②C语言在PC机上的运行过程及上机操作过程;
③常用算法的应用
难点:无
一、C语言概述
C语言是目前国际上在各种计算机运行较为广泛流行的一种高级语言。
主要表现为:
C语言:适合于作为系统描述语言——可用来写系统软件。
具有高级语言的特点,又有低级语言(汇编语言)的特点。
C语言:是AT&T贝尔实验室的Dennis Ritchie在1972年发明的。
C语言:是在B语言的基础上发展起来的。(ALGOL 60)
C语言:最早开始是用于UNIX操作系统。(C语言和UNIX是相辅相成的)
DBASE 、Microsoft Exel 、 Microsoft Word、PC-DOS等,则是用C语言加上若干汇编子程序编写的。
1983年:——制定的新标准,称为(美国国家标准化协会)ANSI C
1987年:——Turbo C1.0 (Borland) 1988年:TC 1.5(图形和文本窗口)
1989年:——Turbo C2.0 (DOS操作系统、查错、Tiny模式生成com文件)
1991年:——Turbo C++(3.0) 支持windows 3.X
说明:Turbo C语言可以在程序的任何地方嵌入汇编代码,提高速度,可以直接使用存储器和寄存器。
二.C语言的特点
1.语言简洁、紧凑、使用方便、灵活
C语言:——共有32个关键字,9种控制语句;
程序书写自由,主要用小写字母表示;
2.运算符丰富
C语言的运算符包含的范围很广泛,共有34种运算符;
即:把括号、赋值、强制类型转换都作为运算符处理
3.有丰富的数据类型
整型、实型、字符型、数据类型、指针类型、结构体类型、共用体(联合)类型等。实现复杂的数据结构(链表、树、栈、图)的运算。
4.具有结构化的功能,用函数作为程序模块,实现程序的模块化
5.语法限制不太严格,程序设计自由度大。(放宽了语法检查)
例:1)对数组下标越界不作检查,由程序编写者自己保证程序的正确;
2)整型数据、字符型数据、逻辑型数据可以通用。
6.能直接访问物理地址,能进行位(bit)操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作。
7.生成目标代码质量高,程序执行效率高。
8.用C语言编写的程序,移植性较好。
说明:
C语言比其它高级语言难掌握,对编程人员要求较高
程序员使用C语言编写程序会感到限制少、灵活性大,功能强,可以编写出任何类型的程序。
三.C程序的构成
例:
main( ) /*主函数*/
{
int a,b,sum; /*定义变量*/
a=123;b=456;
sum=a+b;
printf(“sum is %d\n”,sum); /*输出变量*/
}
说明:
1)程序一般用小写字母书写;
2)每个程序必须要有一个main ( ) (只能一个),称主函数;
注:C程序是由函数构成的,函数是C程序的基本单位。
函数:系统提供的库函数;用户设计的函数。
3)程序体必须在{ }之间;
4)每个语句的结尾,必须要有“;”作为终止符。
5)用/*……….. */ 作注释
四、C程序的上机过程
1.演示 书:P5 程序
2.上机步骤 书:P7
注:C语言是一种编译语言,编译语言的特点:
连接
编译
目标程序
*.OBJ
执行程序
*.EXE
源程序
*.C
C编译程序 Link程序
3.DOS下C语言的运行
目前DOS下运行C语言软件为:Turbo C 2.0
(1) Turbo C 2.0 的特点:
是一个把 ①编辑 ②编译 ③连接 ④运行 等全部操作集中在一个界面上。
(2) Turbo C 2.0的操作及运行 书:P8
五、算法的概念
1.算法的概念 书:P13
算法:程序的操作步骤。
程序中的数据
在程序设计中: 操作步骤
有: 程序 = 数据结构 + 算法 沃思 Nikiklaus Wirth
程序=算法+数据结构+程序设计方法+语言工具和环境
2. 计算机算法分为两大类: ①数值运算算法 ②非数值运算算法
(1)数值运算算法:求数值解;通过运算得出一个具体值,如求方程的根等
注:数值运算一般有现成的模型,算法较成熟。
(2)非数值运算算法:用于事务管理,如图书检索、人事管理等。
3、常用简单算法
(1)累乘 即:1×2×3×4×5……×100
1×2 → S(结果)
S×3 → S(结果)
S×4 → S(结果)
┇
S×100 → S(结果)
(2)累加 即:1+2+3+4+5……+100
1+2 → S(结果)
S+3 → S(结果)
S+4 → S(结果)
┇
S+100 → S(结果)
(3)找最大值 5,2,4,12,9
5 → max (max 放最大值,后面的数都和它比较)
2 > max 不成立
4 > max 不成立
12 > max 成立:12 → max
9 > max 不成立
注:该算法可扩展为在一批数据中,找某一个数
(4)其它算法
P15 例 2.2 例 2.3 例 2.4 例 2.5 课余自学(必须)
4、算法的表示
常用的有:①自然语言②传统流程图③结构化流程图④伪代码⑤PAD图
(1)传统流程图
起止框 输入输出框 判断框 处理框 流程线 连接点
表示方法:P19 例
注:传统流程图对流程线的使用没有严格限制,难以实现结构化程序设计
为了限制流程线的滥用,提出三种基本结构:
①顺序结构 ②选择结构 ③循环结构
顺序结构 选择结构
f t . f
语句 表达式 表达式
t
语句 语 句 语 句1 语 句2
循环结构
表达式 语 句
语 句 表达式
a) “当型”结构 b) “直到型”结构
(2)N-S流程图
特点:去掉了带箭头的流程线,全部算法写在一个矩形框内。
称N-S结构化流程图
P
A 成立 不成立 当P1成立 A
B
A B A 直到P1成立
顺序结构 选择结构 循环结构
作业:p37 2.4
上机:熟悉Turbo C 2.0的操作及运行
第三章 数据类型、运算符与表达式
本章要求:
本章是C语言的基本概念开篇,所介绍的概念是学习C语言的基础;
要求熟练掌握数据类型、运算符与表达式。
重点:①C语言数据类型定义的方法和分类。
②C语言运算符、表达式的使用以及它们的主要特点。
难点:自增、自减运算符、赋值运算符、逗号运算符及它们的混合使用
一.数据类型
概念:算法处理的对象——是数据,而数据是以某种特定的形式出现。
在C语言中,数据有:常量、变量;一般它们都有一定的数据类型。
(C语言的数据结构是以数据类型形式出现的)
1.数据类型分类:
整型 int
基本类型 字符型 单精度型 float
实型(浮点型)
枚举类型 双精度型 double
数据类型 数组类型
构造类型 结构体类型 struct
共用体(联合)类型 union
指针类型 *
空类型 void
说明:在程序中对用到的所有数据都必须指定其数据类型。
2.C语言中的常量和变量
常量:——在程序运行过程中,其值不能被改变的量。
变量:——在程序运行过程中,其值可以改变的量。
说明:1)常量和变量,都要有一个名字表示它;
习惯上,符号常量(别名)名用大写,变量用小写。
符号常量的定义为: #define P 30
其它常量:直接用数据表示 例: 23 45.5 ‘e’ 3e+2
2)在C语言中,对变量要先定义,后使用。
3)如果一个变量被指定为一确定类型后,在C语言编译时,就能为其分配相应的存储单元。
a 变量名
存储地址)2000 3 变量值
存储单元
地址的概念
3.常用的基本数据类型
(1)整型
1)整型常量:十进制整数 123,-11,0 非0开头
八进制整型 0123,-011 0开头
十六进制整型 0x11 0x20 0x0D 0XFF 0x4e 0x/0X开头
说明:在一个整常量后面加一个字母:l或L,是长整型常量。22L 0733L 0xae4l
2)整型变量:
定义 存储字节 数的范围
基本型 int x (2字节) -32768~32767
短整型 short int x (2字节) -32768~32767
长整型 long int x (4字节) -2,147,483,648~2,147,483,647
无符号型 unsigned int x (2字节) 0~65535
unsigned short x(2字节) 0~65535
unsigned long x (4字节) 0~4,294,967,295
注: 数据在内存中是以:二进制形式存放
如:9 为 00001001
例: x=13; x=015 ; x=0xD 存储结构 见P44 图3.5
注:数据超过数据范围,会发生数据溢出 例3.2、3.3
(2)实型(浮点数)
1)实型常量: 十进制整数 1.23 .0123
指数形式 1.23e3,1.00e-3
2)实型变量: 数的表示范围P46表3.2
单精度 float x (4字节)3.4x10-38~3.4x1038
TC默认 双精度 double x (8字节)1.7x10-308~1.7x10308
说明:实型常量 不分float和double,只有十进制表达方式
有的C编译系统64位存储方式,如尾加f或F可表示32位:324.567f
例:x=1.23; x=123e3 P47例3.4(存储精度)
(3)字符型
1)字符常量:
a) 用单引号括起来的一个字符 ‘a’‘A’
b) 转义字符(由“\专用字母” ) 书P48表3.3 例3.5
\0字符串结束符 \n换行 \t水平制表
\ddd八进制数 \xdd十六进制数
2)字符变量:
char c (1字节)
说明:一个字符变量,只能放一个字符常量。实际是把该常量的ASCII值,送入字符变量中。即:‘B’(66) c (字符变量)
书P374ASCII表 p50例3.6-7
c=‘B’ c的内容为66
故:字符数据可以进行算术运算;即:c=‘B’+2 为68
字符数据在内存中的存储方式 书P50
unsigned char 0-255 char -128-127 有符号数在TC中是用补码表示的
127(0x7f) 0111 1111 128(0x80) 1000 0000
复习:补码的规定:
正数:其原码、反码、补码相同
负数:最高位为1,其余各位为原码的反码(原码的相应位取反),然后对整个数加1。
140(0x8c) 1000 1100→1111 0011 + 1(取反加1)→1111 0100→-0x74
-0x74 1000 1011 + 1(取反加1) → 1000 1100 → 0x8c
(0x80为负数-74 高位为1)
3)字符串常量
用双引号括起来的字符 “a” ,“ABFD” “a” =“a\0” <> ‘A’
说明:C规定,在每一个字符串的结尾应加一个“字符串结束标志”(\0),
以便系统判断字符串是否结束。
4.各类数值间的混合运算
1)整型、字符型、单精度型、双精度型数据——可以混合运算
2)字符型、整型——可以通用
规则: 高 double float
long
unsigned
低 int char,short
例如 10+’a’+1.5-8765.1234*’b’ -858873.593200 (TC默认6位小数)
10+97+1.5-8765.1234*98
二.运算符和表达式
C表达式:由变量、常量、函数等运算对象和运算符组成的式子
C运算符作用:
1)能把一些基本运算模块用单一的运算符处理
2)使用丰富的运算符,构成多种表达式
C运算符有优先级,优先级高的先执行,同级的由结合规则决定其处理规则
C运算符有两种结合规则:
1)从左到右的结合运算顺序;即:a=5+x-10;运算对象与左边运算符结合
2)从右到左的结合运算顺序;即:x=y=7;运算对象与右边运算符结合
C运算符分类 书P55
1.基本运算符(算术运算符)
C语言有7个基本运算符
1)单目运算符:(表示符号) 正号“+” 负号“-”
2)双目运算符:+、- 、*、/、%(模运算,求余运算,两侧为整数)
说明:
a)运算顺序的结合方向从左到右
b)求余(取模)运算符是对两个整数相除的余数,计算结果的符号与第一个数的符号相同。即:-5%3 值为-2、 -5%-3 值为-2、 5%-3 值为2
2.自增、自减运算符(优先级高于算术,右结合)
作用:——使变量的值增1或减1
++i(--i)——在使用i之前,先使i的值加1(减1),然后再使用i。
i++(i--)——先使用i的值,然后再使i加1(减1)。
例:i =4;
j=++i; i 值为5,值为5; j=i++; i 值为5,j值为4
说明:1)自增、自减运算符++(--),只能用于变量,不能用于常量或表达式
即:5++ 、 (a+b)++ —— 不合法
2)运算顺序的结合方向从右到左
例 例:
main(){
int i=3 z,x,y; z=(i++)+(i++)+(i++)
x=y=3;
//结果:z值为9 i值为6
z=x+++y;
//变量x右结合运算符++ (不是3+4+5=12)
printf("z=%d,x=%d,y=%d",z,x,y);
}
输出结果:z=6 x=4 y=3
如果:z= -x+++y; 输出结果:z=0 x=4 y=3 x先为-4,然后+y,最后x++
3.赋值运算符和赋值表达式(优先级低于算术,右结合)
(1)“=” ——赋值运算符
作用:将一个数据赋给一个变量 即:x=21
注意: 如果赋值运算符两侧的类型不一致,在赋值时,要进行类型转换。P61例3.9
即:float f ; f=23 f值为23.0000 符号位扩展
(2)复合的赋值运算符
“+=、-=、*=、/=、%=” —— 在赋值符“=”之前加上其它运算符
称复合运算符(也称为自反运算符)
例:a+=3 等价于 a=a+3
x*=y+8 等价于 x=x*(y+8)
y/=4 等价于 y=y/4
m%=3 等价于 m=m%3
说明:
C语言采用这种复合运算符:
为了简化程序,使程序精练;提高编译效率。
(3)赋值表达式
格式:变量=表达式
表达式:
可以是 1)常量、变量、算术表达式;
2)赋值表达式
即:a=(b=5) 或 a=b=5 (运算顺序的结合方向从右到左)
例:
a=b=c=6 ; a=5+(c=6) (结果a=11 c=6)
如果:a=3; 求:a+=a-=a*a; [有:1] a*a; 9 2)a= a-(a*a); -6 3) a+=-6 ] -6+-6
a为:-12 结果值为:-12
4.逗号运算符和逗号表达式(优先级最低,左结合)
用“,”将两个表达式连接起来。
格式:表达式1,表达式2 即: 3+5,6*9;
例: 3+5,6*9; 值为54
(先求解表达式1,再求解表达式2,最后逗号表达式的值为表达式2的值)
a=2*5,a*3; a值为10 结果值为:30 (先求:a=2*5,后求:a*3)
x=(a=2*5,a*3),a+4 a值为10 x值为30 结果值为:14
说明:
使用逗号表达式的目的,只是为了得到各个表达式的值(常用于循环语句)
解表达式1的结果可能影响解表达式2的值
5.强制类型转换运算符(优先级高于算术,右结合)
在要转换的数据前,用小括号括上要转换的数据类型
即: (int)x; (int)(a+b) (int)x+y
格式:(类型名)表达式
C一般会自动进行数据类型转换P56例3.8,用于不能自动转换的地方x%3(float f)
6.关系运算符和关系表达式(书P87)(优先级低于算术,左结合,高于赋值)
(1)6种关系运算符
< <= > >= (优先级高) = = != (优先级低)
(2)关系表达式
表达式 关系运算符 表达式
即:a>b a+b>=b+c (a=4)<(b=8) ‘x’= = ‘y’
说明:
关系表达式值:是一个逻辑值,即:“真”或“假”
C语言:1 —— 代表“真” 0 —— 代表“假”
7.逻辑运算符和逻辑表达式(书P88)(优先级低于关系,左结合)
(1)3种逻辑运算符 p89 表5.1
&& (与) | | (或) ! (非)
(2)逻辑表达式
表达式 逻辑运算符 表达式 p89
即: (a>b) | | (a+b>=b+c) (a=4)&&(b=8) 1 | | ∞ (1)
‘x’&& ‘y’ 值为1 1
说明:
逻辑表达式值:是一个逻辑值,即:“真”或“假” p90
优先次序(由高到低):
!(非) 算术运算符 关系运算符 &&和| | 赋值运算符
求值短路:5>3&&2||8<4-!0 1||∞ (结果1)
0&&∞ (结果0) 如:a&&b&&c a<>0才判断a&&b
8.条件运算符(书P97)
格式:表达式1 ? 表达式2:表达式3
执行:先求解表达式1,为真(非零),求表达式2
为假(为0),求表达式3
例: y= ( a>b ) ? a : b;
说明:a)条件运算符要求有三个操作对象(称三目元运算符)
b)条件运算符优先于赋值运算符
y= ( a>b ) ? a : b; 先求 ( a>b ) ? a : b 后赋值
c)条件运算符的结合方向为“自右至左”
( a>b ) ? a : b 可写为: a>b ? a : b
a>b ? a : b+5 相当于: a>b ? a :(b+5)
a>b ? a : c> d ? c : d 相当于: a>b ? a : ( c> d ? c : d )
* 9.位运算符 (书P298)(一般掌握)
位运算:—— 是对字节或字中的实际位进行检测、设置、屏蔽、移位。
位运算符:
& —— 位逻辑与 | ——位逻辑或 ^ —— 位逻辑异或
~ —— 位逻辑反 >> —— 右移 << —— 左移
三、运算符小结
1.左结合方向的运算符
主要有:算术运算符、关系运算符、逻辑运算符、逗号运算符
2.右结合方向的运算符
主要有:自增、自减运算符、赋值运算符(复合的赋值运算符)、条件运算符
例:1) i=3; printf("%d,%d",i,i++); 输出:4, 3
2) a=1;b=1;c=2; 求:a=b + = c* = 5; 输出:a为11 b为11 c为10
3) a>b ? a> c?a:c:b>c ? b:c 相当于:a>b ? (a> c?a:c):(b>c ? b:c)
(求最大值,如a=2, b=8, c=5 结果为:8)
3.运算符的优先次序(书 P375 附录Ⅲ)
()、!++/--/-转移、算术、关系(<<=>>=)、关系(= = !=)、&&、||、条件(?)、赋值、逗号
例:1) -a++ 相当于 -(a++)
2) x=4,y=7 求:y+=++x-3 x的值5 y的值9
3) x=4,y=7 求:y=y+++x-3 x的值4 y的值9
4) a=7,x=2.5,y=4.7 求:s=x+a%3*(int)(x+y)%*2/4 s的值2.500000
a%3*(int)(x+y)%*2 =》 1(整型) / 4 (整型) =》 0.25 =》0(整型)
5) a%3 && a%5 || a++>++b
如:a=7, b=5 a的值8 b的值6 结果值1 1||1
如:a=15, b=15 a的值16 b的值16 结果值0 1||0
如:a=15, b=14 a的值16 b的值15 结果值0 0||0
如:a=15, b=13 a的值16 b的值14 结果值1 0||1
四、该章的主要例题
数: P39 例3.1 P44 例3.2 P44 例3.3
字符: P49 例3.5 P50 例3.6 P51 例3.7
五、该章的主要习题
P65 3.5 3.6 3.8 3.9 3.10 3.12
六、该章的主要上机内容
P39 例3.1 P44 例3.2 P44 例3.3 P51 例3.7
P65 3.6 3.8 3.10
第四章 简单的C程序设计(顺序程序设计)
知识点:
1、赋值语句; 2、字符数据的输入/输出;
3、格式输入/输出语句printf和scanf及其格式控制符;%c、%f、%d(输出宽度、对齐方式、其它格式控制符只作了解)
4、程序的结构框架。
重点:
1.赋值语句;
2.基本输入/输出语句printf和scanf及其格式控制符%c、%f、%d等的意义。
难点:
无
一、C程序结构
C程序
源程序文件1 源程序文件2 源程序文件n
预编译命令 函数1 函数n
说明部分 执行部分 (语句)
语句的分类P67 P68
1、控制语句
①条件:if else
②循环:for()
③循环:while()
④循环:do while()
⑤循环结束:continue
⑥终止循环或switch:break
⑦多分支:switch
⑧转向:goto
⑨函数返回:return
2、函数调用语句
printf(“a=%d”,a);
3、表达式语句
i=i+1 表达式 i=I+1; 表达式语句 函数调用也可以认为是表达式语句
4、空语句:一个“;”
5、复合语句(用{}:分程序)
{ x=3; x=x+1;
print(“x=%x”,x)
}
二.赋值语句
变量名=表达式
注:是组成顺序结构的主要语句。
a=b; if ( max<= x ) max =x ;
三.基本输入/输出语句
C语言本身不提供输入输出语句,输入输出操作是由函数来实现。
即:printf putchar scanf getchar
注:(1)这些函数构成一个标准的I/O函数库(放在“stdio.h”中)
(2)如果要使用C语言库函数,要用预编译命令“#include”将有关“头文件”包括到用户源文件中。
#include <stdio.h> #include “stdio.h”
当前目录 当前定义的目录中寻找
1.printf函数 —— 格式输出函数
格式:printf(格式控制,输出表列)
格式控制:—— 用双引号括起来的字符串,也称为“转换控制字符串”
printf的格式字符 书P77 表4.1
输出表列:—— 需要输出的数据、表达式
即:printf( “x=%5.1f, y=%d, z=%c” , x, y, z )
d,i 带符号十进制形式
u 无符号十进制形式 例3-3
c 字符形式
s 字符串形式
f 实数(小数)形式 默认6位小数
说明:1)printf( “ y=%-4d” , y ) 输出数据左对齐(默认为右对齐)
2)数据输出长度的修正;
l —— 输出长整型或双精度数据 即:printf( “%ld, %lf ” , i, y )
h —— 输出短型数据 即:printf( “%hu ” , a )
-m.n m最小宽度 n小数(实数) -左对齐
2.putchar函数 —— 字符输出函数
向终端输出一个字符
格式:putchar(变量) putchar(x)
putchar(“\n” ) 输出一个换行符
3.scanf函数 —— 格式输入函数
格式:scanf(格式控制,地址表列)
格式控制:—— 用双引号括起来的字符串,也称为“转换控制字符串”
scanf的格式字符 书P80 表4.3
地址表列:—— 由若干个地址组成的表列,有:变量地址 &x
字符串的首地址
& —— 地址运算符
功能:求变量的地址(只能用于变量)
&x —— 表示x变量值的内存单元的地址
即:scanf( “%d, %4d”, &a, &b )
说明:1)不带分隔字符的方式,系统将自动按格式说明截取数据
例: scanf ( “ %4d%*3d%f ”, &I , &p );
输入:12345678.93 时 得 I=1234 , p=8.93
“*”——作用是“虚读”,跳过相应的数据
2)带分隔字符的方式(分隔字符:空格、tab、回车、逗号)
即:scanf( “%d, %d”, &a, &b )
4.getchar函数 —— 字符输入函数
从终端输入一个字符
格式:getchar ( ) 即:c=getchar ( )
函数值是从输入设备得到的字符
四、该章的主要例题
1已知矩形的两边长,求矩形的面积、周长
2大小写字母互相转化
3教材P83的例子
五、该章的主要习题 P84 4.5~4.9
第
展开阅读全文