风雨兼程

ring my bells
posts - 49, comments - 14, trackbacks - 0, articles - 0

C程序设计_教案02

Posted on 2008-04-22 13:09 silentneil 阅读(247) 评论(0)  编辑 收藏 引用
第4章    顺序结构程序设计
4.1  C语句概述
1. C的程序结构
一个C程序由若干个源程序文件组成;一个源程序由预处理命令、全局变量说明和若干个函数组成;一个函数由函数首部和函数体组成;一个函数体由局部变量声明和执行语句组成。
P67,图4.1。
2. C程序的语句
C程序的语句的语句分为5类:
(1)控制语句
用来控制程序流程的语句。
P68,①~⑨
     P68,例。
     注意:( )表示其中是一个条件,~表示内嵌语句。
(2)函数调用语句
     由一次函数调用加一个分号购成的语句。
     P68,例。
     注意:函数有库函数与自定义函数两种,自定义函数要先定义后调用。
(3)表达式语句
     由一个表达式加一个分号购成的语句。
     P68,例。
     注意:表达式语句与表达式的区别在于有无分号。
(4)空语句
     只由一个分号购成的语句。
     P68,例。
     注意:空语句不做任何事情。
(5)复合语句
     把多个语句用{ }括起来的语句。
     P69,例。
     注意:复合语句构成一个分程序,内可包含数据声明和执行语句两部分。
4.2  赋值语句
赋值语句是表达式语句的一种最常用的形式,与其它高级语言相比,C的赋值语句有其独特之处:
(1)在C中“=”是一个运算符;
(2)在C中赋值语句可以包括在其它表达式中。
P69,例。
4.3  数据输入输出的概念及在C语言中的实现
(1)把数据从外部设备送到计算机内存称为输入,把数据从计算机内存送到外部设备称为输出。外部设备有键盘、显示器、磁盘等。
(2)C本身没有输入输出的语句,C的输入输出是由一批库函数来实现的。这些库函数有:scanf、printf、getchar、putchar、gets、puts等,它们放在名为stdio.h的库函数文件中。
(3)一般要使用这些库函数时,要在程序头加上
         #include <stdio.h> 或 #include “stdio.h”
     的预编译命令,其作用是把这些库函数包含到本程序中来。
     P71,例。
4.4  字符数据的输入与输出
4.4.1 字符输出函数putchar
格式:putchar(字符变量);
功能:把字符变量中的字符输出到显示器。
注意:putchar函数一般作为一个语句来使用。
P71,例4.1。见ex4-1.c。
4.4.2 字符输入函数getchar
格式:getchar( )
功能:从键盘输入一个字符并通过函数名返回这个字符。
注意:getchar函数一般在在表达式中使用。
P72,例4.2。
4.5  格式输入与输出
4.5.1 格式输出函数printf
1. 一般格式
格式:printf(格式控制,输出表列);
功能:按照“格式控制”中的格式要求输出“输出表列”的值。
P72,例。
(1)“格式控制”是一个用双撇号括起来的字符串,它包括两种信息:
①格式说明:由%和格式字符组成,不同的格式字符指明了不同的输出方式。
②普通字符:即要原样输出的字符。
P72,例。
(2)“输出表列”是要输出的一些数据,可以是表达式。
P73,例。
2. 格式字符
(1)d格式符:用来输出十进制整数。
     可有四种用法:%d,%md,%ld,%-d。
     其中:m表示输出宽度,l表示输出长整数,-表示输出左对齐。
P73,例。
(2)o格式符:用来输出八进制整数。
     同样可以附加m,l,- 等。
     注意:符号位当成数据输出,不会输出负数。
P74,例。
(3)x格式符:用来输出十六进制整数。
     同样可以附加m,l,- 等。
     注意:符号位当成数据输出,不会输出负数。
P74,例。
(4)u格式符:用来输出无符号数据。
     同样可以附加m,l,- 等。
P74,例4.3。
(5)c格式符:用来输出一个字符。
     可以附加m,- 等。
P74,例4.4。
(6)s格式符:用来输出一个字符串。
     除了可以附加m,- 外,还可以写成 %m.ns。
     其中:m.n表示宽度为m,只输出字符串左边n个字符。
P75,例4.5。
(7)f格式符:用来小数形式输出一个实数。
     除了可以附加m,- 外,还可以写成 %m.nf。
     其中:m.n表示宽度为m,保留n位小数。
P76,例4.6,例4.7,例4.8。
(8)e格式符:用来指数形式输出一个实数。
     除了可以附加m,- 外,还可以写成 %m.nf。
     其中:m.n表示宽度为m,小(尾)数部分保留n位小数。
P77,例。
(9)g格式符:用来输出一个实数,形式自动取小数和指数中的较短者。
P77,例。
P77,表4.1。
4.5.2 格式输入函数scanf
1. 一般格式
格式:scanf(格式控制,地址表列);
功能:按照“格式控制”中的格式要求输入数据到“地址表列”的相应变量中。
(1)“格式控制”是一个用双撇号括起来的字符串,它包括两种信息:
①格式说明:由%和格式字符组成,不同的格式字符指明了不同的输入方式。
②普通字符:即要原样输入的字符。
P72,例。
(2)“地址表列”是要输入的变量的地址,一般用地址运算符&求得。
P79,例4.9。
2. 格式字符
scanf函数的格式字符与printf函数类似,但有微小区别。
P80,表4.3,表4.4。
说明:P80,(1)~(4)。
3. 使用scanf函数应请注意的问题
(1)“格式控制”后面是变量的地址,而不是变量。
    P81,例。
(2)如果在“格式控制”中有格式说明符外的其它字符,要原样输入。
    P81,例。
(3)用%c输入字符时,空格、回车符等都作为有效字符输入。
    P82,例。
(4)在输入数据时,遇到空格、回车、跳格、限宽、非法等会结束输入。
    P82,例。
4.6  顺序结构程序设计举例
    P82,例4.10。见ex4-10.c。
    P83,例4.11。见ex4-11.c。
    P84,例4.12。见ex4-12.c。


 
第5章    选择结构程序设计
5.1     关系运算符和关系表达式
5.1.1 关系运算符及其优先次序
(1)运算符:>、>=、<、<=、= =、!=
(2)优先级:①>、>=、<、<= ②= =、!=
             低于算术运算,高于赋值运算
(3)结合方向:从左到右
P88,例。
5.1.2 关系表达式
用关系运算符把两个表达式连接起来的式子称为关系表达式。
关系表达式的值为真(1)或假(0)。
P88,例。
5.2     逻辑运算符和逻辑表达式
5.2.1 逻辑运算符及其优先次序
(1)运算符:&&、||、!
(2)优先级:①!  ②&& ③||
             !与单目+、-同级,&&、||低于关系运算
(3)结合方向:! 从右到左,&&、|| 从左到右
P89,例。
5.2.2 逻辑表达式
用逻辑运算符把两个表达式连接起来的式子称为逻辑表达式。
逻辑表达式的值为真(1)或假(0),判断时非0是真、0是假。
P89,例。
注意:(1)a&&b&&c的判断,a为0则表达式为0,a为1、b为0则表达式为0,a为1、b为1、c为0则表达式为0,否则表达式为1。
     (2)a||b||c的判断,a为1则表达式为1,a为0、b为1则表达式为1,a为0、b为0、c为1则表达式为1,否则表达式为0。
P91,例。
5.3     If语句
5.3.1  if语句的三种形式
1. 单分支if语句
格式1:if (表达式) 语句
功能1:如果表达式为真,则执行语句。
P91,例。
2. 双分支if语句
格式2:if (表达式) 语句1
  else 语句2
功能2:如果表达式为真,则执行语句1,否则执行语句2。
P92,例。
3. 多分支if语句
格式3:if (表达式1)    语句1
       else if (表达式2) 语句2
       … …
       else if (表达式n) 语句n
       else 语句n+1
功能3:如果直到表达式i为真,则执行语句i,否则表达式全为假,则执行语句n+1。
P92,例。
注意:(1)每个语句都是以分号结束的;
(2)if或else后只能一个语句,如有多个语句要用{ }括起来。
P93,例5.1,例5.2。
5.3.2  if语句的嵌套
if语句可以嵌套,原则是else与它最近的if配对,如果在内层嵌套中要使用单分支if语句,要用{ }把它括起来。
P94,例,例5.3。
5.3.3  条件运算符
1    运算符:? :
2    优先级:低于逻辑运算,高于赋值运算
3    结合方向:从右向左
(4) 条件表达式:
格式:表达式1? 表达式2: 表达式3
功能:若表达式1为真,则条件表达式取表达式2,否则取表达式3。
P96,例。
注意:表达式2与表达式3二者的类型取高的。P37。
P98,例,例5.4。
5.4     Switch语句
格式:switch (表达式)
      {case 常量表达式1:语句1
case 常量表达式2:语句2
        … …
case 常量表达式n:语句n
 [default:语句n+1]
       }
功能:如果表达式的值等于常量表达式i,则执行语句i及其后面的语句,否则如果都不等,则执行语句n+1。
P99,例。
注意:(1)表达式可以是任何类型的;
     (2)常量表达式的值不能相同;
     (3)各case和default出现次序无关;
     (4)可用break中断执行后续语句;
(5)多个case可共用一组执行语句。
P99,例。

5.5     程序举例
P100,例5.5。见ex5-5-1.c,ex5-5-2.c。
P101,例5.6。
P103,例5.7。见ex5-7。


 
第6章    循环结构程序设计
6.1     概述
在C语言中,构成循环的语句有4种:
1    用goto和if语句;
2    用while语句;
3    用do-while语句;
4    用for语句。
6.2     goto语句以及用goto语句构成循环
格式:goto 语句标号;
功能:无条件转到语句标号指定的语句中去执行。
注意:(1)语句标号应是合法的标识符,可放在任何语句的前面。
     (2)用goto语句构成循环不是一种很好的方法。
P106,例,例6.1。
6.3     while语句
格式:while (表达式)
        循环体;
功能:当表达式为真时执行循环体的语句,直到表达式为假时退出循环。
P107,例6.2。
注意:(1)循环体只能一个语句,如有多个语句要用{ }括起来。
     (2)循环体内应有使循环趋于结束的语句,否则构成死循环。
(3)循环体可能一次也没执行到,当条件表达式为真时进入循环体,故也称当型循环。
6.4     do-while语句
格式:do
        循环体;
while (表达式);
功能:先执行一次循环体,然后当表达式为真时再执行循环体,直到表达式为假时退出循环。
P108,例6.3,例6.4。
注意:(1)循环体只能一个语句,如有多个语句要用{ }括起来。
     (2)循环体内应有使循环趋于结束的语句,否则构成死循环。
(3)循环体至少执行一次,直到条件表达式为假时退出循环,故也称直到型循环。
6.5     for语句
格式:for (初值表达式;条件表达式;修正表达式)
        循环体;
功能:先执行一次初值表达式,再执行条件表达式,若为真则执行循环体,然后执行修正表达式,再次执行条件表达式进行判断,直到条件表达式为假时退出循环。
P110,例。
注意:(1)循环体只能一个语句,如有多个语句要用{ }括起来。
     (2)可以明显看出循环体执行的次数,故也称计数循环。
     (3)三个表达式在一定的条件下都可省。
P111,说明(1)~(7)。
6.6     循环的嵌套
四种循环可以互相嵌套,此时外层循环的每一取值,内层循环要转一圈。但是循环嵌套不得交叉进行。
P113,说明(1)~(6)。
6.7     几种循环的比较
4    四种循环可以用来处理同一问题,但一般不用goto循环。
5    while和do-while循环在循环体内应有使循环趋于结束的语句,for可用修正表达式来实现。
6    while和do-while循环在循环前应有初始化的操作,for可用初值表达式来实现。
7    while和do-while及for循环可用break语句跳出循环和用continue语句结束本次循环,而goto循环不可以用。
6.8     break语句和continue语句
6.8.1  break语句
格式:break;
功能:退出switch选择或while、do-while、for循环结构。
P114,例。
6.8.2  contiune语句
格式:contiune;
功能:本次while、do-while、for循环提前结束,进入下次循环。
P115,例。
P115,例6.5。
6.9     程序举例
P116,例6.6。见ex6-6。
P116,例6.7。见ex6-7。
P118,例6.8。
P118,例6.9。见ex6-9。
P119,例6.10。见ex6-10。


 
第7章    数组
数组是由相同类型的一组数据构成的。前面我们所学的类型都是基本类型,而本章所学的数组是一种构造类型。
7.1     一维数组的定义和引用
7.1.1 一维数组的定义
格式:类型标识符 数组名[常量表达式],…;
其中:数组名是标识符,常量表达式是元素个数。
功能:定义一维数组,其数组名由其“数组名”指定,元素个数由“常量表达式”指定,元素类型由“类型标识符”指定。
P122,例。
注意:(1)C语言中数组的下标从0开始;
     (2)常量表达式中可以有符号常量,但不能含有变量;
     (3)数组一旦定义,系统为它分配一个连续的存储空间。
7.1.2 一维数组元素的引用
格式:数组名[下标表达式]
功能:引用已定义的数组元素
P123,例,例7.1。
注意:(1)下标可以是表达式。
     (2)下标的取值为0~常量表达式-1,超出范围可能有不可预料的后果。
7.1.3 一维数组的初始化
在定义一维数组时,可对数组进行初始化。
方法:在定义数组时在数组名后加上={初始值,初始值,…,初始值}
P123,例。
注意:(1)可对部分元素初始化。
     (2)数组有进行初始化时常量表达式可省。
7.1.4 一维数组程序举例
P124,例7.2。
P124,例7.3。见ex7-3.c。
7.2     二维数组的定义和引用
7.2.1 二维数组的定义
格式:类型标识符 数组名[常量表达式][ 常量表达式],…;
功能:定义二维数组,其数组名由其“数组名”指定,每维下标的取值范围由该维的“常量表达式”指定,元素类型由“类型标识符”指定。
P125,例。
注意:(1)多维数组的定义与二维数组类似;
     (2)二维数组常用来描述数学中的矩阵;
     (3)对于一个m×n的二维数组,二维数组与一维数组元素的对应:
          二维中第i,j个元素←→一维中第i×n+j个元素
P126,例。
7.2.2 二维数组的引用
格式:数组名[下标表达式] [下标表达式]
功能:引用已定义的二维数组元素
P126,例。
注意:设a是一个m×n二维数组;则
     (1)a[i] (对任意固定的i=0,1,…,m-1)是一个长度为n的一维数组,它的数组名就是a[i],每个元素是a[i][j];
     (2)a可认为是一个长度为m一维数组,它的数组名就是a,每个元素是a[i];
     (3)由上可知,二维数组可认为是一个元素是一维数组的一维数组。
7.2.3 二维数组的初始化
在定义二维数组时,也可对数组进行初始化。
方法:在定义数组时在数组名后加上={{初始值,…},{初始值,…},…,{初始值,…}}或者加上={初始值,初始值,…,初始值}
P127,例。
注意:(1)可对部分元素初始化;
     (2)二维以上数组有进行初始化时第一维的常量表达式可省。
P128,例。
7.2.4 二维数组应用举例
P128,例7.4。
P129,例7.5。见ex7-5.c。
7.3     字符数组和字符串
7.3.1 字符数组
字符数组:元素类型为字符型的数组称为字符数组。
格式:char 数组名[常量表达式],…;
P130,例。
注意:长度为n的字符数组可用来存放n个字符。
7.3.2 字符数组的初始化
与普通数组一样,可对字符数组进行初始化。
方法:在定义数组时在数组名后加上={字符,字符,…,字符}
P130,例。
注意:初始化时元素个数可不写。
7.3.3 字符数组的引用
字符数组的每个元素存放的是一个字符。
格式:数组名[下标表达式]
P131,例7.6,例7.7。
7.3.4 字符串和字符串结束标志
(1)字符串
由若干个字符两边用双撇号括起来的称字符串。
字符串存放时应在尾部加一个\0作为结束标志。
长度为n的字符存储时占用n+1个字节的存储空间。
P131,例。
(2)用字符数组存放字符串
长度为n的字符数组可用来存放一个长度为n-1的字符串。
字符数组可用字符串进行整体初始化,且此时会自动在尾部加一个\0。
P132,例。
7.3.5 字符数组的输入与输出
字符数组输入输出的方法有两种:
(1)逐个元素用scanf和printf函数输入输出
格式:scanf(“%c”,&数组元素);
      printf (“%c”,数组元素);
功能:前者从键盘上取得一个字符送给相应的数组元素;
后者把数组元素中的字符输出到显示器上。
P131,例7.6。
(2)整个字符数组用scanf和printf函数输入输出
格式:scanf(“%s”,数组名);
printf (“%s”,数组名);
功能:前者从键盘上取得一个字符串送给相应的数组;
后者把数组中的整个字符串输出到显示器上。
P133,例。
注意:(1)整个字符数组中的字符串输出时,\0本身不输出, 且输出不换行;
(2)整个字符数组中的字符串输出时,是从首地址逐一输出的,直到遇到第一个\0为止;
(3)C语言中数组名表示该数组的首地址,故整个字符数组输入时不能在数组名前加&;
    (4)整个字符数组输入时遇空格而停止,且会自动在尾部加一个\0。
P133,例。
7.3.6 字符串处理函数
1. 字符串输出函数puts
格式:puts(字符数组名);
功能:输出字符数组中的字符串。
P135,例。
2. 字符串输入函数gets
格式:gets(字符数组名);
功能:从键盘输入一个字符串到字符数组中。
P135,例。
注意:(1)gets与puts一次只能输入输出一个字符串;
     (2)gets输入时不会遇空格而停止,而是遇换行符而停止,也会在尾部自动加上一个\0;
(3)puts输出时也是到\0为止,还会把\0转成换行符输出。
3. 字符串连接函数strcat
格式:strcat(字符串1, 字符串2);
功能:把字符串2的内容连接到字符串1之后,函数返回字符串1。
注意:连接时把第二个字符串的第一个字符覆盖到第一个字符串的\0上
P136,例。
4. 字符串拷贝函数strcpy
格式:strcpy(字符串1,字符串2);
功能:把字符串2的内容拷贝到字符串1中,函数返回字符串1。
注意:(1)拷贝时也是到第一个\0为止,连同\0一起拷贝;
     (2)对字符串不可有赋值语句:字符串1=字符串2;
P136,例。
5. 字符串比较函数strcmp
格式:strcmp(字符串1,字符串2);
功能:比较字符串1与的字符串2内容:如果字符串1= =字符串2,则返回0;如果字符串1>字符串2,则返回正整数;如果字符串1<字符串2,则返回负整数。
注意:比较时是以字符的ASCII值进行的。
P137,例。
6. 测字符串长度函数strlen
格式:strlen(字符串)
功能:返回字符串的实际字符数。
注意:(1)测字符串长度包括空格,但不包括\0;
(2)遇到\开头的特殊字符也当一个字符对待。
P138,例。
7. 字符换小写函数strlwr
格式:strlwr(字符串)
功能:把字符串中的大写字母换成小写字母。
8. 字符换大写函数strupr
格式:strupr(字符串)
功能:把字符串中的小写字母换成大写字母。
7.3.7 字符数组应用举例
P138,例7.8。见ex7-8.c。
P140,例7.9。见ex7-9.c。

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理