C语言课程教案(比较规范)_第1页
C语言课程教案(比较规范)_第2页
C语言课程教案(比较规范)_第3页
C语言课程教案(比较规范)_第4页
C语言课程教案(比较规范)_第5页
已阅读5页,还剩84页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言课程教案详解

章节题目:

第一章C语言概述

教学时间:

4学时

教学目的:

1、了解C语言的产生过程

2、掌握C程序结构

3、掌握C程序开发过程

4、掌握用TURBOC运行一个C程序。

内容、重点、难点:

内容:

1.1C语言的历史和特色

1.2C程序结构

1.3C程序的开发过程

重点:

1、掌握C程序的基本结构构成

2、学会用TurboC运行一个C程序

难点:

掌握C程序的开发过程

第1章C语言概述

C语言是国际上广泛流行的一门高级程序设计语言,具有语言简洁、使用方便灵活、移植性

好、能直接对系统硬件和外围接口进行控制等特点。本章将简要地介绍它的产生过程和特点、

C程序结构及C程序的上机步骤,以便对C语言有一个概括的认识。

1.1c语言的历史和特色

一、历史

1、1960年出现了ALGOL60。

2、1963年和1967年,在ALGOL60的基础上推出了CPL和BCPL语言更接近于硬件。

3、1970年美国贝尔实验室对BCPL语言做了进一步简化,设计了B语言,并用B语言编

写了第一个UNIX操作系统。

4、在1972年至1973年间,贝尔实验室的D.M.Ritchie在B语言的基础上设计出C语言。

二、特色

1、简洁紧凑,使用方便灵活

C语言一共只有32个关键字、9种控制语句,程序书写自由,压缩了一切不必要的成分,

语言简练。

2、运算符丰富

C语言有34种运算符和15个等级的运算优先顺序,使表达式类型多样化,可以实现在其它

语言中难以实现的运算。

3、数据类型丰富

C语言的数据类型有整型、实型、字符型、数组类型、指针类型、结构体类型、联合体类型

及枚举类型等,能用来实现各种复杂的数据结构的运算.

4、模块化结构

C语言用函数作为程序的模块单位,便于实现程序的模块化,而且便于模块间相互调用及传

递数据。

5、语法限制少和程序设计自由度大

C语言允许程序编写者有较大的自由度,放宽了以往高级语言严格的语法检查,较好地处理

了“限制”与“灵活”这一对矛盾。

6、比较接近硬件

C语言允许直接访问物理地址,能进行位操作,能实现汇编语言的大部分功能,可以直接对

硬件进行操作。

7、生成目标代码质量高、程序执行效率高

一般只比汇编程序生成的目标代码效率低10%—20%。

8、可移植性好

基本上不做修改就能用于各种型号的计算机和各种操作系统。

1.2C程序结构

下面列出几个简单的C程序来说明C程序的结构特征。

例1.1输出一行信息。

main()

(

printf("ThisisfirstCprogramme!\n");

)

该程序的作用是输出一行信息:ThisisfirstCprogramme!

main表示“主函数”;

函数体用大括号{}括起来。本例题中主函数仅包含一个语句,该语句由printf()输出函数构

成。括号内双引号中的字符串按原样输出;

'\n'是换行符,即在输出"ThisisfirstCprogramme!”后回车换行;

语句后面有一个分号,表示该语句结束,这个分号必不可少。

例1.2计算两个数之和。

main()/*求两个数之和*/

(

inta,b,sum;/*定义3个整型变量*/

a=123;/*以下3行为C语句*/

b=321;

sum=a+b;

printf("sumis%d\n",sum);

)

该程序的作用是求两个整数a和b之和sum,并在屏幕上输出sum。程序中,/*……*/表

示注释部分,对编译和运行不起作用。第3行是变量说明,使用的a、b和sum为整型(int)

变量。第4行是两个赚值语句,使a的值为123,b为321。第5行使sum的值为a+b,第6

行的%d是输入输出的“格式说明”,表示“十进制整数类型“,printf函数中括号内最右端

的sum是要输出的变量,当然它的值为444。

例1.3比较两个数的大小。

main()/*主函数,功能输入两个整数,判断后输出较大的数*/

(

inta,b,c;/*定义3个整型变量*/

scanf("%d,%d",&a,&b);/*输入变量a和b的值*/

c=max(a,b);

printf("max=%d\n",c);/*输出c的值*/

intmax(intx,inty)

/*定义max()函数,函数值为整型,x,y为形式参数、整形变量*/

(

intz;

/*定义main()函数内部用到的变量z为整数*/

if(x>y)

z=x;/*将x,y中较大的值赋给z*/

else

z=y;

return(z);

/*将z值返回。通过max()函数带回调用处*/

)

该程序的作用是从键盘输入两个整数,然后在屏幕上输出它们中较大值的数。

程序的第5行是调用max()函数,在调用过程中将实际参数a和b的值,分别传递给max。

函数中的形式参数x和y,然后得到一个返回值(z的值),并把这个值赋给变量c。

运行情况如下:

2,8/

max=8

从以上几个例题,可以看到C程序的结构特征。

1.C程序是由函数构成的。

一个C程序至少有一个main()函数,也可以包含一个main()函数和若干个其它函数。

2.一个函数有两部分构成。

函数说明部分,即函数的第一行,包括函数类型、函数名、形参类型、形参名。

函数体,由一对大括号{}括起来的语句集合。函数体一般包括有声明部分和执行部分。声明

部分用于定义所用到的变量。执行部分由若干语句组成。

3.一个C程序总是从main。函数开始执行,而不管main()在源程序中的位置,执行完主函

数中的所有语句后,程序就结束。

4.每个语句和变量定义的最后必须要有一个分号,分号是C语句的必要组成部分。

5.C语言本身没有提供输入和输出语句,输入输出操作是通过库函数scanf()、printf()等函

数来实现的。

6.C语言用/*……*/对程序进行注释,/和*之间不允许留有空格,/*和*/应当一一对应匹配,

注释部分允许出现在程序中的任何位置上。程序中加一些注释,可以增加程序的可读性。

1.3C程序的开发过程

用C语句编写的程序称为“源程序”。

1.C程序开发的4个基本步骤

一般C程序开发要经历4个基本步骤:

编辑一一编译一一连接一一运行

(1)编辑

使用字处理软件或编辑工具将源程序以文本文件形式保存到磁盘,源程序文件名由用户自己

选定,但扩展名必须为“.c"。

(2)编译

编译的功能就是调用“编译程序”,将已编辑好的源程序翻译成二进制的目标代码。如果源

程序没有语法错误将产生一个与源程序同名,以”.obj”为扩展名的目标程序。

(3)连接

编译后产生的目标程序往往形成多个模块,还要和库函数进行连接才能运行,连接过程是使

用系统提供的“连接程序”运行的。连接后,产生以".exe”为扩展名的可执行程序。

(4)运行

可执行程序生成后,就可以在操作系统的支持下运行,若执行结果达到预期的目的,则开发

工作到此完成,否则,要进一步地经过以上过程以取得最终的正确结果。

2.使用TurboC开发程序的方法

现在,多数的C程序开发使用一个集成TurboC开发工具来完成。下面简单介绍使用Turbo

C开发程序的方法。

(1)TurboC的目录及文件

TurboC应装入磁盘的某一目录下,例如,放在c盘的根目录下一级TC子目录下,TurboC

安装完成后,磁盘上将增加以下目录及文件:

TC子目录(c:\tc):其中包括tc.exe、tcc.exe、make.exe等执行文件。

INCLUDE子目录(c:\tc\include):其中包括stdio.h、string.h、math.h等头文件。

Lib子目录(c:\tc\lib):其中包括graphlicsJib、math.lib、math1.lib等库函数文件。

BGI子目录(c:\tc|bgi):其中包括tc运行时所需的信息。

通过执行tc.exe命令就可以进入TurboC环境,如果用户的当前目录是TurboC所在的子目

录tc,则只需从键盘输入“tc”命令即可.

C:\tOtc/

(2)TurboC集成环境作简单介绍,它包括以下几个方面的内容:

主菜单窗口

编辑窗口

信息窗口

功能键提示行

3.用TurboC运行第一个C程序

下面介绍使用TurboC编辑和运行一个简单的C程序的操作步骤:

(1)编辑或修改源程序。

在编辑窗口键入一下源程序:

main()

(

printf("ThisismyfirstCprogram");

)

然后执行“File/save”命令;或按“F2”键存盘。

(2)编译与连接源程序。

执行“compile/makeexeflle”命令或直接按下F9键,即可一次完成编译与连接。

(3)运行程序.

按“F10”键返回主菜单,用光标移动键将亮条移到“Run”菜单选项回车或按下“Ctrl+F9”

键,即可运行刚生成的可执行文件。此时TurboC工作窗口消失,屏幕上显示程序运行结

果:

ThisismyfirstCprogram

若发现运行结果不对,可再按“F10”键回工作窗口,重复上述步骤。

(4)运行程序后查看程序的运行结果。

(5)退出TurboC,按“Alt+X”键,系统即退出Turbo环境。

本章小结

本章对C语言进行了总体介绍,对学生的要求是掌握基本概念,学习的过程要紧密结合本

章的知识要点:

1.程序的构成,main。函数和其他函数。

2.头文件、数据说明、函数的开始和结束标志。

3.源程序的书写格式。

4.C语言的风格。

作业:

章节题目:

第二章顺序结构程序设计

教学时间:

6学时

教学目的:

1、掌握常量与变量的书写和定义

2、掌握三种基本数据类型

3、掌握运算符和表达式的使用

4、掌握顺序结构程序设计的方法

内容、重点、难点:

内容:

2.1常量和变量

2.2整型数据

2.3实型数据

2.4字符型数据

2.5变量的初始化

2.6运算符和表达式

重点:

1、三种基本数据类型的定义和使用

2、各种运算符的使用

难点:

1、运算符的使用

2、使用顺序结构编程

注:教案尾页有小结和作业

第2章顺序结构程序设计

顺序结构是一组按书写顺序执行的语句。本章将主要介绍程序中用到的一些基本要素(常量、

变量、运算符、表达式和输入输出语句等),以及基本的数据类型(整型、实型和字符型)。

2.1常量和变量

一、常量

1、常量:在程序运行的过程中,其值不能被改变的量。

如2、4、-1.6等。

2、分类:普通常量和符号常量

3、符号常量:用一个标识符代表一个常量,这样的标识符称为符号常量。如用PI代表

3.1415926

4、注意:符号常量的值在其作用域内不能改变,也不能再被赋值。如在程序中,对PI重新

赋值:PI=2;这样是不允许的。

二、变量

1、变量

C语言规定在程序运行的过程中,其值可以改变的量,称为变量。

2、标识符:用来标识变量名、符号常量名、函数名、数组名、类型名和文件名的有效字符

序列。

3、C语言规定:标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字

母或下划线。一般变量名的长度不能超过8个字符。

如下面是合法的标识符,也是合法的变量名:

sum,average,day,month,student,_above,k_l_2_3»basic

下面是不合法的标识符和变量名:

M.D.John,$123,#33,3D64,a>,-ab

在C语言中,要求对所有用到的变量作强制定义,也就是"先定义,后使用"。

2.2整型数据

一、整型常量

C语言整型常数可用以下三种形式表示:

1.十进制整数:数码直接开头的十进制数。

2.八进制整数:以0开头的常量是八进制数。

3.十六进制整数:以Ox开头的数是16进制数。

二、整型变量

1.整型变量的分类

整型变量可分为:基本型、短整型、长整型和无符号型四种,其定义的关键字如下:

(1)基本型,以int表示。范围为-32768〜32767,即-215〜(215-1)»

(2)短整型,以shortint或short表示。范围与基本型相同。

(3)长整型,以longint或long表示•若一个整型常量后面加上一个字母1或L,则认为是

longint型常量。范围为-2147483648〜214783647即-231〜(231-1)

(4)无符号型,在实际应用中变量的值常常是正的,如年龄、工资、成绩等,因此可以将

变量定义为"无符号"类型。

无符号型又分为:

①无符号整型,以unsignedint或unsigned表示。范围:0~65535即0〜(216-1)。

②无符号短整型,以unsignedshort表示。范围:。〜65535即0~(216-1)。

③无符号长整型,以unsignedlong表示。范围:0〜4294967295即0〜(232-1)»

2.整型变量的定义

变量的定义格式为:数据类型变量表列;

其中若定义多个同类型的变量,则用逗号分开。

例:inta,b;(指定变量a,b为整型)

unsignedshortc,d;(指定变量c,d为无符号短整型)

longe,f;(指定变量e,f为长整型)

3.整型数据的输入

整型变量键盘输入,是通过scanf函数实现的,scanf函数是数据输入函数,格式为:

scanf(格式控制,地址表列);

例如:scanf("%d%d”,&a,&b);

(1)格式控制是用双引号括起来的字符串,由"%"和格式字符组成,作用是将输入数据

转换为指定的格式输入。

(2)格式字符,对于不同的数据用不同的格式字符。d格式符是用来输入十进制整数的。

因为本节问题中变量a,b是整型变量,所以输入时,用了d格式符。

(3)&a,&b中的"&"是"地址运算符”,&a是指a在内存中的地址。上面scanf函数的

作用是:将a、b的值放到a,b在内存的地址单元中去。所以,在该问题中,若输入:35

则输出结果为a+b=8

4.整型数据的输出

整型数据的输出用printf函数来实现。如printf("a+b=%d",c);

printf函数的格式为:

printf(格式控制,输出表列);

(1)格式控制和输入函数scanf的格式控制基本一致。

(2)输出表列是需要输出的数据或表达式。

(3)在输出整型数据时,格式字符如下:

①%d,按整型数据的实际长度输出。

②%md,m为输出字段的宽度,如果输出数据的位数小于m则左端补以空格,若大于m,

则按实际位数输出。例如

printf("%4d,%4d",a,b);

若a=123,d=12345,则输出结果为

V123,12345(注:V表示空格字符,下同)

③%ld,输出长整型数据。如

longa=135790;

printf(,z%81d",a);

输出结果为:VV135790

一个int型数据可以用%d或%Id格式输出。

④%u,输出unsigned型数据,即无符号类型,如unsignedu;那么u在输出的时候,应该

用u格式控制符,那么输出时应使用语句:

printf("°/ou",u);

例2.1从键盘输入任意一个整数,输出这个数的平方的值。

main()

{inta;

longs;

scanf(,z%d",&a);

s=a*a;

printf("s=%ld\n",s);}

2.3实型数据

一、实型常量

实数在C语言中,又称浮点数。实数有两种表示形式:

1.十进制数形式。由数字和小数点组成(注意必须有小数点)。

2.指数形式。但注意字母e(或E)之前必须有数字,且e后面指数必须为整数,如e3、

2.1e3.5、.e3、e都不是合法的指数形式。

二、实型变量

在本节问题中,已知两个数是实数,那么两数之和与积也必定为实数,所以需要设四个

实型变量,分别为a,b,sum,mul。定义语句为:

floata,b,sum,mul;

C实型变量分为:

1.单精度型(float型)

一个float型数据在内存中占4个字节(32位),在TURBOC中,

单精度实数的范围约为一1038〜1038之间并提供7位有效位;小于10-38

的数被处理成零值。

2.双精度型(double型)

一个double型数据在内存中占8个字节,双精度实数的数值范围约为

-10308-10308,并提供15〜16位有效位,具体精确多少位与机器有关;小于10-308的数

被处理成零值。

三、实型数据的输入和输出

1.实型数据的输入

实型数据的输入也用scanf函数实现的,格式符使用的是f字符,以小数的形式输入数据,

也可以使用e字符,以指数的形式输入数据。

如本节问题中的scanf("%f%f”,&a,&b);

2.实型数据的输出

实型数据的输出用printf函数实现,格式符使用f字符,以小数的形式输出数据。输出时应

注意:

(1)%f:不指定字段宽度,整数部分会全部输出,并输出6位小数。

(2)%m.n:指定输出数据共占m歹U,其中有n位小数。如果数值长

度小于m,则左端补空格。

(3)%-m.n:指定输出数据共占m歹U,其中有n位小数。如果数值长度小于m,则右端

补空格。

(4)若是双精度型变量输出时应用%If格式控制,如doublef;

输出时应使用语句:printf(",D;

2.4字符型数据

一、字符常量

1、字符常量

C语言的字符常量是用一对单引号括起来的单个字符。如:‘a‘、’b'、’x'、’D'、

等都是字符常量.

2、转义字符

除了这样的字符常量外,C语言还允许用一种特殊形式的字符常量,就是以一个‘\'开头的

字符序列.例如,前面已经用到,在printf函数中的'\n',它表示一个"换行"符。

例2.2字符常量的输出。

main()

(

printf(r,abc\n\tde");

)

运行结果:abc

de

二、字符变量

在本节问题中,设了两个字符型变量C1和c2。定义形式如下:

charcl,c2;

它表示cl和c2为字符型变量,各可以放一个字符。可以用下面语句对cl,c2赋值:

cl='a';;c2='b';

因此在内存中一个字符变量只占一个字节。

三、字符数据的存储形式

字符在内存中存储的不是字符本身,而是它的ASCII码,例如字符'a'的ASCII码为97,

‘b'的ASCII码为98。那么字符的存储形式与整数的存储形式是类似的。C语言使字符型数

据和整型数据是通用的。

例2.3main()

(

charal,a2;

al=97;a2=98:

print""%c%c\n”,al,a2);

printf("%d%d\n",al,a2);

)

程序运行时输出如下:

ab

9798

字符型数据和整型数据是通用的,但应该注意字符数据只占一个字节,它只能存放。〜255

范围内的整数。

例2.4大小写字母的转换。

main()

(

charal,a2;

al='a';a2='b';

a1=a132;a2a232;

printf("%c%c\n,z,al,a2);

)

运行结果为:

AB

程序的作用是将两个小写字母a和b转换成大写字母A和B。’a'的ASCII码为97,而'A

'为65,'b'为98,'B'为66。从ASCH码表中可以看到每一个小写字母比它相应的大写字

母的ASCII码大32o

四、字符型数据的输入和输出

1.getchar函数和putchar函数

例2.5#include"stdio.h"

main()

(

charc:

c=getchar();

putchar(c);

)

在运行时,如果从键盘输入字符'a'

a/(输入'a'后,按回车键)

a(输出变量c的值'a')

注意:getchar()只能接收一个字符。putchar()也只能向终端输出一个字符。在使用getchar

函数和putchar函数时,程序的首部需使用预编译命令〃include"stdio.h"。

2.scanf函数和printf函数

例2.6main()

charcl,c2;

scanf("%c%c",&cl,&c2);

printf("%c%c",cl,c2);

)

若输入为ab/

则输出为ab

在使用scanf函数和printf函数输入输出字符型数据时,使用"%c"格式控制,用来输

入输出单个字符。

注意,在用"%c"格式输入字符时,空格将以有效字符输入:

scanf("%c%c%c",&c1,&c2,&c3);

若输入aVbVc/

则将字符'a'送给cl,字符空格'V'送给c2,因为空格也是一个有效字符,字符'b'送给c30%c

只需要读入一个字符,用了空格做间隔,所以会出现这样的问题。

五、字符串常量

字符串常量是用双引号括住的字符序列。如:"Howdoyoudo"CHINA"a"等都

是字符串常量.

可以输出一个字符串,如printf("Howdoyoudo.");

注意:不要将字符常量与字符串常量混淆。’a'是字符常量,"a"是字符串常量,二者不同。

C规定:在每个字符串的结尾加一个“字符串结束标志”以便系统据此判断字符串是否结束。

以'\0'作为字符串结束标志。'\0'是ASCII码为0的字符,从ASCII码表中可以看到ASCII

码为0的字符是“空操作字符”不引起任何操作。

2.5变量的初始化

变量的初始化,就是在定义变量的同时给变量赋予初值。可以采用说明变量的类型,然后再

赋值的方法,也可以对变量类型说明的同时,给变量赋初值。

1.先定义后赋值

inta,b,c;

a=2;

b=5;

c=10;

2.定义和赋值同时进行

inta=5;

shortb=10;

charc='a";

floatd—7.8;

3.对几个变量同时赋一个初值

intal=10,a2=10,a3=10;

不可以写成:intal=a2=a3=10;

但是也可以写成:intal,a2,a3;

al=a2=a3=10;

初始化不是在编译阶段完成的,而是在程序运行时执行本函数时赋以初值的。相当于一个赋

值语句。例如:

inta=10;相当于:inta;

a=10;

又如:

inta,b,c=20;相当于:inta,b,c;

c=20;

2.6运算符和表达式

一、算术运算符和表达式

例2.7已知正方形的长和宽,求正方形的周长。

[分析]正方形的周长公式为:1=2*(a+b),已知正方形的长和宽可以计算周长。

main()

(

inta,b,l;

a=3;

b=4;

l=2*(a+b);

printf(z,l=%d\nv,1);

)

1.基本的算术运算符

+(加法运算符,或正值运算符)

-(减法运算符,或负值运算符)

*(乘法运算符)

/(除法运算符)

%(模运算符,或求余运算符)

注意:(1)两个整数相除结果为整数。但是如果相除的两个数中,至少有一个为实数,则结

果为带小数的商。

(2)%模运算符,要求操作数均为整型数据,如7%4的值为3。

2.算术表达式

用算术运算符和括号将操作数连接起来的,符合C语法规则的式子,称C算术表达式。

在表达式求值时,按运算符的优先级别高低次序执行。

例如:10+'a'+1.5—8765.12*%'

在进行运算时,不同类型的数据要先转换成同一类型,然后进行运算。

3.强制类型转换

可以用强制类型转换运算符将一个表达式转换成所需类型。例如

(double)a(将a转换成double类型)

(int)(x+y)(将x+y的值转换成整型)

(float)(5%3)(将5%3的值转换成float型)

一般形式为:

(类型名)(表达式)

注意:(1)类型名应用括号括起来。如(int)(x+y)

(2)已知floatx;对于(int)x,x仍然是float类型,而整个表达式(int)x为整型。

二、赋值运算符和赋值表达式

1.赋值符号

赋值符号"="就是赋值运算符,将一个数据赋给一个变量。如"a=3"。

2.类型转换

如果赋值运算符两侧的类型不一致,要进行类型转换。

(1)将实型数据赋给整型变量时,舍弃实数的小数部分。如i为整型变量,执行"i=3.56”

的结果是使i的值为3。

(2)将整型数据赋给实型变量时,数值不变,但以浮点数形式存储到变量中。

3.复合的赋值运算符

常用的赋值运算符有以下几种:

+=,_=,*=,/=,%=

例如:

a+=3等价于a=a+3

x*=y+8等价于x=x*(y+8)

x%=3等价于x=x%3

4,赋值表达式

由赋值运算符将一个变量和一个表达式连接起来的式子称为”赋值表达式"。

例如:

a=b=c=5(赋值表达式值为5,a、b、c值均为5)

a=5+(c=6)(表达式值为11,a值为11,c的值为6)

a=(b=4)+(c=6)(表达式值为10,a值为10,b等于4,c等于6)

三、逗号运算符和逗号表达式

逗号运算符将两个表达式连接起来。如

3+5,6+8

称为逗号表达式。逗号表达式的格式为

表达式1,表达式2

逗号表达式的求解过程是:先求解表达式1,再求解表达式2,整个逗号表达式的值是表达

式2的值。例如

逗号表达式

a=3*5,a*4

先求解a=3*5,得a的值为15,然后求解a*4,得60。整个逗号表达式的值为60。

课堂练习综合实例例1输入三角形的三条边长,求三角形面积。

(为了简单起见,设输入的三边长a,b,c能构成三角形)

#include"math.h"

main()

(

floata,b,c,s,area;

scanf(z,%f,%f,%f",&a,&b,&c);

s=1.0/2*(a+b+c);

area=sqrt(s*(s-a)*(s-b)*(s-c));

printf(wa=%7.2f,b=%7.2f,c=%7.2f,s=%7.2f\n,/,a,b,c,s);

printf(,rarea=%7.2f\n,/,area);

)

运行情况如下:

3,4,6

a=3.00,b=4.00,c=6.00,s=6.50

area=5.33

例2从键盘输入一个大写字母,要求改用小写字母输出。

#include“stdio.h"

main()

charcl,c2;

cl=getchar();

printf("%c,%d\n,/,cl,cl);

c2=cl+32;

printf(n%c,%d\n",c2,c2);

运行情况如下:

A/

A,65

a,97

本章小结

本章在讲解顺序结构程序设计方法的同时,介绍了三种数据类型。

1.整型数据。主要了解整型数据的定义方法,根据使用整数的范围选用定义整数变量的类

型。掌握整型数据的输入输出方法,主要使用Id格式控制符。

2.实型数据。主要掌握实型变量的不同定义方法,单精度数和双精度数的表示范围,实型

数据的输入输出方法,主要使用f格式控制符。

3.字符型数据。是由一对单引号括起来的单个字符,要注意,字符与字符串的区别。

还讲解了各种运算符和表达式,主要掌握算术运算符,在混合运算中,要按照运算符的

优先级,结合方向运算。

作业:

实验一顺序结构程序设计

一、实验目的

1.掌握C语言数据类型,熟悉如何定义一个整型、字符型、实型变量,以及对它们赋值的

方法,了解以上类型数据输出时所用的格式转换符。2

2.学会使用有关算术运算符,以及包含这些运算符的表达式。

3.掌握数据的输入输出方法,能正确使用各种格式转换符。

二、实验学时数

4学时

三、实验内容和步骤

1.启动TC2.0编译系统,进入编辑界面,建立一个新文件。文件名自定。

(要求每个学生建立一个自己的文件夹,每个同学的练习和作业的源程序命名形成系列,便

于检查、查找和考核)。

利用一个小程序验证常量、变量的使用方法与特点,验证数据类型和表达式值的计算规则及

其输出格式。

参考程序:

main()

{charcl,c2;

cl=97;c2=98;

printf(n%c,%c\n",cl,c2);

)

(1)在此基础上加入以下printf语句,并运行。

printf(f,%d,%d\n,f,cl,c2);

(2)将第二行改为以下语句,并运行。

intcl,c2;

(3)将第三行改为以下语句,并运行。

cl=300;c2=400;

分别写出三次运行结果。

2.编程并调试运行

(1)编程序,用getchar函数读入两个字符给cl、c2,然后分别用putchar函数和printf

函数输出这两个字符。上机运行此程序,比较putchar和printf函数输出字符的特点。

(2)试编写程序,从键盘输入一个大写字母,要求改用小写字母输出。

3.写出下面程序的运行结果:

1)main()

(

intx=l,y=l,z=l;

y=y+x;

x=x+y;

printf(%d\n”,x);

printf(,f%d\n",y);

)

2)main()

{chara;

intb;

a='A';b=97;

printfa:dec=%doct=%ohex=%xASCH=%c\n”,a,a,a,a);

printf(,fb:dec=%doct=%ohex=%xASCII=%c\n/,,b,b,b,b);

a='M';b=-8;

printf(,fa:dec=%doct=%ohex=%xASCII=%c\nz,,a,a,a,a);

printf(,fb:dec=%doct=%ohex=%xASCII=%c\n",b,b,b,b);

)

4.运行下面的程序,分析功能并纠正错误。

main()

(

inta,b,c,d;

scanf(,f%d%d%d%d/,;a,b,c,d);

printf(,fa=%db=%dc=%de=a+b+c+d=%d\n",a,b,c,d,a+b+c+d);

)

章节题目:

第三章选择结构程序设计

教学时间:

8学时

教学目的:

1、掌握关系运算表达式

2、掌握逻辑运算表达式

3、熟练掌握if语句的使用

4、掌握switch语句

内容、重点、难点:

内容:

3.1关系运算符和关系表达式

3.2逻辑运算符和逻辑表达式

3.3if语句

3.4switch语句

重点:

1、关系运算符和关系表达式

2、逻辑运算符和逻辑表达式

3、if语句的使用

难点:

1、掌握switch语句的使用

2、if语句的嵌套使用

注:教案尾页有小结和作业

第三章选择结构程序设计

选择结构,或称分支结构,是指对所给定的条件进行判断,然后决定选择执行不同的操作。

本章主要介绍如何用C语言实现选择结构。C语言的选择语句有两类,一类是if语句,另

一类是switch语句,本章将分别进行介绍。在介绍选择结构程序设计的同时,还要介绍关

系运算符和关系表达式,逻辑运算符和逻辑表达式等内容。

3.1关系运算符和关系表达式

一、关系运算符及其优先次序

1、关系运算符

C语言提供6种关系运算符:

(小于)

(小于或等于)

(大于)

(大于或等于)

(等于)

(不等于)

①<

②U

③〉

®>=

⑤==

⑥!=

优先级相同(高)

优先级相同(低)

2、关于优先次序:

(1)前4种关系运算符的优先级别相同,后两种也相同。前4

种高于后2种。例如,优先于’==,而与优先级相同。

(2)关系运算符与算术运算符、赋值运算符的优先级关系如下:

算术运算符(高)f关系运算符(中)f赋值运算符(低)

例如:

a>b+c等效于a>(b+c)

a==b<c等效于a==(b<c)

a=b>=c等效于a=(b>=c)

(3)关系运算符的结合方向是“自左向右”。

注意:“等于”关系的运算符“==”和“不等于”关系的运算符“!=”与数学中的表示方

法不同。例如,欲判断x是否等于0,若写成:x=0则表示把0赋值给变量x,正确的写法

为:x==0。

二、关系表达式

1、关系表达式

用关系运算符将两个表达式(算术表达式、关系表达式、逻辑表达式、赋值表达式、字符表

达式等)连接起来的式子,称关系表达式。

例:x>y,a+b<18,'a'c'b'都为合法的关系表达式。

2、关系表达式的值

关系表达式的值是一个逻辑值,即“真”或“假工

在C语言中:常用1表示“真”,用0表示“假一

例如,a=5,b=2,则:

关系表达式a>b的值为“真”,表达式的值为1。

关系表达式a==b的值为“假”,表达式的值为0。

可以将关系表达式的运算结果(0或1)赋给一个整型变量或字符型变量,如a=4,b=l,下面

的赋值语句是将1赋给变量c:

c=a>bc的值为1

例3.1试求X=5>3>1的值。

[分析]X=5>3>1相当于X=(5>3)>1=1>1=0

[说明]根据关系运算符的优先级别高于赋值运算符。

3.2逻辑运算符和逻辑表达式

一、逻辑运算符及其优先次序

1、逻辑运算符

C语言提供了3种逻辑运算符:

①!逻辑非

②&&逻辑与

③I逻辑或

其中“&&”和“|”为“双目(元)运算符”,要求有两个操作数(即运算量),如

(a<b)&&(x<=y),(a<b)I(x<=y)。"!”是“一目(元)运算符”,只需一个操作数,如!a或!(a<b)。

2、关于逻辑运算符的优先次序:

(1)逻辑运算符的优先次序如下;

!(非)一&&(与)一I(或),即“!”为三者中最高的。

(2)逻辑运算符中的“&&”和“|"低于关系运算符,“!”高于算术运算符。

例如:

(a>=b)&&(x>y)可写成:a>=b&&x>y

(a==b)|(x==y)可写成:a==b|x==y

(3)逻辑运算的结合方向是“自左向右二

二、逻辑表达式

1、逻辑表达式

用逻辑运算符将关系表达式或逻辑量连接起来的式子就是逻辑表达式。

例如:a&&b*c,(a+b)I(c<0)均为逻辑表达式。

2、逻辑表达式的值

C语言编译系统在给出逻辑运算时,以数值1代表“真”,以0代表“假”,但在判断一个量

是否为“真”时,以非0代表“真”,即将一个非0的数值认为是“真”,以0代表“假”。

注意:(1)参与逻辑运算的量不但可以是0和1,或者是0和非0的整数,也可以是任何类

型的数据,如字符型、实型或指针型。

(2)如果在一个表达式中不同位置上出现数值,应区分哪些是作为数值运算或关系运算的

对象,哪些作为逻辑运算的对象。

(3)在逻辑表达式的求解中,并不是所有逻辑运算符都需要执行,有时只需执行一部分运

算符就可以得到逻辑表达式的最后结果。例如:

①x&&y&&z

只有x为真时,才需要判断y的值.只要x为假,就立即得出整个表达式为假。

②x|yIz

只要x为真(非0),就不必判断y和x;当x为假,才判断y;x和y都为假才判断z。

3.3if语句

if语句是选择结构的一种形式,又称为条件分支语句。它是通过对给定条件的判断,来决定

所要执行的操作。C语言中提供了3种形式的if语句:if语句、if-else语句和if-else-if语句。

一、问题的提出

[问题]比较两个数的大小,将两个数中较大者赋给m。

[分析]要比较两个数的大小就要用到关系表达式,定义两个变量a,b,如果a>b则将a的

值赋给m,若a<b则将b的值赋给m,这里我们将用到if语句来实现该项功能。

main()

(

inta,b,s;

a=5;b=10;

if(a>b)m=a;

elsem=b;

printf("m=%d\n",m);

)

程序运行结果:

m=10

[说明]在该问题中我们借用了if语句,通过条件来判断应该执行哪条语句,充分体现出选

择结构程序设计的思想。

二、if语句的三种形式

1.if语句

if语句是条件分支语句最基本的形式。

格式:if(表达式)语句

功能:首先计算表达式的值,若表达式的值为“真”(非0),则执行语句,若表达式的值为

“假”(0),不执行语句。其流程图3.1(a)所示。

例如:

if(x>y)printf("%d",x);

2.if-else语句

if-else语句是条件分支语句的标准使用形式。

格式:if(表达式)语句1

else语句2

功能:首先计算表达式的值,若表达式的值为“真”(非0),则执行语句I,若表达式的值

为"假”(0),则执行语句2。其流程图3.1(b)所示。

例如:

if(x>y)printf("%d",x);

elseprintf("%d",y);

假(0)

真俳0)

(a)

表达式

语句

真俳0)假(0)

(b)

表达式

语句1

语句2

3.if-else-if语句

前面两种if语句一般都用于两个分支的选择结构。对于多个分支选择时,可采用if-else-if

语句。

格式:

if(表达式1)语句1

elseif(表达式2)语句2

elseif(表达式3)语句3

I

I

elseif(表达式n-1)语句n-1

else语句n

功能:首先计算表达式1的值,若为“真”(非0),执行语句1,否则进行下一步判断;若

表达式2为真,执行语句2,否则进行下一步判断……最后所有表达式都为假时,执行语句

n。

例如:

if(score>89)grade='A';

elseif(score>79)grade=B;

elseif(score>69)grade='C';

elseif(score>59)grade=D;

elsegrade='E';

关于if语句的说明:

(1)if后面圆括号中的表达式一般是关系表达式或逻辑表达式,用于描述选择结构的条件,

但也可以是任意的数值类型表达式(包括整型、实型、字符型、指针型数据表达式)。

例如:if(2)printf("OK!");

是合法的,因为表达式的值为2,非0,按“真”处理,执行结果输出“OK!”

(2)第二种、第三种格式的if语句中,在每个else前面有一个分号,整个语句结束处也有

一个分号。这是由于分号是C语句中不可缺少的部分,这个分号是if语句中的内嵌语句所

需要的。

(3)在if和else后面可以只含有一个内嵌的操作语句,也可以含有多个操作语句,此时应

用大括号“{}”将几个语句括起来,构成一个复合语句,注意:复合语句的“{”和“}”

之后不能加分号。

例3.2输入两个实数,按代数值由小到大输出这两个数。

main()

floata,b,c;

scanf(u%f,%f;&a,&b);

if(a>b)

(

t=a;a=b;b=t;

)

printf(”%5.2f,%5.2f',a,b);

}

程序运行结果:

2.2,-5.7/

-5.70,2.20

二、if语句的嵌套

在if语句中有包含一个或多个if语句称为if语句的嵌套.要处理多重分支选择结构问

题,除了用if-else-if语句外,还可以利用if语句的嵌套来实现。

说明:(1)if和else的配对规则为:else总是与它上面的最近的未配对的if配对。

(2)if与else的个数最好相同,从内层到外层一一对应,以避免出错。

(3)在嵌套内的if语句既可以是if语句形式,也可以是if-else语句形式,但最好使内嵌if

语句也包含else部分。如果if与else的个数不同,可以用花括号来确定配对关系。例如:

if()

{if()语句1}

else

语句2

这时“{}”限定了内嵌if语句的使用范围,因此else与第一个if配对。

例3.3有一函数:

-1(x<0)

y=0(x=0)

1(x>0)

编一程序,输入一个x值,输出y值。

main()

(

intx,y;

scanf("%d",&x);

if(x<0)y=-l;

elseif(x==0)y=0;

elsey=l;

printf("x=%d,y=%d\n",x,y);

)

三、条件运算符

条件运算符由两个符号“?”和“:”组成,要求有3个操作对象,称三目(元)运算符,

它是C语言中唯一的三目运算符。条件表达式的格式为:

表达式1?表达式2:表达式3

min=(a<b)?a:b;

说明:(1)通常情况下,表达式1是关系表达式或逻辑表达式,用于描述条件表达式中的条

件,表达式2和表达式3可以是常量、变量或表达式。

例如:(x==y)?'T':'F'

(a>b)?printf("%d",a):printf("%d",b)

等均为合法的条件表达式。

(2)条件表达式的执行顺序:先求解表达式1,若为非0(真)则求解表达式2,此时表达

式2的值就作为整个条件表达式的值。若表达式1的值为0(假),则求解表达式3,表达式

3的值就是整个条件表达式的值。

min=(a<b)?a:b;

执行结果就是将a和b二者中较小的赋给min。

(3)条件表达式的优先级别仅高于赋值运算符,而低于前面介绍过的所有运算符。因此,

min=(a<b)?a:b;

可直接写成:

min=a<b?a:b;

如果有

a>b?a:b+l

等效于a>b?a:(b+l),而不等效于(a>b?a:b)+l

(4)条件运算符的结合方向为“自右至左”。例如:

x>O?l:x<O?-l:O等效于x>O?l:(x<O?-l:O)

(5)表达式1、表达式2和表达式3的类型可以不同,此时条件表达式的值的类型为它们中

较高的类型。

例3.4输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,

不转换。然后输出最后得到的字符。

main()

(

charch;

printf("Pleaseenteracharcter:\n");

scanf("%c",&ch);

ch=(ch>='A'&&ch<='Z')?(ch+32):ch;

printf("%c",ch);

)

程序运行结果:

Pleaseenteracharcter:

AZ

a

[说明]条件表达式中的(ch+32),其中32是小写字母和大写字母ASCH码的差值。

3.4switch语句

一、问题的提出

要求按照考试成绩的等级(grade)输出百分制分数段:键入'A',输出85〜100;键入'B’,

输出70〜84;键入'C',输出60〜69;键入'D',输出<60;键入其他任意字符,输出error。

main()

chargrade;

scanf("%c",&grade);

switch(grade)

(

case'A':printf("85〜100\n");

case'B':printf(n70-84\nn);

case'C':printf("60~69\n");

case'D:printf(H<60\n");

default:printf(uerror\nn);

)

)

二、switch语句

格式为:

switch(表达式)

{case常量表达式1:语句1

case常量表达式2:语句2

case常量表达式n:语句n

default:语句n+1

(

其中default和语句n+1可以同时省略。

说明:(1)switch的表达式通常是一个整型或字符型变量,也允许是枚举型变量,其结果为

相应的整数、字符或枚举常量。case后的常量表达式必须是与表达式对应一致的整数、字符

或枚举常量。

(2)switch语句中所有case后面的常量表达式的值都必须互不相同。

(3)switch语句中的case和default的出现次序是任意的。

(4)由于switch语句中的“case常量表达式”只是起语句标号的作用,而不起条件判断作

用,即“只是开始执行处的入口标号”。可以用一个break语句来终止switch。将上面的switch

结构改写如下:

switch(grade)

(

case'A':printf("85~100\n");break;

caseB:printf("70~84\n");break;

case'C:printf("60~69\n");break;

case'D:printf("<60\n");break;

default:printf("error\n");

}

最后一个分支(default)可以不加break语句。如果grade的值为'B',则只输出“70〜84"。

(5)每个case的后面既可以是一个语句,也可以是多个语句,当是多个语句的时候,也不

需要用花括号括起来。

(6)多个case的后面可以共用一组执行语句,如

switch(n)

case1:

case2:

x=10;

break;

1।

)

它表示当n=l或n=2时,都执行下面两个语句:

x=10;

break;

课堂练习综合实例

通过一些例子,进一步说明选择结构的程序设计方法。

例1求一个整数的平方根,若为负数,则求出它的负数平方根。

#include"stdio.h"

#include"math.hH

main()

(

intn;

floatroot;

printf("Enteranumber:\t");

scanf(u%dn,&n);

if(n>=0)

(

root=sqrt(n);printf(usqrt(%d)=%f',n,root);

)

else

(

root=sqrt(abs(n));

printf(,,sqrt(%d)=%fi",n,root);

例2从键盘上输入3个实数,求出其中的最小值并输出其值。

main()

(

floata,b,c,temp;

printf("Pleaseentera,b,c:\n");

scanf(u%f,%f,%f;&a,&b,&c);

if(a>=b)

(

temp=a;a=b;b=temp;

)

if(a>=c)

(

temp=a;a=c;c=temp;

printf(nMin=%f\n';a);

程序运行情况:

1.2,-34.5,678/

Min=-34.500001

也可以用如下方法解决此题:

main()

(

floata,b,c,temp;

printf("Pleaseentera,b,c:\n");

scanf(H%f,%f,%f,,&a,&b,&c);

a=(a<b)?a:b;

a=(a<c)?a:c;

printf("Min=%f\nH,a);

)

例3输入一个年份,判断它是否是闰年。

main()

(

intyear,leap;

printf("Pleaseenteryear:\n");

scanf(u%d",&year);

if(year%400==0)

leap=l;

else

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论