1、第4章 顺序结构程序设计 顺序结构是最普遍使用的基本结构,这种结构控制语句按照命令从前向后的排列顺序逐条执行,是系统默认的控制结构,不需要专门的语句来控制。本章将介绍编写简单程序所必须的一些内容,如简单C语句、数据的输入输出、格式的输入输出等。,基本C语句 字符数据的输入输出 格式输入输出,4.1 基本C语句 C语言语句是用来向计算机系统发出操作指令的。一个语句经编译后产生若干条机器指令,用于完成一定的操作。一个程序又包含若干条语句。C语句可以分为5类,即控制语句、函数调用语句、表达式语句、空语句和复合语句。 1控制语句 控制语句用于控制C程序的执行流程。C语言中分为9种控制语句,分别如下:,
2、(1)if()else:条件语句。 (2)for():循环语句。 (3)while():循环语句。 (4)dowhile():循环语句。 (5)continue:结束本次循环语句。 (6)break:终止循环语句。 (7)switch:多分支选择语句。 (8)goto:转向语句。 (9)return:从函数返回语句。,2函数调用语句 函数调用语句由函数名、带实际参数的圆括号和分号组成,用于对系统库函数或自定义函数的调用。执行函数调用后,程序流程将转到相应的函数中进行执行,等执行完函数中的语句后,又返回到函数调用语句处。 例如:printf(“This is a C program!“);,3表
3、达式语句 表达式语句由各种类型的表达式和分号构成,如赋值语句是表达式语句中最常见的一种。 例如: x=15; /*赋值语句*/ x=15 /*赋值表达式*/,4空语句 只有一个分号构成的语句称为空语句。它在程序中没有具体作用,有时用来作为被转向点,或循环语句中的循环体。 例如: for(i=0;i10;i+) ; 其中,循环体中使用空语句,表示循环体本身什么也不做,其具体作用是为循环体实现延时功能。,5复合语句 复合语句是由一对大括号“”把若干语句括起来构成的语句段。当单一语句位置上的功能必须用多个语句才能实现时,就需要复合语句,它常应用于选择或循环语句中。 例如: t=a; a=b; b=t
4、; ,4.2 字符数据的输入输出 数据的输入输出是相对计算机主机而言的。从计算机向外部输出设备(如显示器、打印机等)输出数据称为“输出”;从外部输入设备(如键盘、磁盘、光盘、扫描仪等)向计算机输入数据称为“输入”。C语言本身不提供输入输出语句,输入输出操作是由C标准库函数实现的。 C标准输入输出函数是以标准的输入输出设备为对象。常见的输入输出函数有:putchar(字符输出)、getchar(字符输入)、puts(字符串输出)、gets(字符串输入)、printf(格式输出)、scanf(格式输入)。本节将介绍字符数据的输入输出。,在C语言中,使用库函数时,需要用预编译命“#include”把
5、有关的“头文件”包括到用户源文件中。例如,前面在使用数学函数fabs(),sqrt()时,要用到“math.h”文件;在使用标准输入输出库函数时,要用到“stdio.h”文件,其中“h”是head的缩写。一般“#include”命令都在程序的开头。,例如: #include #include 或者 #include“math.h” #include“stdio.h” 在C语言中由于格式输出函数printf及格式输入函数scanf使用频繁,因此系统允许在使用它们时可以不加#include命令。,4.2.1 getchar函数 字符输入函数getchar的作用是从终端接收输入的一个字符并返回,其返
6、回值即为输入的字符。其一般格式如下: getchar() 该函数不含有任何参数,只能接收一个字符,并把这个字符作为函数的返回值。getchar函数一般用在赋值表达式中,将输入的字符赋予某个变量,无论输入多少个字符,getchar函数只返回第一个字符。,例4.1 getchar函数实例。 程序 #include #define PRT(a) printf(“%cn“,a) main() char ch; printf(“Input a letter:“); ch=getchar(); if(ch=a,else if(ch=A 输入 Input a letter:asdfg 输出 A,分析 get
7、char()是标准输入输出函数库中的函数,在使用前应先在程序前加上预编译命令“#include”;程序中第2行是一个输出函数的宏定义(将在下一节介绍),在程序第6行中输入字符串asdfg,但由于getchar只能接收一个字符,所以在程序第9行中只输出了一个字符“A”。一般情况下,在C系统中,当需要输入一个字符时,如果没有出现终止符(即回车键),输入的字符是不会被getchar函数接收的。,4.2.2 putchar函数 字符串输出函数putchar的作用是从终端输出一个字符。其一般格式如下: putchar(ch) 其中,参数ch表示要输出的一个字符常量或整型常量,也可以是一个字符变量或整型变
8、量。,例4.2 putchar函数实例。 程序 #include main() int a=75; char b=f; putchar(a); putchar(n); putchar(b); putchar(n); ,输出 K b 分析 在程序第6行中,字符输出函数putchar的参数是一个整型变量,而其输出结果是一个以这个整型数据为ASCII码的字符;在程序第7行中,putchar的参数是回车控制字符“n”,其功能是使光标从当前位置移到下一行开头。,4.2.3 应用实例 例4.3 学生信息系统界面设计。 程序 #include main() int i; char ch; clrscr();
9、 /*清屏函数*/,for(i=0;i60;i+) printf(“*“); /*打印60个“*”*/ printf(“n“); printf(“ntWelcome to student information system!n“); printf(“n“); for(i=0;i60;i+) printf(“*“); printf(“nn“); putchar(1);,printf(“.Insert informationn“); putchar(2); printf(“.Update informationn“); putchar(3); printf(“.Delete informatio
10、nn“); putchar(4); printf(“.Query informationn“); putchar(5); printf(“.Exitn“); printf(“nChoose the number:“); ch=getchar(); ,输出 * Welcome to student information system! * 1.Insert information 2.Update information 3.Delete information 4.Query information 5.Exit Choose the number:,分析 这是一个典型的程序设计界面,在程序
11、中首先用库函数clrscr()进行清屏操作,然后输出各种功能模块的标题,最后通过输入字符函数getchar(),选择标题进入子程序模块。,4.3 格式输入与输出 格式输入函数scanf()和输出函数printf()是C语言标准输入输出库函数中应用最广泛的函数。本节将详细介绍格式输入输出函数。 4.3.1 printf函数 在前面介绍的例题中已经用到了printf函数,其功能是向终端输出若干个任意类型任意格式的数据,其一般格式如下: printf(格式控制,输出列表),其中,printf函数是一个带参数的库函数。控制格式是用双撇号括起来的转换控制字符串,它包含3方面的信息:一是格式说明,由字符“
12、%”和格式字符组成,作用是将待输出的数据转换成指定的格式,如%d,%c,%f等;二是普通字符,如语句“printf(”a=%d,b=%cn“,a,b);”中的“a=,b=”,其作用是提示信息,便于理解程序;三是转义字符,输出一些操作行为,如换行“n”、跳行“t”、换页“n”等。输出列表是需要输出的一些数据,可以是常量、变量、函数等各种类型的表达式,每个表达式之间用逗号隔开,在C语言中提供了printf函数的格式控制符,如表4.1所示。,表4.1 printf函数的格式控制符,值得注意的是格式控制符中由“%”引导的格式字符与输出列表中表达式的个数必须相对应。下面详细介绍C语言中几种常见的格式控制
13、符。 1d格式符 d格式符是用来输出十进制整数的,有以下3种用法: (1)%d是按照整型数据的实际长度输出。 (2)%md是输出m位整型数据,如果数据的位数小于m,则在左端补空格;如果数据的位数大于m,则按实际数据位数输出。 (3)%ld是输出长整型数据。,例4.4 d格式符实例。 程序 #include main() int num1,num2; num1=1234; num2=123456; printf(“num1=%dn“,num1); printf(“num1=%2dn“,num1); printf(“num1=%6dn“,num1); printf(“num2=%dn“,num2)
14、; printf(“num2=%ldn“,num2); ,输出 num1=1234 num1=1234 num1=1234 num2=-7616 num2=136438336,分析 程序中第1个printf函数是把num1按照其实际长度输出;程序中第2,3个printf函数是把num1按照%md的形式输出,其区别在于第2个printf函数中m小于num1的实际长度,而第3个printf函数中m大于num1的实际长度;程序中第4个printf函数是把num2按其实际大小输出,由于num2超出了整型数据的范围,因而结果为负数;程序中第5个printf函数是把num2按照长整型形式输出。,2c格式符
15、 c格式符是用来输出一个字符。一个整型数据如果它的值在0255范围内,也可以用字符形式输出,系统自动把该数据作为ASCII码转换成相应的字符,然后以字符的形式输出;反之一个字符也可以以整型数据的形式输出。,例4.5 c格式符实例。 程序 #include main() int num=99; char ch=c; printf(“%cn“,num); printf(“%dn“,ch); ,输出 c 99 分析 程序中第1个printf函数是把整型数据num按照字符形式输出;程序中第2个printf函数是把字符数据ch按照整型形式输出。,3s格式符 s格式符是用来输出一个字符串,有以下5种用法:
16、 (1)%s是按照字符串原样输出。 (2)%ms是输出m位字符串,如果字符串的位数小于m,则在左端补空格;如果字符串的位数大于m,则按实际字符串输出。,(3)%-ms与%ms类似,不同之处是如果字符串长度小于m,则字符串左对齐,同时右补空格。 (4)%m.ns形式,输出的字符串占m列,只取字符串中左端n个字符,这n个字符串输出在m列的右侧,左侧补空格。 (5)%-m.ns与%m.ns类似,不同的是取出的n个字符输出在m列的左侧,右侧补空格。,例4.6 s格式符实例。 程序 #include main() char str20=“I am a student“; printf(“%sn“,str
17、); printf(“%20sn“,str); printf(“%10sn“,str); printf(“%-20sn“,str); printf(“%-10sn“,str); printf(“%20.10sn“,str); printf(“%-20.10sn“,str); ,输出 I am a student I am a student I am a student I am a student I am a student I am a stu I am a stu,4f格式符 f格式符是用来输出实数(包括单精度、双精度),以小数形式输出,有以下5种用法: (1)%f是输出全部整数部分,
18、小数部分取6位,字端宽度由系统自动指定。 (2)%m.nf形式,指定输出的数据共占m列,小数点占一列,小数部分n列,如果数值长度小于m,则左端补空格。 (3)%-m.nf与%m.nf类似,不同之处是输出的数据向左对齐,右端补空格。,例4.7 f格式符实例。 程序 #include main() float f1=3.1415926; float f2=2.15; printf(“f1=%fn“,f1); printf(“f2=%fn“,f2); printf(“f1=%6.3fn“,f1); printf(“f1=%-6.3fn“,f1); printf(“f2=%6.3fn“,f2); pr
19、intf(“f2=%-6.3fn“,f2); ,输出 f1=3.141593 f2=2.150000 f1= 3.142 f1=3.142 f2= 2.150 f2=2.150,4.3.2 scanf函数 scanf函数用于从终端接收输入的若干数据,数据的类型格式可以在函数中进行设置,其一般格式如下: scanf(,) 其中,scanf包含两部分:第一部分是格式控制字符串,它是定义输入的内容及格式;第二部分是地址列表表示要输入的数据列表,可以有一个或多个表示要通过输入对哪几个变量赋值。值得注意的是地址列表中有多少变量地址,则格式控制字符串中就应有多少格式控制字符。,在给多个输入项输入数据时,输
20、入的各项信息之间可以用空格、Tab键或回车键作为分隔符。在C语言scanf()中常见格式字符的用法如下: (1)d格式符,用来输入十进制整数。,例4.8 d格式符实例。 程序 #include main() int a,b,c,d,e; scanf(“%a,%b:%c,d=%d“, ,输入 1,2:3,d=4 输出 1 2 3 4 注意:在scanf输入控制中,如果转换控制说明中有转换控制以外的字符,则输入时要在与此相对应的部分输入与此相同的字符。对于其他格式符也有类似的情况。,(2)c格式符,用来输入单个字符。 (3)s格式符,用来输入字符串,并将字符串送到1个字符数组中。输入时以非空白字符
21、开始,以第1个空白字符结束,字符串以结束标志“0”作为最后1个字符,系统在字符串的末尾自动加一个“0”作为结束标志。如“abcdef”共有6个字符,但在内存中占了7个字节,具体为: abcdef0,(4)f格式符,用来输入实数,可以用小数形式或指数形式输入。 另外,scanf()函数还有几种附加格式说明字符:一是格式字符前加h,用于输入短整型数据;二是格式字符前加l,表示输入长整型数据;格式字符前加数字,用来指定输入数据所占的宽度;在“%”控制符前加“*”符号,表示本输入项在读入后不赋给相应的变量。,4.3.3 应用实例 例4.9 整型数据的输入输出。 程序 #include main() i
22、nt a,b; long c; scanf(“%2d%3d%ld“, ,输入 1234567890123 输出 a=12,b=345,c=67890123 输入 123 45 输出 a=83,b=69,分析 程序中先输入“1234567890123”,然后系统根据格式字符串中定义前两个变量的宽度,把前两个字符“12”赋值给变量a,把紧接3个字符“345”赋值给变量b,其后剩下的字符“67890123”赋值给长整型变量c;然后再输入“123 45”,以空格为分割符,123以八进制数形式赋给变量a,以十进制数形式输出则为83(182+281+380),45以十六进制数形式赋给变量b,以十进制数形式
23、输出则为69(4161+5160)。,例4.10 字符型数据以及字符串的输入输出。 程序 #include main() char c1,c2,c3; scanf(“%c%c%c“, ,输入 abc 输出 c1= a,c2= b,c3= c 分析 程序中先输入“abc”,系统将这3个字符分别赋给c1,c2和c3,然后分别在第2个、第3个、第4个输出区域输出。,例4.11 实型数据的输入输出。 程序 main() float x,z; double y; scanf(“%f“, ,输入 0.12345678901234 输出 x=0.123457 输入 0.1234567890123 输出 y=
24、 0.123456789012,y=1.23457e-01 输入 0.123456789012 输出 z=0.123400,分析 输入“0.12345678901234”时,将其赋值给单精度变量x,以%f形式输出,保留6位小数;输入“0.1234567890123”时,将其赋给双精度变量y,以%15.12f的形式输出,总宽度是15,小数部分保留12位,前面补上一个空字符;输入“0.123456789012”时,将其赋给单精度z,以%6f形式输出,只取前6个字符“0.1234”,在输出时,由于精度保留转换的问题,结果为“0.123400”。,4.4 程序举例 例4.12 已知三角形的三条边长,求
25、三角形的面积。 算法 在数学中,已知三角形的三边a,b,c,可得三角形的面积如下: 其中,s=(a+b+c)/2。,程序 #include #include main() float a,b,c; double s,area; printf(“Please input three sides of trigon:n“); printf(“a=“); scanf(“%f“,printf(“c=“); scanf(“%f“, 输入 Please input three sides of trigon: a=3 b=4 c=5 输出 area=6.00,分析 程序第15行中sqrt()是求平方根的函
26、数。由于要调用数学函数库中的函数,必须在程序的开头加一条#include命令,把头文件“math.h”包含到程序中。,例4.13 已知圆半径和高,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。 算法 在数学中,已知圆半径r和高h,可得圆周长c=2*pi*r,圆面积s=pi*r*r,圆球表面积s1=4*pi*r*r, 圆球体积v1=4*r*r*r/3;圆柱体积v2=pi*r*r*h。,程序 #include main() float r,h,c,s,s1,v1,v2,pi=3.14; printf(“Please input the radius and high:n“); printf(“
27、r=“); scanf(“%f“,printf(“The girth c=%.2fn“,2*pi*r); printf(“The area s=%.2fn“,pi*r*r); printf(“The surface area s1=%.2fn“,4*pi*r*r); printf(“The bulk of pellet v1=%.2fn“,4*pi*r*r*r/3); printf(“The bulk of column v2=%.2fn“,pi*r*r*h); ,输入 Please input the radius and high: r=5 h=7 输出 The girth c=31.40
28、 The area s=78.50 The surface area s1=314.00 The bulk of pellet v1=523.33 The bulk of column v2=549.50,本章小结 一个完整的程序应该含有数据输入输出操作,将原始数据输入,经程序处理后,输出有用的信息。C语言的输入输出功能是由系统提供的输入输出标准函数实现的。本章首先介绍了简单的C语句(即控制语句、函数调用语句、表达式语句、空语句和复合语句);接着结合实例介绍了字符数据的输入输出函数(即getchar和putchar)和格式数据的输入输出函数(即printf和scanf)。,习 题 四 一、填空
29、题 1若有定义:int x=0;,则执行赋值语句:x=(x=3+5,x*5);后,变量x中的值是_。 2下列语句的输出结果是_。 char a=31; printf(“%d,%o,%x,%u“,a,a,a,a);,3若有定义:int a=0,b=0,c=0;用下面语句输入时 scanf(“%d”, 从键盘输入: 1045 则执行输入语句后,变量a的值是_,变量b的值是_,变量c的值是_。,4下面程序不借助任何变量把a,b中的值进行交换,补满程序中的空缺。 #include main() int a,b; scanf(“%d%d“,_); a+=_; b=_; a-=_; printf(“a=%
30、d b=%dn“,a,b); ,二、选择题 1以下选项中,不是C语句的是( )。 Aint i;i+;printf(“%dn“,i); B; Ca=5,c=10; D; 2以下选项中,不正确的赋值语句是( )。 A+t Bn1=(n2=(n3=0); Ck=i=j; Da=b+c=1;,3设x为int型变量,则执行以下程序段后,x的值为( )。 x=10; x+=x-=x-x; A10 B20 C30 D40 4若有定义:int a,b,c;,要给变量a,b,c输入数据,正确的输入语句是( )。 Ascanf(“%d%d%d“,三、上机操作题 1编写程序,用分钟来表示8时10分(以0点0分作为计算的开始,过24时即为0时),8时10分通过键盘输入,然后进行输出。 2编写程序,输入两个整数给变量a和b,输入的大数放在a中,输入的小数放在b中,求出它们的商数和余数并进行输出。,