




已阅读5页,还剩113页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,2,程序设计语言:用于书写计算机程序的语言,用于表达和描述要加工的数据以及求解问题的步骤和过程。是根据预先定义的规则(语法)、由一个有限字母表上的字符构成的字符串的总体。 程序设计语言的基本成分: 数据成分。用以描述程 序中所涉及的数据。运算成分。用以描述程序中所包含的运算。控制成分。用以表达程序中的控制构造。传输成分。用以表达程序中数据的传输。,3,提纲,标识符 数据类型 变量 常量 输入和输出 表达式 语句 函数,本章结合C语言向大家介绍结构化程序设计语言的基本概念,数据成分,传输成分,运算成分,控制成分,运算成分,4,先聊点C语言,5,6,数据总线,控制路线,地址总线,实例:编一个程序,从键盘读入两个整数,要求在屏幕上输出相乘运算结果。,处理步骤: 1.控制部件发命令从键盘读取数据并存储到内存储器中(输入)。 2.控制部件发命令从内存储器中取出这两个数,置入运算部件的寄存器中,让运算器执行乘法运算,运算结果写回存储器中(处理)。 3.控制部件发命令将存储在内存储器中的结果输出到显示器上(输出)。,需要考虑的问题: 1.输入:如何从键盘读取这两个数并将其存放到内存中?程序如何约束输入的必须是整数? 2.处理:计算时如何读取内存中的这两个数?如何实现计算?计算结果如何写回内存? 3.输出:如何将内存中的计算结果输出到显示器?,7,数据总线,控制路线,内存中数据的存取:变量、常量、 数据类型,输入:输入语句,输出:输出语句,地址总线,计算的实现: 运算符 表达式 语句 函数,8,标识符是由程序员定义的单词,用来给程序中的数据、函数和其他用户自定义对象命名。,程序设计语言本身会定义一些专用名称,称之为保留字或关键字,它们具有特定含义,程序员不能另做他用。如:C语言规定了32个关键字。,3.1 标识符,9,C语言规定的32个关键字: auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if static while,10,#include main() int number1; /*变量声明*/ int number2; int result; 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, name1,2name,#age,12,数据是计算机处理的对象。 数据依据其本身的特点可以归为不同的类:整数、小数、字符、字符串等。 (高级程序语言特点:按照人对于数据的表达方式),程序设计语言应该具备区分各种类型数据的能力,于是引入了数据类型的概念。 数据类型包括两层含义:定义了一系列的值(属于该类型的数据能够取值的范围)以及能应用于这些值上的一系列操作(数据操作)。,3.2 数据类型,13,整数是由符号和一个或多个数字组成的正数、0或负数,又称为带符号的自然数 ,如+12,-38。 注意:在数学中,整数是一个无限集合,但对于计算机来说,只能表示它的一个有限子集(取决于存储空间的大小) 。,整型,3.2 数据类型,程序设计语言一般包含四种标准数据类型:整型、字符型、浮点型和布尔型(补充)。,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,整型数据所允许的运算包括: 二目算术运算 :+、-、*、/、(取余) ; 注意:两个整数进行二目运算后结果还是整数 如: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)标准编码模式来对字符进行编码 。每个字符占用8位内存(1个字节);,3.2 数据类型,17,ASCII表,思考:若从键盘上输入字符存储到内存,字符到二进制编码的转换是由什么部件来实现的?,18,ASCII(A)=65 A的ASCII值是65 ASCII(a)=97 规律:大写字母的ASCII编码32小写字母的ASCII编码,3.2 数据类型字符型,19,3.2 数据类型字符型,关系运算(按照ASCII大小): ,=, = =,!= 例如:A a 结果为真,因为A的ASCII是65 ,a的ASCII是97 ,6597,字符型所允许的运算包括(将字符型数据当作整型数据对待): 算术运算:ch2=ch1-32 (若ch1值为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位(字节);double一般占64位( 8字节), long double占96位( 12字节)。 三者区别:越后面的类型运算精度越高,值域越大,但占用的内存单元越多。,22,浮点型所允许的运算包括: 二目算术运算 :+、-、*、/; 浮点型数据进行二目运算结果还是浮点型。 如:12.0/5.0=2.4 单目算术运算 :取负值 关系运算:,=,= =,!=,3.2 数据类型浮点型,注意:要避免做两个实数相等或不相等的比较。由于计算机表示方面的近似性,会使得本来应该相等的两个数不等。建议在比较两个浮点数X和Y是否相等时使用|X-Y|,其中是一个绝对值较小的正浮点数。举例:浮点数123.9写入内存时,内存实际存储的是123.900002,23,3.2 数据类型布尔型(补充),布尔类型数据:取值只有两种,真(True)或者假(False)。允许的运算包括:与、或、非。 绝大多数程序设计语言中有布尔类型这种数据类型,如Pascal语言。但是C语言没有定义这种数据类型。,布尔型,24,标准类型是原子的、不可再分的。程序员可以以标准类型为基本构件,构造出复杂的数据类型。如C语言有:结构、数组、联合、文件等复杂数据类型;PASCAL语言有:结构、数组、集合、文件等复杂数据类型。,3.2 数据类型复杂数据类型,25,3.3 变量,数据总线,控制路线,输入数据、中间运算结果、最终结果,程序需要将输入数据、中间运算结果以及最终结果暂时保存在内存单元中。,地址总线,程序如何实现从内存单元存取数据?,26,3.3 变量,程序运行时,通过内存地址对内存数据进行读写; 程序员写源程序时,如果也是直接使用内存地址来读写内存数据,会很麻烦! 如果用名字来代替地址,在程序中出现的是代表内存空间的名字,让编译器来跟踪数据实际存放的物理内存地址,就可以简化编程变量;,27,变量用来代表内存存储空间,该存储空间用来存放被加工的数据或处理的结果。源程序中对变量的操作(读和赋值)实际上是对存储空间的读写操作。 变量具有三个重要属性:名称、值和数据类型。,用sex代表地址为2001H的内存单元,score代表地址为2004H2007H的一片内存空间。用变量来实现对这些内存空间数据的存取。,3.3 变量,28,一、变量定义,使用变量来对内存数据进行存取前,必须先定义变量,目的是建立变量和存储空间的对应关系。 变量定义指明变量的名称和数据类型(变量代表的存储空间存放的数据的类型)。变量的名称要有意义,要遵循标识符命名原则,虽然可以为任意长度,但C编译器只认为前31个字符有效。变量类型可以告诉编译器应该留出几个字节用于保存数据。 不同语言中变量定义的写法不一样,C语言格式: 数据类型 变量名1,变量名2,;,3.3 变量,思考:变量定义时要指明哪些内容?,数据类型,变量名,分号必须,多个同类型变量用逗号分割,29,注意,变量定义仅引起内存存储空间分配,但此时变量中存储的值一般是无意义的(特殊情况除外)!,变量定义将引起内存空间的分配。定义后,变量就用来代表内存中的一片存储单元(存储单元个数取决于变量类型)。,3.3 变量,30,二、变量赋值,C语言示例: char sex; int age; float score;,变量赋值:把一个值写入变量代表的存储空间。,C语言变量赋值格式:变量名=表达式,sex=F; age = 18; score= 89.5;,ASCII(F)=77),77,18,89.5,变量的值,表达式是由运算符、操作数和括号组成的、计算求值的基本单位。如:age*(i+10),3.3 变量,31,3.3 变量,变量使用特点 对变量的操作:定义变量、读变量、写变量 先定义,后使用。 如未定义就使用,则在编译时被查出,认为非法。 变量未被赋值前,值一般是无意义的。 对变量赋值过程是“覆盖”过程,用新值去替换旧值。 读取变量代表的存储空间数据(又称读取变量的值):age=age+1; 将变量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 变量,/*/:注释 main()函数 变量定义部分 操作部分,35,3.3 变量,找出下述变量定义有无错误: float f; char A, B;,36,总结: 变量三要素:变量名(存储空间)、数据类型(存储空间存放的数据的类型)、变量值(存储内容),3.3 变量,37,一、文字常量 文字常量是指在程序中未被命名的值。 例:circumference = 2 * (length + width); 其中2就是一个文字常量,length和width是变量,常量是指在程序执行过程中不能改变的数据 三类常量:文字常量、命名常量、符号常量,3.4 常量,38,二、命名常量 和变量类似,命名常量也是内存存储空间的名字,代表一片内存存储空间,但一旦赋值便不允许程序去改变该存储空间中的数据。 C语言中定义一个命名常量: main() const float pi = 3.14; ,3.4 常量,说明pi是个命名常量;该常量的值只能在定义时初始化,39,#include main() const float pi=3.14;/*常量定义*/ float radius , area; /*变量定义*/ printf(“please input the radius:n”); /*显示提示信息*/ scanf(“%f”, ,40,符号常量是仅含有符号名称的值。 C语言符号常量定义:#define 标识符 替换文本 #define PI 3.14 area = PI* radius * radius; 编译时,预处理程序能够将所有出现该符号名称的地方用值替换: area = 3.14 * radius * radius ; 使用符号常量的好处:使程序易读性好、容易维护。,三、符号常量,3.4 常量,41,3.4 常量,#include #define PI 3.14 /常量定义,注意结束处无分号 main() float radius; /*变量定义*/ float area; printf(“please input the radius:n”); /*显示提示信息*/ scanf(“%f”, ,42,3.4 常量,思考:命名常量和符号常量的区别,内存分配上(命名常量会在内存的程序运行数据区分配到内存,而符号常量不会) 类型检查上(编译器对命名常量会进行类型检查,排除程序的不安全性;对符号常量只是简单的替换,不进行类型检查),43,四、常量的类型 和变量一样,常量也有类型。大多数程序设计语言使用整型、浮点型、字符型和字符串型常量。 C语言中四种常量: 15 整型常量 15.4 浮点型常量 A 字符型常量 (用单引号括起字符) “Hello” 字符串型常量(用双引号括起字符序列) 文字常量和符号常量的值体现了常量的类型,3.4 常量,44,如果整型常量以0开头,C编译器会认为该常量是八进制数。如040即十进制的32。 如果整型常量以0x开头,C编译器会认为该常量是十六进制数。如0xFF即十进制的255。 #include #define X 040 #define Y 0XFF main() printf(“X=%d,Y=%d”, X,Y); system(“pause“); return 0; ,3.4 常量,X=32,Y=255请按任意键继续 . . .,45,常量小测试,下述常量定义哪些是错误的?为什么? #define ratio =1/3 #define ratio 1/3; #define 1st_character $ #define if 7,不能有号;否则会用=1/3替换ratio 不能有语句结束符;号 标识符只能以字符或者下划线开头 if是C语言规定的关键字,有特定含义,用户不能随便使用 习惯上,常量名一般采用大写字母。,46,数据总线,控制路线,地址总线,3.5 输入和输出(I/O),一个真正有用的程序一般会从输入设备接收数据、并将运算结果输出到输出设备中。,为了实现和输入输出设备的通信,程序必须要有输入和输出语句。一个既无输入又无输出的程序是没有用的。,47,输入和输出语句最基本的功能在于从外界环境将值读入一个变量,或者将一个值写出到外界环境中。,3.5 输入和输出(I/O),一、输入语句 通过输入语句或者预先定义的函数可以从外界接收值。 考虑:若用户输入“1.5c”,计算机该如何理解这批数据?是浮点数1.5,加上字符c,还是4个字符,还是整数1、字符., 5、字符c,还是 计算机自己是无法决定的,因此必须由程序员在输入语句中告诉计算机需要如何去理解这批数据,另外还需要告诉计算机这批数据存储到内存的哪里。,48,C语言输入函数举例: scanf(格式控制串,输入项地址表); 格式控制串:含有各种以百分号开头的格式控制符。 输入项地址表:有逗号分隔开的若干输入表项组成,每一个表项是一个变量的地址。 scanf函数的作用:从标准输入设备(键盘)上读取一系列数据,按格式控制串的要求进行转换并送到输入项地址表所列的逐变量中。,3.5 输入和输出(I/O),scanf(“%d”, 读取一个整数到变量number1中,格式控制串,输入项地址表,49,scanf(“%d”, 当程序执行该语句时,等待用户从键盘输入数据并转换成一个整数,存储到变量number1中。 d:转换说明符(conversion specifier),用于告诉程序键入的数据要转换成一个整数; &:取变量地址的运算符, &number1表示变量 number1的首地址。 注意:书写程序时不要遗漏&.,3.5 输入和输出(I/O),常用的转换说明符:d :整型;c:字符型;f:浮点型,格式控制串,输入项地址表,50,3.5 输入和输出(I/O),设age为int型变量,sex、ch为char型变量,height为float型变量。 输入数据为:20M1.65 若希望age得到值20,sex得到值M,height得到值1.65,则scanf函数调用为:,scanf(“%d%c%f”,若希望ch得到字符值2, age得到整型值0, sex得到字符值M, height得到浮点值1.65,则scanf函数调用为:,scanf(“%c%d%c%f”,51,用scanf语句从键盘同时读入年龄和性别:,scanf(“%d %c”,scanf(“%d,%c”,3.5 输入和输出(I/O),10 S,10,S,格式控制串中除了转换说明符,还可以包含其他字符。 从键盘输入的内容要和格式控制串匹配。如果在格式控制串中除了转换说明符以外还有其它字符,则在输入数据时应输入与这些字符相同的字符。如:,空格,scanf(“age=%d, sex=%c”,age=10,sex=S,52,二、输出 通过语句或者预先定义的函数可以将值输出到外界。,C输出函数举例:printf(格式控制串,输出项表); 功能:将字符串显示在标准输出设备(一般为显示器)上。程序员可以将常量、变量、表达式、函数调用作为待输出字符串的一部分。 格式控制串:包含了某些要直接显示的字符,也包含一些转换说明符。 输出项表:可以是常量、变量、表达式、函数调用。,3.5 输入和输出(I/O),53,如: printf( “ Your age is : %d”,age); 注意,在输出时转换说明符%d不输出,而是被变量age的值代替。假设变量age的值是18,则显示器上将输出字符串“Your age is : 18” 注意:此处变量age前面没有&!,3.5 输入和输出(I/O),上机练习:如果上述语句改写成 printf(”Your age is :”, age); 输出将是怎样?,54,3.5 输入和输出(I/O),可以用printf语句输出常量、变量、表达式、函数调用的值: printf(“the agerage score 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); /输出函数返回值,55,若想同时输出年龄和性别,则语句可写为: printf( “ Your age is : %d,your sex is : %c”,age,sex); 显示器上将输出字符串 “Your age is : 18, your sex is : F”,3.5 输入和输出(I/O),常用的转换说明符: d :整型;c:字符型;f:浮点型,输入输出后面会再详细讲解,有兴趣的同学可参见C程序设计教程的9.3和9.11。,56,#include main() int number1; /*存放整数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,任务描述:输入两个整数,求两数之积并输出。,编译后,源程序中出现number1、number2和result的地方将会用内存相对地址(非真正物理地址)替换。思考:何时、在哪里得到真正的物理地址? 编译程序怎么处理变量?操作系统怎么分配内存?如何得到物理地址?深入学习:编译原理操作系统计算机组成原理,假设操作系统已经分配如下内存空间用于存放操作数和结果,程序运行过程演示,57,找出以下程序的错误,include main() printf(“input age and heightn”); scanf(“age =%d”, age ); scanf(“%f”, height); printf(“age =%d, height=%f”,age);/输出 return 0; ,变量age和height未定义就使用; scanf(“age =%d”,58,修正后的程序,include main() int age float height;/变量定义 printf(“input age and heightn”); /输入提示 scanf(“age =%d”, ,运行结果: input age and height age=10 1.65 age=10, height=1.65请按任意键继续. . .,59,输入输出练习:定义三个变量age 、 height 和sex,分别是整型、浮点型、字符型。要求从键盘输入三个值存放到这三个变量里,并且输出这三个变量。,#include main() int age; /变量的命名要见名知意 float height; char sex; scanf(“%d,%f,%c”, return 0; ,60,#include main() int i; float f; char c; printf(“input i,fn“); scanf(“%d,%f“, ,请同学们观察本程序的输出是什么?,input i,f 10,3.14 input c the result is: i=10,f=3.140000,c= 请按任意键继续 . . .,程序并没有给用户输入字符数据的机会。为什么?,【链接】,61,解决方法:用getchar函数来读取回车符,main() int i; float f; char c; printf(“input i,fn“); scanf(“%d,%f“, ,input i,f 10,3.14 input c y the result is: i=10,f=3.140000,c=y请按任意键继续 . . .,结果正确!,此外,还可以用fflush函数来清空键盘缓冲区。见实验讲义附录1的第16个错误(第130页),要求自学。,62,表达式是由运算符、操作数和括号组成的、计算求值的基本单位。 操作数可以是:常量、变量、函数调用和表达式; 表达式举例: 2 表达式无运算符,操作数为常量 i 表达式无运算符,操作数为变量 sizeof(int) 表达式无运算符,操作数为函数调用 2 + i 操作数为常量和变量 i * sizeof(int) 操作数为变量和函数调用 2+ i * sizeof(int) 加法运算的第2个操作数仍为表达式,3.6 表达式,63,3.6 表达式,典型的几类运算符和表达式 : 算术运算符和算术表达式; 关系运算符和关系表达式; 逻辑运算符和逻辑表达式 ; 赋值运算符和赋值表达式 ;,64,3.6 表达式,一、算术运算符和算术表达式 算术运算符:、/、(取余) 等; 算术表达式:由算术运算符、操作数和括号构成的表达式。如:(2 + 8.2 / 3)* 4 ,10 4(余数为2),65,3.6 表达式算术表达式,(b*b-4*a*c)/(2*a),要注意编程序式,程序中对算术表达式的书写和平时的书写方式可能是不一样的:,在程序中要写成,66,在C语言中,算术运算的操作数可以是整数、字符或者浮点数。如果表达式中的操作数全是字符或者整数,则表达式的值为整数;如果操作数至少有一个是浮点数,则表达式的值为浮点数。,3.6 表达式算术表达式,求以下表达式的值: 1)102/20 2)102%20 3)1/2 4)1.0/2 5)x=A+32(x是整型变量),求以下表达式的值: 1)102/20=5 2)102%20=2 3)1/2=0 值为整数 4)1.0/2=0.5 值为浮点数 5)x=A+32 x97,提示:字符数据总是先转换成整型数据,再参与运算的。,67,3.6 表达式算术表达式,C语言中,整型、字符型、浮点型数据可以进行混合运算. 如:5+1.0+A=71.000000 混合运算涉及到数据类型的转换,具体将在以后介绍。 自加运算符+和自加运算符-是C语言特有的运算符,将在以后介绍。,68,3.6 表达式,二、关系运算符和关系表达式 关系运算符:用于比较两个数据的大小关系。 关系表达式:用关系运算符将两个表达式连接起来构成的表达式,如(23)10 ;运算结果是逻辑“真”或者“假”。 在C语言中,若运算结果是逻辑“真”,则关系表达式的值为1;若为逻辑“假”,则值为0。,69,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:1 the value of (2+3)=10 is:0,70,3.6 表达式,三、逻辑运算符和逻辑表达式 逻辑运算符:与、或、非,C语言中,只要操作数值为非0,即为真。值为0,即为假,71,3.6 表达式逻辑表达式,逻辑表达式:用逻辑运算符将表达式(一般为关系表达式)连接起来构成的表达式 ;运算结果是逻辑“真”或者“假”; 在C语言中,若运算结果是逻辑“真”,则逻辑表达式的值为1;若为逻辑“假”,则值为0。 逻辑表达式求值的两个要点: 判断操作数值是“真”还是“假”; 当逻辑表达式求值结束后,将运算结果的逻辑“真”或“假”转换为整型值1或0。,72,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)|(bc),f为%dn“,f); printf(“!(ab) is: %dn“,!(ab); printf(“! a is: %dn“,! a); system(“pause“); return 0; ,输出结果? a=1,b=2,c=4 f=(ab)|(bc),f为0 !(ab) is: 1 !a is: 0,73,3.6 表达式逻辑表达式,注意连续的关系运算: 数学上的abc,在C语言中虽然也允许这么写,但其含义数学中完全不同。 请思考:在C程序中的表达式352的值? 数学中的该类表达式在C语言中应该写成: (a b) & (b c) 这里的括号不是必须的,但是加上会更清 晰。,74,四、赋值运算符和赋值表达式 赋值运算符:用于将值存储到变量中; 赋值表达式:带有赋值运算符的表达式 ; 赋值表达式的值为赋值后赋值号左边变量的值;,3.6 表达式-赋值表达式,75,3.6 表达式,运算符优先级问题: 表达式a20 & a%5=0的值? 优先级:算术运算符 高于 关系运算符 高于 逻辑运算符 高于 赋值运算符 如:i= a20 & a%5 =0相当于: i=( (a20) & (a%5) =0) 如何理解:对算术运算结果进行关系运算,关系运算结果进行逻辑运算,以上运算结果赋值给变量(赋值运算)。后续会详细介绍。,76,表达式小测试,将下列描述表示为C语言表达式: 1)整数i被整数j整除(即余数为0); 2)整数m是偶数; 3)y -100,-10,且y 10,100; 4)判断x年是否是闰年,闰年的条件: a)能被4整除但不能被100整除;或b)能被400整除; 5)将整型变量i和j相除后的结果赋值给整型变量t;,i%j=0 m%2=0 y-10 & y100 (x%4=0 & x%100!=0) | (x%400=0) 5. t=i/j,77,字符型数据操作测试,#include main() 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-ch2); system(“pause”); ,请写出程序运行结果,A,65 S, 83 a ,97 1 -18,由于ch1-ch2得到的结果是负数,所以以字符形式输出时无对应字符!,78,请写出判断一个字符c是否是字母的逻辑表达式: 分析:只要是字母,则其ASCII肯定介于ASCII(a)和ASCII(z)之间,或者介于ASCII(A)和ASCII(Z)之间,(c =a& c =A& c =Z),字符型数据操作测试,请思考:1和1的区别,79,语句用于向计算机发出操作指令。 一条语句经编译后产生一条或多条机器指令。 一个实际的程序可能包括若干条语句。 C语言规定了6类语句: 表达式语句、复合语句、选择语句、 循环语句、标记语句、跳转语句,3.7 语句,80,一、表达式语句 表达式:算术表达式、关系表达式、逻辑表达式、 赋值表达式。 表达式语句:在一个表达式末尾加上分号“;”(分号是C语言中语句的结束符)。,ij;(一个表达式语句,但无意义) i = i + 10 * j;(赋值表达式语句) printf(“age=%d”,age);(表达式语句,表达式为函数调用),3.7 语句,81,如果表达式涉及到赋值(存在赋值运算符或运算符+或-,如i = i + 10 * j; ),则将计算得到的值保存到变量中。 如果不涉及赋值(如语句ij;),则值将被丢弃.,3.7 语句,82,二、复合语句 复合语句是包含零个或多个语句的代码单元,使得一组语句成为一个整体,也被称为块。,在C语言中,复合语句由一个左大括号、可选语句段、一个右大括号组成。如: i = 1; j = 2 * i; ,3.7 语句,83,三、选择语句,3.7 语句,在写程序时,有时往往需要测试某一个条件 是否成立,然后根据测试结果来控制程序后续执行路径。此时要用到选择语句。 C语言中选择语句有: 1)if-else 语句 2)switch语句(以后再讲),84,1)if-else,实现双路选择,if (表达式) 语句1 else 语句2,b)C语句,3.7 语句,85,3.7 语句,if-else语句中的“表达式”必须用“(”和“)”括起来;表达式可以是任一种表达式,关系表达式和逻辑表达式较常见;表达式的值为非零时,为“真”,否则为“假”。 语句可以是任何语句:表达式语句、复合语句、选择语句和循环语句。 else子句是if语句的一部分,必须与if配对使用,不能单独使用。 可以没有else子句(但必须有if子句),即: if(表达式) 语句,86,例3.3 输入一个整数,判别它是否能被3整除。若能被3整除,输出YES;若不能被3整除,输出NO。,#include #include /system函数的原型 main( ) int n; /*变量n用于存放输入的整数*/ printf(“input n: “); /*输入提示*/ scanf(“%d“, ,input n:,n=20 NO,请按任意键继续,87,#include main( ) int n; /*定义变量n*/ printf(“input n:“); /*输入提示*/ scanf(“%d“, ,else和离它最近的if匹配,改动:输入一个正整数,判别它是否能被3整除。若输入的不是正整数,则提示出错信息;否则,若能被3整除,输出YES;若不能被3整除,输出NO。,1)通过缩进来更好地展示代码结构;2)if-else是一条语句,不用加,88,#include main( ) int n; /*定义变量n*/ printf(“input n:“); /*输入提示*/ scanf(“%d“, ,嵌套的ifelse语句的另外一种写法,89,练习1: 输入一个字符,如果是小写字母,则输出为:this is a lower-case letter;如果是大写字母,则输出为: this is a upper-case letter;如果是数字,则输出为: this is a digit;若是其他,则输出为:this is neither a letter nor a digit.,90,#include #include main() char ch; printf(“input a char:“); scanf(“%c“, ,91,2)switch,实现多路选择 常量表达式的值必须是C语言中的整型、字符型或者枚举类型。,switch (表达式) case 常量表达式1: 语句1break; case 常量表达式2: 语句2break; case 常量表达式n: 语句nbreak; default: 语句n1 ,方括号表示其内的语句可选,图35 switch语句,3.7 语句,92,switch (sex) case 0:printf(“hello, boy!“);break; case 1:printf(“ hello, girl “);break; default:printf(“invalid sex”); ,switch语句实例:,3.7 语句,93,四、循环结构语句,3.7 语句,有时程序中需要多次运行同一段代码(重复做相同的事情)。这种控制结构称为循环结构。 在循环结构中,需要刻画出重复执行的是哪些动作(循环体),以及什么条件下需要重复(循环条件)。 C语言提供了三类用于实现循环结构的语句: 1)while 2)do-while 3)for,94,1)while,3.7 语句,此处的表达式可以为任意一种表达式,语句为任意类语句; 如果表达式值为真(非0),则执行语句;执行完后再测试表达式,如果仍为真(非0),则再次执行语句;直到表达式为假(为0)。,循环体:重复执行的工作,循环条件,95,while语句实例:输出0N之间的整数(N0),解题思路: 题目本质上就是要反复输出一个数,因此可以考虑使用循环结构。 由于每次输出的值不同,但是有规律(加1),因此可以考虑把要输出的值保存到变量i中,每一次循环即是输出变量i的值。每次输出后令i值加1。 i初始值为0。,2000H,2002H,2004H,2003H,2001H,存储空间,i,0,1,2,96,#include #include #define N 10 main() int i; i = 0; while (i = N ) printf(“%d “, i); i = i + 1; system(“pause”); return 0; ,while语句实例:输出0N之间的整数(N0),循环初始化; while(循环条件) 本次循环本职工作; 修改相关变量,为下一次 循环做准备; ,循环体:每次循环做相同的操作,只是操作的是不同的数据。 循环问题分析要点:,97,程序运行效果: 请输入正整数: -24 请输入正整数: -5 请输入正整数: 5,练习2:输入一个正整数。若输入的不是正整数,则提示出错信息,并请用户重新输入,直到输入一个正整数。,分析:只要输入不是正整数,就给出提示信息,要求重新输入;反复这么做,因此可以使用循环结构。,98,程序主体: main() int num; printf(“请输入正整数:n”); scanf(“%d”, ,练习2:输入一个正整数。,循环初始化; while(循环条件) 本次循环本职工作; 修改相关变量,为下 一次循环做准备; ,循环结构分析:,99,#include main( ) int num; /*变量num存储读入的整数*/ printf(“input n(n0):“); /*输入提示*/ scanf(“%d“, ,练习3:输入一个正整数,判别它是否能被3整除。若输入的不是正整数,则提示出错信息,并请用户重新输入;否则,若能被3整除,输出YES;若不能被3整除,输出NO。,100,练习3:判断正整数能否被3整除。,if (num%3=0) /*若n能被3整除,则输出YES”*/ printf(“nnum=%d,YES“,num); else /*若n不能被3整除,则输出“NO”*/ printf(“nnum=%d,NO“,num); system(“pause“); return 0; ,101,分析:C程序设计语言只能提供求两个数的和的算数运算。如何利用这个基本能力求得n个数的和?考虑到: sum(a1,a2)=a1+a2 sum(a1,a2, a3)=sum(a1,a2)+a3 sum(a1,a2,an)=sum(a1,a2,an-1)+an 那就是进行n-1次的两数求和,每一次的求和都是把一个数加到已经得到的和中。 因此可以考虑使用循环结构解题。,练习4:输入一个正整数n,求1n之间的整数的和。,102,练习4:求1n之间的整数的和,每一次求和,两个数都是在变的,因此需要使用变量来保存这两个数。假设用变量sum来保存已经求得的和,i保存另一个数。,1,sum,2,i,初始状态,3,sum,3,i,第1次求和:i的值2加入sum中,6,sum,4,i,第2次求和:i的值3加入sum中,103,练习4:求1n之间的整数的和,循环初始化:i = 2;sum = 1; while(循环条件:i = n) 本次循环本职工作: 求两数之和 sum = sum + i; 修改相关变量,为下一次循环做准备: i = i + 1; ,104,练习4:求1n之间的整数的和,#include main() int n,i;/n:存放读取的整数 int sum; /存放求得的和 printf(“input n(n0):“); /*输入提示*/ scanf(“%d“, ,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 瑞金市消防安全培训课件
- 农业碳汇项目碳排放权交易市场政策环境与市场发展动态研究
- 恩施美化工程方案(3篇)
- 东莞废水环保工程方案(3篇)
- 店面水电改造工程方案(3篇)
- 农业碳汇产品认证与市场推广策略报告
- 电厂工程大件运输方案(3篇)
- 农业现代化背景下的数字化转型路径与模式研究2025
- 球团车间安全知识培训课件
- 广西佛子矿业有限公司石材加工一厂年产30万吨级废石(矿山固废)综合再生利用项目环评报告
- 安全生产管理中的安全设备与技术应用
- 《3D打印产品后处理》 课件 项目3-5 3D 打印产品的上色、3D 打印产品的喷砂处理、3D 打印产品的丝网印刷
- 煤仓作业规程
- 测金属电阻率实验报告
- 政治经济学完整全套教学课件
- 养老护理员培训排泄照料
- 计算机应用基础(windows7-office2010)
- 肾脏肿瘤影像学诊断策略
- 仓库定期检查表范例仓库管理工作检查项目与评分标准
- 化疗前的准备和评估
- 显微外科设备器械及显微外科基本技术培训教材培训课件
评论
0/150
提交评论