《C程序设计》课程教案_第1页
《C程序设计》课程教案_第2页
《C程序设计》课程教案_第3页
《C程序设计》课程教案_第4页
已阅读5页,还剩160页未读 继续免费阅读

下载本文档

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

文档简介

《C程序设计》课程教案

第一章c语言概述ー、教学目标.了解c语言出现的背景.掌握C语言程序的构成、书写格式和上机步骤二、教材分析.本章重点:C语言程序的构成.本章难点:上机操作三、教学方法和手段.讲授与演示法相结合2.计算机和投影仪四、教学时数2学时五、教学内容第一节C语言出现的历史背景ー、ALG0L60:1960年面向问题、结构化,可读性、可移植性好,不能对硬件操作;二、CPL:63年接近硬件,规模较大、难以应用;三、SIMULA:1966〜1967SIMULA66是ALGOL60的扩充;SIMULA67引进了“对象”和“类”等概念而成为第一个面向对象的语言;四、BCPL:67年由CPL改制,结构化、直接处理硬件;五、B语言:1970年贝尔实验室的KenThompson以BCPL语言为基础设计的,开发了第一个UNIX操作系统;六、C语言:1972-73年间,保持了BCPL和B语言的精炼与接近硬件的优点,克服了它们过于简单、数据无类型的缺点,重写了UNIX操作系统的90%;七、标准C:以1978年发表的UNIX第七版中的C编译程序为基础,BrainW.Kernighan&DennisM.Ritchie合著的《TheCProgrammingLanguage》问世;ハ、ANSIC:1983年美国国家标准化协会(ANSI)制定的标准;九、C++:1986年与C兼容,保持了C的所有优点并进行了增强:增强了面向对象的机制,成为典型的面向对象和面向过程的混合语言,适用于大型系统软件和应用软件的开发;十、87ANSIC:1987年制定的新标准;Hー、ISOC:1990年ISO接受87ANSIC为ISOC的标准,该标准是目前C编译器的标准。第二节C语言的特点ー、语言简洁、紧凑,使用方便、灵活;二、运算符丰富;三、数据类型多(整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类等);四、具有结构化的控制语句;五、语法不太严格,自由度大;六、既是高级语言,又具有低级语言的功能;七、生成目标代码质量高,程序执行效率;ハ、可移植性好。第三节简单的C语言程序介绍ー、C语言是由函数构成的,至少有一个main。函数;二、每个函数由函数首部和函数体组成;函数体由说明语句、执行语句组成;三、每个C程序从main。函数开始执行,并在main。中结束;四、每个语句和数据定义的最后必须加分号;五、C程序无输入、输出语句:输入功能由scanf()函数完成;输出功能由printf()函数完成;六、可加注释/* */七、借助程序实例加以说明,并提倡良好的程序设计书写风格:(一)每个语句占一行;(二)同一层次的语句从同一位置处开始书写;(三)同一层次中嵌套的结构,应从不同位置开始书写;(四)编译控制行、外部数据定义、函数定义之间空一行书写;(五)对于函数体的大括号的书写约定(六)学会使用注释。第四节运行C程序的步骤和方法ー、进入环境;二、编辑源程序;三、保存源程序;四、编译源程序F9;五、执行程序Ctrl-F9,査看结果程t-F5;六、退出C环境Alt-X〇本章小结ー、C语言的构成要素,main函数在程序中的作用;二、上机操作的过程。作业题P13页1.3题、1.7题、1.8题。第二章程序的灵魂——算法ー、教学目标,了解算法的概念.掌握结构化程序的三种基本结构及算法的N-S图表示法二、教材分析.本章重点:怎样表示一个算法.本章难点:三种基本结构三、教学方法和手段.讲授与演示法相结合.计算机和投影仪四、教学时数4学时五、教学内容第一节算法的概念ー个程序包括以下两方面内容:ー、对数据的描述。在程序中要指定数据的类型和数据的组织形式,即数据结构;二、对操作的描述。即算法,为解决ー个问题而采取的方法和步骤;三、著名计算机科学家Wirth提出ー个公式:数据结构+算法=程序。第二节简单算法举例例1:设有两个杯子A和B,分别盛放酒和醋,要求将它们互换。SI:C-AS2:A-BS3:B-C例2:从10个数中挑出最大数,并将之置入max。SI:i=l,令max等于第一个数;S2:i=i+l;S3;将max与第i个数进行比较,若前者小于后者,将修正max为第i个数;否则进行S4;S4;若i<10,则转到S2;否则输出max并结束。例3:求C100的和SI:sum—0,t—1;S2:sum-sum+tS3:t=t+lS4:若t<=100,则转到S2,否则转到S5;S5:输出sum,结束。例4:求n!SI:s-1,t—1;S2:s-s*t;S3:t-t+1;S4:若tく=n,则返S2,否则输出s并结束。第三节算法的特性ー、有穷性;二、确定性;三、有零个或多个输入;四、有一个或多个输出;五、有效性;第四节怎样表示ー个算法

一、用自然语言表示算法一通俗易懂,但易出现“歧义性”。二、用传统流程图表示算法一直观形象,易于理解。程序的三种基本结构:顺序结构、选择结构、循环结构三、用三、用N-S流程图表示算法A当A当P成立四、用伪代码表示算法五、用计算机语言表示算法(即实现算法)第五节结构化程序设计方法结构化程序设计方法强调:四、用伪代码表示算法五、用计算机语言表示算法(即实现算法)第五节结构化程序设计方法结构化程序设计方法强调:程序设计风格和程序结构的规范化,提倡清晰的结构。ー、自顶向下二、逐步细化三、模块化设计四、结构化编码本章小结ー、程序的三种基本结构:顺序、选择、循环;二、5种描述算法的方法,关键是N-S图;三、灵活运用三种基本结构,学会结构化的程序设计方法。作业题P36页2.4(1)(2)(4)题。第三章数据类型、运算符与表达式ー、教学目标.掌握C的数据类型.掌握整型、浮点型、字符型数据的常量及变量.掌握C语言中的各种运算符.掌握运算符的优先级与结合性二、教材分析L本章重点:(1)基本数据类型的常量和变量;(2)C语言中各种运算符的使用2.本章难点:(1)不同类型的数据在内存中的存储形式(2)混合表达式中运算符的运算顺序三、教学方法和手段.讲授与演示法相结合.计算机和投影仪四、教学时数8学时五、教学内容第一节C语言的数据类型C语言的数据类型丰富,但在学习第11章之前,我们只遇到C的四种基本数据类型:整型、字符型、单精度实型、双精度实型。第二节常量和变量ー、常量:其值不能被改变的量。两种:一般常量和符号常量(-)直接常量(字面常量):.整型常量:如12、〇、ー3等.实型常量:如4.5、-1.234等.字符常量:如‘a'、‘1’等,用单引号表示,占ー个字节;.字符串常量:如‘‘a"、"abc”、“1”,用双引号表示。(二)符号常量符号常量即是用ー个标识符来代替ー个常量;符号常借助于预处理命令define来实现;define命令格式是:#define标识符字符串如:#definePI3.1415926535#defineSTRING“ABCD”.习惯上,符号常量用大写字母表示;.定义符号常量时,不能以“;”结束;.ー个#define占一行;.—"个源程序文件中可含有若干个define命令,不同的define命令中指定的“标识符”不能相同;二、变量:在程序运行过程中,其值会发生变化。(一)每个变量必须有一个名字,变量名是标识符。(二)标识符是用来标识数据对象,是ー个数据对象的名字。(三)命名规则:以字母或下划线开始,后跟字符、数字或下划线。例:xl,_average,lotus_l_2_3,#abc,Ifs,M.D.Jhon.变量名不能是关键字(即保留字,是C编译程序中保留使用的标识符。如:auto、break、char>do、else>if>int等).怎样定义变量?inti,z,h;charc,ch='c';floata=3.14,b-2.71,x,y;注意:变量要先定义后使用!例:voidmain(){inta,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(以〇开头的数)(三)十六进制数如:0x123,-0x12,OxABC (以Ox开头的)二、整型变量(一)整型数据在内存中以二进制形式存放,每ー个整型变量在内存中占2个字节。例:定义整型变量i=10和j=-10的存放形式。(二)整型变量的分类:基本型int、短整型short,长整型long、无符号型unsigned(三)整型变量的定义对变量的定义,一般放在函数体开头部分的声明部分(也可放在函数中某ー分程序内)例:#include<stdio.h>voidmain(){inta,b,c,d;unsignedu;a=12;b=-24;u=10;c=a+u;d=b+u;printf(aa+u=%d,b+u=%d\n”,c,d);}(四)整型数据的溢出一个int型变量的最大允许值为32767,如果再加!,其结果不是32768,而是ー32768。即“溢出”。(五)整型常量的类型.ー个整数在ー32768〜32767内,则为int型,可以赋给int型和longint型变量。,ー个整数超过上述范围,在ー2147483648〜2147483647内,则为longint型,可赋给longint型变量。.如果shortint和int型数据在内存中占据长度相同,则其范围与int相同。.常量无unsigned型。但可将非负且在取值范围内的整数赋给unsigned型变量。.在ー个整常量后面加一个字母1或L,则认为是!ongint型常量。第四节浮点型数据ー、浮点型常量的表示方法(-)十进制浮点数如:0.123,.456,0.0,123.,123.0整数部分和小数部分都可省,但不能同时省(二)指数形式如:123e3,123E3代表123X10、指数部分为整常数;尾数部分可以是整常数,也可以是实常数;尾数部分和指数部分均不可省。E10,100.el5.2,.e5均为不合法的浮点数。二、浮点型变量(-)浮点型数据在内存中的存放形式ー个浮点型数据一般在内存中占4个字节(32位)。浮点型数据是按照指数形式存储的。(二)浮点型变量的分类:单精度float、双精度double、长双精度longdouble第五节字符型数据ー、字符常量(-)括在ー对单引号中的一个字符(单引号仅作界限符),‘a‘、‘X'为字符常量;(二)一个字符常量占1B,存放的是字符的ASCII码值。(三)转义字符.以‘'‘开头,后跟ー个约定的字符或所要表示字符的十六进制(或者ハ进制)的编码;.'\0'表示编码值为〇的字符,即NULL,它与数值常数〇是等同的;.书中P48列出了常用的转义字符。一字符变量字符变量用来存放字符常量,只能放一个字符。例:charcl='a',c2='A';ー个字符变量在内存中占ー个字节。三、字符数据的存放形式及使用方法将字符常量放到字符变量中,实际上是将其ASCII代码放到变量所占的存储单元中。如:‘a’在内存存放的是二进制数01100001;'A,在内存存放的是二进制数01000001。在0~255之间字符型数据和整型数据可以通用。即ー个字符数据既可以以字符形式输出,也可以以整数形式输出,还可以互相赋值。例:voidmain(){charcl,c2;cl=97;c2=98;printf("%c%c",cl,c2);printf("%d%d\n",cl,c2);cl=cl—32;c2=c2一('a'-'A');printf("%c%c\n",cl,c2); }运行结果:ab9798AB四、字符串常量(一)括在ー对双引号中的〇个或多个(除、与“"自身之外)C语言字符集中的任何字符及转义字符组成;双引号仅作界限符;“Clanguageprogramming","a\\n"、“#123”、“”等为字符串常"Thedentistsaid:ヽ'openwide\'""Thepathis\\root\\user\\device""\077paytoattentionofthis!"(二)"China”在存储器中实际占用6个字节:(三)"a"与‘a’是不同的(表示形式不同、存储方式不同、后者可像整数那样参加运算,前者不能);(四)但应注意的是,在写字符串常量时没有必要写"China\0”,而只需写"China”;(五)虽然C字符串后末尾的NULL字符属字符串的内容,但是NULL字符并不被显示或输出;(六)C语言的字符串常量是按数组处理的。(七)书写ー个很长的字符串常量时,如果在一个书写行内写不下,可跨行书写。如:"Astringisasequenceofcharacters\surroundedbydoublequotes.”第六节变量赋初值在定义变量时对变量进行赋值称为变量的初始化;格式:类型说明符变量1=值1,变量2=值2,……;如;inta=3,b=4,c=5;floatx=3.4,y=0.75;charchl='K',ch2='P';注意;ー、inta,b,c=5J只对c初始化,值为5;二、对几个变量赋以同一个初值时,inta=b=c=5;是非法的;inta=5,b=5,c=5J是合法的。(注:a=b=c=5;是合法的赋值语句)说明:对变量赋初值,仅表示该变量在程序运行过程中执行本函数时的初值。第七节各类数值型数据间的混合运算混合算术表达式,如:10+'a'+i*f—d/e需自动转换成同一类型再运算;转换的规则如下:(书P54)设有:inti=2;floatf=3.5;doubled=16.0;longe=2;则10+匕'+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);loglO(x);log(x);pow(x,y)(四)角度、特殊的符号要转换。三、5种算术运算符的优先级与结合性四、强制类型转换运算符格式:(类型关键字或类型名)表达式如:(int)(x+y)%(int)p(double)a(float)(5%3)实例:voidmain(){floatx;inti;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(“籾,%d0,i,i++):最好写成j=i++;printf("%d,%dM,i,j);当i的初值为3时,其结果为4,3第九节赋值运算符和赋值表达式ー、赋值运算符:=二、类型转换规则:把赋值运算符右边表达式的数据类型转换成左边对象的类型。(一)实型赋给整型变量时,舍去实数的小数部分。(-)整型赋给实型变量时,数值不变,以浮点形式存储。(三)ー个较短的有符号的int型数据转换成一个较长的有符号int型数据总是进行符号扩展,以保证数据的正确性;如:a、b分别为8位、16位整型数据,则执行b=a后:11111110(-2)转换后的结果:1111111111111110(-2)(四)一个较长的有符号int型数据转换成一个较短的有符号int型数据时把较长的有符号int型数据的高位部分截去;如:设a为8位,b为16位,则执行a=b后,若b: 0000000000001111转换后的结果 00001111TOC\o"1-5"\h\zb: 1111111111110001 (-15)转换后的结果 11110001 (-15)1111111100000000 (-128)转换后的结果 00000000 (0)三、复合的赋值运算符在“=”之前加上其他运算符,可构成复合运算符x+=y等价于x=x+ya%=b+c/d等价于a=a%(b+c/d)C中10种复合赋值运算符:+=、ー=、・=、/=、%=、くく=、>>=、&=、=、|=四、赋值表达式〈变量X赋值运算符>く表达式/值〉如:voidmain(){inta,b,c,d;a=(a=100)+(b=30)-b*5;嵌套赋值表达式:el=e2=---=en,如:a=b=c=d=100等价于a=(b=(c=(d=100)))el,e2,—,en不必具有相同的数据类型例: 当a=12时,a+=a-=a*a求解结果?先"a-=a*a"的运算,a=a-a*a=T32;再进行再+=-132”的运算,a=a+(-132)=-264o第十节逗号运算符和逗号表达式语法:表达式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程序设计——顺序程序设计ー、教学目标.掌握赋值语句、输入输出语句.学会简单的顺序程序设计二、教材分析.本章重点:输入、输出语句.本章难点:格式输入输出语句三、教学方法和手段.讲授与演示法相结合.计算机和投影仪四、教学时数4学时五、教学内容第一节c语句概述ー、控制语句(一)二个分支语句(if-else,switch)(二)三个循环语句(for、while、do-while)(三)四个转移语句(continue、break,goto,return)二、函数调用语句如:printf("Hello,world!w;三,表达式语句x+y; i++;a=2;a=3*5,40;四,空语句(つ五,复合语句{语句序列}第二节赋值语句赋值语句是由赋值表达式加上一个分号构成,如:b=3;if((a=b)>0)t=a;第三节数据输入输出的概念及在c语言中的实现ー、输入、输出的概念二、输入输出操作是由函数来实现的c语言函数库中有“标准输入输出函数”字符的输入与输出:getchar(),putchar()字符串的输入与输出:gets()>puts()格式输入与输出:scanfO,printf()三、在使用C语言库函数时,要用预编译命令“#include”将有关的“头文件”包括到用户源文件中。例如:使用标准输入输出库函数时,要用到“stdio.h”文件,在源文件开头应有:#include<stdio.h>或#include“stdio.h”第四节字符数据的输入输出一>字符输出函数 putchar语法:putchar(c)语义:(向stdout终端)输出ー个字符;如:ttinclude<stdio.h>voidmain(){putchar( ;putchar(匕’);putchar('A'+32);putchar('\n');)输出:aaa二、字符输入函数 getchar语法:getchar(),是ー个无参函数;语义:(从stdin终端上)输入一个字符;getchar包含在stdio.h中,是stdio.h中定义的宏;如:ttinclude<stdio.h>voidmain(){putchar(getchar());}如:#include<stdio.h>voidmain(){intc;while((c=getchar())!= )if(c>='a'&&c<=«ガ)putchar(c-,a'+'A');elseputchar(c);)从键盘上输入ー串字符遇结束,若字符在a〜z之间时,则输出字符的大写;否则直接输出字符。第五节格式输入与输出ー、格式输出函数 printf语法:printf(“格式控制”,输出表列);格式控制:是用双引号括起来的字符串,包含两种信息:普通字符和转义字符(这类字符总是原样输出)格式说明:由%和格式控制符组成。如:%d1猊1等;如:printf(Ma=%d,b=%d”,a,b);若a、b的值分别为2和3,则输出结果为:a=2,b=3例1:#include<stdio.h>voidmain(){inta=4096;longintb=123456;printf(w%5d\n%3d\n%ld\n%91d\nw,a,a,b,b);)例2:#include<stdio.h>voidmain(){inta=-8;printf("deca=%d\nocta=%o\nhexa=%x\n”,a,a,a);}例3:#include<stdio.h>voidmain(){inta=101;unsignedintb=65;charc='a';printf("a=%d,%c,%u\nM,a,a,a);printf("b=%d,%c,%u\n”,b,b,b);printf("c=%d,%c,%u\nH,c,c,c);printf("c=%3d,%3c,%3u\nM,c,c,c);)二、格式输入函数scanf语法:scanf(“格式控制”,地址表列);格式控制:包含三类符号空白字符:(空格、Tab或、t、Xn),输入时不必ーー对应;普通字符:(非格式转换说明符、非空白符、非%),输入时必须ーー对应;格式转换说明符:(由/后接一个任选的压缩指示符“中’,表示本输入项在读入后不赋给相应的变量)例1:#include<stdio.h>voidmain(){inta;floatb;charstr[50];scanf(a%d%f%sw,&a,&b,str);例2:ttinclude<stdio.h>voidmain(){inta;floatb;charstr[50];scanf("%2d%f%*d%2sn,&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>,处理的结果为:123fa,456—b,789—c(-)同理对第二个输入语句,正确的输入数据流应是:a=123,b=456,c=789くenter)该输入数据流中除123,456,789被赋给相应变量外,其余都被丢弃例3:#include<stdio.h>voidmain(){charcl,c2,c3;scanf("%c%c%c",&cl,&c2,&c3);scanf("%3c%3c%3c”,&cl,&c2,&c3);(一)对第一个输入语句,若输入数据流为abcくenter),则a-clb-c2c—c3;但如果输入的数据流为:abc<enter>则a-cl~*c2bfc3(-)对第二个输入语句:要求输入3个字段9个字符,但三个变量中只能各存放一个字符,其余的2个字符将被丢掉。如当输入数据流为:abcdefghiくenter〉时,结果为a-*cld-c2gfc3第六节顺序结构程序设计举例例1:输入三角形的三边长,求三角形面积。分析:三边为a,b,c,面积area's(s-a)(s-b)(s-c),其中s=(a+b+c)/2程序:Sinclude<math.h>voidmain(){floata,b,c,s,area;sacnf(%f,%f,%f”,&a,&b,&c);s=l.0/2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c));printf(aa=%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>voidmain(){charcl,c2;cl=getchar();printf("%c,%d\nv,cl,cl);c2=cl+32;printf("%c,%d\n,>,c2,c2);本章小结ー、字符输入输出函数:getchar\putchar;二、格式输入输出函数:scanf\printf,特别注意scanf函数的地址项是否要加&;三、注意简单程序的结构,头文件、变量定义、输入语句及输出语句。作业题p88页ー90页4.5题、4.8题、4.9题。第五章选择结构程序设计ー、教学目标.掌握实现选择结构的两种语句、一个运算符.学会编写选择结构的程序二、教材分析1.本章重点:if-else语句、switch语句、条件运算符2,本章难点:嵌套if-else语句中的if与else匹配问题三、教学方法和手段.讲授与演示法相结合.计算机和投影仪四、教学时数4学时五、教学内容第一节关系运算符和关系表达式ー、关系运算符及其优先次序在C语言中有以下关系运算符:小于=小于或等于大于=大于或等于==等于!=不等于关系运算符都是双目运算符,其结合性均为左结合。关系运算符的优先级低于算术运算符,高于赋值运算符。在六个关系运算符中,く,〈=,〉,〉=的优先级相同,高于==和!=,==和!=的优先级相同。二、关系表达式关系表达式的一般形式为:表达式关系运算符表达式例如:a+b>c~dx>3/2匕’+Kc-i-5*j==k+l都是合法的关系表达式。由于表达式也可以又是关系表达式。因此也允许出现嵌套的情况。例如:a>(b>c)a!=(c==d)等。关系表达式的值是“真”和“假”,用“1”和“〇”表示。如:5>0的值为“真”,即为1〇(a=3)>(b=5)由于3>5不成立,故其值为假,即为〇。第二节逻辑运算符和逻辑表达式ー、逻辑运算符及其优先次序C语言中提供了三种逻辑运算符:&&与运算I!或运算!非运算与运算符&&和或运算符丨丨均为双目运算符。具有左结合性。非运算符!为单目运算符,具有右结合性。逻辑运算符和其它运算符优先级的关系可表示如下:!(非)算术运算符关系运算符&&和||赋值运算符!(非)(与)f1(或)“&&”和“丨|”低于关系运算符,“!”高于算术运算符。按照运算符的优先顺序可以得出: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”和“〇”来表示。其求值规则如下:(-)与运算&&:参与运算的两个量都为真时,结果ォ为真,否则为假。例如:5>0&&4>2由于5>0为真,4>2也为真,相与的结果也为真。(二)或运算|丨:参与运算的两个量只要有一个为真,结果就为真。两个量都为假时,结果为假。例如:5>0||5>8由于5>0为真,相或的结果也就为真。(三)非运算!:参与运算量为真时,结果为假;参与运算量为假时,结果为真。例如:!(5>0)的结果为假。虽然C编译在给出逻辑运算值时,以“1”代表“真”,“〇”代表"假”。但反过来在判断ー个量是为“真”还是为“假"时,以“〇”代表"假”,以非“〇”的数值作为“真”。例如:由于5和3均为非“〇”因此5&&3的值为“真”,即为10又如:5||0的值为“真”,即为1。三、逻辑表达式逻辑表达式的一般形式为:表达式逻辑运算符表达式其中的表达式可以又是逻辑表达式,从而组成了嵌套的情形。例如:(a&&b)&&c根据逻辑运算符的左结合性,上式也可写为:a&&b&&c逻辑表达式的值是式中各种逻辑运算的最后值,以“1”和“〇”分别代表“真”和“假”。注:在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只有在必须执行下ー个逻辑运算符才能求出表达式的解时,オ执行该运算符。具体例子见课本94页。第三节if语句用if语句可以实现选择结构。它根据给定的条件进行判断,以决定执行给出的两种操作之一。C语言的if语句有三种基本形式。一、if语句的三种形式(-)第一种形式为基本形式:ifif(表达式)语句其语义是:如果表达式的值为真,则执行其后的语句,否则不执行该语句。其过程可表示为下图。【例5.3】ttinclude<stdio.h>voidmain()(inta,b,max;printf(zz\ninputtwonumbers: 〃);scanf(〃%d%d〃,&a,&b);max=a;if(max<b)max二b;printf(max二%d”,max);)本例程序中,输入两个数a,b。把a先赋予变量max,再用if语句判别max和b的大小,如max小于b,则把b赋予max。因此max中总是大数,最后输出max的值。(二)第二种形式为:if-elseif(表达式)语句1else语句2其语义是:如果表达式的值为真,则执行语句1,否则执行语句2〇其执行过程可表示为下图。【例5.4】Sinclude<stdio.h>voidmain()inta,b;printf("inputtwonumbers: ");scanf("%d%d",&a,&b);if(a>b)printf("max=%d\n",a);elseprintf("max=%d\n",b);}输入两个整数,输出其中的大数。改用if-else语句判别a,b的大小,若a大,则输出a,否则输出b。(三)第三种形式为if-else-if形式前二种形式的if语句一般都用于两个分支的情况。当有多个分支选择时,可采用if-else-if语句,其一般形式为:if(表达式1)语句1;elseif(表达式2)语句2;elseif(表达式3)语句3;elseif(表达式m)语句m;else语句n;其语义是:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。如果所有的表达式均为假,则执行语句n。然后继续执行后续程序。if-else-if语句的执行过程如图3-3所示。【例5.5】#include"stdio.h"voidmain(){charc;printf("inputacharacter: ");c=getchar();if(c>=0,&&c<=,9')printf("Thisisadigit\n");elseif(c>=AJ&&c<=Z*)printf("Thisisacapitalletter\n");elseif(c>='a'&&cく二'z')printf("Thisisasmallletter\n");elseprintf("Thisisanothercharacter\n");putchar(c);本例要求判别键盘输入字符的类别。可以根据输入字符的ASCI!码来判别类型。在“〇”和“9”之间的为数字,在“A”和“Z”之间为大写字母,在“a”和“z”之间为小写字母,其余则为其它字符。这是ー个多分支选择的问题,用if-else-if语句编程,判断输入字符ASCII码所在的范围,分别给出不同的输出。例如输入为“g”,输出显示它为小写字符。(四)在使用if语句中还应注意以下问题1.在三种形式的if语句中,在if关键字之后均为表达式。该表达式通常是逻辑表达式或关系表达式,但也可以是其它表达式,如赋值表达式等,甚至也可以是一个变量。例如:if(a=5)语句;if(b)语句;都是允许的。只要表达式的值为非0,即为“真”。如在:if(a=5),••;中表达式的值永远为非0,所以其后的语句总是要执行的,当然这种情况在程序中不一定会出现,但在语法上是合法的。又如,有程序段:if(a=b)printf(*%d*,a);elseprintf("a=0");本语句的语义是,把b值赋予a,如为非〇则输出该值,否则输出“a=0”字符串。这种用法在程序中是经常出现的。2,在if语句中,条件判断表达式必须用括号括起来,在语句之后必须加分号。3.在if语句的三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行ー组(多个)语句,则必须把这ー组语句用{}括起来组成一个复合语句。但要注意的是在}之后不能再加分号。例如:if(a>b){a++;b++;}else{a=0;b=10;}【例5.6】输入两个实数,按代数值由小到大的次序输出这两个数。程序如下:ttinclude<stdio.h>voidmain(){floata,b,t;scanf( %f”,&a,&b);if(a>b){t=a;a=b;b二t;)printf(a%5.2f,%5.2fw,a,b);)【例5.7】输入3个数a,b,c,要求按由小到大的顺序输出。程序为#include<stdio.h>voidmain()(floata,b,c,t;scanf(a%f,%f,%fn,&a,&b,&c);if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(b>c){t=b;b=c;c=t;}printf("%5.2f,%5.2f,%5.2f",a,b,c);)二、if语句的嵌套当if语句中的执行语句又是if语句时,则构成了if语句嵌套的情形。其一般形式可表示如下:if(表达式)if语句;或者为if(表达式)if语句;elseif语句;或者为if(表达式)语句;elseif语句;或者为if(表达式)if语句;else语句;在嵌套内的if语句可能又是if-else型的,这将会出现多个if和多个else重叠的情况,这时要特别注意if和else的配对问题。例如:if(表达式1)if(表达式2)语句1;else语句2;其中的else究竟是与哪ー个if配对呢?应该理解为:if(表达式1)if(表达式2)语句1;else语句2;还是应理解为:if(表达式1)if(表达式2)语句1;else语句2;/r/

温馨提示

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

评论

0/150

提交评论