程序设计语言初步.ppt

上传人:牧羊曲112 文档编号:6393174 上传时间:2023-10-26 格式:PPT 页数:115 大小:934.50KB
返回 下载 相关 举报
程序设计语言初步.ppt_第1页
第1页 / 共115页
程序设计语言初步.ppt_第2页
第2页 / 共115页
程序设计语言初步.ppt_第3页
第3页 / 共115页
程序设计语言初步.ppt_第4页
第4页 / 共115页
程序设计语言初步.ppt_第5页
第5页 / 共115页
点击查看更多>>
资源描述

《程序设计语言初步.ppt》由会员分享,可在线阅读,更多相关《程序设计语言初步.ppt(115页珍藏版)》请在三一办公上搜索。

1、1,2,程序设计语言:用于书写计算机程序的语言,用于表达和描述要加工的数据以及求解问题的步骤和过程。是根据预先定义的规则(语法)、由一个有限字母表上的字符构成的字符串的总体。程序设计语言的基本成分:数据成分。用以描述程 序中所涉及的数据。运算成分。用以描述程序中所包含的运算。控制成分。用以表达程序中的控制构造。传输成分。用以表达程序中数据的传输。,3,提纲,标识符 数据类型变量常量输入和输出表达式语句函数,本章结合C语言向大家介绍结构化程序设计语言的基本概念,数据成分,传输成分,运算成分,控制成分,4,先聊点C语言,是一种高级语言相对于低级语言而言,在一个高的级别上进行编程历史悠久,战勋卓著诞

2、生于20世纪70年代初,成熟于80年代(C89),修订于90年代(C99),很多重量级软件用C编写上天入地,无所不能几乎没有不能用C写出的软件,没有不支持C的系统很多流行语言、新生语言都借鉴了C的思想、语法C+,Java,C#,PHP等,几乎都是用C编写现状嵌入式领域和系统级编程占主流,桌面应用次之,5,6,数据总线,控制路线,地址总线,实例:编一个程序,从键盘读入两个整数,要求在屏幕上输出相乘运算结果。,处理步骤:1.控制部件发命令从键盘读取数据并存储到内存储器中(输入)。2.控制部件发命令从内存储器中取出这两个数置入运算部件的寄存器中,让运算器执行乘法运算,运算结果写回存储器中(处理)。3

3、.控制部件发命令将存储在内存储器中的结果输出到显示器上(输出)。,需要考虑的问题:1.输入:如何从键盘读取这两个数并将其存放到内存中?程序如何约束输入的必须是整数?2.处理:计算时如何读取内存中的这两个数?如何实现计算?计算结果如何写回内存?3.输出:如何将内存中的计算结果输出到显示器?,7,数据总线,控制路线,内存中数据的存取:变量、常量、数据类型,输入:输入语句,输出:输出语句,地址总线,计算的实现:运算符表达式语句函数,8,标识符是由程序员定义的单词,用来给程序中的数据、函数和其他用户自定义对象命名。,程序设计语言本身会定义一些专用名称,称之为保留字或关键字,它们具有特定含义,程序员不能

4、另做他用。如:C语言规定了32个关键字。,3.1 标识符,9,C语言规定的32个关键字:auto double int struct break else long switch case enum register typedefchar extern return union const float short unsigned continue for signed void default goto sizeof volatiledo if static while,10,#include main()int number1;/*变量声明*/int number2;int result

5、;printf(“please input the two numbers:n”);/*显示提示信息*/scanf(“%d%d”,用户自定义标识符,C语言关键字,3.1 标识符,11,不同的程序设计语言标识符格式可能不同。C语言规定:标识符由大写字母A到Z、小写字母a到z、数字0到9和下划线组成,且第一个字符必须是字母或下划线,随后的字符必须是字母、数字或下划线。且大小写敏感,如age和Age是两个不同的标识符。PASCAL语言规定:和C语言类似,只是要求第一个字符只能是字母(比C语言约束更强)。,3.1 标识符,思考:以下哪些是合法的C语言标识符age,_class_no,name1,nam

6、e1,2name,#age,12,数据是计算机处理的对象。数据依据其本身的特点可以归为不同的类:整数、小数、字符、字符串等。(高级程序语言特点:按照人对于数据的表达方式),程序设计语言应该具备区分各种类型数据的能力,于是引入了数据类型的概念。数据类型包括两层含义:定义了一系列的值(属于该类型的数据能够取值的范围)以及能应用于这些值上的一系列操作(数据操作)。,3.2 数据类型,13,整数是由符号和一个或多个数字组成的正数、0或负数,又称为带符号的自然数,如+12,-38。注意:在数学中,整数是一个无限集合,但对于计算机来说,只能表示它的一个有限子集(取决于存储空间的大小)。,整型,3.2 数据

7、类型,程序设计语言一般包含四种标准数据类型:整型、字符型、浮点型和布尔型(补充)。,14,3.2 数据类型整型,整型数据占用的内存单元数:C语言中整型数据细分为四类:short int、int、long int和long long int。(和教材不同)C语言标准没有规定每一种整数类型占用的内存空间大小(即数的范围),只是约束到:short int和int至少要占据16位(2字节),而long数据至少要有32位(4字节);且数据长度上,short int=int=long int=long long int。每一种整数类型占用的内存字节数由编译器根据所用机器的硬件情况来决定。,15,整型数据所

8、允许的运算包括:二目算术运算:+、-、*、/、(取余);注意:两个整数进行二目运算后结果还是整数 如:125/10=12(余数5被舍弃),125%10=5 单目算术运算:取负值等;关系运算:,=,=(相等),!=(不相等)C语言中关系运算结果为1(真)或0(假),3.2 数据类型整型,16,字符型,字符数据包括26*2个字母(大小写)+10个数字+其它显示符号,总共95种;还有33种控制符号,总共128种符号;字符型数据在内存中的存储:实际存放的是一个整数值。多数计算机系统采用ASCII(American Standard Code for Information Interchange)标准

9、编码模式来对字符进行编码。每个字符占用8位内存(1个字节);,3.2 数据类型,17,ASCII表,思考:若从键盘上输入字符存储到内存,字符到二进制编码的转换是由什么部件来实现的?,18,ASCII(A)=65 A的ASCII值是65ASCII(a)=97 规律:大写字母的ASCII编码32小写字母的ASCII编码,3.2 数据类型字符型,19,3.2 数据类型字符型,关系运算(按照ASCII大小):,=,=,!=例如:A a 结果为真,因为A的ASCII是65,a的ASCII是97,6597,字符型所允许的运算包括(将字符型数据当作整型数据对待):算术运算:ch2=ch1-32(若ch1值为

10、b,则ch2为B)ch2=ch1-1(若ch1值为b,则ch2为a)ch2=ch11(若ch1值为b,则ch2为c),20,浮点型,浮点型是带小数部分的数字类型,如3.14,1.575E5(科学计数法,即 1.575*)。抽象地讲,浮点型数据的值域是全体实数,但是由于计算机表示方面的原因,计算机只能表示它的一个有限子集。同样由于计算机表示方面的原因,实数在计算机内部的表示有时是不准确的。例如,存储圆周率时,只能表示成近似的值。,3.2 数据类型,21,3.2 数据类型,C语言支持三种不同长度的浮点数据类型:float、double和long double。其中float一般占32位(字节);d

11、ouble一般占64位(8字节),long double占96位(12字节)。三者区别:越后面的类型运算精度越高,值域越大,但占用的内存单元越多。,22,浮点型所允许的运算包括:二目算术运算:+、-、*、/;浮点型数据进行二目运算结果还是浮点型。如:12.0/5.0=2.4 单目算术运算:取负值 关系运算:,=,=,!=,3.2 数据类型浮点型,注意:要避免做两个实数相等或不相等的比较。由于计算机表示方面的近似性,会使得本来应该相等的两个数不等。建议在比较两个浮点数X和Y是否相等时使用|X-Y|,其中是一个绝对值较小的正浮点数。,23,3.2 数据类型布尔型(补充),布尔类型数据:取值只有两种

12、,真(True)或者假(False)。允许的运算包括:与、或、非。绝大多数程序设计语言中有布尔类型这种数据类型,如Pascal语言。但是C语言没有定义这种数据类型。,布尔型,24,标准类型是原子的、不可再分的。程序员可以以标准类型为基本构件,构造出复杂的数据类型。如C语言有:结构、数组、联合、文件等复杂数据类型;PASCAL语言有:结构、数组、集合、文件等复杂数据类型。,3.2 数据类型复杂数据类型,25,3.3 变量,数据总线,控制路线,输入数据、中间运算结果、最终结果,程序需要将输入数据、中间运算结果以及最终结果暂时保存在内存单元中。,地址总线,程序如何实现从内存单元存取数据?,26,3.

13、3 变量,程序运行时,通过内存地址对内存数据进行读写;程序员写源程序时,如果也是直接使用内存地址来读写内存数据,会很麻烦!如果用名字来代替地址,在程序中出现的是代表内存空间的名字,让编译器来跟踪数据实际存放的物理内存地址,就可以简化编程变量;,27,变量用来代表内存存储空间,该存储空间用来存放被加工的数据或处理的结果。源程序中对变量的操作(读和赋值)实际上是对存储空间的读写操作。变量具有三个重要属性:名称、值和数据类型。,用sex代表地址为2001H的内存单元,score代表地址为2004H2007H的一片内存空间。用变量来实现对这些内存空间数据的存取。,3.3 变量,28,一、变量定义,使用

14、变量来对内存数据进行存取前,必须先定义变量,目的是建立变量和存储空间的对应关系。变量定义指明变量的名称和数据类型(变量代表的存储空间存放的数据的类型)。变量的名称要遵循标识符命名原则,虽然可以为任意长度,但C编译器只认为前31个字符有效。变量类型可以告诉编译器留出适量的用于保存数据的内存。不同语言中变量定义的写法不一样,C语言格式:数据类型 变量名1,变量名2,;,3.3 变量,思考:变量定义时要指明哪些内容?,数据类型,变量名,分号必须,多个同类型变量用逗号分割,29,注意,变量定义仅引起内存存储空间分配,但此时变量中存储的值一般是无意义的(特殊情况除外)!,变量定义将引起内存空间的分配。定

15、义后,变量就用来代表内存中的一片存储单元(存储单元个数取决于变量类型)。,3.3 变量,30,二、变量赋值,3.3 变量,C语言示例:char sex;int age;float score;,变量赋值:把一个值写入变量代表的存储空间。,C语言变量赋值格式:变量名=表达式,sex=F;age=18;score=89.5;,ASCII(F)=77),77,18,89.5,变量的值,31,3.3 变量,变量使用特点先定义,后使用。int age;定义一个变量为整数类型。如未定义,则在编译时被查出,认为非法。变量未被赋值前,值一般是无意义的。对变量赋值过程是“覆盖”过程,用新值去替换旧值。读取变量代

16、表的存储空间数据(又称读取变量的值):age=age+1;读取变量的值时,该变量保持不变。,32,C语言允许变量在定义时进行初始化。初始化语句用来给变量赋初始值。(?)例如:char sex;int age=16;float score;,3.3 变量,33,3.3 变量,试解释下列操作的含义读取变量的值写入变量给变量赋值修改变量的值,34,#include main()int number1;/*变量声明*/int number2;int result;printf(“please input the two numbers:n”);/*显示提示信息*/scanf(“%d%d”,3.3 变量

17、,35,3.3 变量,找出下述变量定义的错误:float f;char A,B;,36,总结:变量三要素:变量名(存储空间)、数据类型(存储空间存放的数据的类型)、变量值(存储内容),3.3 变量,37,一、文字常量 文字常量是指在程序中未被命名的值。例:circumference=2*(length+width);其中2就是一个文字常量,length和width是变量,三类常量:文字常量、命名常量、符号常量,3.4 常量,38,二、命名常量和变量类似,命名常量也是内存存储空间的名字,代表一片内存存储空间,但一般不允许程序去改变该存储空间中的数据。C语言中定义一个命名常量:main()cons

18、t float pi=3.14;,3.4 常量,说明pi是个命名常量;,39,#include main()const float pi=3.14;/*常量定义*/float radius;/*变量定义*/float area;printf(“please input the radius:n”);/*显示提示信息*/scanf(“%f”,40,符号常量是仅含有符号名称的值。C语言符号常量定义:#define 标识符 替换文本#define PI 3.14 area=PI*radius*radius;编译时,预处理程序能够将所有出现该符号名称的地方用值替换:area=3.14*radius*r

19、adius;使用符号常量的好处:使程序易读性好、容易维护。,三、符号常量,3.4 常量,41,3.4 常量,#include#define PI 3.14/常量定义,注意结束处无分号,在主函数之前main()float radius;/*变量定义*/float area;printf(“please input the radius:n”);/*显示提示信息*/scanf(“%f”,42,四、常量的类型和变量一样,常量也有类型。大多数程序设计语言使用整型、浮点型、字符型和字符串型常量。C语言中四种常量:15整型常量15.4浮点型常量A字符型常量(用单引号括起字符)“Hello”字符串型常量(用

20、双引号括起字符序列)文字常量和符号常量的值体现了常量的类型,3.4 常量,43,如果整型常量以0开头,C编译器会认为该常量是八进制数。如040即十进制的32。如果整型常量以0 x开头,C编译器会认为该常量是十六进制数。如0 xFF即十进制的255。#include#define X 040#define Y 0XFFmain()printf(“X=%d,Y=%d”,X,Y);system(pause);return 0;,3.4 常量,X=32,Y=255请按任意键继续.,44,常量小测试,下述常量定义哪些是错误的?为什么?#define ratio=1/3#define ratio 1/3;

21、#define 1st_character$#define if 7,不能有号;否则会用=1/3替换ratio不能有语句结束符;号标识符只能以字符或者下划线开头If是C语言规定的关键字,有特定含义,用户不能随便使用习惯上,常量名一般采用大写字母。,45,数据总线,控制路线,地址总线,3.5 输入和输出(I/O),一个真正有用的程序一般会从输入设备接收数据、并将运算结果输出到输出设备中。,为了实现和输入输出设备的通信,程序必须要有输入和输出语句。一个既无输入又无输出的程序是没有用的。,46,输入和输出语句最基本的功能在于从外界环境将值读入一个变量,或者将一个值写出到外界环境中。,3.5 输入和输

22、出(I/O),47,一、输入 通过输入语句或者预先定义的函数可以从外界接收值。,C语言输入函数举例:scanf(格式控制串,输入项地址表);格式控制串:含有各种以百分号开头的格式控制符。输入项地址表:有逗号分隔开的若干输入表项组成,每一个表项是一个变量的地址。scanf函数的作用:从标准输入设备(键盘)上读取一系列数据,按格式控制串的要求进行转换并送到输入项地址表所列的逐变量中。,3.5 输入和输出(I/O),48,scanf(“%d”,当程序执行该语句时,等待用户从键盘输入数据并转换成一个整数,存储到变量number1中。d:转换说明符(conversion specifier),用于告诉程

23、序键入的数据要转换成一个整数;&:取变量地址的运算符,&number1表示变量number1的首地址。注意:书写程序时不要遗漏&.,3.5 输入和输出(I/O),常用的转换说明符:d:整型;c:字符型;f:浮点型,格式控制串,输入项地址表,49,3.5 输入和输出(I/O),设age为int型变量,sex、ch为char型变量,height为float型变量。输入数据为:20M1.65若希望age得到值20,sex得到值M,height得到值1.65,则函数调用为:scanf(“%d%c%f”,50,用scanf语句从键盘同时读入年龄和性别:,scanf(“%d%c”,scanf(“%d,%c

24、”,3.5 输入和输出(I/O),10 S,10,S,格式控制串中除了转换说明符,还可以包含其他字符。从键盘输入的内容要和格式控制串匹配。如果在格式控制串中除了转换说明符以外还有其它字符,则在输入数据时应输入与这些字符相同的字符。如:,空格,scanf(“age=%d,sex=%c”,age=10,sex=S,51,二、输出 通过语句或者预先定义的函数可以将值输出到外界。,C输出函数举例:printf(格式控制串,输出项表);功能:将字符串显示在标准输出设备(一般为显示器)上。程序员可以将常量、变量、表达式、函数调用作为待输出字符串的一部分。格式控制串:包含了某些要直接显示的字符,也包含一些转

25、换说明符。输出项表:可以是常量、变量、表达式、函数调用。,3.5 输入和输出(I/O),52,如:printf(”Your age is:%d”,age);注意,在输出时转换说明符%d不输出,而是被变量age的值代替。假设变量age的值是18,则显示器上将输出字符串“Your age is:18”注意:此处变量age前面没有&!,3.5 输入和输出(I/O),上机练习:如果上述语句改写成printf(“Your age is:”,age);输出将是怎样?,53,3.5 输入和输出(I/O),可以用printf语句输出常量、变量、表达式、函数调用的值:printf(“the agerage sc

26、ore is%d”,SCORE);/输出常量printf(“your age is%d”,age);/输出变量printf(“the value of(2+3)10 is:%dn”,(2+3)10);/输出表达式的值(?)printf(“the size of int is:%d”,sizeof(int);/输出函数返回值,54,若想同时输出年龄和性别,则语句可写为:printf(“Your age is:%d,your sex is:%c”,age,sex);显示器上将输出字符串“Your age is:18,your sex is:F”,3.5 输入和输出(I/O),常用的转换说明符:d:

27、整型;c:字符型;f:浮点型,输入输出后面会再详细讲解,有兴趣的同学可参见C程序设计教程的9.3和9.11。,55,找出以下程序的错误,includemain()(未定义变量)printf(“input i and jn”);scanf(“i=%d”,变量i和j未定义就使用;scanf(“i=%d”,56,修正后的程序,includemain()int i,j;/变量定义 printf(“input i and jn”);/输入提示 scanf(“i=%d”,运行结果:input i and ji=1020i=10,j=20请按任意键继续.,57,#include main()int numb

28、er1;/*存放整数1*/int number2;/*存放整数2*/int result;/*存放结果*/printf(“please input the two numbers:n”);/*显示提示信息*/scanf(“%d%d”,2000H,2004H,result,number1,number2,please input the two numbers:,the result is:200,200,任务描述:输入两个整数,求两数之积并输出。,/*/:注释main()函数变量定义部分操作部分,编译后,源程序中出现number1、number2和result的地方将会用内存相对地址(非真正物

29、理地址)替换。思考:何时、在哪里得到真正的物理地址?编译程序怎么处理变量?操作系统怎么分配内存?如何得到物理地址?深入学习:编译原理操作系统计算机组成原理,假设操作系统已经分配如下内存空间用于存放操作数和结果,程序运行过程演示,58,输入输出练习:定义三个变量,分别是整型、浮点型、字符型。要求从键盘输入三个值存放到这三个变量里,并且输出这三个变量。,#includemain()int i;float f;char c;scanf(“%d,%f,%c”,return 0;,59,#includemain()int i;float f;char c;printf(input i,fn);scanf

30、(%d,%f,请同学们观察本程序的输出是什么?,input i,f10,3.14input cthe result is:i=10,f=3.140000,c=请按任意键继续.,程序并没有给用户输入字符数据的机会。为什么?,【链接】,60,解决方法:用getchar函数来读取回车符,main()int i;float f;char c;printf(input i,fn);scanf(%d,%f,(为什么此程序没有return 0?),input i,f10,3.14input cythe result is:i=10,f=3.140000,c=y请按任意键继续.,结果正确!,此外,还可以用ff

31、lush函数来清空键盘缓冲区。见实验讲义附录1的第16个错误(第130页),要求自学。,61,表达式是由运算符、操作数和括号组成的、计算求值的基本单位。操作数可以是:常量、变量、函数调用和表达式;表达式举例:2 表达式无运算符,操作数为常量i 表达式无运算符,操作数为变量sizeof(int)表达式无运算符,操作数为函数调用2+i 操作数为常量和变量i*sizeof(int)操作数为变量和函数调用2+i*sizeof(int)加法运算的第2个操作数仍为表达式,3.6 表达式,62,3.6 表达式,典型的几类运算符和表达式:算术运算符和算术表达式;关系运算符和关系表达式;逻辑运算符和逻辑表达式;

32、赋值运算符和赋值表达式;,63,3.6 表达式,一、算术运算符和算术表达式算术运算符:、/、(取余)等;算术表达式:由算术运算符、操作数和括号构成的表达式。如:(2+8.2/3)*4,10 4(余数为2),64,3.6 表达式算术表达式,(b*b-4*a*c)/(2*a),要注意编程序式,程序中对算术表达式的书写和平时的书写方式可能是不一样的:,在程序中要写成,65,在C语言中,算术运算的操作数可以是整数、字符或者浮点数。如果表达式中的操作数全是字符或者整数,则表达式的值为整数;如果操作数至少有一个是浮点数,则表达式的值为浮点数。,3.6 表达式算术表达式,求以下表达式的值:1)102/202

33、)102%203)1/24)1.0/25)x=A+32(x是整型变量),求以下表达式的值:1)102/20=52)102%20=23)1/2=0 值为整数4)1.0/2=0.5 值为浮点数5)x=A+32 x97,提示:字符数据总是先转换成整型数据,再参与运算的。,66,3.6 表达式算术表达式,C语言中,整型、字符型、浮点型数据可以进行混合运算.如:5+1.0+A=71.000000混合运算涉及到数据类型的转换,具体将在以后介绍。自加运算符+和自加运算符-是C语言特有的运算符,将在以后介绍。,67,3.6 表达式,二、关系运算符和关系表达式关系运算符:用于比较两个数据的大小关系。关系表达式:

34、用关系运算符将两个表达式连接起来构成的表达式,如(23)10;运算结果是逻辑“真”或者“假”。在C语言中,若运算结果是逻辑“真”,则关系表达式的值为1;若为逻辑“假”,则值为0。,68,3.6 表达式关系表达式,思考:以下语句的输出结果是什么?printf(the value of(2+3)10 is:%dn,(2+3)10);printf(the value of(2+3)=10 is:%dn,(2+3)=10);the value of(2+3)10 is:1the value of(2+3)=10 is:0,69,3.6 表达式,三、逻辑运算符和逻辑表达式逻辑运算符:与、或、非,C语言中

35、,只要操作数值为非0,即为真。值为0,即为假,70,3.6 表达式逻辑表达式,逻辑表达式:用逻辑运算符将表达式(一般为关系表达式)连接起来构成的表达式;运算结果是逻辑“真”或者“假”;在C语言中,若运算结果是逻辑“真”,则逻辑表达式的值为1;若为逻辑“假”,则值为0。逻辑表达式求值的两个要点:判断操作数值是“真”还是“假”;当逻辑表达式求值结束后,将运算结果的逻辑“真”或“假”转换为整型值1或0。,71,3.6 表达式逻辑表达式,int main()int a=1,b=2,c=4,f;printf(“a=%d,b=%d,c=%dn,a,b,c);f=(ab)|(bc);printf(f=(ab

36、)|(bc),f为%dn,f);printf(!(ab)is:%dn,!(ab);printf(!a is:%dn,!a);system(pause);return 0;,输出结果?a=1,b=2,c=4f=(ab)|(bc),f为0!(ab)is:1!a is:0,72,3.6 表达式逻辑表达式,注意连续的关系运算:数学上的abc,在C语言中虽然也允许这么写,但其含义数学中完全不同。数学中的该类表达式在C语言中应该写成:(a b)&(b c)这里的括号不是必须的,但是加上会更清晰。,73,四、赋值运算符和赋值表达式 赋值运算符:用于将值存储到变量中;赋值表达式:带有赋值运算符的表达式;赋值表

37、达式的值为赋值后赋值号左边变量的值;,3.6 表达式-赋值表达式,74,3.6 表达式,运算符优先级问题:表达式a20&a%5=0的值?优先级:算术运算符关系运算符逻辑运算符赋值运算符 如:i=a20&a%5=0相当于:i=(a20)&(a%5)=0)如何理解:对算术运算结果进行关系运算,关系运算结果进行逻辑运算,以上运算结果赋值给变量(赋值运算)。后续会详细介绍。,75,表达式小测试,写出下列表达式:1)整数i被整数j整除;2)整数m是偶数;3)y-100,-10,且y 10,100;4)判断x年是否是闰年的条件:a)能被4整除但不能被100整除;或b)能被100整除且能被400整除;5)将

38、整型变量i和j相除后的结果赋值给整型变量t;,i%j=0m%2=0y-10&y100(x%4=0&x%100!=0)|(x%100=0&x%400=0)(x%4=0&x%100!=0)|(x%400=0)5.t=i/j,76,字符型数据操作测试,#includemain()char ch1=A,ch2=S;/*A、a、S的 ASCII分别是65,97,83*/printf(%c,%dn,ch1,ch1);printf(%c,%dn,ch2,ch2);printf(%c,%dn,ch1+32,ch1+32);printf(%dn,ch1ch2);printf(%d cn,ch1-ch2,ch1-

39、ch2);system(“pause”);,请写出程序运行结果,A,65S,83a,971-18,由于ch1-ch2得到的结果是负数,所以以字符形式输出时无对应字符!,77,请写出判断一个字符c是否是字母的逻辑表达式:只要是字母,则其ASCII肯定介于ASCII(a)和ASCII(z)之间,或者介于ASCII(A)和ASCII(Z)之间,(c a&c A&c Z),字符型数据操作测试,78,语句用于向计算机发出操作指令。一条语句经编译后产生一条或多条机器指令。一个实际的程序可能包括若干条语句。C语言规定了6类语句:表达式语句、复合语句、选择语句、循环语句、标记语句、跳转语句,3.7 语句,79

40、,一、表达式语句 表达式:算术表达式、关系表达式、逻辑表达式、赋值表达式。表达式语句:在一个表达式末尾加上分号“;”(分号是C语言中语句的结束符)。,ij;(一个表达式语句,但无意义)i=i+10*j;(赋值表达式语句)printf(“age=%d”,age);(表达式语句,表达式为函数调用),3.7 语句,80,如果表达式涉及到赋值(存在赋值运算符或运算符+或-,如i=i+10*j;),则将计算得到的值保存到变量中。如果不涉及赋值(如语句ij;),则值将被丢弃.,3.7 语句,81,二、复合语句 复合语句是包含零个或多个语句的代码单元,使得一组语句成为一个整体,也被称为块。,在C语言中,复合

41、语句由一个左大括号、可选语句段、一个右大括号组成。如:i=1;j=2*i;,3.7 语句,82,三、选择语句,3.7 语句,在写程序时,有时往往需要测试某一个条件 是否成立,然后根据测试结果来控制程序后续执行路径。此时要用到选择语句。C语言中选择语句有:1)if-else 语句 2)switch语句(以后再讲),83,1)if-else,实现双路选择,if(表达式)语句1else 语句2,b)C语句,3.7 语句,84,3.7 语句,if-else语句中的“表达式”必须用“(”和“)”括起来;表达式可以是任一种表达式,关系表达式和逻辑表达式较常见;表达式的值为非零时,为“真”,否则为“假”。语

42、句可以是任何语句:表达式语句、复合语句、选择语句和循环语句。else子句是if语句的一部分,必须与if配对使用,不能单独使用。可以没有else子句(但必须有if子句),即:if(表达式)语句,85,例3.3 输入一个整数,判别它是否能被3整除。若能被3整除,输出YES;若不能被3整除,输出NO。,#include这是条件语句中典型的程序设计!main()int n;/*变量n用于存放输入的整数*/printf(“input n:”);/*输入提示*/scanf(“%d”,input n:,n=20 NO,86,#includemain()int n;/*定义变量n*/printf(input

43、n:);/*输入提示*/scanf(%d,else和离它最近的if匹配,改动:输入一个正整数,判别它是否能被3整除。若输入的不是正整数,则提示出错信息;否则,若能被3整除,输出YES;若不能被3整除,输出NO。,1)通过缩进来更好地展示代码结构;2)if-else是一条语句,不用加,87,#includemain()int n;/*定义变量n*/printf(input n:);/*输入提示*/scanf(%d,嵌套的ifelse语句的另外一种写法,88,练习1:输入一个字符,如果是小写字母,则输出为:this is a lower-case letter;如果是大写字母,则输出为:this

44、is a upper-case letter;如果是数字,则输出为:this is a digit;若是其他,则输出为:this is neither a letter nor a digit.如何在if-else语句中表示数字和字母条件?,89,#includemain()char ch;printf(input a char:);scanf(%c,90,2)switch,实现多路选择常量表达式的值必须是C语言中的整型、字符型或者枚举类型。,switch(表达式)case 常量表达式1:语句1break;case 常量表达式2:语句2break;case 常量表达式n:语句nbreak;de

45、fault:语句n1,方括号表示其内的语句可选,图35 switch语句,3.7 语句,91,switch(sex)case 0:printf(“hello,boy!);break;case 1:printf(hello,girl);break;default:printf(“invalid sex”);,switch语句实例:,3.7 语句,92,四、循环结构语句,3.7 语句,有时程序中需要多次运行同一段代码。这种 控制结构称为循环结构。C语言提供了三类用于实现循环结构的语句:1)while 2)do-while3)for,93,1)while,3.7 语句,此处的表达式可以为任意一种表达

46、式,语句为任意类语句;如果表达式值为真(非0),则执行语句;执行完后再测试表达式,如果仍为真(非0),则再次执行语句;直到表达式为假(为0)。,94,while语句实例:输出0N之间的整数(N0),解题思路:题目本质上就是要反复输出一个数,因此可以考虑使用循环结构。由于每次输出的值不同,但是有规律(加1),因此可以考虑把要输出的值保存到变量i中,每一次循环即是输出变量i的值。每次输出后令i值加1。初始值为0。,2000H,2002H,2004H,2003H,2001H,存储空间,i,0,1,2,95,#include#define N 10main()int i;i=0;while(i=N)p

47、rintf(%d,i);i=i+1;system(“pause”);return 0;,while语句实例:输出0N之间的整数(N0),循环初始化;while(循环条件)本次循环本职工作;修改相关变量,为下一次循环做准备;,循环结构:每次循环做相同的操作,只是操作的是不同的数据。循环问题分析要点:,96,练习:输入一个正整数。若输入的不是正整数,则提示出错信息,并请用户重新输入,直到输入一个正整数。,程序主体:scanf(“%d”,97,#includemain()int n;/*变量n存储读入的整数*/printf(input n(n0):);/*输入提示*/scanf(%d,练习:输入一个

48、正整数,判别它是否能被3整除。若输入的不是正整数,则提示出错信息,并请用户重新输入;否则,若能被3整除,输出YES;若不能被3整除,输出NO。,98,if(n%3=0)/*若n能被3整除,则输出YES”*/printf(nn=%d,YES,n);else/*若n不能被3整除,则输出“NO”*/printf(nn=%d,NO,n);system(pause);return 0;,99,练习1:输入一个正整数n,求1n之间的整数的和。分析:C程序设计语言只能提供求两个数的和的算数运算。如何利用这个基本能力求得n个数的和?考虑到:sum(a1,a2)=a1+a2 sum(a1,a2,a3)=sum(

49、a1,a2)+a3 sum(a1,a2,an)=sum(a1,a2,an-1)+an 那就是进行n-1次的求和,每一次的求和都是把一个数和已经得到的和相加。因此可以考虑使用循环结构解题。,100,循环初始化:i=2;sum=1;while(循环条件:i=n)本次循环本职工作:求两数之和sum=sum+i;修改相关变量,为下一次循环做准备:i=i+1;,101,#include main()int n,i;/n:存放读取的整数 int sum;/存放求得的和 printf(input n(n0):);/*输入提示*/scanf(%d,102,练习2:打印三角形(要求采用循环结构)*,103,#i

50、nclude#define LINES 3main()int line;int count;line=1;while(line=LINES)/输出第line行:输出line个*号 count=1;while(count=line)printf(*);/输出第count个*count=count+1;printf(n);line=line+1;system(pause);return 0;,104,练习3:输入起止年份,输出这两年之间的闰年。用while结构实现。闰年的条件是:a)能被4整除但不能被100整除;或b)能被100整除且能被400整除;,105,2)do-while,3.7 语句,语

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号