第 4章 顺序结构程序设计第 4章 顺序结构程序设计
4.1 C语言语句
4.2 数据输入
4.3 数据输出
4.4 算法与程序设计
4.5 程序设计举例第 4章 顺序结构程序设计
4.1 C语言语句
4.1.1
① 条件语句,if- else
② 开关语句,switch
③ 当循环语句,while
④ 直到循环语句,do- while
⑤ 计数循环语句,for
⑥ 中止本次循环语句,continue
⑦ 中止整个循环语句,break
⑧ 函数返回语句,return
⑨ 无条件转移语句,goto语句第 4章 顺序结构程序设计
4.1.2 表达式语句在 C语言中,任何表达式都可以以相应表达式语句的形式存在于程序中 。 例如,
① i++;
② a=b=c=1;
③ x=y=1,x*x+y*y;
④ sin( 0.75) ;
第 4章 顺序结构程序设计相应的赋值语句有基本赋值语句与复合赋值语句 。 例如,
① S=1+2+3+4+5;
② x+=1;
③ y*=a;
④ x=y=z=a=b=c=1;
函数调用语句由函数调用表达式加分号构成 。 例如,
① exp( x) ; /*求 eX*/
② fabs( x) ; /*求 |x|*/
③ sqrt( x) ; /*求 */ x
第 4章 顺序结构程序设计
4.1.3 特殊语句
1,注释语句格式为,
/*注释文本 */
注释语句虽然不对程序的运行产生任何影响,但必要的注释是程序的重要组成部分 。
注释分功能性注释和说明性注释 。 功能性注释用以注释程序,函数及语句块的功能,说明性注释用以注释变量的作用 。
第 4章 顺序结构程序设计如何给程序加必要的注释,以增加程序的可读性,
请遵循以下原则,
(1) 一个程序至少有一条注释语句,关于整个程序功能的说明 。
(2) 对程序中主要的变量加必要的注释,说明变量的作用 。
(3) 对程序中重要的语句块加必要的注释,说明语句块的功能。
第 4章 顺序结构程序设计例如,
mian( )
/*求三角形面积 */
{float a,b,c; /*三角形三边 */
float hl; /*半周长 */
float h,s; /*周长,面积 */
/*输入 */
……
/*求周长 */
……
/*求面积 */
……
/*输出 */
……

第 4章 顺序结构程序设计
2,复合语句如 if语句中的选择体,while语句中的循环体,当选择体,循环体需多条语句描述时,就必须采用复合语句 。
复合语句只需用大括号,{ }”将一系列语句括起即可 。
复合语句不是一条具体语句,是种逻辑上的考虑,凡是单一语句可以存在的位置,均可以使用复合语句 。 复合语句用在语法上是单一语句,而相应操作需多条语句描述的情况 。
函数体从一般意义上讲就是一条复合语句 。
复合语句又称为分程序,它可以有属于自己的数据说明部分。
第 4章 顺序结构程序设计
3.
空语句是一种概念,C语言的空语句仅由分号构成,在编译时不产生任何指令,在执行时不产生任何操作 。 空语句常用于,
(1) 构成标号语句,标识程序中相关位置 。
(2) 循环语句中空循环体 。
(3) 模块化程序中未实现的模块及暂不联入的模块。
第 4章 顺序结构程序设计
4.2 数据输入
4.2.1 一般格式
scanf( 格式字串,输入参数表 )
(1) 格式字串用以描述输入数据的格式,由格式说明符组成,格式说明符由,%”和格式字符组成 。 不同格式说明对应不同类型的数据输入 。
格式字串可以包含普通字符,普通字符在数据输入时必须原样输入。
第 4章 顺序结构程序设计
(2) 输入参数只能用地址表,表示将输入的数据送相应地址代表的存储单元中 。 这点要特别注意,这是与其它高级语言不同的 。 地址通过取地址运算 &获取 。
(3) 输入数据默认用空格,回车或 TAB键分隔 。
(4) 使用 scanf( )函数让变量在程序执行过程中得到从键盘输入的不同值 。
(5) 输入函数的调用一般采用语句调用形式,间接形成 C语言的输入语句。
第 4章 顺序结构程序设计例如,
int i,j,k;
(1) scanf( ″%d%d%d″,&i,&j,&k) ;
格式字串从键盘输入 i,j,k的值 。
如输入,1,2,3
i 将得到值 1,j将得到值 2,k将得到值 3。
如输入,10 20 30
i 将得到值 10,j将得到值 20,k将得到值 30。
(2) scanf( ″i=%d,j=%d″,&i,&j) ;
如 i的值为 1,j的值为 2,必须作如下输入,
i=1,j=2
第 4章 顺序结构程序设计
4.2.2 格式字符对应于不同类型的数据输入,C语言用不同的格式字
d,用于输入十进制整数 。
o,用于输入八进制整数 。
x,用于输入十六进制整数 。
c,用于输入字符数据 。
s,用于输入字符串数据 。
f,用于输入实数,可以用小数形式或指数形式输入 。
e,与 f 作用相同,e 与 f 可以相互替换。
第 4章 顺序结构程序设计例如,int i; char c; float f;
(1) scanf( ″%d%f%c″,&i,&f,,&c);
如输入,2 3.4c
i,f,c分别得到值 2,3.4,′c′。
第 4章 顺序结构程序设计
(2 ) scanf( ″%x%f″,&i,&f) ;
如输入,1A 4.93e1
i 得到值 1A( 十六进制数 ),f 得到值 49.3。
C语言还提供附加格式字符用于输入数据格式的进
l,用于输入长整型数据 ( %ld,%lo,%lx),以及双精度型数据 ( %lf,%le) 。
h,用于输入短整型数据 ( %hd,%ho,%hx) 。
n,域宽,为一正整数,用于指明截取输入数据的位数 。 只能用于整型数据输入 。
*,表示跳过当前输入项。
第 4章 顺序结构程序设计例如,
(1) scanf( ″%2d%3d″,&i,&j) ;
如输入,12345
i 得到值 12,j 得到值 345。
(2) scanf( ″%2d%*3d%2d″,&a,&b) ;
如输入,1234567
a得到值 12,b得到值 67。
第 4章 顺序结构程序设计
4.2.3 说明
(1) 输入函数中格式控制字串中不允许使用转义字符 。
(2) 利用格式字串中普通字符在输入时要原样输入,常引入特定的普通字符如逗号等,作为输入数据的分隔符,如,
scanf( ″%f,%f,%d″,&x,&y,&z) ;
输入数据必须用逗号分隔,如,3.0,4.0,5。
第 4章 顺序结构程序设计
(3) 如果数据本身可以将数据分隔时,输入数据不需用分隔符,如,
scanf( ″%d%c%d″,&v1,&v2,&v3) ;
v1的值 30,v2的值 ′a′,v3的值 18。 可这样输入,
30a18,字符数据 a能起到分隔数据 30,18的作用 。
( 4) 无符号整型数据输入用 % d,% o,% x描述。
第 4章 顺序结构程序设计
(8) 输入函数的返回值为输入数据的个数,需要时可以加以利用 。
(9) 在介绍完输入函数后,读者这时还应注意到变量得到值有三种方法,
定义时赋给初值,在编译时得到;在执行时利用赋值语句得到; 在执行时通过输入函数得到 。 利用输入函数得到值更具一般性,通用性 。 另外,数据也常来自磁盘文件 。
(10) 在分析程序的输入数据时,要同时考虑输入数据的输入格式。
第 4章 顺序结构程序设计
4.3 数据输出
4.3.1 一般格式
printf( 格式字串,输出参数表 )
(1) 格式字串用以描述输出数据的格式,由格式说明符和普通字符组成 。 与 scanf( )函数中格式字串一样,格式说明符由,%”和格式字符组成,不同的格式说明符对应不同类型数据的输出,普通字符原样输出 。
第 4章 顺序结构程序设计
(2) 输出参数可以是表达式 。 如果是常量,直接输出 ;
如是变量,输出其值 ; 如是表达式,先计算表达式的值,再输出 。
(3) 输出函数的调用一般也采用语句调用形式,间接形成 C语言的输出语句 。 例如,
int i= j=2; char ch=′a′;
① printf( ″i=%2d,j=%2d″,i,j) ;
输出结果,i= 2,j= 2
② printf( ″%2d*%2d=%2d″,i,j,i*j) ;
输出结果,2* 2= 4
第 4章 顺序结构程序设计
4.3.2
对应不同类型数据的输出,类似于输入函数,C语言用不同的格式字符描述 。
d,以带符号的十进制整数形式输出整数 ( 正数不输出符号 ) 。
o,以无符号八进制整数形式输出整数 ( 不输出前导符 0) 。
x,以无符号十六进制整数形式输出整数 ( 不输出前导符 0x) 。
u,以无符号十进制整数形式输出整数 。
第 4章 顺序结构程序设计
c,以字符形式输出,输出一个字符 。
s,以字符串形式输出,输出字符串的字符至结尾符 ′\
0 ′为止 。
f,以小数形式输出实数,隐含输出 1位整数,6位小数 。
e,以标准指数形式输出实数,数字部分隐含 1位整数,
6位小数 。
g,根据给定的值和精度,自动选择 f与 e中较紧凑的一种格式,不输出无意义的 0。
第 4章 顺序结构程序设计一般数据默认的输出宽度等于数据的实际位数 。 例如,int a=3,b=12; float x=1.23,y=4.785;
① printf( ″a=%d,b=%d″,a,b) ;
输出结果,a=3,b=12
② printf( ″%f*%f=%f″,x,y,x*y) ;
输出结果,1.230000*4.785000=5.885550
对输出格式,C语言同样提供附加格式字符,用以对输出格式作进一步描述。
第 4章 顺序结构程序设计
l,用于长整型数据输出 ( %ld,%lo,%lx,%lu),以及双精度型数据输出 ( %lf,%le,%lg) 。
m,域宽,十进制整数,用以描述输出数据所占宽度 。
如果 m大于数据实际位数,输出时前面补足空格 ; 如果 m小于数据的实际位数,按实际位数输出 。
n,附加域宽,十进制整数,用于指定实型数据小数部分的输出位数 。 如果 n大于小数部分的实际位数,输出时小数部分用 0补足; 如果 n小于小数部分的实际位数,输出时将小数部分多余的位四舍五入 。 如果用于字串数据,表示从字串中截取的字符数 。
第 4章 顺序结构程序设计
-,输出数据左对齐,缺省时为右对齐 。
+,输出正数时,也加上,+”号 。
#,作为 o,x的前缀时,输出结果前面加上前导符 0,0x。
例如,
(1) printf( ″a=%5d,b=%5d″,a,b) ;
输出结果,a= 3,b= 12
(2) printf( ″%5.2f*%5.2f=%5.2f″,x,y,x*y) ;
输出结果,1.23* 4.79= 5.89
第 4章 顺序结构程序设计
4.3.3 说明
(1) 可以无输出参数,而只有格式字串 。
(2) 输出对象中使用转义字符,完成一些特殊的输出操作 。
① printf( ″\n″) ; /* 输出换行 */
② printf( ″\t″) ; /* 跳到下一个输出区 */
(3) 字符及字串常量,除了作为输出参数输出外,也可作为格式字串中基本字符输出。
第 4章 顺序结构程序设计
(4) 可以将整数作字符数据输出,输出的是以此作为 ASCII码的字符 。 字符数据也可以作整数输出,输出的是字符的 ASCII码 。 如,
printf( ″%c,%d″,97,′b′) ;
输出结果,a,98
第 4章 顺序结构程序设计
(5) 负数以补码的形式存储,将负数以无符号数输出时,
类似于赋值的规则处理 。
反之,将一个无符号数用有符号数的格式输出,也是类似于赋值的规则处理 。 例如,
① int a=- 1;
printf( ″a=%d,ox=%o,xa=%x,ua=%u″,a,a,a,a) ;
输出结果,a=- 1,ox=177777,xa=ffff,ua=65535
② int b=65535;
printf( ″b=%d,ob=%o,xb=%x,ub=%u″,b,b,b,b) ;
输出结果,b=- 1,ob=177777,xb=ffff,ub=65535
第 4章 顺序结构程序设计
(6) 利用不同的输出格式可间接进行数制转换 。 如,
int i=16;
printf( ″%i1=%d( 十进制 ),i2=%o( 八进制 ),
i3=%x( 十六进制 ) ″,i,i,i) ;
输出结果,i1=16(十进制),i2=20(八进制),
i3=10(十六进制)
第 4章 顺序结构程序设计
(7) 字符数据的输出可直接以输出数据作参数,调用输出函数 putchar( )完成 。 如,
putchar( ′a′) ;
输出字符 a
(8) 在分析程序的输出数据时,要同时考虑输出数据的输出格式。
第 4章 顺序结构程序设计
4.3.4 交互信息交互提示信息使用输出函数产生 。
main( )
{ int a,b;
int s;
printf( ″请输入两个整数,″) ; /*产生交互信息 */
scanf( ″%d,%d″,&a,&b) ;
printf( ″正在求和 ……″) ; /*产生交互信息 */
s=a+b;
printf( ″和 =%6d″,s) ; [ZK)]
}
第 4章 顺序结构程序设计
4.4 算法与程序设计
4.4.1
程序设计语言只是一个工具,只懂得语言的规则并不能保证编制出高质量的程序,程序设计的关键是设计算法 。 算法是求解问题的有限步骤,具有有穷性,确定性,可行性,输入与输出五大特征 。
求解问题的算法从一般意义上讲可分为输入,处理,
输出三个步骤 。
第 4章 顺序结构程序设计
4.4.2 程序
1,程序的三种基本结构程序的三种基本结构是指顺序结构,选择结构及循环结构 。
顺序结构由一系列顺序执行的操作 ( 语句 ) 组成,是一种线性结构 。
选择结构又称为分支结构,是根据一定的条件选择下一步要执行的操作 。
循环结构是根据一定的条件反复执行一定的操作 。 循环是计算机最擅长的工作 。
结构之间可以是平行关系,也可以相互嵌套,通过结构之间的复合形成复杂的结构。
第 4章 顺序结构程序设计
2,程序的质量标准对应于算法的评价,程序的质量标准同样以正确作为前提 。 在正确的前提下,从,效率第一,到,清晰第一,。,清晰,是指程序结构清晰,可读性好 。 早期的程序由于受计算机执行速度慢及内存小的限制,在正确的前提下,程序的效率是评价程序的首要标准 。
第 4章 顺序结构程序设计
3,结构化程序结构化程序是只由三种基本结构构成的程序 。 结构化程序的特点是单入口,单出口 。
4,NS流程图
NS流程图是一种结构化流程图,如图 4 - 1 所示。
图 4 - 1
第 4章 顺序结构程序设计
4.4.3 结构化程序设计方法例 4 – 1 求三角形面积和周长的算法 。
(1) 输入三边 ;
(2) 求三角形面积和周长 ;


(3) 输出面积和周长 。
求解问题的算法步骤为,(1),(2) ①,② 和 (3)四步 。
流程图如图 4 - 2(a)所示 。
更进一步应考虑三边能否构成三角形,算法流程图如图 4 - 2(b)所示。
第 4章 顺序结构程序设计图 4 - 2
第 4章 顺序结构程序设计
4.4.4 程序设计过程关于程序设计的过程可分三步走,分析问题
( Question),设计算法 ( Algorithm) 及实现程序
( Program),简称 QAP方法 。
第 4章 顺序结构程序设计
4.5 程序设计举例例 4 – 2 求五个数的和,积,平均值。
数据分析,
输入量,输入的五个数 x1,x2,x3,x4,x5,float
输出量,和 s,积 m,平均值 a,float
注意,
算法分析,
① 输入 x1,x2,x3,x4,x5
② 求和 s
③ 求积 m
④ 求平均值 a
⑤ 输出和 s,积 m,平均值 a。
第 4章 顺序结构程序设计
/*程序 4 - 2,求五个数的和,积,平均值 */
# include ″stdio.h″
main( )
{float x1,x2,x3,x4,x5;
float s,m,a;
clrscr( ); /*清屏函数 */
/*输入数据,输入数据用逗号分隔 */
printf( ″请输入五个数,″) ;
scanf( ″%f,%f,%f,%f,%f″,&x1,&x2,&x3,&x4,&x5) ;
/*求和 s,积 m,平均值 a*/
s=x1+x2+x3+x4+x5;
m=x1*x2*x3*x4*x5;
a=s/5;
/*输出和 s,积 m,平均值 a*/
printf( ″和 =%6.3f,积 =%6.3f,平均值 =%6.3f \n″,s,m,a) ;
}
输入数据,1.1,1.2,2.1,2.2,3.1
运行结果,和 = 9.700,积 =18.905,平均值 = 1.940
第 4章 顺序结构程序设计例 4 –3
数据分析,
输入量,半径 r,float
输出量,面积 s,周长 l,float
算法分析,
① 输入半径 r
② 计算面积 s
③ 计算周长 l
④ 输出面积 s和周长 l。
第 4章 顺序结构程序设计
/*程序 4 - 3,求圆的面积和周长 */
# define PI 3.14159
# include ″stdio.h″
main( )
{float r;
float s,l;
clrscr( );
/*输入数据 */
printf( ″请输入圆的半径,″) ;
scanf( ″%f″,&r) ;
/*求面积 s,周长 l*/
s=PI*r*r;
l=2*PI*r;
/*输出面积 s,周长 l*/
printf( ″面积 =%6.3f,周长 =%6.3f \n″,s,l) ;
}
输入数据,2
运行结果,面积 =12.566,周长 =12.566
第 4章 顺序结构程序设计例 4 – 4
数据分析,
输入量,第一个点 坐标 x1,y1,第二个点 坐标 x2,y2,float
输出量,两点之间的距离 d,float
① 输入第一个点 坐标 x1,y1
② 输入第二个点 坐标 x2,y2
③ 求两点之间的距离 d
④ 输出两点之间的距离 d。
第 4章 顺序结构程序设计
/*程序 4 - 4,求平面上两点之间的距离 */
# include ″stdio.h″
# include ″math.h″
main( )
{float x1,y1,x2,y2;
float d;
clrscr( );
printf( ″请输入第一个点 坐标 x1,y1,″) ;
scanf( ″%f,%f ″,&x1,&y1) ;
printf( ″请输入第二个点 坐标 x2,y2,″) ;
scanf( ″%f,%f ″,&x2,&y2) ;
d=sqrt(( x1-x2) *( x1-x2) +( y1-y2) *( y1-y2)) ;
printf( ″两点之间的距离 =%8.4f \n″,d) ;
}
输入数据,0,0
1,1
运行结果,两点之间的距离 = 1.4142
第 4章 顺序结构程序设计例 4 – 5 求三角形的面积和周长 。
数据分析,
输入量,三角形三边 a,b,c,float
中间量,半周长 hl,float
输出量,面积 s,周长 l,float
算法分析,
① 输入三边 a,b,c。
② 计算周长 l。
③ 计算半周长 hl。
④ 计算面积 s。
⑤ 输出面积 s和周长 l。
第 4章 顺序结构程序设计
/*程序 4 - 5,求三角形的面积和周长 */
# include ″stdio.h″
# include ″math.h″
main( )
{float a,b,c;
float hl;
float s,l;
clrscr( );
printf( ″请输入三角形的三边,″) ;
scanf( ″%f,%f,%f”,&a,&b,&c) ;
l=a+b+c;
hl=0.5*( a+b+c) ;
s=sqrt( hl*( hl- a) *( hl- b) *( hl- c)) ;
printf( ″面积 =%5.2f,周长 =%5.2f \n″,s,l) ;
}
输入数据,3,4,5
运行结果,面积 = 6.00,周长 =12.00
第 4章 顺序结构程序设计例 4 – 6
数据分析,
输入量,方程系数 a,b,c,float
中间量,判别式 d,float
输出量,两个实根 x1,x2,float
算法分析,
① 输入方程系数 a,b,c
② 计算判别式 d
③ 计算两个实根 x1,x2
④ 输出两个实根 x1,x2。
第 4章 顺序结构程序设计
/*程序 4 - 6,求一元二次方程的两个实根 */
# include ″stdio.h″
# include ″math.h″
main( )
{float a,b,c;
float d;
float x1,x2;
clrscr( );
printf( ″请输入方程系数 a,b,c,″) ;
scanf( ″%f,%f,%f″,&a,&b,&c) ;
d=b*b-4*a*c;
x1=( -b+sqrt( d)) /( 2*a) ;
x2=( -b-sqrt( d)) /( 2*a) ;
printf( -″第一个根 =%5.2f,第二个根 =%5.2f \n″,x1,x2) ;
}
输入数据,1,3,-4
运行结果,第一个根 =-4.00,第二个根 = 1.00
第 4章 顺序结构程序设计例 4 – 7 编写显示如下界面的程序,
Add—追加数据 Modify—
Delete—删除数据 Print—
Quit— 退出程序第 4章 顺序结构程序设计程序如下,
/*程序 4 - 7,界面程序之显示部分 */
# include ″stdio.h″
main( )
{clrscr( );
printf( ″%s\n″,″ 通讯录管理程序,) ;
printf( ″%s\n″,″Add—追加数据 Modify—修改数据,) ;
printf( ″%s\n″,″Delete—删除数据 Print—打印数据,) ;
printf( ″%s\n″,″Quit—退出程序,);
}