5顺序结构程序设计.ppt
5顺序结构程序设计顺序结构程序设计5.1 5.1 语语 句句5.2 5.2 库函数的使用库函数的使用5.3 5.3 顺序结构程序设计顺序结构程序设计5.1 语语 句句5 5.11.1 1 语句的概念语句的概念 语句是是算法实现的程序表示,是算法实语句是是算法实现的程序表示,是算法实现的最小单位。语句说明了一种行为,它是用现的最小单位。语句说明了一种行为,它是用计算语言编写的控制计算机完成确定操作的句计算语言编写的控制计算机完成确定操作的句子。子。 5 5.11.2 C2 C语句的分类语句的分类C语言将语句分为以下几类:语言将语句分为以下几类:(1)表达式语句;)表达式语句;(2)流程控制语句;)流程控制语句;(3)函数调用语句;)函数调用语句;(4)跳转语句;)跳转语句;(5)标号语句;)标号语句;(6)复合语句;)复合语句;(7)空语句。)空语句。5 5.11.3 3 语句和表达式的区别语句和表达式的区别 任意类型的表达式都是有值的,而语句是向任意类型的表达式都是有值的,而语句是向计算机发出的完成表达式运算的一个动作,语句计算机发出的完成表达式运算的一个动作,语句是没有值的。表达式可以作为运算对象参与其他是没有值的。表达式可以作为运算对象参与其他表达式的运算,而语句则不能。例如,表达式的运算,而语句则不能。例如,x=3*(a=4)是合法的表达式,而是合法的表达式,而x=3*(a=3;)则不是合法的表达式。则不是合法的表达式。5.2 5.2 库函数的使用库函数的使用 在在C语言中函数占有及其重要的地位,这语言中函数占有及其重要的地位,这里首先来简单介绍一下函数的概念。函数是事里首先来简单介绍一下函数的概念。函数是事先编写好的完成一定功能的程序段。先编写好的完成一定功能的程序段。 下面以下面以Turbo C为例,讲述部分输入输出和为例,讲述部分输入输出和数学库函数的使用。数学库函数的使用。5 5.22.1 1 库函数的使用库函数的使用 标准的库函数使用方法较为简单,但是由标准的库函数使用方法较为简单,但是由于库函数是存放在函数库中的,因此在使用时于库函数是存放在函数库中的,因此在使用时必须告诉计算机该库函数属于哪一个库,以便必须告诉计算机该库函数属于哪一个库,以便计算机及时查找并执行其程序体,这一过程一计算机及时查找并执行其程序体,这一过程一般称为函数的声明。般称为函数的声明。#include math.hmain() float x,y; y=sin(x); 其中其中#include math.h 就是对函数的声明过程。就是对函数的声明过程。include 是是C语言的特定字,是包含的意思,在使用前要加符号语言的特定字,是包含的意思,在使用前要加符号“#”。被包含的文件又称为头文件。被包含的文件又称为头文件。 函数的使用称为调用,在函数调用后加函数的使用称为调用,在函数调用后加“;”就构成了函数就构成了函数调用语句,函数也可以作为运算的运算对象。函数名括号里面的调用语句,函数也可以作为运算的运算对象。函数名括号里面的量值称之为参数,当给定这些参数的量值时,编译系统就可通过量值称之为参数,当给定这些参数的量值时,编译系统就可通过给定的量值计算出所需的结果给定的量值计算出所需的结果 5 5.22.2 2 常用的输出函数常用的输出函数1多种类型数据输出函数多种类型数据输出函数 printf()printf(格式控制,输出表列格式控制,输出表列) 该函数的功能是将输出表列中的数据按照该函数的功能是将输出表列中的数据按照格式控制的格式输出到标准输出设备。格式控制的格式输出到标准输出设备。 第一部分称为格式控制,是用双引号括起第一部分称为格式控制,是用双引号括起来的字符串,包含普通字符和以来的字符串,包含普通字符和以“%”%”开头的格开头的格式控制字符两类成份构成;第二部分是需要输式控制字符两类成份构成;第二部分是需要输出的数据,可以任意多个,每个数据之间用逗出的数据,可以任意多个,每个数据之间用逗号隔开。号隔开。 格式字符和输出表列中的数据项具备一一格式字符和输出表列中的数据项具备一一对应关系,其作用是控制对应的输出项按照指对应关系,其作用是控制对应的输出项按照指定的格式输出;普通字符指的是除格式字符外定的格式输出;普通字符指的是除格式字符外的任意字符,可以用字符的各种表示形式去描的任意字符,可以用字符的各种表示形式去描述,其作用是按照该字符的含义输出。述,其作用是按照该字符的含义输出。格式字符种类较多,下面作较为详细的讲解。格式字符种类较多,下面作较为详细的讲解。(1)%c%c用以输出单个字符。用以输出单个字符。例如:例如:printf(The character is :%cn,a); 表示把字符表示把字符a 以以%c的格式输出到计算机的的格式输出到计算机的屏幕上。在用户屏幕上看到如下内容:屏幕上。在用户屏幕上看到如下内容:The character is: a(2)%d%d按照十进制形式输出整型数据。按照十进制形式输出整型数据。例如:例如:printf(The number is: %dn, 18); 屏幕上看到输出的结果为:屏幕上看到输出的结果为:The number is: 18(3)o o按照八进制格式输出整型数据。以该按照八进制格式输出整型数据。以该格式输出数据时,按照八进制的形式输出对格式输出数据时,按照八进制的形式输出对应数据项的机器码。应数据项的机器码。 (4)%x %x按照十六进制格式输出整型数据。以按照十六进制格式输出整型数据。以该格式输出数据时,按照十六进制的形式输该格式输出数据时,按照十六进制的形式输出对应数据项的机器码。出对应数据项的机器码。(5)%u %u按照无符号形式输出整型数据,把对应按照无符号形式输出整型数据,把对应内存中的数据以无符号数的形式输出。内存中的数据以无符号数的形式输出。 以上的以上的5种格式字符既可用于输出字符型数种格式字符既可用于输出字符型数据,也可用于输出整型数据。看下列的程序及据,也可用于输出整型数据。看下列的程序及运行结果。运行结果。例例5 5.44main() int a=65; char c=A; printf(%c,%dn,a,a); printf(%c,%dn,c,c);运行结果:运行结果:A, 65A, 65 以上的以上的4种整型数据的格式字符前加上类种整型数据的格式字符前加上类型修饰符后可用于输出长整型数据,有型修饰符后可用于输出长整型数据,有%ld,%lo,%lx,%lu 4种格式。看下列的程序及种格式。看下列的程序及运行结果。运行结果。例例5 5.5 5 main() long int a=8,b=-1; printf(%ld,%lo,%lx,%lun,a,a,a,a); printf(%ld,%lo,%lx,%lun,b,b,b,b); 程序运行结果为:程序运行结果为: 8,10,8,8-1,37777777777,ffffffff,4294967295 若将上述程序改为:若将上述程序改为:main() long int a=8,b=-1; printf(%d,%o,%x,%un,a,a,a,a); printf(%d,%o,%x,%un,b,b,b,b); 将不能正确的输出结果,因为将不能正确的输出结果,因为a和和b是长整型是长整型变量,不能以整型格式输出。变量,不能以整型格式输出。 以上以上5种格式均有含有域宽修饰的扩展种格式均有含有域宽修饰的扩展形式。如:形式。如:%mc 、%md、%mo、%mx、%mu、%mld、%mlo、%mlx、%mlu等,其中等,其中m是一个直接形是一个直接形式的整型常量,是域宽修饰符,表示输出数式的整型常量,是域宽修饰符,表示输出数据应当占用的列宽。如果数据实际输出所占据应当占用的列宽。如果数据实际输出所占列宽小于列宽小于m,m表示左端补足空格,表示左端补足空格,m前有负前有负号时右端补足空格,如果数据实际输出所占号时右端补足空格,如果数据实际输出所占列宽大于列宽大于m,m不起作用。不起作用。例例5 5.66main() int a=-1; printf(%5d, %-10o, %8xn,a,a,a); 程序运行后,输出如下结果:程序运行后,输出如下结果:-1,177777,ffff(6)%s %s输出字符串。输出字符串。%m.ns格式为其扩展格式为其扩展格式,格式,+, ,m的含义和上述相同。的含义和上述相同。n也是一也是一个直接形式的常量,表示取字符串中的左起个直接形式的常量,表示取字符串中的左起n个字符,个字符,n修饰符必须和修饰符必须和“.”结合使用才是有结合使用才是有意义的。字符串结束标志意义的。字符串结束标志“0”是是%s格式判断格式判断输出是否结束的标志。输出是否结束的标志。例如:例如:printf(China %10s,%-8.3s,China,China); 其输出结果为:其输出结果为:ChinaChina,Chi(7)%f例例5 5.77main() float m=123.4567891; printf(%f,%-8.3fn,m,m);其输出结果为:其输出结果为:123.456789,123.457(8)%e %e以指数形式输出浮点型数据,默认格式下尾数部分以指数形式输出浮点型数据,默认格式下尾数部分输出输出1位整数和位整数和5位小数,阶码部分输出符号及位小数,阶码部分输出符号及2位或者位或者3位(位(阶码阶码100时)阶码。时)阶码。%m.ne格式为其扩展格式,格式为其扩展格式,n表示取表示取尾数部分尾数部分n 1位小数,位小数,m表示该浮点数输出所占的列宽,表示该浮点数输出所占的列宽,表示表示m大于实际列宽时补空格的方式。大于实际列宽时补空格的方式。例如,以例如,以%e格式输出例格式输出例5.7中的变量中的变量m:printf(%e,%-12.3e,m,m*1E100);其输出结果为:其输出结果为:1.23457e+02, 1.23e+102(9)%g按照输出时所占的列数,自动选取按照输出时所占的列数,自动选取%f或或%e格式输出符点格式输出符点型数据,选取的依据是输出所占列数的多少。型数据,选取的依据是输出所占列数的多少。2字符格式输出函数字符格式输出函数putchar()putchar()函数的功能是向屏幕输出一个字函数的功能是向屏幕输出一个字符。符。该函数的一般格式为:该函数的一般格式为:putchar( 参数参数) 一般来说该函数是作为独立的函数调用一般来说该函数是作为独立的函数调用语句来实现对其的调用。语句来实现对其的调用。putchar()只有一个只有一个参数,此参数可以是常量,可以是变量,也参数,此参数可以是常量,可以是变量,也可以是任意整型表达式,参数的值代表的是可以是任意整型表达式,参数的值代表的是某字符对应的某字符对应的ASCII码值。码值。 调用该函数之前必须加上函数的声明部调用该函数之前必须加上函数的声明部分:分:#include stdio.h例例5 5.1111#include stdio.hmain() char c=A; putchar(c);/*语句语句*/ putchar(t); /*输出转义字符输出转义字符t的功能,转到下的功能,转到下一个输出区一个输出区*/ putchar(A); /*语句语句*/ putchar(t); putchar(65);/*语句语句*/ putchar(n);5 5.22.3 3 常用的输入函数常用的输入函数1多种类型数据输入函数多种类型数据输入函数scanf() scanf()函数的功能是从标准的输入设备读函数的功能是从标准的输入设备读取各种类型的数据到相应的变量中。取各种类型的数据到相应的变量中。 首先介绍一个取地址运算符首先介绍一个取地址运算符&,该运算符是单,该运算符是单目运算符,运算对象一般来讲是变量,其作用目运算符,运算对象一般来讲是变量,其作用是得到参与是得到参与“&”运算的运算对象的地址,如运算的运算对象的地址,如“&a”则得到变量则得到变量a的地址。的地址。该函数的一般格式为:该函数的一般格式为:scanf(格式控制格式控制,地址表列地址表列); 第一部分为格式控制部分,其构成和第一部分为格式控制部分,其构成和printf()一样,一样,scanf()函数可以使用的格式字符可参见函数可以使用的格式字符可参见表表5-3,普通字符是需要原样输入的字符,格式,普通字符是需要原样输入的字符,格式字符和地址表列中对应的变量具备一一对应关字符和地址表列中对应的变量具备一一对应关系,格式字符控制的不是地址,而是该地址对系,格式字符控制的不是地址,而是该地址对应的变量的类型;第二部分为对应变量的内存应的变量的类型;第二部分为对应变量的内存地址,是一个地址表列。地址,是一个地址表列。 例如,我们要把输入的例如,我们要把输入的3个整数存储到个整数存储到a、b、c这这3个变量中,假设个变量中,假设a、b、c为整型变量,具为整型变量,具体用法为:体用法为:scanf(%d%d%d,&a,&b,&c); 使用使用scanf()应注意以下问题。应注意以下问题。(1)当格式控制部分中相邻的两个格式字符不含有)当格式控制部分中相邻的两个格式字符不含有普通字符时,在输入的时候可以采取普通字符时,在输入的时候可以采取scanf()函数默函数默认的分隔方式。认的分隔方式。 (2)当格式控制部分中相邻的两个格式字符包含)当格式控制部分中相邻的两个格式字符包含%c格式时,输入时不能以空格、格式时,输入时不能以空格、Tab键或回车键加键或回车键加以区分,因为空格、以区分,因为空格、Tab键或回车键本身也是字符,键或回车键本身也是字符,只能严格按照格式控制规定按数据类型加以区分某只能严格按照格式控制规定按数据类型加以区分某项数据是否输入结束。项数据是否输入结束。 (3)在)在scanf函数中允许使用域宽函数中允许使用域宽m来控制输入,来控制输入,m表示的是输入数据所占的列宽,实际输入不足表示的是输入数据所占的列宽,实际输入不足m位位时,可在输入的数据左侧或右侧加空格。时,可在输入的数据左侧或右侧加空格。 (4)修饰符)修饰符*。*的含义是的含义是“跳过跳过”,表示在地址,表示在地址表列中没有对应的控制项,但在输入时必须输入表列中没有对应的控制项,但在输入时必须输入数据。数据。(5)程序中如果有多个)程序中如果有多个scanf(),系统会将多个,系统会将多个scanf()结合为一个函数来处理,所以读者在使用结合为一个函数来处理,所以读者在使用时要多加练习,灵活掌握。时要多加练习,灵活掌握。(6)格式控制后最好不要加字符)格式控制后最好不要加字符n,否则在输,否则在输入时容易引起不便。入时容易引起不便。(7)通常为了使程序在输入数据时易于操作,可)通常为了使程序在输入数据时易于操作,可使用下列的方式来提高程序的可读性。使用下列的方式来提高程序的可读性。 例例5 5.1414 main() int a,b; float x,y; printf(input a(int),b(int) x(float) y(float):n); scanf(%d,%d”,&a,&b); scanf(%f%f,&x,&y); 在使用在使用scanf()函数时应首先在输入之前书写一函数时应首先在输入之前书写一个个printf()函数,给出应输入的数据个数、类型及函数,给出应输入的数据个数、类型及分隔方式的提示信息。读者可以使用易于理解的提分隔方式的提示信息。读者可以使用易于理解的提示,增加程序的可读性。示,增加程序的可读性。格式字符说明用于输入十进制数用于输入八进制数用于输入十六进制数用于输入单个字符用于输入字符串(非空格开始,空格结束,字符串以0结尾)用于输入实数(小数或指数均可)与f相同(可与f互换)修饰符m域宽控制*跳过l用于长整型数(%ld、%lo、%lx)或double型实数(%lf、%le)2字符读取函数字符读取函数getchar() 字符读取函数为无参函数,其功能是从键盘字符读取函数为无参函数,其功能是从键盘读入一个字符。读入一个字符。 调用该函数之前必须加上对于函数的声明部调用该函数之前必须加上对于函数的声明部分:分:#include stdio.h。例例5 5.1515#include stdio.hmain() char c; c=getchar(); putchar(c); putchar(getchar();5 5.22.4 4 数学函数数学函数 C标准库函数提供了大量的数学函数以供标准库函数提供了大量的数学函数以供使用,数学函数均为有参有返回值函数,使用使用,数学函数均为有参有返回值函数,使用时应注意函数的用法和使用环境。时应注意函数的用法和使用环境。 1开方函数开方函数开方函数的一般格式为:开方函数的一般格式为:double sqrt(double x) 其作用是求参数其作用是求参数x的开方值,参数为双精度的开方值,参数为双精度浮点型数据,返回值为双精度浮点型数据。如浮点型数据,返回值为双精度浮点型数据。如对对4开方可编写如下程序。开方可编写如下程序。例例5 5.1616 #include math.hmain() float a; a=sqrt(4.0); printf(%fn,a);5.3 5.3 顺序结构程序设计顺序结构程序设计例例5 5.18 18 已知三角形的三边长为已知三角形的三边长为4,6,7,求,求三角形的面积。三角形的面积。分析:该例题已知三角形的三边长,我们可以分析:该例题已知三角形的三边长,我们可以通过多种方法求得其面积。通过多种方法求得其面积。算法三:算法三: 上例可以做如下处理,定义三个边长分上例可以做如下处理,定义三个边长分别为别为a、b、c三个变量,利用三个变量,利用scanf()函数从键函数从键盘读取三边的具体数值,从而扩展程序的通用盘读取三边的具体数值,从而扩展程序的通用性。可得到如图性。可得到如图5.4所示的流程图。所示的流程图。图5.4例5.18算法三输入 a、b、c 的值t=(a+b+c)/2s=)()(ctbtatt输出 s根据算法三编写程序:根据算法三编写程序:#include math.hmain() float a,b,c,t,s; pritnf(input a b c:n); scanf(%f%f%f,&a,&b,&c); t=(a+b+c)/2; s=sqrt(t*(t-a)*(t-b)*(t-c); printf(%.3fn,s); 例例5 5.119 将任意小写字母,转换为对应的大写将任意小写字母,转换为对应的大写字母并输出。字母并输出。 小写或大写字母均为字符,字符参与运算时小写或大写字母均为字符,字符参与运算时实际是将字符转换为整型数据运算。根据实际是将字符转换为整型数据运算。根据ASCII表规律可知对应大小写字母表规律可知对应大小写字母ASCII值相差值相差32。可。可得到如图得到如图5.5所示的流程图。所示的流程图。程序如下:程序如下: #include stdio.h #include stdio.hmain() main() char c; int c; c=getchar(); c=getchar(); c=c-32; c=c-32; putchar(c); putchar(c);