首页           下一页          <<<返回         1 2 3 4 5        

             第 4 章 顺序程序设计            
  在上一章介绍了程序中用到的一些基本要素(常量,变量,运算符,表达式等),它们是构成程序的基本成份。
4、1 C语言概论
  C语言的语句用来向计算机系统发出操作指令,一个语句经编译后产生若干机器指令,一个实际的程序应当包含语句,应当批出C语句都是用来完成一定操任务的,声明部分的内容不应称为语句。
  C语言结构可以用图表示:
            
     源程序1 源程序2 、、、、、、、源程序n
     预处理命令1 全程变量声明 函数1 函数n
      函数首部 函数体
         局部变量声明 执行语句

  即一个C程序可以由若干个源程序文件(分别进行编译的文件模块)组成,一个源文件可以由若干个函数和预处理命令以及全局变量声明部分组成,一函数由数据定义部分和执行部分组成。
程序应该包括数据描述(由声明部分来实现)和数据操作(由语句来实现)、数据描述主要定义数据结构(用数据类型来表示)和数据初值,数据操作任务是对已提供的数据进行加工。
C 语句可以分为以下5 类:
(1) 控制语句、完成一定的控制功能,C只有 9种控制语句,这们是:
1> if() ~ else~ (条件语句)
2> for() ~ (环语句)
3> while() ~ ( 环语句)
4> do ~while~ (环语句)
5> continue (结束本次环语句)
6> break (中止执行或环语句)
7> switch (多分支选择语句)
8> goto (转向语句)
9> return (从函数返回语句)
注:( )表示条件,~表示内嵌的语句。
(2) 函数调用语句,由一次函数调用加一个分号构成一个语句:
例如:printf(“this is a c program”);
(3)表达式语句,由一个表达式构成的语句,最典型的是由一赋表达式构成的语句;表达式和分号区别在于有无分号。
例如:

 

 

任何表达式都可以加上分号成为语句:
例:x+y;也是一个语句,只是执行x+y的动作,但并没有把值赋给一个变量,故它无实际的意义。
(3) 空语句:
(4) 只有一个分号的语句,它什么也不做,有时用来被向点或环语句中的环体(环体是空语句,表示环体什么也不做);
(5) 复合语句(分程序)即是由{}把地些语句括起来:
(6) 例:

 
 (7) x=x;
 (8) x=y;
 (9) y=z;
 (10)

 
注:复合语句最后一个语句中最后的分号不能忽略写。


4. 赋值语句

赋值语句是赋值表达式加是一个分号构成的。C语言的赋值语句具有其它高级语言的赋值的一切特点和功能但应当注意它们的不同:
(1) C语言中的赋值语句“=”是一个运算符,在其它大多数的语言中赋值号不是运算符。
(2) 关于赋值表达式与赋值语句的概念,其它多数高级语言没有赋值表达式这一概念。
例:if ((a=b)>0) t=a; b=5;
先将b的值赋给a ,看a 是否大于0 如果a>0 ,则将a的值赋给t;
但if (a=b) >0 t=a; 是错误的。

4.3 数据输入输出的概念有在C语言中的实现
4、3、1什么是输入或输出:
所谓输入输出是以计算机主机而言的,输入:从输入设备(键盘、磁盘、扫描仪、)向计算机输入。输出:从计算机向外部设备(显示器,屏幕)输出数据。
4、3、2 C中输入输出功能的实现
C语言本身不提供输入输出语句,输入输出操作由函数来实现的。
不把输入输出作为C语言提供的语句的目的是使C语言编译系统简单,因为将语句翻译成二进制指令是在编译阶段完成的,没有输入输出语句就可以在编译阶段处理与硬件无关问题,可以使用编译系统简化,而且通用性强,可移植性好,对各种型号的计算机都适用,便于在各种计算机上实现。
由于C语言编译系统与C函数库是分别进行设计的,因此我们的计算机系统所提供的函数的数量,名称和功能是不完全相同的。C语言函数库中有一批标准输入、输出函数,它是以标准的输入输出设备(一般为终端设备)为输入输出对象的,其中有:printf(格式输出) getchar(输入字符) putchar(输出字符) scanf(格式输入) puts(输出字符)gets(输入字符) ;


4,3,2预处理编译命令 # include
在使用C语言库函数时,用预编译命令 # include 将有关的头文件包括到用户的源文件中,# include 命令全都是放在程序的开头,因此称为“头文件”。
在调用标准输入输出库函数时,文件开头应有以下预编译命令:
# include <stdio.h>
或# include”sidio.h”
stdio.h 是 standand input & output 的缩写,它包含了与标准 I/O库有关的变量定义和宏定义;考虑到输入输出函数的使用频繁,系统允许使用两个函数时可以不加# include 命令。
4. 4符数据的输入输出
putchar 函数(字符输出函数)
格式:putchar(变量名);
作用:向终端输出一个字符,变量名可以是字符型变量或整型变量).
例: # include<stdio,h>
main()
{
char a,b,c;
a=’B’;b=’O’; c=’Y’;
putchar(a); putchar(b); putchar(c);
}
运行结果:BOY。
例:# include <stdio.h>
main()
{
int x,y;
x=100;y=111;
putchar(x); putchar(y);
}
运行结果:DO。
可以输出任意字符:
例:putchar(a); putchar(‘\’);putchar(b); putchar(‘\’); putcar(c);putchar(‘\’);
则输出结果为:
B
O
Y
例:putchar(‘\’101”) (输出字符‘A’)
putchar(‘\’’”) (输出单号字符)
putchar(‘\’015”) (输出回车,不换行,使输出的当前位置移本行的开头);

4、4、2 getchar 函数(字符输入函数)
格式:getchar()
作用:从终端(或系统隐含指定的输入设备)输入一个字符,
getchar函数没有参数,函数值就是从终端输入的字符。
例:# include <stdio,h>
main()
{
char c;
c=getchar();
putchar(c);
}
运行:从键盘输入‘a’并按回车,就可以看支输出一个字符‘a’.
注:getchar 函数只能接收一个字符,得到的字符可以赋给一字符串变量或整型变量,也可以不赋给任何变量,作为表达式的一部分;
例:putchar(getchar());

例:#include <stdio.h>
main()
{ int x ;
x=getchar()+2;
putchar(x);
运行结果:输入’a’,’a’的ascii码值是97。 97+2=99
输出看到“c”
4、5格式输入、输出
4、5、1 ,printf 函数(格式输出函数)
函数格式 printf (格式控制,输出列表)
功能:向终端或系统隐含指定的输设备输出若干个任意类型的数据。
说明:1)“格式控制”是用双瞥号括起来的 字符串,它包括两种信息:(1)格式说明,由%和格式字符组成,%它门的作用是将输出的数据转化为指定的格式输出,格式说明总是由“%”字符开始的。
   2)“输出列表”是需要输出的一些数据,可以是变量、表达式说明

例:print(“a=%d,b=%c,a,b)}
原单输出的 普通字符 输出列表
输出结果 :a=2 ,b =’c’
由于是函数,因此,“格式控制”字符串和输出列表“实际上都是函数的参数”, 函数的一般形式可以表示为:
printf(参数1,参数2,参数3、、、、、、参数n)
printf的函数的功能是将参数2----参数的n按照参数1给定的格式输出。
2、格式字符
对不同类型的数据用不 同的格式字符,常用的有以下几种字符:
(1)、d格式符,用来输出十进制整数,有以下几种:
1. %d,按整型数据的实际长度输出。
2. %md,m为指定的输出字段的宽度,如果数据的为数小于m,则左端补以空格,若大于m,则按实际为数输出。
例: x=45 y=12345
printf(“%d,%d”,x,y); 45,12345
printf(“%3d,%3d”,x,y); 45,12345.
例: x=1234567
printf(“%ld”,x); 1234567
printf(“%9ld”,x);234567  /* 表示空格 */
(2) 格式符,以八进制形式输出整数。
由于是峰内 存单元中的各位的值按八进制形式输出,因此输出的数值不带符号,即将符号位也一起作为八进制数的一部分输出。
几种用法:
 1、%0 按八进制输出整数。
 2、%l0 对长整形数按八进制输出。
 3、%ml0 按指定的宽度输出长整形的八进制数(m同上)。
 4、%m0 按指定的宽度输出八进制数。
例:a=123
printf(“%”,0); 173
printf(“%40”,a);173
printf(“%d,%0”,a,a) 123,173
大小写豆科可以
(3)格式符,以十六进制数形式输出整数,同样不会出现负的十六进制数,有几种用法:
 1、%x 输出十六进制整数
 2、%mx 指按指定宽度输出十六进制数。
 3、% lx 输出十六进制的长整数。
 4、%mlx 按指定的宽度输出十六进制整数。
例: a=123
printf(“%x”,a); 7B
printf(“%5x”,a);7B
(4)u 格式符。输出unsignted型数据,即无符号数,以十六进制形式输出。一个有符号整数型可以用格式输出;反之unsigned一个型数据也可以用的格式输出。按相反的值规则处理,unisgned型数据也可以用%或%x格式输出。
例:
无符号数据的输出(74例4、3)
min( )
{unsigned int a=65535;
int b=-2;
printf(“a=%d,%0,%x,%U,\n”,a,a,a,a,);
printf(“b=%d,%0,%x,%u\n”,b,b,b,b);
}
运行结果
a=-1,177777,ffff,65535
b=-2,177776,fffe,65534
(5)c格式符 用来输出一个字符
一个整数,只要它的值在0—255之间,也可以用字符形式输出,在输出前,系统将会将整数作为ascii码转化成为响应的字符,反之,一个字符数据也可以用整数形式输出。
例:
字符数据的输出(p75例4、4)、
main ()
{ char c=’a’
int I=97;
printf(“%c,%d\n’,c,c);
printf(“%c,%d\n”,j,j);
}
运行结果为:
a,97
a,97
有两种用法,
 1、%c 按字符形式输出 。
 2、%mc 按指定宽度输出字符。
(6)格式符,用来输出一个字符串。有几种用法。
 1、%s 输出字符串。
 2、%ms 按指定宽度输出字符串,有对齐, (左补空格)
 3、%-ms 按指定宽度输出字符串,左对齐。 (右补空格)
 4、%m.ns 输出占到,但只是去字串中左端个字符 ,这几个字符输出在列的有侧,右补空格,(前驱字符,然后输出)
 5、%-m.ns 其中m.n 含义相同,n个字符输出在列范围的左侧,右补空格,如果n>m, 则m自动取值,即保证n个字符正确的输出。
例:字符串输出 (p75 4\5)
main()
{ printf (“%3s5,%).2s,%.4s,%,-5,3s\n”,
“china”,”china”,”china”);
}
运行结果为:
china,ch,chin,chi
(7)f 格式符,用来输出实数(包括单、双精度),以小数形式输出.
1.%f不指定字段宽度,由系统自动指定,使整数部分全部,并输出十六位小数。
应该注意:并非全部数字都是有效数字,单精度实数有效数字位7位,双精度数为16位,会出小数6位,故打印出实数超过有效数位的数不一定正确。
例:输出实数时的有效为数 (p76例4、6)
min()
{fioat x,y;
x=111111.111.;y=222222.222;
printf()”%f”,x+y);;
}
运行结果为:
333333.328125
有效位数
例;输出双精度数时的有效位数。
Main()
{ double x,y;
x=1111111111111.1111111111;
y=2222222222222,222222222;
print(“%f”x+y);
}
输出结果为:3333333333333.333010
16位有效数位
2、%m.nf 指定输出的数据共列,其中有位小数,如果数值长度小于,则 左端补空格。
3、 %-m.nf与上基本相同,只是输出的数值向左端靠,右端补空格。
例:输出实数时指定小数位数。(76例4、8)
Main()
{
floatf=123,456;
printf(“%f%f%10,2f%2f%-10,2f\n”f,ff,f,f,);
运行结果为:
123,455994123,455994123,45612,46123,46
(8)e格式符,从指数形式输出实数
1、%e 不指定输出数据的宽度和数字部分的小数位数,有的编译系统自动指定给触位小数,指数部分占5位,其中e占一位,支书符号占3位,数值按规定范围支书形式输出(即小数是输出值必须有而且只有1位相容数字)。
例:printf(“%e,”1234456);
输出 1234560e+002.
2.%m.ne m.n和-字符含义与前相同,此处,n指从输出的。
3.%-m.ne数据的小数部分对称为数的小数位数
例:f=123.456
print(“%e%10e%10.2e%2e
%-10.2e”,f.f.f.f..f);
输出如下:
1,234560e+0021.234560e+1.23e+002……..
1.23e+0021.23e+002
(9)g格式符,用来输出实数,它根据数值的大小,自动选f格式或e格式(自动选择输出的占宽度比较小的一种),而且不输出无意义的零。
例:printf(“%f%%g”.ff.f);
若f=123.468
输出结果为:
123,4680001234680e+002123.468
由上可总结为:
printf(格式控制参数,输出项1,输出项2、、、、、、);
由两部分组成:格式说明,普通字符。
格式说明项将引起一个输出参数向的转化与显示。
可表示为:
% - m.n l/h 格式字符
说明其实符号,指定输出是否左对器齐 指定输出域宽 输出长度度修正 指定输出类型
格式字符说明见78表
1、 一般形式
sconf(格式控制地址表列)
格式控制的含义同 “地址表列”是由若干个地址组成的表列,可以是变量的地址或字符串的首地址。
说明:地址表列; 用求地址运算符—,得到一个符号地址。
格式控制参数:包括两部分:格式说明项和输入分割副;了格式说明项由以下基本组成:
% * m l/n 格式字符
格式说明起始符 复制抑制符 与宽说明符 长度休整说明符 输入数据说明类型和格式
2、 格式副说明见80页表
3、 使用 sconf 时应注意的问题
(1) sconf函数中的“格式控制”字符串中除了格式说明以外,还有起它字符,则在输入时在对应的位置应输入与这些字符相同的字符。
(2) 例:sconf(‘a=%d,b=%d,c=%d’,&a,&b,&c);
输入时应为:a=12,b=24,c=36.
(3) 在用%格式输入时,空格字符和转移字符都作为有效字符输入:
例:sconf%c%c%c”&c1,&c2<&c3);
如输入ac,bc,c, 则c1=a,c2=c1,c3=b.
(4) 输入数据时,遇到以下情况时,该数据以1来;
  1、 遇到空格或按回车键或跳格键
  2、 按指定的宽度结束,如%3d, 只取3列、
  3、 遇非法输入
  4、 例:scanf(“%d%C%f&a&,&b,&c);
  5、 若;输入
        1234 a123o .26
        a b c
      4、6. 顺序结构程序设计举例
例:输入三角形的边长,求三角形的面积。
为了简单起见,设输入的三边长a,b,c, 能构成三角形。从教学知识。已知三边求三角形的面积公式为:
area=

其中s= 1/2(a+b+c)
据此编写程序:
#incude(math.h)
main()
{ float a.b.c.s.area;
scanf(“%f,%f,%f,&a,&b,&c);
s=1.0/2*(a+b+c);
anea=sqrt(s*(s-a))(s-b)(s-c):
printf(“a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2f\n.a.b.);
printf(“area+%7.2f\n”,area);
}
例:从键盘键入一个大写字母,需要改用小写字母输出。
#indude (stdio.h)
main ()
{
char c1,c2;
c1=get(harc);
printf(“%c,%d\n,c1,c2);
c2=c1+32;
printf(“%c<%d\n”,c2,c2);
}
例:3 求ax+bx+c=0 方程的根, a,b,c由键盘输入,设b-4ac>0
众所周知哦,一元二次方程的根为
x1=:x2=
可将见面的分式合为两项‘、
p= q=
x1=p+q; x2=p-q
根据此编程如下:

#include (math.h)
main()
{ flant a,b,c,disc,x1,x2,p,q;
scanf(“a=%f,b=%f,c=%f,,&a,&b,&c);
disc=b*b-4*a*c;
p=-b/(2*a);
q=sqrt(disc)/2*a;
x1=p+q;
x2=p-q:
prient(“\n\n*1)=%5,2f\nx2=%5.2f\n”,x1,x2);
}
运行情况如下:
a=1,b=3,c=2
x1=-1.00
x2=-2.00