当前位置:首页 >> 其它课程 >>

C语言教案






内 容

注意点

配时

第一章
1.1 C 语言概述 C 语言发展史





1.1.1

在计算机技术发展过程中,开发性能卓越的操作系统是技术人 员不断追求的目标。在美

国贝尔实验室 M.D.Ritchie 设计出 C 语言。 1.1.2 1. 2. C 语言程序的组成

5

15

程序是由函数构成的,函数是 C 程序的基本单位。 一个函数由两部分组成(1)函数的说明部分 (2)函数体即大括弧{?}内部分

C 语言应 用的广泛 性

3. 4. 5. 6. 7. 1.1.3

一个 C 程序总是从 main 函数开始执行的。 C 书写自由一行可写几个语句,一个语句也可分写多行。 每个语句和数据定义的最后必须有一个分号。如 c=a+b; C 语言本身没有输入输出语句。它的操作由库函数完成。 可用/*?*/对 C 程序任何部分作注释,增加程序可读性。 C 语言程序的特点

15

1.语言简洁、紧凑、使用方便、灵活。 2.运算符丰富。 (45 种标准运算符) 3.数据结构丰富。 4.具有结构化的控制语句。 (如 if?else、for、while) 5.语法限制不太严格,程序设计自由度大。 6.C 语言允许直接访问物理地址,能进行位(bit)操作,能实 C 程序结 现汇编语言的大部分功能,可以直接对硬件进行操作。 7.生成目标代码质量高,程序执行效率高。 8.C 语言程序可移植性好。 (与汇编语言比) 。
构特点

1.2 C 语言的基本符号与关键字 1.2.1 基本符号集

10

符号集是构成 C 语言的基本元素。用 C 语言编程时,除字符型 数据外,其他所有成份必须由字符集中的字符构成。C 语言的字符集 由下列字符构成: ? ? ? 英文字母:A~Z,a~z。 数字字符:0~9。 特殊符号:空格、!、 %、*、&、^、_(下划线) 、+、=、

-、~、<、>、/、\、‘、“、;、.、,、( )、[ ]、{ }。 1.2.2 关键字
15

关键字是 C 语言已经定义的、具有特殊功能和含义的单词、单 词缩写或者单词组合。以下列出的是 C 语言的关键字: auto break case char const default do double else enum extern float for goto register signed long if return short int sizeof static struct switch typedef while unsigned union void volatile continue 1.2.3 用户标识符
15

用户标识符即用户根据需要自己定义的变量名、常量名、函数 名、数组名等。C 语言的用户标识符必须按以下规则命名: 必须以英文字母或下划线开始,并由字母、数字和下划线组成。 例如:chABC intX,a1 等都是合法的标识符,而 5Str,-chabc, +intJ 等则是非法的标识符。 每个标识符可以由多个字符组成, 但只有前 8 位为有效标识符。 大写字母和小写字母代表不同的标识符。不能使用 C 语言的关键字 作为用户标识符。

1.2.4

ASCII 字符集

5

在计算机中,所有的信息都用二进制代码表示。二进制编码的 查询方法 方式较多,应用最为广泛的是 ASCII 码。我们使用的字符在计算机 中就是以 ASCII 码方式存储的。 ASCII 码是美国标准信息交换码( American Standard Code for Information Interchange) 。它已被国际标准化组织(ISO)认定为 国际标准,详见附录 1。
10

小结: 1、C 语言程序的特点 2、C 语言程序中的基本符号与关键字 作业:习题一 1~4





内 容

注意点

配时

第一章
复习:C 语言程序中的关键字 1.3 算法及其表示 算法概念和特征




5

1.3.1

5

算法是指为了解决某个特定问题而采用的确定且有效的步骤。 计算机算法可分为两大类:数值运算和非数值运算。 算法有五个特性:有穷性、确定性、有效性、零个或多个输入、 算法特性 一个或多个输出 1.3.2 算法的组成要素
20 的含义 5

算法含有以下两大要素:操作、控制结构 三种基本控制结构如下: 顺序结构:顺序结构中的语句是按书写顺序执行。这是一种最 简单的结构,不能处理复杂问题。 选择结构:最基本的选择结构是当程序执行到某一语句时,要 进行一下判断,从两种路径中选择一条。 循环结构:循环结构是将一条或多条语句重复地执行若干次。 这种结构将复杂问题用循环结构来实现。
流程图的 画法

1.3.3

算法的表示

10

算法可以用各种描述方法进行描述,常用的有自然语言、伪代

码、传统流程图和 N-S 流程图等。 传统流程图的基本符号

N-S 流程图表示三种基本结构

N-S 图的 执行方法

15

1.4

C 语言程序的开发与运行 (1)编辑(Edit) 通过文本编辑程序将 C 程序作为源文件送

入到磁盘中。经过编辑存盘后,得到源程序文件以.c 为扩展名。 (2)编译(Compile) 在编译过程中可能会发现一些语法错
Ctrl+F9

误,这时需要重新回到编辑状态来修改源程序,再进行编译。只有 在编译后没有错误的源程序才能生成以二进制代码表示的目标程序 (一个二进制文件,一般文件名后缀为.obj) 。 (3)连接(Link) 实际上,还不能直接运行该目标程序,它 需要与编程环境提供的库函数进行连接 (link),形成可执行的程序 (文件名后缀为.exe)经过编译后生成的目标程序经过连接生成可 执行文件。 (4)运行与调试 当程序通过了语法检查、编译生成可执行文件后,就可以在编程环 境或或操作系统环境中运行(run)该程序。 当然, 程序运行所产生的结果有可能不是想要的结果。 这说 明出现了程序的语义错误。如果程序有语义错误就需要对程序进行 调试。调试是在程序中查找错误并修改错误的过程。调试最主要的 工作是找出错误发生的地方。调试是一个需要耐心和经验的工作,
15 Alt+F5

也是程序设计最重要、最基本的技能。

20

main ( ) { int i, j , k , n;
编辑

for (n ? 999; n ? 1000; n ? ?) { i ? n / 100; j ? n / 10 ? i * 10;

.c 源文件

编译



有错?

k ? n%10; if (i ? i * i ? j * j * j ? k * k ? k ?? n) .obj pr int f ("%d %d %d ", i, j , k ); } }
目标文件

main ( 常 ) { 连接 long i, n ? 1L; for (i ? 10; i ? 0; i ? ?)


n? ? i; 可执行文件 执行 pr int f (" result ? %ld " , n); }

.exe

有错 无 结束

10

小结:掌握 C 语言程序的编辑及运行过程 作业:习题一 5~7





内 容

注意点

配时

第二章

数据类型、运算符及其表达式
5

复习:C 语言程序中的关键字 2.1 C 语言的数据类型 任何程序都涉及到待处理的数据,数据可以是常量和变量。C 语 言可以处理的数据类型有很多,可分为基本类型、构造类型、指针 类型和空类型。本章将讨论 C 语言中的变量和常量、基本数据类型、 运算符和表达式以及不同数据类型之间的转换等。 C 语言提供的数据结构是以数据类型形式出现的如下: 整型 (short、 int、 long 、 unsigned int) 基本类型 字符型(char) 浮点型 双精度型(double) 实型(浮点型) 枚举类型(enum) 数据类型 数组类型([ ]) 构造类型 指针类型(*) 空类型(void) 2.2 常量与变量 常量又称常数,指在程序运行过程中值不能被改变的量。 整型常量:12,0,-3 实型常量:4.6,-1.23 字符常量: ‘A’ , ‘0’ (ASCII 值为 48) 字符串常量: “shenyang” 符号常量:用一个标识符代表一个常量 结构体类型(struct) 共用体类型(union) 字符型 浮点型 单精度型(float) 整型

5

15

2.2.1

20

它的值在其作用域内不能改变,也不能被赋值。习惯上,符号常 量名用大写,变量用小写,以示区别,一般定义格式如下: #define 标识符 常量数据 例:#define 2.2.2 PI 3.1415926
10

变量是指在程序运行过程中其值可以被改变的量。

1.类型 变量是指在程序运行过程中其值可以被改变的量。 长整型 整型变量 短整型 (占 4 个字节) (占 2 个字节)

无符号整型(占 2 个字节) 单精度型(占 4 字节) 变量 实型(浮点型)变量 双精度型(占 8 字节) 字符变量(占 1 个字节) *注意:一个变量应该有一个名字,在内存中占据一定的存储单 元。在该存储单元中存放变量的值。 2.标识符 用来标识变量名、符号常量名、函数名、数组名、类型名、文 件名的有效字符序列称为标识符。简单地说,标识符就是一个名字。 *C 语言规定标识符只能由字母、数字和下划线三种字符组成, 且第一个字符必须为字母或下划线。 合法的: sum , a1 , _to 不合法的:$123 , ?3d , a>b
变量名和 变量值不 同。 15

3.在 C 语言中,变量要“先定义,后使用” 。 (1) 每一个变量被指定为一确定类型,在编译时就能为其分 配相应的存储单元。 如:int a,b;则为 a , b 各分配两个字节,按整数存储。

(2) 凡未被事先定义的,不作为变量名。 定义:int student ; 执行:students=30 ; 出错!

同一个函数内所定义的变量不能同名 注意:(1) C 语言中,大小写区分。 如:sum 和 SUM 不同。 (2) C 语言中标识符的长度(字符个数)无统一规定。但一
10

般取 8 个字符,假如变量名长度大于 8 个字符,则只有前 8 个字符有效,后面的不被识别。 如:student_name 和 student_number (3) C 语言中的保留字(关键字) ,也是一种标识符,是指用

来命名 C 语言程序中的语句、 数据类型和变量属性等。 都有固 定含义,不能另作其它用途。如:int,float 等是不合法的。

小结:掌握 C 语言程序的编辑及运行过程 作业:习题二 1~2
10





内 容

注意点

配时

第二章

数据类型、运算符及表达式
5

复习:整型、实型变量的定义方法及常量的表示方法 2.3 整型数据 整型常量
15

2.3.1

整型常量的三种表示形式: (1)十进制数表示形式:如 23、0、-16。 (2)八进制数表示形式:以 0 开头是八进制数。如 023,即八进 制数的 23(相当于 10 进制数的 19) 。 (3)十六进制数表示形式:以 0x 开头作为十六进制数。如 0x23, 即十六进制数的 23(相当于 10 进制数的 35) 。 2.3.2 整型变量
15

(1)基本整型,以 int 表示。 (2)短整型,以 short [int]表示。 (3)长整型,以 long [int]表示。 在上述三种类型前再加上无符号整型标记 unsigned,只能用来 存储无符号整数。又有下列类型的整型变量: (4)无符号基本整型,以 unsigned [int]表示。 (5)无符号短整型,以 unsigned short [int]表示。 (6)无符号长整型,以 unsigned long [int]表示。
在一个整 型常量后 加一个字 母 u 或 U, 则认为是 unsigned int 型。

2.3.3

整型变量的使用

10

不同的整型数据,应根据其特征和取值范围,将其定义成不同 的整型变量。如果一个整型数据取值在-32768 到 32767 之间,应该 定义为 int 整型数据。对于不可能有负值的整型数据,应该定义为 unsigned int。当整型数据的取值可能超出-32768 到 32767 或 0 到 65535 的范围时,应定义为 long int 型或 unsigned long 型。 例如: int a,b; unsigned short long e,f; 例2.1 c,d; /*定义 a,b 为整型变量*/ /*定义 c,d 为无符号短整型变量*/ /*定义 e,f 为长整型变量*/
15

整型变量的定义与使用。 #include <stdio.h>

main( ) { int a,b,c,d; /*定义 a,b,c,d 为整型变量*/ /*定义 u 为无符号整型变量*/

unsigned u; a=12;b=-24;u=10; c=a+u; d=b+u;

printf("a+u=%d,b+u=%d\n",c,d); 运行结果为:a+u=22,b+u=-14。

}

可以看到不同种类的整型数据可以进行算术运算。在本例中是 int 型数据和 unsigned int 型数据进行加减运算。 例 2.2 整型数据的溢出。
15

main( ) { int a=32767,b; b=a+1; printf("a=%d,b=%d\n",a,b); 运行结果为:a=32767,b=-32768 }

一个整型变量数据取值范围在-32768 到 32767 之间,无法表示 小于-32768 或大于 32767 的数。遇到这种情况就发生“溢出”。但 运行不报错。它好象汽车里程表一样,达到最大值以后,又从最小 值开始计数。所以 32767 加 1 得不到 32768,而得到-32768。 2.4 实型数据 实型常量
10

2.4.1

在 C 语言中实型常量又称实数或浮点数,有两种表现形式: (1)十进制形式: 它由整数部分、小数点和小数部分三部分组成。当整数部分为0 或小数部分为0时都可省略,但小数点不能省略。例如3.14、10.8、 123.、.12、0.0等都是十进制数的表示形式,但该种表示形式不适 合表示太小或太大的数。 (2)指数形式: 它由三部分组成:尾数、大写字母 E(或小写字母 e) 、整型指 字母 e 或
(即 数。它适合表示比较小或比较大的数。字符 E 前必须有数字,且 E E 之前 尾 数 部

后的指数必须为整数。例如 3.0E+5 或 3.0e+5 都表示 3.0×105。 分)必须 1.23E-2 表示 1.230×10-2 或 0.0123。 2.4.2 实型变量
字母 e 或 E 后面的 指数部分 必须是整 数。 有数字。 10

实型变量又称浮点型变量,按能够表示数的精度,又分为单精度 (float) 、双精度(double)和长双精度(long double)

类型 float double long double
小结:

所占位数 32 64 128

所占字节数 4 8 16

有效数字 6~7 15~16 18~19

数值范围 -3.4×10 ~3.4×10
-38 38

-1.7×10-308~1.7×10308 -1.2×10-4932~1.2×104932

1. 变量的定义方法及常量的表示方法 2. 算术、赋值运算符及表达式 作业:习题二 3~5

10





内 容

注意点

配时

第二章

数据类型、运算符及表达式
5

复习:整型、实型变量的定义方法及常量的表示方法 2.5 字符型数据 字符常量

2.5.1

15

C 语言中用一对单引号括起来的单个字符,称为字符常量。 例如:‘a’、‘A’、‘1’等。 一个字符常量的值是该字符集中对应的编码值。 例如: 在 ASCII 字符集中, 字符常量'0'~'9'的 ASCII 编码值是 48~ 57。显然,'0'与数字 0 是不同的。 C 语言还有一种特殊形式的字符常量, 即转义字符型常量以反斜 杠“\”开头,后跟一个特定的字符转变为另外一种含义。 2.5.2 字符变量 字符变量是用来存放字符常量的,并且只能放一个字符,而不 是一个字符串。它的类型关键字用 char,占用 1 字节的内存单元。 例如: char c1, c2; c1= 'a'; c2= 'b'; 2.5.3 字符串常量 /*定义两个字符变量 c1,c2*/ /*给字符变量赋值*/
10 5 ‘a’ 和 ‘A’ 不 同。

1.字符串常量的定义 ? 字符串常量是用一对双引号括起来的字符序列。 ? 字符串中字符的个数称为字符串长度。 ? 长度为 0 的字符串(即一个字符都没有的字符串)称为空串, 表示为""(一对紧连的双引号) 。 例如:"How are you."、"Good morning."等,都是字符串常量, 其长度分别为 12 和 13(空格也是一个字符) 。如果反斜杠和双引号 作为字符串中的有效字符,则必须使用转义字符。 2.字符串的存储 C 语言规定:在存储字符串常量时,由系统在字符串的末尾自动

加一个'\0'作为字符串的结束标志。 2.6 算术运算符与算术表达式 C 语言运算符简介 >= || += -= * < / <= ! *= /= %= 等 % ++ == != -10

2.6.1

(1)算术运算符:+ (2)关系运算符:> (3)逻辑运算符:&& (4)赋值运算符:= (6)逗号运算符:,

(5)条件运算符: (三元) ? : (7)位运算符:&(二元) (8)指针运算符:* | ^ ~ << >>

&(一元)

(9)求字节数运算符:sizeof (10)强制类型转换运算符: (类型标识符) (11)分量运算符:. (12)下标运算符:[ ] (13)圆括号:( ) 2.6.2 算术运算符和算术表达式
15

->

1.基本的算术运算符 (1)+(加法运算符或取正值运算符,如 1+2、+2) ; (2)-(减法运算符或取负值运算符,如 2 -1、-2) ; (3)*(乘法运算符,如 1*2) ; (4)/ (除法运算符,如 5/2) ; (5)%(求余运算符,或称模运算符,如 7%5 的值为 2) 。 2.算术表达式和运算符的优先级与结合性 由算术运算符、括号以及操作对象组成的符合 C 语言语法规则 的表达式称为算术表达式。 3.算术运算中的类型转换 (1)自动类型转换 在 C 语言中,整型、实型和字符型数据间可以混合运算(因为
注意算术 运算符的 优先级与 结合性

15

字符数据与整型数据可以通用) 。如果一个运算符两侧的操作数的数 据类型不同,则系统按“先转换、后运算”的原则,首先将数据自 动转换成同一类型,然后在同一类型数据间进行运算。 (2)强制类型转换运算符 可以利用强制类型转换运算符将一个表达式转换成所需类型。 其一般格式为:(类型名)(表达式) 例如:(double)a (等价于(double)(a)) (int)(x + y) (float)5 / 2 /*将 x+y 的结果转换成 int 型*/ /*将 5 转换成实型,再除以 2(结果为 2.5)*/
10

4.自增、自减运算符 使单个变量的值增加 1 的运算符称为自增运算符,用”++”表 示。使单个变量的值减 1 的运算符称为自减运算符,用”- -”表示 自增、自减运算符都有两种用法: (1)前置运算──运算符放在变量之前: 运算式为:++变量、--变量 先使变量的值增 (或减)1, 然后再以变化后的值参与其他运算, 即先增减、后运算。例如:j = ++i,其中 i=2,先计算 i=i+1=3, 后赋值 j=3,所以结果是 i =3,j=3。 (2)后置运算:运算符放在变量之后:运算式为:变量++、变量-变量先参与其他运算,然后再使变量的值增(或减)1,即先运 算、 后增减。 例如: j=i++, 其中 i 的初值还是 2, 但此时是先赋值 j=i, 后计算 i=i+1=2+1=3,所以结果是 i =3,j =2。因此 j = ++i 和 j = 减运算符 i++两式中 j 的结果是不同的,前者 j=3,后者 j =2。
的结合方 向是“自 右 向 左”。 自增、自 10 整型变量 自增自减 后的值

10

小结:1. 变量的定义方法及常量的表示方法 2. 算术、赋值运算符及表达式 作业:习题二 6~8





内 容

注意点

配时

第二章

数据类型、运算符及表达式
5

复习:变量的定义方法及常量的表示方法 2.7 赋值运算符和赋值表达式 赋值运算符

2.7.1

10

1.赋值运算符 C 语言的赋值符号是“=”,它的作用是将赋值运算符右边表达 如 式的值赋给左边的变量。 例如:a = 5 x = (a + 3) * 5 / 2 2.复合赋值运算符 在赋值运算符“=”之前加上一个其他运算符,可以构成复合赋 值运算符。在“=”前加一个“+”运算符就是复合运算符“+=”。 例如: i + = 1 /*等价于 i = i + 1 */ a * = b - 2 /*等价于 a = a * (b- 2) */ r % = 3 /*等价于 r = r % 3*/ C 语言规定了如下 10 种复合赋值运算符: +=,-=,*=,/=,%=;&=,^=,|=,<<=,>>=; 其中前 5 个为复合算术运算符,后 5 个为复合位运算符。
名称 加赋值 减赋值 乘赋值 除赋值 模赋值 运算符 += -= *= /= %= 运算规则 a+=b 等价于 a=a+b a-=b 等价于 a=a-b a*=b 等价于 a=a*b a/=b 等价于 a=a/b a%=b 等价于 a=a%b
15 果 “=” 两 侧的类型 不一致, 在赋值时 要进行类 型转换。

/*将 5 赋给变量 a*/

/*将 (a+3) * 5 / 2 的值赋给变量 x*/

15

结合性

右结合

复合运算 符的表达 式如何展 开运算公 式

2.7.2

赋值表达式 格式:<变量> <赋值运算符 > < 表达式 >
赋值表达 式左边必 须 是 变 量。

1.赋值表达式

功能: 将赋值运算符右边“表达式”的值赋给左边的变量。 2.赋值表达式的值 赋值表达式的求解过程是:将赋值运算符右侧的表达式的值赋 给左边的变量。赋值表达式的值就是被赋值变量的值。任何一个

表达式都有一个值,赋值表达式也不例外。 例如:x=5 这个赋值表达式的值为 5(x 变量的值也是 5) 。 使用赋值表达式的过程中可能遇到下列问题: (1)赋值表达式中的“表达式”又可以是一个赋值表达式。例 如:a = ( b=1 ),把b=1的值赋给a,所以整个赋值表达式值就等于 1,即a = 1。赋值运算符按照“自右向左”的组合顺序,因此“a = ( b=1 )”就等价于“a = b=1”。 (2)赋值表达式也可以包含复合的赋值运算符。如a+=a-=a*=a, 如果a的初值是2,此赋值表达式的运算过程是: 先计算“a * = a”的值,即相当于a = a * a=2 * 2=4。 再计算“a - = 4”的值,即相当于a = a - 4=4 - 4=0。 最后计算“a+ = 0”的值,即相当于a = a + 0=0 + 0=0。 2.8 逗号运算符和逗号表达式 逗号运算符
15 10 10

2.8.1

C语言提供一种特殊的运算符,即逗号运算符。逗号运算符的优 先级是C语言中所有运算符中最低的,结合方向为左结合。 2.8.2 逗号表达式

逗号表达式是由一系列逗号将表达式连接起来的式子。逗号表 达式的一般形式:表达式1, 表达式2, ??, 表达式n 逗号表达式的求解过程:由逗号隔开的一对表达式从自左至右依次 计算各表达式的值,“表达式 n”的值即为整个逗号表达式的值。例 如:逗号表达式“a = 2 + 3, a=a * 6, a/10”,先求解 a = 2 +3, 得 a = 5;再求 a * 6 ,得 a=30,再求 a/10 ,即 30/10=3。所以, 最后逗号表达式的值等于 3,而 a = 30。 又例如:求逗号表达式“(a = 2 * 3, a * 4), a + 4”的值, 先求解 a = 2 * 3, 得 a=6; 再求 a * 4=24; 最后求解 a + 4, 即 6+4=10, 所以逗号表达式的值为 10,而 a=6。 小结: 1. 变量初始化 2. 类型转换 作业:习题二 9~11
10





内 容

注意点

配时

第三章
复习:运算符的优先级与结合性 3.1 顺序结构的语句

顺序结构

5

30

C 语言程序是由 C 语句构成, 一个 C 语言程序中包含若干条 C 语 句,每一个语句用来完成一定的功能,每一个语句以分号(; )结束。 C 语言的语句可以分为以下 5 类: 1. 控制语句,完成一定的控制功能。 C 有 9 种控制语句。例: if(x>y)z=x ; else z=y ; 2. 函数调用语句。由一次函数调用加一个分号构成一个语句。 例:printf(“This is a pen”); 3. 表达式语句。由一个表达式构成一个语句。例:a=3; i++; 4. 空语句。下面是一个空语句:例: ; 复合语句 中最后一 个语句中 最后的分 号不能忽 略不写。

5. 复合语句。例: { z=x+y; t=z/100; printf(“%f”,t); }

10

3.2

字符数据的输入输出 为了让计算机处理各种数据,首先就应该把源数据输入到计算

机中;计算机处理结束后,再将目标数据以人能识别的方式输出。 C 语言没有提供专门的输入输出语句,其输入输出操作是由 C 编译系统提供的库函数来实现的。 3.2.1 putchar( )函数
10

putchar( )函数即字符输出函数。 作用: 向终端输出一个字符。 格式:putchar(ch); 例 3.1 输出单个字符。
10

#include<stdio.h> main( )

{

char a,b,c; a='B';b='O';c='Y'; putchar(a); putchar(b); putchar(c); putchar('\n'); }

运行结果为:BOY 3.2.2 getchar( )函数
15

getchar( )函数即字符输入函数。 作 用 : 从 终 端(或系统隐含的输入设备)输入一个字符。 getchar( )函数没有参数。 格式:getchar( ); 例 3.2 将输入的小写字母转换成大写字母后输出。 /*编译预处理命令:文件包含*/ #include<stdio.h> main( ) { char ch1, ch2, ch3; ch1=getchar( ); /*输入字母分别赋给 ch1 ,ch2 ,ch3 */ ch2=getchar( ); ch3=getchar( ); ch1-=32; ch2-=32; /*将小字母转换成大写字母 */ ch3-=32; }
#include "stdio.h

putchar(ch1); putchar(ch2) ; putchar(ch3); 运行结果为:输入 new↙ 输出 NEW

从键盘输入字符时,要求 new 连续输入再回车,若输入 n↙e↙ " w↙,则字符 n 赋给 ch1,字符↙赋给 ch2,字符 e 赋给 ch3 了。 程序(或文件)的开头必须加上编译预处理命令。 小结: 1. 2. getchar 函数的作用、调用形式和应用 putchar 函数的作用、调用形式和应用 1~3


注意:程序中如果使用 putchar()函数和 getchar()函数时,在 #include
<stdio.h > 10

作业:技能训练三





内 容

注意点

配时

第三章

顺序结构
5

复习:getchar 和 putchar 函数的调用形式和注意事项 3.3 格式输入与输出 printf( )函数

3.3.1

5

printf( )函数的作用是向计算机系统默认的输出设备(一般指 终端或显示器)输出一个或多个任意类型的数据。 格式:printf(格式控制,输出列表);例如:printf("s=%f",s); (1)格式控制 格式说明:由“%”和格式字符组成,如%d,%f 等,作用是将要输出 的数据转换为指定的格式后输出。 注意:%md: m 为指定的输出的宽度。小于 m,则左端补空格。 大于 m,输出实际位数。 如:printf(“%4d,%4d”,a,b); 若 a=123, d=12345 %mc,%ms: %-ms 若字符串长度小于 m,则向左对齐。 如:printf(“%3s,%7s,%-7s”,c,c,c); 若:c=China %m.nf,%-m.nf: 如:printf(“%10.2f,%-7.2f”,a,a); 若:a=456.123 (2)输出列表 是需要输出的数据项。如果要输出的数据项多于 1 个,则相邻 2 个数据项之间用逗号分开。 3.3.2 scanf( )函数
scanf( ) 函数格式 控制的使 用 格式控制 10 5

则输出 ?123,12345

则输出: China,? ? China,China? ?

则输出: 456.12,456.12

5

10

在程序中给计算机提供数据,可以用赋值语句,也可以用输入 函数。scanf( )函数的功能是用来输入任何类型的数据,可以同时 输入多个同类型的或不同类型的数据。 scanf( )函数的一般格式为: scanf(格式控制,地址表列);

“格式控制”的含义同 printf( )函数,“地址表列”是由若干 个地址组成的表列,可以是变量的地址,或字符串的首地址。 (1)格式说明 它主要有“%”和格式符组成的,如%d,%f 等,作用是将输入数 据转换为指定格式后存入到由地址表所指的相应变量中。 (2)地址表 scanf( )函数中的“地址表”部分是由变量的地址组成的,如 果有多个变量,则各变量之间用逗号隔开。地址运算符为“&”,如 变量 a 的地址可以写为&a。 3.4 顺序结构程序设计 在顺序结构程序中,各语句是按照位置的先后次序,顺序执行 的,且每个语句都会被执行到。 (1)格式控制 格式控制由双引号括起来的字符串,主要包括格式说明和需要 原样输出的字符。 ①格式说明: 由“%”和格式字符组成,如%d,%f 等,作用是将要输出的数据 转换为指定的格式后输出。 ②普通字符 需要原样输出的字符。如“printf("radius=%f", radius);” 语句中的“radius=”就是普通字符。 (2)输出列表 是需要输出的数据项。如果要输出的数据项多于 1 个,则相邻 2 个数据项之间用逗号分开。 注意:“格式字符串”中的格式说明,要求与“输出列表”中输出 项的数据类型一致。 小结:scanf 函数和 printf 函数的应用 作业:技能训练三 4~6
10 10 5 5 10

例如:printf ("s=%f",s);
10





内 容

注意点

配时

第四章

选择结构
5 15

复习:scanf 函数和 printf 函数的格式 三种基本结构: 1.顺序结构:先执行 A 操作,再执行 B 操作,两者是顺序执行 的关系。如图 a 所示

A

S

B

(a)图

A

B

(b)图

2.选择结构:S 代表一个条件,当条件 S 为“真”时,执行 A 操 作;当条件 S 为“假”时,执行 B 操作。如图 b 所示 3.循环结构:是在给定的条件下,重复执行某段程序,直到条件 不满足为止。 while 型循环结构:当条件 S 为“真”时,反复执行 A 操作。直到条 件为“假”为止。
入口 入口



A S


S 假
出口



出口

A

do-while 型循环结构:先执行 A 操作,再判断 S 是否为“真” ,若 S 为“真” ,再执行 A,如此反复,直到条件 S 为“假”为止。 4.1 问题的引出 前面学习的知识已经可以编写一些简单的顺序结构程序,但是 有些问题用顺序结构程序无法解决,如:输入三角形的三边 a,b,c,
10

判断是否能构成三角形,若能构成三角形,则求出三角形的周长和 面积。这类问题必须让计算机按给定的条件进行分析、比较和判断, 并按判断后的不同情况进行不同的处理,这种情况属于选择结构程 序设计。 在 C 语言中选择结构是用 if 语句实现的。 if 语句最常用的形式 如下: if(表达式) else 例如: if (x>0) else 语句 1; 语句 2; y=1; y=-1;

其中 x>0 是一个关系表达式;“>”是一个关系运算符。 4.2 关系运算符和关系表达式 关系运算符 <=( 小 于 或 等 !=(不等于)
“等于” 关系运算 符是双等 号“==” 10

4.2.1

C 语 言 提 供 以 下 6 种 关 系 运 算 符 : <( 小 于 ) 于) 4.2.2 >(大于) 关系表达式 >=(大于或等于) ==(等于)

1.关系表达式 例如,下面的关系表达式都是合法的。 a>b,a+b>c-d,(a=3)<=(b=5),'a'>='b',(a>b)==(b>c) 2.关系表达式的值 关系表达式的值是一个逻辑值。即“真”或“假”。由于 C 语 言没有逻辑型数据,所以用整数“1”代表“真”,用整数“0”代 表“假”。 4.3 逻辑运算符及其表达式 逻辑运算符

4.3.1

15

1. 逻辑运算符及其运算规则 (1)逻辑运算符 C 语言提供以下 3 种逻辑运算符: && || ! 逻辑与(相当于“同时”) 逻辑或(相当于“或者”) 逻辑非(相当于“否定”)

(2)运算规则 ? &&:当且仅当两个运算量的值都为“真”时,运算结果为 “真”,否则为“假”。 ? ||:当且仅当两个运算量的值都为假时,运算结果为“假”, 否则为“真”。 ? !: 当运算量的值为“真”时,运算结果为“假”;当运算 量的值为“假”时,运算结果为“真”。
a 真 真 假 假 b 真 假 真 假 a&&b 真 假 假 假 a||b 真 真 真 假 !a 假 假 真 真

2.逻辑运算符的优先级 (1)逻辑非的优先级最高,逻辑与次之,逻辑或最低,即: ! (非) → &&(与) → ||(或)
5

(2)与其他运算符的优先级相比 !→ 算术运算 → 关系运算 → &&→ || → 赋值运算 4.3.2 逻辑表达式
10

对于逻辑 1.逻辑表达式 用逻辑运算符将 1 个或多个表达式连接起来,进行逻辑运算的 与运算, 如果第一 个操作数 例如: (a>b)&&(x>y)||(a<=b) 被判定为 逻辑表达式的值也是一个逻辑值(非“真”即“假”) 。 “假”, 系统不再 2.逻辑量的真假判定──0 和非 0 判定或求 C 语言中用整数“1”代表“真”、用“0”代表“假”。但在判 解第二操 断一个数据的“真”或“假”时,却以 0 和非 0 为根据:如果为 0, 作数。

式子。在 C 语言中,用逻辑表达式表示多个条件的组合。

10

则判定为“假”;如果为非 0,则判定为“真”。 小结:关系表达式和逻辑表达式的运算 作业:技能训练四 1~2

10





内 容

注意点

配时

第四章

选择结构
5

复习:关系表达式和逻辑表达式的运算 4.4 if 语句 if 语句
15

4.4.1

1.第一种格式 格式:if (表达式) 语句 1 ;
if 语句中

功能:首先计算表达式的值,若值为“真”(非 0) ,则执行语句 1; 的“表达 表达式的值为“假”(0) ,则直接转到此 if 语句的下一条 式”必须 语句去执行。 (1)if 语句中的“表达式”必须用“( )”括起来。 (2)当 if(表达式)后面的语句,仅由一条语句构成时,可不使 用大括号,但是语句 1 由两条或两条以上语句构成,就必须用大括号 “{ }”括起来构成复合语句。
用 “()” 括起来

10

例 4.1

比较两个数,按由大到小输出。

#include “stdio.h” main( ) { int a,b,x; scanf("a=%d,b=%d",&a,&b); if (a<b) { x=a; a=b; b=x; } /*交换 a 与 b 单元的内容*/

printf("a=%d,b=%d",a,b); }

2.第二种格式 if(表达式) else 语句 1; 语句 2;

10

功能:首先计算表达式的值,若表达式的值为“真”(非 0 或 T) , 则执行语句 1;表达式的值为“假”(0 或 F) ,则执行语句 2。

15

3.第三种格式: if (表达式 1) 语句 1; else else if (表达式 2) 语句 2; if (表达式 3) 语句 3; ? else if (表达式 n) 语句 n; else 语句 n+1;

4.4.2

if 语句的嵌套

15

if 语句中又包含一个或多个 if 语句称为 if 语句的嵌套。 形式:if() if() 语句 1; else else if() 语句 3; else 语句 4; 在嵌套时内嵌的 if 语句既可以嵌套在 if 子句中,也可以嵌套 在 else 子句中, 此程序的内层的 if 语句嵌套在外层的 if 语句的 else 子句中。 if 与 else 的匹配原则:else 与距离它最近的未配对的 if 配对。 4.4.3 条件运算符
10 if、else 匹 配 原 则 :else 与距离它 最近的未 配对的 if 配对。

语句 2 ;

条件运算符要求有 3 个操作对象,称三目(元)运算符。 条件表达式的格式: 表达式 1?表达式 2:表达式 3

如果“表达式 1”的值为非 0(即真), 则运算结果等于“表达 式 2”的值;否则,运算结果等于“表达式 3”的值。 例如:x=a>b ? a:b 当 a=2 b=1 时,x=2

条件运算符的优先级,高于赋值运算符,但低于关系运算符和 算术运算符。其结合性为“从右到左”(即右结合性) 。 小结: 1. if 语句的三种形式及注意事项 2. if 语句的嵌套及 if 和 else 的配对关系 作业:技能训练四 3~4
10





内 容

注意点

配时

第四章
复习:if 和 else 的配对关系 4.5 switch 语句

选择结构
5 10

利用 if 语句的基本形式,可以实现只有两个分支的选择;利用 if 语句的嵌套形式,可以实现多分支的选择。但分支越多,则嵌套 的层次就越多,导致程序冗长,而且可读性降低。因此 C 语言提供 了 switch 语句直接处理多分支的选择。 1.switch 语句的一般形式 switch(表达式) {case 常量表达式 1:语句 1;
switch 后 面的“表 达式”, 可 以 是 int、 char 和枚举型 中 的 一 种。 15

[break;] case 常量表达式 2:语句 2;

[break;] ...... case 常量表达式n:语句 n;

[break;] [default:语句 n+1;[break; ]] 2.执行过程 (1)当 switch 后面“表达式”的值,与某个 case 后面的“常量 表达式”的值相同时,就执行该 case 后面的语句,当执行到 break 语句时,跳出 switch 语句,转向执行 switch 语句的下一条。若后 面没有加上 break 语句, 将自动转到该 case 语句的后面的语句去执 行,直到遇到 switch 语句的右大括号或是遇到 break 语句为止,结 束 switch 语句。 (2) 如果没有任何一个 case 后面的“常量表达式”的值, 与“表 }
15

达式”的值匹配, 则执行 default 后面的语句。 然后, 再执行 switch 语句的下一条。 (3)如果没有 default 部分,则将不执行 switch 语句中的任何 语句,而直接转到 switch 语句后面的语句去执行。 (4)各 case 及 default 子句的先后次序,不影响程序执行结果 (5)多个 case 子句,可共用同一语句。 (6)用 switch 语句实现的多分支结构程序,完全可以用 if 语句 或 if 语句的嵌套来实现。 注意: ? switch 后面的“表达式”, 可以是 int、 char 和枚举型中的一种。 ? 每个 case 后面“常量表达式”的值,必须各不相同。 例 4.6 从键盘上输入一个百分制成绩 score,按下列原则输出等级 ? score≥90, ? 80≤score<90, ? 70≤score<80, ? 60≤score<70, ? score<60, main( ) { int score, grade; 等级为 A; 等级为 B; 等级为 C; 等级为 D; 等级为 E。
15 每个 case 后面“常 量 表 达 式 ” 的 值,必须 各不相同 10

printf("Input a score(0~100): "); scanf("%d", &score); if (score>=0 && score<=100) { grade = score/10;

/*将成绩整除 10,转化成 switch 语句中的 case 标号*/ switch (grade) { case case 10: 9: printf("grade=A\n"); break;

/*标号 10 和 9 都执行本行语句*/ case case case 8: printf("grade=B\n"); break; 7: printf("grade=C\n"); break; 6: printf("grade=D\n"); break; break; } }

default: printf("grade=E\n"); else

printf("The score is out of range!\n"); /*成绩超出范围时,提示出错*/ }
10

运行结果: 第一次运行:Input a score(0~100): 85↙ 则输出 grade=B

第二次运行:Input a score(0~100): -60 ↙ 则输出 The score is out of range!
10

小结: 1. 2. switch 语句的基本形式和用法 switch 语句的注意事项

作业:技能训练四 5





内 容

注意点

配时

第四章

选择结构
10

复习:switch 语句的基本形式和用法 4.6 选择结构程序设计举例
10

( x ? 1) ? x ? 例 4.7 有一函数 y ? ?2 x ? 1 (1 ? x ? 10) 编写一程序,输入 x 值,输 ?3x ? 1 ( x ? 10) ? 出对应的 y 值。
main( ) { int x,y; printf("input x:"); scanf("%d",&x); if(x<1) else y=x;

15

if(x<10) y=2*x-1;

else

y=3*x+1;

printf("y=%d\n",y);} 运行结果:若输入 input x:5↙ 则输出:y=9 例 4.8 求一元二次方程 ax2+bx+c=0 的解(a≠0) 。 "math.h"
10 10

#include main( ) {

float a,b,c,disc,x1,x2,p,q; scanf("%f,%f,%f", &a, &b, &c); /*输入一元二次方程的系数 a,b,c*/ disc=b*b-4*a*c;
15

if (fabs(disc)<=1e-6) /*fabs( )为绝对值函数*/ printf("x1=x2=%7.2f\n",-b/(2*a)); /*输出两个相等的实根*/ else { if (disc>1e-6)

{ x1=(-b+sqrt(disc))/(2*a); /*求出两个不相等的实根*/ x2=(-b-sqrt(disc))/(2*a); printf("x1=%7.2f,x2=%7.2f\n", x1, x2); } else { p=-b/(2*a);
实数在计 算机中存 储时,经 常会有一 些微小误 差

/*求出两个共轭复根*/ q=sqrt(fabs(disc))/(2*a); printf(“x1=%7.2f + %7.2f i\n”, p, q); /*输出两个共轭复根*/ printf("x2=%7.2f - %7.2f i\n", p, q); } } }

10

从上例程序中可以看出,由于实数在计算机中存储时,经常会 有一些微小误差,判断 disc 是否为 0 的方法是通过判断 disc 的绝 对值是否小于一个很小的数。
10

小结: 1. if 和 switch 语句在程序中的应用 2. if 和 switch 语句在程序中嵌套的应用 作业:技能训练四 6





内 容

注意点

配时

第五章
复习:if 和 else 的配对关系

循环结构
5

while 语句用来实现“当型”循环结构。 其一般格式为 while(表达式) 语句;

当表达式为非 0 值时,执行 while 语句中内嵌语句,其执行过 程如图所示。其特点是:先判断表达式,后执行语句。 5.2 1. while 语句 一般形式:while(表达式) 语句 (即循环体部分)
10

2.执行过程:

① 判断“表达式”的值。如果其值为非 0,则转向②;否则转③。 ② 执行循环体,然后转向①。 ③ 执行 while 语句的下一条。 例5.2 用 while 语句求 1~100 的累加和。
i<=10 真 sum=sum+i i=i+1 假 i=1

循环体 如果包 含一个 以上的 语句, 应 该用 { } 号括起 来, 以复 合语句 形式出 现。

10

main( ) { int i=1,sum=0; while( i<=100 ) { sum += i; i++; }

printf("sum=%d\n",sum); 运行结果为:sum=5050 注意:

}

? 循环体如果包含一个以上的语句,应该用{ }号括起来,以 复合语句形式出现。 循环体中应有使循环趋向于结束的语句。例如本例中当 i>100 时循环结束,所以在循环体内一定要有 i++语句使 i 变量增值,才能 最终使 i>100 循环结束。如果无 i++语句,i 的值始终不改变,循环 永不结束。
15

5.3

do-while 语句 do-while 语句的特点是先执行循环体,然后判断循环条件是否

成立。其一般格式为: do { 循环体语句; /*本行的分号不能缺省*/

}while(表达式);

其特点是:先执行循环体语句,然后再判断表达式,如图所示:

while 循环是 先判断 执行过程: 后执行, ① 执行循环体语句。 而 ② 判断“表达式”的值。如果其值为非 0,则转向①;否则转③。 do?whi le 循环 ③ 执行 do?while 的下一条语句。 是先执 行后判 例 5.3 用 do?while 语句求解 1~100 的累加和。

10

main( ) { int i=1, sum=0; do { sum += i; i++; }

断。

while(i<=100); printf("sum=%d\n",sum); } 运行结果为: sum=5050
10

例 5.4

while 和 do?while 循环的比较。

(1)main( ) { int s=0,i; scanf ("%d",&i); while (i<=10) { s=s+i; i++; } }

printf("s=%d\n",s); 运行结果:输入1 再运行一次 输入11 则输出 s=0

则输出s=55

10

(2)main( ) { int s=0,i;

scanf ("%d",&i); do { s=s+i; i++; }

while (i<=10); printf("s=%d\n", s); }

运行结果:输入1 再运行一次 输入11

则输出s=55

则输出 s=11

10

可以看到: 当输入 i 的值小于或等于 10 时, 二者得到结果相同。 而当 i>10 时, 二者结果就不同了。 这是因为此时对 while 循环来说, 一次也不执行循环体,而对 do?while 循环语句来说则要执行一次 循环体。while 循环是先判断后执行,而 do?while 循环是先执行 后判断。
10

小结:掌握 while 循环语句 do-while 循环语句的基本流程 作业:技能训练五 1~3





内 容

注意点

配时

第五章

循环结构
5

复习:while 语句和 do-while 循环语句的区别 5.4 for 语句
10

一、格式:

for(表达式 1;表达式 2;表达式 3) 语 句 (即循环体部分)
10 求解表达式 1 假 表达式 1、 表达式 2 和表达式 3 中可以 部 分 缺 省,甚至 全间的分 号不能省 略

表达式 2 真 语句

求解表达式 3

for 语句的下一个语句

二、执行过程: ① ② 求解表达式 1。 判断表达式 2。如果其值非 0,则执行 for 语句中 指定的内嵌语句,然后执行③;否则,转至⑤。 ③ ④ ⑤ 求解表达式 3。 转向②继续执行。 循环结束,执行 for 语句的下一条语句。

10

注意:表达式 1、表达式 2 和表达式 3 中可以部分缺省,甚至全部缺 省,但其间的分号不能省略。循环体语句中由一条以上语句

构成时必须用{

}号括起来构成一个复合语句。
10

例如:for (i=1;i<=100;i++) s=s+i; 执行过程相当于以下语句: i=1; while(i<=100) { s=s+i; i++; }

显然,用 for 语句简单、方便。对于上面 for 语句的一般形式 也可以改写成 while 循环的形式: 表达式 1; while (表达式 2) { 语句; 表达式 3; } 注意: ? 表达式 1、表达式 2 和表达式 3 中可以部分缺省,甚至全部缺 省,但其间的分号不能省略。 ? 循环体语句中由一条以上语句构成时必须用{ }号括起来构成 一个复合语句。 例 5.5 求 1~100 的累加和。 main( ) { int i,sum=0; for(i=1; i<=100; i++) sum+=i; printf("sum=%d\n",sum); } 运行结果为:sum=5050 例 5.6 求 t=1*2*3*4*5??*n。 main( ) { int n, i;
10 10

float

t=1.0;

printf("input n:"); scanf("%d",&n); for (i=1;i<=n;i++) t=t*i; printf("t=%10.0f",t); } 则输出 t=120

运行结果为:input n: 5↙

此程序中变量 t 中存放的是 n!,当 n 较大时,阶乘的值会很 大,所以定义为 float 型。 例 5.7 求 s=1+1/2+1/3+??1/n。
15

main( ) { int i,n; float s=1; printf("input n:"); scanf("%d",&n); for(i=2;i<=n;i++) s=s+1.0/i; printf("s=%f\n",s);} 运行结果为: 则输出 input n:4↙ s=2.083333

此程序注意求 1/2、1/3??时,如果两个操作数都是 int 型, 完成的是整除运算,结果为 0,则最后 s 的值是 1,这是错误的。应 使除数和被除数其中至少有一个数为实型才可以。

小结:for 循环语句在程序中的执行过程和用法 作业:技能训练五 4~5

10





内 容

注意点

配时

第五章
复习:for 循环语句的书写格式 5.5 循环的嵌套

循环结构
5

一个循环体内又包含另一个完整的循环结构,称为循环嵌套。 3 种循环(while、do?while、for)可以互相嵌套。
(1)while( ) { … while( ) {…} } (4) for( ; ; ) { … ) (2)while( ) { do {…} while( ); … (5)for( ; ; ) { for( ; ; ) {…} } } } while( ) } (6) do while( ); { … for( ; ;) {…} … (3) { do … do {…}

10

while( {…} …

例1. 求 100-200 间的全部素数。 #include”stdio.h” main( )

一个循环 体内又包 含另一个 } while( ); 完整的循 环结构, 称为循环 嵌套

10

{ int n,i; for(n=101;n<=200;n++) { for(i=2;i<n;i++) if(n%i==0) if(n==i) break; printf(“N=%5d”,n); } }
15

例2. 用 1 元纸币兑换 1 分,2 分,5 分的硬币,要求兑换硬币的总 数为 50 枚, 问共有多少种换法?每种换法中各种硬币分别为 多少? #include”stdio.h”

main(

)

{ int x,y,z,n=0; for(x=0;x<=20;x++) for(y=0;y<=50;y++) { z=100-5*x-2*y; if(x+y+z==50) { n++; }

printf(“%d %d %d\n”,x,y,z); } printf(“Count=%d\n”,n); } 例3. 编程:显示如下图案。 #include “stdio.h” main( ) { int j,i; for(i=1;i<=5;i++) { putchar(‘\n’); for(j=0;j<i;j++) putchar(‘ * ’); 例 4. 求 } } * * * * *

10

* * * * * * * * * *

? n!
n ?1

10

(即求 1!+2!+3!+?+10!)

# include "stdio.h" main ( ) { int i, j , sum ? 0, n; for (i ? 1; i ?? 10; i ? ? ) { n ? 1; for ( j ? 1; j ?? i; j ? ? ) n? ? j; sum ? ? n; } pr int f (" sum ? %d ", sum); }

10

例 5. 输出 200-300 之间的数。 满足条件:三个数字之积为 42,三个数和之和为 12。

# include "stdio.h" main ( ) { int i ? 2, j , k ; for ( j ? 0; j ?? 9; j ? ?) for (k ? 0; k ?? 9; k ? ?) if (i ? j ? k ?? 42 & &i ? j ? k ?? 12) pr int f ("%d %d %d ", i, j , k ); }
例 6. 已知 x,y,z 都是一位整数,组成两个三位数 xyz 和 yzz 且 xyz+yzz=532,编程求出 x,y,z 分别代表什么数字。

10

# include "stdio.h" main ( ) { int x, y, z , i; for ( x ? 1; x ?? 9; x ? ?) for ( y ? 1; y ?? 9; y ? ?) for ( z ? 0; z ?? 9;??) { i ? 100 ? ?10 ? y ? z ? 100 ? y ? 10 ? z ? z ) if (i ?? 532) pr int f (" x ? %d , y ? %d , z ? %d ", x, y, z ); } }

10

小结:while、do-while、for 循环语句的执行过程和用法 作业:技能训练五 6~7
10





内 容

注意点

配时

第五章

循环结构
5

复习:for 循环在程序中的执行过程和用法 5.6 break 语句和 continue 语句

1.break 语句 格 功 式: break; 能:在循环中当满足特定条件时,使用 break 语句强行结 束循环,转向执行循环语句的下一条语句。 执行过程:终止 switch 语句或循环语句的执行,即跳出这两种 语句,而转入下一语句执行。 如:for(r=1;r<=10;r++) { s=3.14*r*r; if(s>100) break; printf(“%f”,s); 注 例 5.8 意: (1) }
break 语 句只能用 于循环语 句 或

10

10

switch 语 句中。

break 语句应用。 #include “stdio.h” main( ) { int r; float pi=3.14159,s; for (r=1;r<=10;r++) { s=pi*r*r; if (s>100) break; printf("r=%d,s=%f\n",r,s); } }
循环语句 可以嵌套 使用。 15

运行结果为:
10

程序的作用是计算 r=1 到 r=10 时的圆的面积,直到面积大于 100 为止。从上面的循环可以看到:当 s>100 时,执行 break 语句, 提前结束循环,即不再继续执行其余的几次循环。 2.continue 语句 格 式: continue; 功 能:结束本次循环,即跳过循环体中下面未执行的语句, break 能 继续进行下一次循环。 用于循环
switch 语 句 中 , continue 只能用于 循环语句 中 10

执行过程:终止当前循环,跳过循环体中位于 continue 语句后 语 句 和 面的语句,而立即开始下一轮循环。 例 5.9 将 100~200 之间的不能被 3 整除的数输出。 main( ) { int n; for(n=100; n<=200; n++) { if (n%3==0) printf("%d ",n); } continue; }

10

当 n 能被 3 整除时,执行 contonue 语句,结束本次循环,即跳 过 printf( )函数,进行下一次循环;当 n 不能被 3 整除时才执行 printf( )函数,也进行下一次循环,直到 n>200 停止循环。 注意: ? break 能用于循环语句和 switch 语句中,continue 只能用于 循环语句中。 ? 循环嵌套时,break 和 continue 只影响包含它们的最内层循 环,与外层循环无关。 小结: 1.break 语句的执行过程和用法 2.continue 语句的执行过程和用法 作业:技能训练五 8~9
10 10





内 容

注意点

配时

第五章

循环结构
10

复习:break 语句和 continue 语句的区别 5.7 循环程序举例
10

例 5.10

输出 100~200 之间的全部素数。所谓素数 n 是指,除 1 和

n 之外,不能被 2~(n-1)之间的任何整数整除。 #include “stdio.h” main( ) { int i, j, n=0; for(i=101 ; i<=200; i+=2) /*外循环:为内循环提供一个整数 i*/ { for(j=2; j<=i-1; j++) /*内循环:判断整数 i 是否是素数*/ if(i%j==0) if(j >= i ) { break; /*整数 i 是素数:输出,计数器加 1*/
循环嵌套 时, break 和 continue 只影响包 含它们的 最内层循 环,与外 层循环无 关。

printf("%4d",i); n++; } if(n%10==0)printf("\n");

} }
10

运行结果为: 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 例 5.11 求 Fibonacci 数列的前 20 个数。该数列的生成方法为:

F1=1,F2=1,Fn=Fn-1+Fn-2(n>=3) ,即从第 3 个数开始,每个数 等于前 2 个数之和。 #include “stdio.h” main( ) { long int f1=1,f2=1; int i; for(i=1 ; i<=10; i++ ) /*1 组 2 个,10 组 20 个数*/

10

10

{

printf("%15ld%15ld", f1, f2); /*输出当前的 2 个数*/

if(i%2==0) printf(“\n”); f1 += f2; f2 += f1; 运行结果为: 1 5 34 233 1597 例 5.12 用 1 8 55 377 2584 2 13 89 610 4181 3 21 144 987 6765
10

/*输出 2 次(4 个数) ,换行*/

} }

/*计算下 2 个数*/

?

1 1 1 ? 1 ? ? ? 公式,求 ? ? ? ? ? 的近似值,直到最后一 4 3 5 7

项绝对值小于 10-6 为止。 #include “stdio.h” # include"math.h" main( ) { int s; float n,t,pi; t=1;pi=0;n=1.0;s=1; while(fabs(t)>=1e-6) { pi=pi+t; s=-s; pi=pi*4; printf("pi=%10.6f\n",pi);} 小结: 1.while 循环语句的应用 2.do-while 循环语句的应用 3.for 循环语句的应用 作业:技能训练五 10~11
10 10 10

n=n+2; }

t=s/n;





内 容

注意点

配时

第六章




5

复习:while、do-while 循环和 for 循环的执行过程和用法 6.1 一维数组

6.1.1 一维数组的定义
10

数据类型

数组名[常量表达式][,数组名 2[常量表达 2]?];

例如:int a[3],b[4]; 定义了两个整型数组 a 和 b,其中 a 数组中有 3 个元素,b 数组 中有 4 个元素这些元素都是整型数据。 (1) 数组名定名规则与变量名相同,遵循标识符定名规则。 (2) 数组名后用方括弧括常量表达式。 (3) 表示数组长度的表达式,必须是正整型或符号型常量。 (4) C 语言不允许定义动态数组。 (5) [常量表达式]表示元素的个数。 (6) 相同类型的数组和变量可以在一个类型说明符下一起说 明,互相之间用逗号隔开。 6.1.2 一维数组中元素的引用
数组元素 的下标从 0 开始计 数。 10

数组名[下标表达式] 例如:a[3] C 规定只能逐个引用数组元素,而不能一次引用整个数组。

10

冒泡法排序:从键盘输入 4 个整数,从小到大顺序排列。 如果输入:5 2 4 1 则输出:1 2 4 5

main ?

?

{ int a[5], i, j , t ; for (i ? 1; i ?? 4; i ? ?) scanf ("%d " ,&a[i ]; for ( j ? 1; j ?? 4; j ? ?) for (i ? 1; i ?? 4 ? j; i ? ?) if (a[i ] ? a[i ? 1]) {t ? a[i ]; a[i ] ? a[i ? 1]; a[i ? 1] ? t ;} for (i ? 1; i ? 4; i ? ?) pr int f ("%d " , a[i ]);}

10

15

第1趟 5 2 4 1 ① 第2趟 2 4 1 ① 第3趟 2 1 ① 注 解: 1. 4 个数 a[4],i 2. 3 趟 j 2 5 4 1 ② 2 4 1 ② 1 2 结果
10

2 4 5 1 ③ 2 1 4 结果

2 4 1 5 结果

在运行 C 语言程序 过程中, 系统并不 自动检验 数组元素 的下标是 否越界。

每趟比较(4-j)次 两两比较 3. 互换 a[i]>[i+1]

a[i]←a[i+1]
?t ?

4. 输出数据 6.1.3 一维数组元素的初始化 (1)在定义数组时对数组元素赋初值。 如:static int a[5]={1,2,3,4,5};
10

(2)可以只给一部分元素赋初值。 如:static int a[10]={1,2,3,4};

(3)如果想使一个数组中全部元素值为 0,可写成。 如:static int a[10]; 系统自动赋 0。

(4)在对全部数组元素 赋初值时,可以不指定数组长度。 ......

小结: 1.一维数组的定义 2.一维数组的引用 3.一维数组的初始化 作业:技能训练六 1

10





内 容

注意点

配时

第六章
复习:一维数组的概念及定义方法 6.2 二维数组




5

5

6.2.1 . 二维数组的定义 1. 定义:类型说明符 数组名[常量表达式][常量表达式];

如:int a[3][2],b[5][10]; 2.排列顺序:按行存放。 6.2.2 . 二维数组元素的引用 1.表示形式:数组名[下标表达式][下标表达式] 如:a[3][2]; 2.注意: (1)数组元素可以被赋值。 如:a[0][1]=10; (2)数组元素可以出现在表达式中。 如:a[1][1]= a[0][0]*2; (3)二维数组元素的地址是通过“&”运算得到。 如:a[1][1]地址用&a[1][1]表示。 从键盘上为二维数组元素输入数据,一般需用双重循环。 两种方式:① 按行输入方式 for(i=0;i<3;i++) for(j=0;j<2;j++) scanf(“%d”,&a[i][j] ); 6.2.3 二维数组的初始化 1. 用下面方法对二维数组初始化: ② 按列输入方式
i和j是 行号和列 号,是从 0 开始计 数的。

10

a[2-1][2*2-1];

for(j=0;j<2;j++) for(i=0;i<3;i++) scanf(“%d”,&a[i][j] );

15

在定义二维数组的同时,可用以下几种方法对二维数组初始化。 ① 将所有数据写在一个大括号内,以逗号分隔,按数组元素在 内存中的排列顺序对其赋值。 例如:int a[2][3]={0 , 1 , 2 , 3 , 4 , 5 } ;

② 分行对数组元素赋值。 例如:int a[2][3]={{0 , 1 , 2} , {4 , 5 , 6}} ; 例如:int a[2][3]={{1} , {4}} ;

③ 对部分元素赋值。

④ 若对全部元素赋初值,则定义时第一维长度可缺省。可由第 二维长度(即列数) ,自动确定第一维长度(即行数) 。 例如:int a[ ][3]={0 , 1 , 2 , 3 , 4 , 5} ;
10

2. 初始值表和数组长度 C 允许在定义二维数组时不指定第一维的长度(即行数) ,但 必须指定第二维的长度(即列数) 。必须在初始表中列出所有元素 的初值。static int a[ ][2]={0,1,2,3,4,5}; 按行为数组的部分元素赋初值时,也可省略第一维的长度。 static int a[ ][2]={{0},{2,3},{4}}; 6.2.4 二维数组应用 例 6.6 已知一个 3×4 矩阵, 要求编写程序求出矩阵中所有元素中 的最大值,并找出其所在的位置,即行号和列号。 main( ) { int i, j, r, c, max; int /*r 为行号、c 为列号*/

10

a[3][4]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};

max=a[0][0]; for(i=0; i<3; i++) for(j=0; j<4; j++) if(a[i][j]>max) { max=a[i][j]; r=i+1; c=j+1; } printf("max=%d,r=%d,c=%d",max,r,c);}

程序运行结果为:max = 12

r = 3

c = 4
10

例 6.10 将一个二维数组的行和列互换,存到另一个二维数组中。 ?1 4 ? 例如: ? ? ?1 2 3 ? ? a?? b ? 2 5 ? ? ? 4 5 6? ? ? ?3 6? ? ? main( ) { int i,j,k=0,a[2][3],b[3][2];

15

printf("Please input array a:\n"); for(i=0;i<2;i++) for(j=0;j<3;j++) { scanf("%d",&a[i][j]); b[j][i]=a[i][j]; for(i=0;i<3;i++) for(j=0;j<2;j++) { printf("%5d",b[i][j]); k++; if(k%2==0) printf("\n"); } } }

main( ) { static int a[2][3] ? {{1, 2, 3},{4, 5, 6}}; static int b[3][2], i, j; for (i ? 0; i ?? 1; i ? ? ) for ( j ? 0; j ?? 2; j ? ? ) b[ j ][i ] ? a[i ][ j ]; for (i ? 0; i ?? 2; i ? ? ) for ( j ? 0; j ?? 1 jj ? ? ) pr int f ("%d ", b[i ][ j ]);
小结: 1. 2. 3. 二维数组的定义 二维数组的引用 二维数组的初始化

}
10

作业:技能训练六 2~3





内 容

注意点

配时

第六章
复习:二维数组的定义方法 6.3 字符数组与字符串




5

用来存放字符的数组成称为字符数组,字符数组中的一个元素 都是一个字符。 6.3.1 字符数组的定义 字符数组的定义的一般格式: char 数组名[常量表达式][, 数组名 2[常量表达 2]??]; 例如: char ch1[ 5],ch2[ 7]; 注意: ? 字符数组用于存放字符数据,每个字符为一个元素。 ? 字符数组的长度为数组中字符的个数。 ? 字符数组的类型为 char。 ? 字符数组名是自定义的合法标识符。 6.3.2 字符数组的初始化 对字符数组初始化,最容易理解的方式是逐个字符赋给数组中 各元素。 如:static char c[10]={‘I’,‘ ’,‘a’,‘m’,
对字符维 数组的每 个字符要 用单引号 界定 10 字符数组 用于存放 字 符 数 据,每个 字符为一 个元素 10

‘ ’,‘h’,‘a’,‘p’,‘p’,‘y’}; 注意: a b c 若初值个数大于数组长度,则作语法错误处理。 若初值个数小于数组长度,则其余元素自动赋空字符。 若初值个数等于数组长度,定义时可活力数组长度。

6.3.3 字符数组的输入输出 可以利用字符数组对单个字符和字符串进行输入输出操作。 ① 逐个字符输入输出 用格式符"%c"输入或输出一个字符。

15

② 字符串--整串输入和输出用"%s"格式符可输入、输出字符串 注意: ? 用格式符"%c"输入或输出字符数组时可与循环语句配合使用。 ? 由于 C 语言中没有专门存放字符串的变量,字符串存放在一个 字符型数组 中,数组名表示第一个字符的首地址,故在输入 或输出字符串时可直接使用数组名。 例如:char c[6]={"hello."}; printf("%s ",c); 输出结果为:hello. 6.3.4 字符串处理函数 字符串和字符数组的区别是:字符数组中存放的是该字符对应 的 ASCII 码,而字符串中存放的是字符,字符串的结束标志是\0,是 由系统自动添加上的。因此,存放同样一个字符串和字符数组占用 的空间是不同的。 (1) 输入字符串函数 gets a.作用:输入一个字符串 b.调用形式:gets(字符数组名) 如:char p[20]; ?gets(p); (2) 输出字符串函数 puts a. 作用:输出一个以’\0’结尾的字符串。 b. 形式:puts(字符数组名) (3) 字符串比较函数 strcmp a. 作用:比较字符串 1 和字符串 2。 b. 形式:strcmp(字符串 1,字符串 2); 比较规则: 对两个字符串自左至右逐个字符相比 (按 ASCII 码比较) , 直到出现不同字符或遇空字符为止,如全部相同,则认为相等,若 出现不同字符,以第一个不同字符比较结果为准。 ① ② ③ 字符串 1=字符串 2 字符串 1> 字符串 2 字符串 1< 字符串 2 函数值为 0 函数值是一个正整数 函数值是一个负整数 printf(“yes”); printf(“yes”);
10 用格式符 "%c" 输入 或输出字 符数组时 可与循环 语句配合 使用。 10

注意:不能用:if(str1==str2)

只能用: if(strcmp(str1,str2)==0)

(4)字符串拷贝函数 strcpy a. 作用:将字符串 2 拷贝到字符数组 1 中去。 b. 形式:strcpy(字符数组 1,字符串 2); 如:strcpy(str1,str2); (5)字符串连接函数 strcat a. 作用:把字符串 2 接到 1 的后面,结果放在 1 中。 b. 形式:strcat(字符数组 1,字符数组 2); 如:static char str1[ ]=”Happy”; static char str2[ ]=”New year!”; ? strcat(str1,str2); (6)字符串测试长度函数 strlen a. 作用:测试字符串长度。 b. 形式:strlen(字符数组); 如: static char str[ ]=”china”; printf(“%d”,strlen(str)); (7)将字符串中大写字母转换成小写──strlwr()函数 调用方式:strlwr(字符串); 函数功能: 将字符串中的大写字母转换成小写,其他字符(包括小写字 母和非字母字符)不转换。 (8) 将字符串中小写字母转换成大写──strupr()函数 调用方式:strupr(字符串); 小结: 1.字符数组的定义、引用和初始化 2.字符串的定义、引用和初始化 作业:技能训练六 4~5
10 5 5 5 5





内 容

注意点

配时

第七章




5

复习:字符数组和字符串应用中区别 7.1 函数的定义与调用 7.1.1 函数的定义 任何函数都是由函数说明和函数体两部分组成。根据函数是否 需要参数,可将函数分为无参函数和有参函数两种。 1. 无参函数的一般形式 函数类型 函数名( void ) { 说明语句部分; 可执行语句部分; 2. 有参函数的一般形式 函数类型 { 函数名( 数据类型 说明语句部分; 可执行语句部分; } 参数[,数据类型 参数 2?] )
有参函数 比无参函 数多了一 个 参 数 表。调用 有参函数 时,调用 函数将赋 予这些参 数实际的 值 10

}

注意:有参函数比无参函数多了一个参数表。调用有参函数时,调 用函数将赋予这些参数实际的值。 ? 为了与调用函数提供的实际参数区别开,将函数定义中的参 数表称为形式参数表,简称形参表。 3. 空函数的定义 既无参数、函数体又为空的函数。 其一般形式为:[函数类型] 函数名(void){ }

10

注意:函数定义不允许嵌套。在一个函数的函数体内,不能再定 义另一个函数。 ? 在 C 语言中,所有函数(包括主函数 main())都是平行的。 一个函数的定义,可以放在程序中的任意位置。 ? 在老版本 C 语言中,参数类型说明允许放在函数说明部分的

第 2 行单独指定。 7.1.2 函数的返回值与函数类型 1. 函数返回值与 return 语句 有参函数的返回值,是通过函数中的 return 语句来获得的。 return 语句的一般格式: return ( 返回值表达式 ); return 语句的功能:返回调用函数,并将“返回值表达式”的值带 给调用函数。 注意: ? 调用函数中无 return 语句,并不是不返回值,而是一个不 确定的值。 ? 为了明确表示不返回值,可以用“void”定义将函数成 “无(空)类型”。 2. 函数类型 函数类型与 return 语句返回值的类型一致。
调用函数 中 无 return 语 句,并不 是不返回 值,而是 一个不确 定的值。 15

注意: ? 不要求返回值的函数都应定义为空类型。 ? 缺省函数类型,则系统一律按整型处理。 3. 函数的形参与实参 函数的参数分为形参和实参两种,作用是实现数据传送。 ? 形参出现在函数定义中,只能在该函数体内使用。 ? 实参出现在函数调用中,发生函数调用时,调用函数把实参 的值传送给被调用函数的形参,从而实现调用函数向被调用 函数的数据传送。 7.1.3 对被调用函数的说明和函数原型
5 10

对被调用函数采用函数原型方式说明,其格式如下: 函数类型 函数名(数据类型[参数名],[数据类型[参数名 2]?]); 7.1.4 函数的调用

C 语言中函数调用的一般形式为:函数名([实际参数表]) 注意: ? 调用函数时,函数名必须与具有该功能的自定义函数名一致 ? 实参的个数、类型和顺序,应该与被调用函数所要求的参数

5

个数、类型和顺序一致,才能正确地进行数据传递。 ? C 语言中的函数可以只进行某些操作而不返回函数值,这时 的函数调用可作为一条独立的语句。 ? 函数作为另一个函数调用的实参出现。这种情况是把该函数 的返回值作为实参进行传送,因此要求该函数必须有返回值。 7.1.5 函数的形参与实参
10

函数的参数分为形参和实参两种,作用是实现数据传送。 ? 形参出现在函数定义中,只能在该函数体内使用。 ? 实参出现在函数调用中,发生函数调用时,调用函数把实参 的值,传送给被调用函数的形参,从而实现调用函数向被调用 函数的数据传送。 例 7.2 实参对形参的数据传递
形参出现 在函数定 义中,只 能在该函 数体内使 用

10

main( ) { void s(int n); /*函数原型说明*/ /*定义实参 n,并初始化*/ /*调用函数*/ /*输出调用后实参的值*/

int n=100; s(n); printf("n_s=%d\n",n); } void { s(int n)

int i; printf("n_x=%d\n",n); for(i=n-1; i>=1; i--) printf("n_x=%d\n",n); /*输出改变前形参的值*/ n=n+i; } /*改变形参的值*/

/*输出改变后形参的值*/ 5↙

运行结果为:input two numbers: 4 输出:max=5 小结: 1. 2.

10

有参函数和无参函数的定义 函数调用的方法及执行过程

作业:技能训练七 1





内 容

注意点

配时

第七章 复习:函数参数的两种传递方式 7.2 函数的递归调用 7.2.2 函数的递归调用




5

10

1. 在调用一个函数的过程中,又调用该函数本身。 2. 直接递归调用:
int int {int f ( x) x; y , z; z ? f ( y ); }
一个函数 在它的函 数体内, 直接或间 接地调用 它自身 10

注:在调用 f 的过程中,又要调用 f 函数,这是直接调用本函数。 3. 间接递归调用
int int {int f 1( x ) x; y , z; z ? f 2( y ); }

int int {int

f 2(t ) t; a, c; c ? f 1( a ); }
15

例:有 5 个人坐在一起,问第 5 个人多少岁?他说比第 4 个大 2 岁。 问第 4 个人,他说比第 3 个人大 2 岁。问第 3 个人,又说比第 2 个人大 2 岁。问第 2 个人,说比第 1 个人大 2 岁。最后问第 1 个人,他说是 10 岁。请问第 5 个人多大? 例如: age(1) ? 10, 就是main 函数只有一个语句。整个问题的求解 全靠一个 age(5)函数调用来解决。函数调用过程如下:
age 函数 age( → 5) main =age(4)+2 n=5 age(5) → =age(3)+2 n=4 age 函数 age(4) → =age(2)+2 2 n=3 n=2 age 函数 age(3) → =age(1)+ age 函数 age(2)

10

可以用式子:

(n ? 1) ?10 age(n) ? ? ?age(n ? 1) ? 2

(n ? 1)

age (5) ? age ( 4) ? 2 age ( 4) ? age ( 4) ? 2 age (3) ? age ( 4) ? 2 age ( 2) ? age ( 4) ? 2 age (1) ? 10

10

当 n>1 时求第 n 个人的年龄公式均相同,因此用一个函数来表 述上述关系求解分成两个阶段:第一阶段是“回推” ,即将第 n 个人 的年龄表示为第(n-1)个人的年龄的函数,依次回推。第二阶段是 递推即从第 1 个人的已知年龄推算出第 2 个人的年龄,依次递推。
age (5) ? age (4) ? 2

如图:求第 5 个人年龄的过程。

age (5) ? 18

10

age ( 4) ? age (3) ? 2
age (3) ? age ( 2) ? 2

age(4) ? 16

回推

递推

age(3) ? 14

age ( 2) ? age (1) ? 2

age (2)
age (1) ? 10

? 12

可以看到:age 函数一共被调用 5 次,age(5),age(4),age(3), age(2),age(1)。 其中 age(5)是 main 函数调用的, 其余 4 次是在 age 函数中调用。 #include " stdio .h"
age ( n) int n; {int c; if ( n ?? 1) c ? 10; else c ? age ( n ? 1) ? 2; return (c); } main ( ) { pr int f ("%d \ n" , age (5)); }

10

小结: 1. 2. 函数递归调用的概念及其执行过程 递归函数的编写及执行过程
10

作业:技能训练七 2





内 容

注意点

配时

总 一、C 语言的特点




10

1. 语言简洁、紧凑、使用方便、灵活。 2. 3. 4. 5. 6. 运算符丰富。 数据结构丰富。 具有结构化的控制语句。 语法限制不太严格,程序设计自由度大。 C 语言允许直接访问物理地址,能进行位(bit)操作,能
运算符

实现汇编语言的大部分功能,可以直接对硬件进行操作。 7. 8. 生成目标代码质量高,程序执行效率高。 C 语言程序可移植性好。
10 数据类型 5 5

二、基本数据类型及其常量 三、标识符的定名规则和注意事项 四、不同类型数据之间的转换 1. 不同类型自动转换 2. 强制类型转换

五、C 语言的数据类型 整型 基本类型 字符型 实型(浮点型) 双精度型 数组类型 构造类型 结构体类型 共用体类型 枚举类型 指针类型 空类型 单精度型

10

10

六、算术运算符、赋值运算符及其表达式

七、关系运算符、逻辑运算符及其表达式 八、逗号运算符、条件运算符及表达式 九、if 条件选择语句 三种形式: 1.if(表达式) 2.if(表达式) else 3.if(表达式 1) else if(表达式 2) else if(表达式 m) else 十、 if 语句的嵌套 if ( ? ) if ( ? ) else else else if ( ? ) 语句 1 语句 2 语句 3 语句 4
10 运算符优 先级 10

语 句 语 句 1 语 句 2 语 句 1 语 句 2 语 句 m 语 句 n
10

十一、switch 多分支选择语句 十二、for 循环语句 十三、break 语句和 continue 语句
循环语句 的嵌套 10





内 容

注意点

配时


一、 一维数组




10

10

二、 二维数组 三、 字符数组与字符串 四、 函数的定义与调用 五、 数组作为函数参数的传递 1、100-200 间的全部素数。
main ( ) { int n, i; for (n ? 101; n ?? 200; n ? ?) { for (i ? 2; i ? n; i ? ?) if (n%i ?? 0) break ; if (n ?? i ) pr int f ("%5d " , n); }}
10 参数的传 递方式 字符数组 与字符串 的区别 10

10

2、用 1 元纸币兑换 1 分,2 分,5 分的硬币,要求兑换硬币的总 数为 50 枚,问共有多少种换法?每种换法中各种硬币分别为多少?

main ( ) { int x, y, z , n ? 0; for ( x ? 0; x ?? 20; x ? ?) for ( y ? 0; i ? 50; y ? ?) { z ? 100 ? 5 * x ? 2 * y; if ( x ? y ? z ?? 50) { n ? ?; pr int f ("%d %d %d \ n" , x, y, z ); }} pr int f (" 共有%d种换法。 \ n" , n); }

10

3、 编程:显示如下图案。

10

# include " stdio .h" main ( ) { int j , i; for (i ? 1; i ?? 5; i ? ?) { putchar ('\ n' ); for ( j ? 0; j ? i; j ? ?) putchar ('*' ); }}
10

* * * * *

* * * * * * * * * *

4、求 n!

main ( ) { long i, n ? 1L; for (i ? 10; i ? 0; i ? ?) n? ? i; pr int f (" result ? %ld " , n); }
10

5、打印“水仙花数”

循环语句

main ( ) { int i, j , k , n; for (n ? 999; n ? 1000; n ? ?) { i ? n / 100; j ? n / 10 ? i * 10; k ? n%10; if (i ? i * i ? j * j * j ? k * k ? k ?? n) pr int f ("%d %d %d ", i, j , k );} }


相关文章:
C语言教案
C语言教案_IT/计算机_专业资料。#$@@$#$%@@$#$$重庆工业管理职业学校 理论课程教师教案本( 2010 — 2011 学年 第二 学期) 专业名称 课程名称 授课教师 学...
c语言电子教案
C 语言程序设计》电子教案第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章 第十二章 第十三章 C 语言概述 算法...
《C语言》教案
C 语言程序设计》 教案 课程代码: 总课时数: 030986 114 适用专业:计算机应用技术、计算机网络 系(部)名称: 教研室名称: 修订时间: 软件工程系 软件技术 ...
《C语言程序设计》教案
C语言程序设计》教案_工学_高等教育_教育专区。《C语言程序设计》教案 韶关市高级技工学校 C 语言概述 【教学目的】 使学生对计算机语言有一定的认识,激发学生...
C语言程序设计教案
教案 课程名称:C 语言程序设计 授课教师 授课时间 课型 段云娜 2 学时 理论 授课对象 授课题目 使用教具 2011 农林经济管理 第一章 C 语言概述 计算机、投影...
c语言教案
c语言教案_院校资料_高等教育_教育专区。《C 语言程序设计》课程教案课题 授课日期 教学目的 C 语言概述 课型 课时 1、了解 C 语言的特点; 2、掌握 C 简单程...
C语言程序设计教案
C语言程序设计教案 32页 1财富值 《C语言及程序设计》教案 21页 免费如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进行反馈。 ...
中职学校c语言电子教案
中职学校c语言电子教案_工学_高等教育_教育专区。中职学校c语言电子教案XXX 中等职业学校备课用纸授课年级 教学课题 教学 一年级 授课班级 高技 8、 9 授课日期 ...
2012-2013-C语言程序设计教案
青岛农业大学 海都学院教案 2011 ~2012 学年第二学期课 课课学程程程时名代性称 C 语言程序设计 码 HD0906 质 公共必修 数 72(42/30) 开课院(部) ...
单片机C语言教案
单片机C语言教案_信息与通信_工程科技_专业资料 暂无评价|0人阅读|0次下载|举报文档 单片机C语言教案_信息与通信_工程科技_专业资料。中山市技师学院 中山市高级...
更多相关标签:
c语言程序设计教案 | c语言教案 谭浩强 | c语言教案.doc | c语言电子教案 | 中职c语言教案 | c语言 | c语言程序设计教程 | c语言教案及配套课件 |