资源描述
《C程序设计》课程教案
第一章 C语言概述
一、教学目标
1.了解C语言出现的背景
2.掌握C语言程序的构成、书写格式和上机步骤
二、教材分析
1.本章重点:C语言程序的构成
2.本章难点:上机操作
三、教学方法和手段
1. 讲授与演示法相结合
2. 计算机和投影仪
四、教学时数
2学时
五、教学内容
第一节 C语言出现的历史背景
一、ALGOL60 :1960年面向问题、结构化,可读性、可移植性好,不能对硬件操作;
二、CPL:63年接近硬件,规模较大、难以应用;
三、SIMULA:1966~1967 SIMULA 66是ALGOL 60的扩充;SIMULA 67引进了“对象”和“类”等概念而成为第一个面向对象的语言;
四、BCPL :67年由CPL改制,结构化、直接处理硬件;
五、B语言:1970年贝尔实验室的Ken Thompson以BCPL语言为基础设计的,开发了第一个UNIX操作系统;
六、C语言:1972-73年间,保持了BCPL和B语言的精炼与接近硬件的优点,克服了它们过于简单、数据无类型的缺点,重写了UNIX操作系统的90%;
七、标准 C:以1978年发表的UNIX第七版中的C编译程序为基础,Brain W.Kernighan&Dennis M.Ritchie合著的《The C Programming Language》问世;
八、ANSI C:1983年美国国家标准化协会(ANSI)制定的标准;
九、C++:1986年 与C兼容,保持了C的所有优点并进行了增强:增强了面向对象的机制,成为典型的面向对象和面向过程的混合语言,适用于大型系统软件和应用软件的开发;
十、87 ANSI C:1987年制定的新标准;
十一、ISO C:1990年ISO接受87 ANSI C为ISO C的标准,该标准是目前C编译器的标准。
第二节 C语言的特点
一、语言简洁、紧凑,使用方便、灵活;
二、运算符丰富;
三、数据类型多(整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类等);
四、具有结构化的控制语句;
五、语法不太严格,自由度大;
六、既是高级语言,又具有低级语言的功能;
七、生成目标代码质量高,程序执行效率;
八、可移植性好。
第三节 简单的C语言程序介绍
一、C语言是由函数构成的,至少有一个main()函数;
二、每个函数由函数首部和函数体组成;函数体由说明语句、执行语句组成;
三、每个C程序从main()函数开始执行,并在main()中结束;
四、每个语句和数据定义的最后必须加分号;
五、C程序无输入、输出语句:
输入功能由scanf()函数完成;输出功能由printf()函数完成;
六、可加注释/*……*/
七、借助程序实例加以说明,并提倡良好的程序设计书写风格:
(一)每个语句占一行;
(二)同一层次的语句从同一位置处开始书写;
(三)同一层次中嵌套的结构,应从不同位置开始书写;
(四)编译控制行、外部数据定义、函数定义之间空一行书写;
(五)对于函数体的大括号的书写约定
(六)学会使用注释。
第四节 运行C程序的步骤和方法
一、进入环境;
二、编辑源程序;
三、保存源程序;
四、编译源程序F9;
五、执行程序Ctrl-F9,查看结果Alt-F5;
六、退出C环境Alt-X
。
本章小结
一、C语言的构成要素,main函数在程序中的作用;
二、 上机操作的过程。
作业题
P13页1.3题、1.7题、1.8题。
第二章 程序的灵魂——算法
一、教学目标
1.了解算法的概念
2.掌握结构化程序的三种基本结构及算法的N-S图表示法
二、教材分析
1.本章重点:怎样表示一个算法
2.本章难点:三种基本结构
三、教学方法和手段
1. 讲授与演示法相结合
2. 计算机和投影仪
四、教学时数
4学时
五、教学内容
第一节 算法的概念
一个程序包括以下两方面内容:
一、对数据的描述。在程序中要指定数据的类型和数据的组织形式,即数据结构;
二、对操作的描述。即算法,为解决一个问题而采取的方法和步骤;
三、著名计算机科学家Wirth提出一个公式:数据结构+算法=程序。
第二节 简单算法举例
例1:设有两个杯子A和B,分别盛放酒和醋,要求将它们互换。
S1:C ← A
S2:A ← B
S3:B ← C
例2:从10个数中挑出最大数,并将之置入max。
S1:i=1, 令max等于第一个数;
S2:i=i+1;
S3:将max与第 i 个数进行比较,若前者小于后者,将修正max为第 i 个数;否则进行S4;
S4:若i <10,则转到S2;否则输出max并结束。
例3:求1~100的和
S1:sum←0,t←1;
S2:sum←sum+t
S3:t←t+1
S4:若t <= 100,则转到S2,否则转到S5;
S5:输出sum,结束。
例4:求n!
S1:s ← 1,t ←1;
S2:s ← s * t;
S3:t ← t+1;
S4:若 t <= n,则返S2,否则输出s并结束。
第三节 算法的特性
一、有穷性;
二、确定性;
三、有零个或多个输入;
四、有一个或多个输出;
五、有效性;
第四节 怎样表示一个算法
一、用自然语言表示算法–通俗易懂,但易出现“歧义性”。
二、用传统流程图表示算法–直观形象,易于理解。
程序的三种基本结构:顺序结构、选择结构、循环结构
B
A
A
B
P
A
P
A
P
A
P
三、 用N-S流程图表示算法
四、 用伪代码表示算法
五、 用计算机语言表示算法(即实现算法)
第五节 结构化程序设计方法
结构化程序设计方法强调:
程序设计风格和程序结构的规范化,提倡清晰的结构。
一、自顶向下
二、逐步细化
三、模块化设计
四、结构化编码
本章小结
一、程序的三种基本结构:顺序、选择、循环;
二、5种描述算法的方法,关键是N-S图;
三、灵活运用三种基本结构,学会结构化的程序设计方法。
作业题
P36页2.4(1)(2)(4)题。
第三章 数据类型、运算符与表达式
一、教学目标
1.掌握C的数据类型
2.掌握整型、浮点型、字符型数据的常量及变量
3. 掌握C语言中的各种运算符
4.掌握运算符的优先级与结合性
二、教材分析
1.本章重点:(1)基本数据类型的常量和变量;
(2)C语言中各种运算符的使用
2.本章难点:(1)不同类型的数据在内存中的存储形式
(2)混合表达式中运算符的运算顺序
三、教学方法和手段
1. 讲授与演示法相结合
2. 计算机和投影仪
四、教学时数
8学时
五、教学内容
第一节 C语言的数据类型
C语言的数据类型丰富,但在学习第11章之前,我们只遇到C的四种基本数据类型:
整型、字符型、单精度实型、双精度实型。
第二节 常量和变量
一、常量:其值不能被改变的量。
两种:一般常量和符号常量
(一)直接常量(字面常量):
1.整型常量:如12、0、-3等
2.实型常量:如4.5、-1.234等
3.字符常量:如‘a’、‘1’等,用单引号表示,占一个字节;
4.字符串常量:如“a”、“abc”、“1”,用双引号表示。
(二) 符号常量
符号常量即是用一个标识符来代替一个常量;符号常借助于预处理命令define来实现;
define命令格式是:#define 标识符 字符串
如:#define PI 3.1415926535
#define STRING “ABCD”
1. 习惯上,符号常量用大写字母表示;
2.定义符号常量时,不能以“;”结束;
3. 一个#define占一行;
4. 一个源程序文件中可含有若干个define命令,不同的define命令中指定的“标识符”不能相同;
二、变量:在程序运行过程中,其值会发生变化。
(一)每个变量必须有一个名字,变量名是标识符。
(二)标识符是用来标识数据对象,是一个数据对象的名字。
(三)命名规则:以字母或下划线开始,后跟字符、数字或下划线。
例:x1,_average,lotus_1_2_3,#abc,1fs,M.D.Jhon
1.变量名不能是关键字(即保留字,是C编译程序中保留使用的标识符。 如:auto、break、char、do、else、if、int等)
2.怎样定义变量?
int i, z, h;
char c , ch=‘c’;
float a=3.14 , b=2.71, x, y;
注意:变量要先定义后使用!
例:
void main()
{ int a , b , c ,sum;
a=3; b=-4; c=9;
sum=a+b+c;
printf(“\nsum=%d”,sum);
a=16; b=56; c=-98;
sum=a+b+c;
printf(“\nsum=%d”,sum);
}
第三节 整型数据
一、整型常量的表示方法
(一)十进制
如:123,-456,0
(二)八进制数
如:0123,-011 (以0开头的数)
(三)十六进制数
如:0x123,-0x12,0xABC (以0x开头的)
二、整型变量
(一)整型数据在内存中以二进制形式存放,每一个整型变量在内存中占2个字节。
例:定义整型变量i=10 和j= -10的存放形式。
(二)整型变量的分类:基本型int、短整型short、长整型long、无符号型unsigned
(三)整型变量的定义
对变量的定义,一般放在函数体开头部分的声明部分(也可放在函数中某一分程序内)
例:#include <stdio.h>
void main( )
{ int a, b, c, d;
unsigned u;
a=12; b=-24; u=10;
c=a+u; d=b+u;
printf(“a+u=%d, b+u=%d\n”,c,d);
}
(四)整型数据的溢出
一个int 型变量的最大允许值为32767,如果再加1,其结果不是32768,而是-32768。即“溢出”。
(五)整型常量的类型
1.一个整数在-32768~32767内,则为int型,可以赋给int型和long int型变量。
2.一个整数超过上述范围,在-2147483648~2147483647内,则为long int型,可赋给long int型变量。
3.如果short int 和int型数据在内存中占据长度相同,则其范围与int相同。
4.常量无unsigned型。但可将非负且在取值范围内的整数赋给unsigned型变量。
5.在一个整常量后面加一个字母l或L,则认为是long int型常量。
第四节 浮点型数据
一、浮点型常量的表示方法
(一)十进制浮点数
如:0.123,.456,0.0,123.,123.0
整数部分和小数部分都可省,但不能同时省
(二)指数形式
如:123e3,123E3代表123×103
指数部分为整常数;
尾数部分可以是整常数,也可以是实常数;
尾数部分和指数部分均不可省。E10, 100.e15.2, .e5均为不合法的浮点数。
二、浮点型变量
(一)浮点型数据在内存中的存放形式
一个浮点型数据一般在内存中占4个字节(32位)。
浮点型数据是按照指数形式存储的。
(二)浮点型变量的分类:单精度float、双精度double、长双精度long double
第五节 字符型数据
一、字符常量
(一) 括在一对单引号中的一个字符(单引号仅作界限符),‘a’ 、‘X’为字符常量;
(二)一个字符常量占1B,存放的是字符的ASCII码值。
(三)转义字符
1.以‘ \ ’开头,后跟一个约定的字符或所要表示字符的十六进制(或者八进制)的编码;
2.‘\0’表示编码值为0的字符,即NULL,它与数值常数0是等同的;
3. 书中P48列出了常用的转义字符。
二、字符变量
字符变量用来存放字符常量,只能放一个字符。
例:char c1=‘a’, c2=‘A’;
一个字符变量在内存中占一个字节。
三、字符数据的存放形式及使用方法
将字符常量放到字符变量中,实际上是将其ASCII代码放到变量所占的存储单元中。
如:‘a’在内存存放的是二进制数01100001;
‘A’在内存存放的是二进制数01000001。
在0~255之间字符型数据和整型数据可以通用。即一个字符数据既可以以字符形式输出,也可以以整数形式输出,还可以互相赋值。
例:void main()
{ char c1,c2;
c1=97; c2=98;
printf(“%c %c ”, c1, c2);
printf (“%d %d \n”, c1, c2);
c1=c1-32; c2=c2-(‘a’-’A’);
printf(“%c %c\n” , c1 , c2); }
运行结果 :a b 97 98
A B
四、字符串常量
(一)括在一对双引号中的0个或多个(除\与“ ”自身之外)C语言字符集中的任何字符及转义字符组成;双引号仅作界限符;
“C language programming”、“a\\n”、“#123”、“ ”等为字符串常量;
“The dentist said: \’open wide\’”
“The path is \\root\\user\\device”
“\077 pay to attention of this!”
(二)“China”在存储器中实际占用6个字节:
(三)“a”与‘a’是不同的(表示形式不同、存储方式不同、后者可像整数那样参加运算,前者不能);
(四) 但应注意的是,在写字符串常量时没有必要写“China\0 ”,而只需写“China”;
(五) 虽然C字符串后末尾的NULL字符属字符串的内容,但是NULL字符并不被显示或输出;
(六) C语言的字符串常量是按数组处理的。
(七) 书写一个很长的字符串常量时,如果在一个书写行内写不下,可跨行书写。如:“A string is a sequence of characters\
surrounded by double quotes.”
第六节 变量赋初值
在定义变量时对变量进行赋值称为变量的初始化;
格式:类型说明符 变量1=值1,变量2=值2,……;
如:int a=3, b=4, c=5;
float x=3.4, y=0.75;
char ch1=‘K’, ch2=‘P’;
注意:
一、 int a, b, c=5; 只对c初始化,值为5;
二、 对几个变量赋以同一个初值时,int a=b=c=5; 是非法的;
int a=5, b=5, c=5; 是合法的。(注:a=b=c=5;是合法的赋值语句)
说明:对变量赋初值,仅表示该变量在程序运行过程中执行本函数时的初值。
第七节 各类数值型数据间的混合运算
混合算术表达式,如:10+‘a’+ i*f-d/e需自动转换成同一类型再运算;
转换的规则如下:(书P54)
设有:int i=2; float f=3.5;
double d=16.0; long e=2;
则10+‘a’+ i*f-d/e的运算次序为:
一、进行10+‘a’的运算,转换‘a’为97;
二、进行 i* f的运算,将 i 和 f 都转成double型;
三、整数107与 i* f的积相加,先将107转化成双精度数,结果为double型;
四、将变量 e 转化成double型,d/e的结果为double型;
五、将10+‘a’+ i* f的结果与d/e的商相减,结果为double型。
以上数据类型转换都是由C编译系统自动隐含完成的,故称自动类型转换
第八节 算术运算符和算术表达式
一、基本的算术运算符
*、/、% +、- 左结合性
二、算术表达式
(一)用算术运算符和括号将运算对象(操作数)连接起来的、符合C语法规则的式子称为算术表达式。如:
(‘a’-b*c /(d+e)+sin(3.14/2+f )) - 3.14*g*g
(二)* 不能省,*、/ 不能写成另外的符号;
(三)数学函数自变量的括号不能省;如:
sin(x);log10(x);log(x);pow(x,y)
(四)角度、特殊的符号要转换。
三、5种算术运算符的优先级与结合性
四、 强制类型转换运算符
格式:(类型关键字或类型名)表达式
如:(int)(x+y)%(int)p (double)a (float)(5%3)
实例:void
main()
{ float x;
int i;
x=3.6;
i=(int) x;
printf(“x=%f, i=%d”,x, i);
}
运行的结果是:x=3.600000,i=3
五、自增与自减运算符
++、--
基本运算有:++i、i++、--i、i--
说明:
(一)+ +和--只能用于变量,不能用于表达式或常量; 如:2++或 (i+j)--是非法的;
(二)+ +、 --运算符的结合方向是“右结合”;如:-i+ +不等于(-i) + + ;
(三)+ +、 --运算常用于循环控制、数组的下标处理等场合;
(四)i+++j应理解为(i++)+j;
(五)printf (“%d, %d”, i , i++); 最好写成j=i++;
printf(“%d,%d”, i, j);
当i的初值为3时,其结果为4,3
第九节 赋值运算符和赋值表达式
一、赋值运算符:=
二、类型转换
规则:把赋值运算符右边表达式的数据类型转换成左边对象的类型。
(一)实型赋给整型变量时,舍去实数的小数部分。
(二)整型赋给实型变量时,数值不变,以浮点形式存储。
(三)一个较短的有符号的int型数据转换成一个较长的有符号int型数据总是进行符号扩展,以保证数据的正确性;
如:a、b分别为8位、16位整型数据,则执行b=a后:
a: 11111110(-2)
转换后的结果:11111111 11111110(-2)
(四)一个较长的有符号int型数据转换成一个较短的有符号int型数据时把较长的有符号int型数据的高位部分截去;
如:设a为8位,b为16位,则执行a=b后,若
b: 00000000 00001111
转换后的结果 00001111
b: 11111111 11110001 (-15)
转换后的结果 11110001 (-15)
b: 11111111 00000000 (-128)
转换后的结果 00000000 (0)
三、复合的赋值运算符
在“=”之前加上其他运算符,可构成复合运算符
x+=y 等价于 x=x+y
a%=b+c/d 等价于 a=a%(b+c/d)
C中10种复合赋值运算符:+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=
四、赋值表达式
<变量><赋值运算符>< 表达式/值>
如: void main()
{ int a,b,c,d;
a=(a=100)+(b=30)-b*5;
……
}
嵌套赋值表达式:e1=e2=…=en,如:a=b=c=d=100 等价于a=(b=(c=(d=100)))
e1,e2,…,en不必具有相同的数据类型
例: 当a=12时,a+=a-=a*a 求解结果?
先“a-=a*a”的运算,a=a-a*a=-132;
再进行“a+=-132”的运算,a=a+(-132)=-264。
第十节 逗号运算符和逗号表达式
语法:表达式1,表达式2,……表达式n
语义:依次求各个表达式的值,最后一个表达式的值作为整个逗号表达式的值;
如:3+5, 6+8的值为14;
a=3*5,a*4的值为60;
逗号表达式常用在for语句中;
逗号表达式的优先级别最低;
C语言中,逗号有两种用途(分隔符,运算符)。
思考:(a=3*5,a*4),a+5的值是多少?
本章小结
一、C的基本数据类型int、float、double、char;
二、基本数据类型的常量表示、变量定义,及不同类型的数据在内存中的存储形式;
三、算术运算符及表达式的计算;
四、++、--运算;
五、各种运算符的优先级和结合性。
作业题
P66页-68页3.6题、3.9题、3.10题、3.12题。
第四章 最简单的C程序设计——顺序程序设计
一、教学目标
1.掌握赋值语句、输入输出语句
2.学会简单的顺序程序设计
二、教材分析
1.本章重点:输入、输出语句
2.本章难点:格式输入输出语句
三、教学方法和手段
1. 讲授与演示法相结合
2. 计算机和投影仪
四、教学时数
4学时
五、教学内容
第一节 C语句概述
一、控制语句
(一)二个分支语句(if-else、switch)
(二)三个循环语句(for、while、do-while)
(三)四个转移语句(continue、break、goto、return)
二、函数调用语句
如:printf(“Hello, world!”);
三、表达式语句
x+y; i++; a=2; a=3*5, 40 ;
四、空语句( ;)
五、复合语句
{ 语句序列 }
第二节 赋值语句
赋值语句是由赋值表达式加上一个分号构成,
如:b=3;
if((a=b)>0) t=a;
第三节 数据输入输出的概念及在C语言中的实现
一、输入、输出的概念
二、输入输出操作是由函数来实现的
C语言函数库中有“标准输入输出函数”
字符的输入与输出:getchar()、putchar()
字符串的输入与输出: gets() 、puts()
格式输入与输出: scanf() 、printf()
三、在使用C语言库函数时,要用预编译命令“#include”将有关的“头文件”包括到用户源文件中。
例如:使用标准输入输出库函数时,要用到“stdio.h”文件,在源文件开头应有:
#include <stdio.h> 或 #include “stdio.h”
第四节 字符数据的输入输出
一、字符输出函数——putchar
语法:putchar(c)
语义:(向stdout终端)输出一个字符;
如:#include <stdio.h>
void main()
{ putchar(‘\141’); putchar(‘a’);
putchar(‘A’+32); putchar(‘\n’);
}
输出:aaa
二、字符输入函数——getchar
语法:getchar ( ),是一个无参函数;
语义:(从stdin终端上) 输入一个字符;
getchar 包含在 stdio.h中,是stdio.h中定义的宏;
如:#include <stdio.h>
void main( )
{ putchar(getchar( )); }
如:#include <stdio.h>
void main( )
{ int c;
while((c=getchar( ))!=‘#’)
if(c>=‘a’&&c<=‘z’)putchar(c-’a’+’A’);
else putchar(c);
}
从键盘上输入一串字符遇‘#’结束,若字符在a~z之间时,则输出字符的大写;否则直接输出字符。
第五节 格式输入与输出
一、格式输出函数——printf
语法:printf (“格式控制”, 输出表列);
格式控制:是用双引号括起来的字符串,包含两种信息:
普通字符和转义字符(这类字符总是原样输出)
格式说明:由%和格式控制符组成。如:%d, %f等;
如:printf(“a=%d, b=%d”,a,b);
若a、b的值分别为2和3,则输出结果为: a=2, b=3
例1:
#include <stdio.h>
void main()
{ int a=4096;
long int b=123456;
printf(“%5d\n%3d\n%ld\n%9ld\n”,a,a,b,b);
}
例2:
#include <stdio.h>
void main()
{ int a= -8;
printf(“dec a=%d\n oct a=%o\n hex a=%x\n”,a,a,a);
}
例3:
#include <stdio.h>
void main()
{ int a= 101; unsigned int b=65; char c=‘a’;
printf(“a=%d,%c,%u\n”,a,a,a);
printf(“b=%d,%c,%u\n”,b,b,b);
printf(“c=%d,%c,%u\n”,c,c,c);
printf(“c=%3d,%3c,%3u\n”,c,c,c);
}
二、格式输入函数 scanf
语法:scanf(“格式控制”,地址表列);
格式控制:包含三类符号
空白字符:(空格、Tab或\t、\n),输入时不必一一对应;
普通字符:(非格式转换说明符、非空白符、非%),输入时必须一一对应;
格式转换说明符:
(由%后接一个任选的压缩指示符“*”,表示本输入项在读入后不赋给相应的变量)
例1:
#include <stdio.h>
void main()
{ int a; float b; char str[50];
scanf(“%d%f%s”,&a,&b,str);
……
}
例2:
#include <stdio.h>
void main()
{int a; float b; char str[50];
scanf(“%2d %f %*d %2s”,&a,&b,str);
……
}
注意:scanf函数规定,组成输入项表的输入对象须是地址量;如:
scanf(“%d,%d,%d”,&a,&b,&c);
scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);
(一)第一个输入语句,正确的输入数据流为:123,456,789<enter>,处理的结果为: 123→a,456→b,789→c
(二)同理对第二个输入语句,正确的输入数据流应是:
a=123,b=456,c=789<enter>
该输入数据流中除123,456,789被赋给相应变量外,其余都被丢弃
例3:
#include <stdio.h>
void main()
{ char c1,c2,c3;
scanf(“%c%c%c”,&c1,&c2,&c3);
scanf(“%3c%3c%3c”,&c1,&c2,&c3);
……
}
(一)对第一个输入语句, 若输入数据流为abc<enter>, 则a→c1 b→c2 c→c3;但如果输入的数据流为:a b c<enter> 则a→c1 →c2 b→c3
(二)对第二个输入语句:要求输入3个字段9个字符,但三个变量中只能各存放一个字符,其余的2个字符将被丢掉。如当输入数据流为:abcdefghi<enter>时,结果为a→c1 d→c2 g →c3
第六节 顺序结构程序设计举例
例1:输入三角形的三边长,求三角形面积。
分析:三边为a,b,c,面积area2=s(s-a)(s-b)(s-c),其中s=(a+b+c)/2
程序:
#include <math.h>
void main()
{ float a,b,c,s,area;
sacnf(%f,%f,%f”,&a,&b,&c);
s=1.0/2*(a+b+c);
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf(“a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2f\n”,a,b,c,s);
printf(“area=%7.2f\n”,area);
}
例2:从键盘输入一个大写字母,要求改用小写字母输出。
#include <stdio.h>
void main()
{char c1,c2;
c1=getchar();
printf(“%c,%d\n”,c1,c1);
c2=c1+32;
printf(“%c,%d\n”,c2,c2);
}
本章小结
一、字符输入输出函数:getchar\putchar;
二、格式输入输出函数:scanf\printf,特别注意scanf函数的地址项是否要加&;
三、注意简单程序的结构,头文件、变量定义、输入语句及输出语句。
作业题
p88页-90页4.5题、4.8题、4.9题。
第五章 选择结构程序设计
一、教学目标
1.掌握实现选择结构的两种语句、一个运算符
2.学会编写选择结构的程序
二、教材分析
1.本章重点:if-else语句、switch语句、条件运算符
2.本章难点:嵌套if-else语句中的if与else匹配问题
三、教学方法和手段
1. 讲授与演示法相结合
2. 计算机和投影仪
四、教学时数
4学时
五、教学内容
第一节 关系运算符和关系表达式
一、关系运算符及其优先次序
在C语言中有以下关系运算符:
< 小于
<= 小于或等于
> 大于
>= 大于或等于
== 等于
!= 不等于
关系运算符都是双目运算符,其结合性均为左结合。关系运算符的优先级低于算术运算符,高于赋值运算符。 在六个关系运算符中,<,<=,>,>=的优先级相同,高于==和!=,==和!=的优先级相同。
二、关系表达式
关系表达式的一般形式为:
表达式 关系运算符 表达式
例如:
a+b>c-d
x>3/2
‘a’+1<c
-i-5*j==k+1
都是合法的关系表达式。由于表达式也可以又是关系表达式。 因此也允许出现嵌套的情况。例如:
a>(b>c)
a!=(c==d)等。
关系表达式的值是“真”和“假”,用“1”和“0”表示。
如:
5>0的值为“真”,即为1。
(a=3)>(b=5)由于3>5不成立,故其值为假,即为0。
第二节 逻辑运算符和逻辑表达式
一、逻辑运算符及其优先次序
C语言中提供了三种逻辑运算符:
&& 与运算
|| 或运算
! 非运算
与运算符&&和或运算符||均为双目运算符。具有左结合性。非运算符!为单目运算符,具有右结合性。逻辑运算符和其它运算符优先级的关系可表示如下:
!(非)→&&(与)→||(或)
!(非)
算术运算符
关系运算符
&&和 ||
赋值运算符
“&&”和“||”低于关系运算符,“!”高于算术运算符。
按照运算符的优先顺序可以得出:
a>b && c>d 等价于 (a>b)&&(c>d)
!b==c||d<a 等价于 ((!b)==c)||(d<a)
a+b>c&&x+y<b 等价于 ((a+b)>c)&&((x+y)<b)
二、逻辑运算的值
逻辑运算的值也为“真”和“假”两种,用“1”和“0 ”来表示。其求值规则如下:
(一) 与运算 &&:参与运算的两个量都为真时,结果才为真,否则为假。
例如:
5>0 && 4>2
由于5>0为真,4>2也为真,相与的结果也为真。
(二)或运算||:参与运算的两个量只要有一个为真,结果就为真。 两个量都为假时,结果为假。
例如:
5>0||5>8
由于5>0为真,相或的结果也就为真。
(三)非运算!:参与运算量为真时,结果为假;参与运算量为假时,结果为真。
例如:
!(5>0)
的结果为假。
虽然C编译在给出逻辑运算值时,以“1”代表“真”,“0 ”代表“假”。 但反过来在判断一个量是为“真”还是为“假”时,以“0”代表“假”,以非“0”的数值作为“真”。例如:
由于5和3均为非“0”因此5&
展开阅读全文