3.1 程序的三种基本结构
3.2 数据的输入与输出
3.2.1 scanf()函数
3.2.2 printf( )函数
3.2.3 getchar()函数与putchar()函数
3.2.4 程序应用举例
3.3 条件控制语句
3.3.1 if语句
3.3.2 switch 语句
3.3.3 程序应用举例
3.1 程序的三种基本结构
通常的计算机程序总是由若干条语句组成,从执行方式上看,从第一条语句到最后一条语句完全按顺序执行,是简单的顺序结构;若在程序执行过程当中,根据用户的输入或中间结果去执行若干不同的任务则为选择结构;假如在程序的某处,需要根据某项条件重复地执行某项任务若干次或直到满足或不满足某条件为止,这就构成循环结构。大多数情况下,程序都不会是简单的顺序结构,而是顺序、选择、循环三种结构的复杂组合。
三种基本结构的流程图、N - S图以及PAD图可以参看本书第1章1.4节“算法”相关内容。
C语言中,有一组相关的控制语句,用以实现选择结构与循环结构:
选择控制语句: if; switch、case
循环控制语句: for、while、do while
转移控制语句: break、continue、go to
我们将在后面几节中具体介绍。
3.2 数据的输入与输出
在程序的运行过程中,往往需要由用户输入一些数据,而程序运算所得到的计算结果等又需要输出给用户,由此实现人与计算机之间的交互,所以在程序设计中,输入输出语句是一类必不可少的重要语句,在C语言中,没有专门的输入输出语句,所有的输入输出操作都是通过对标准I / O库函数的调用实现。最常用的输入输出函数有scanf( )、pri ntf( )、getchar( )和putchar( ),以下分别介绍。
3.2.1 scanf()函数
格式化输入函数scanf( )的功能是从键盘上输入数据,该输入数据按指定的输入格式被赋给相应的输入项。函数一般格式为:
scanf( "控制字符串",输入项列表);
其中控制字符串规定数据的输入格式,必须用双引号括起,其内容是由格式说明和普通字符两部分组成。输入项列表则由一个或多个变量地址组成,当变量地址有多个时,各变量地址之间用逗号“,”分隔。
scanf( )中各变量要加地址操作符,就是变量名前加“ &”,这是初学者轻易忽略的一个问题。应注重输入类型与变量类型一致。
下面探讨控制字符串的两个组成部分:格式说明和普通字符。
1. 格式说明
格式说明规定了输入项中的变量以何种类型的数据格式被输入,形式是:
% [ <修饰符> ] <格式字>
各个格式字符及其意义见表3 - 1。
表3-1 输入格式字符
格式字符 意义
d 输入一个十进制整数
o 输入一个八进制整数
x 输入一个十六进制整数
f 输入一个小数形式的浮点数
e 输入一个指数形式的浮点数
c 输入一个字符
s 输入一个字符串
各修饰符是可选的,可以没有,这些修饰符是:
⑴ 字段宽度
例如:scanf("%3d",&a)
按宽度3输入一个整数赋给变量a。
⑵ l和h
可以和d、o、x一起使用,加l表示输入数据为长整数,加h表示输入数据为短整数,例如:
scanf("%10ld % hd" , &x , &i)
则x按宽度为1 0的长整型读入,而i按短整数读入。
⑶ 字符*
*表示按规定格式输入但不赋予相应变量,作用是跳过相应的数据。
例如:
scanf("%4d % *d % 4d" , &x , &y , &z)
执行该语句,若输入为“1 2 3”
结果为x = 1,z = 3,y未赋值,2被跳过。
2. 普通字符
普通字符包括空格、转义字符和可打印字符。
(1) 空格
在有多个输入项时,一般用空格或回车作为分隔符,若以空格作分隔符,则当输入项中包含字符类型时,可能产生非预期的结果,例如:
scanf("%d %c" , &a , &ch)
输入32q
期望a = 32,ch = q,但实际上,分隔符空格被读入并赋给ch。
为避免这种情况,可使用如下语句:
scanf("%d %c" , &a , &ch)
此处% d后的空格,就可跳过字符“ q”前的所有空格,保证非空格数据的正确录入。
(2) 转义字符: \n、\t
先看下面的例子:
scanf("%d %d" , &a , &b);
scanf("%d %d %d" , &x , &y , &z);
输入为1 2 3
4 5 6
结果为:a = 1, b = 2, x = 3, y = 4, z = 5
若将上述语句改为:
scanf("%d %d\n" , &a , &b);
scanf("%d %d %d" , &x , &y , &z);
对同样的输入,其结果为a = 1,b = 2,x = 4,y = 5,z = 6,由于在第一个scanf的最后有一个\n,所以第二个scanf语句将从第二个输入行获得数据。
(3) 可打印字符
例如:scanf("%d,%d,%c",&a,&b,&ch);
当输入为: 1, 2, q
即:a = 1,b = 2,ch = q
若输入为1 2 q
除a = 1正确赋值外,对b与c h的赋值都将以失败告终,也就是说,这些不打印字符应是输入数据分隔符,scanf在读入时自动去除与可打印字符相同的字符。
[例3-1] 试编写求梯形面积的程序,数据由键盘输入。
分析:设梯形上底为A,下底为B,高为H面职为S,则
S=(A+B)×H÷2
程序如下:
main( )
{
float a,b,h,s;
printf("please input a,b,h:");
scanf("%f %f %f" , &a , &b , &h);
s = 0.5 * (a + b) * h;
printf("a=%5.2f b=%5.2f h=%5.2f",a,b,h);
printf("s = %7.4f" , s ) ;
}
运行结果如下:
please input a,b,h:3.5 4.2 2.8
a=3.50 b=4.20 h=2.80
s = 10.7800
3.2.2 printf( )函数
与格式化输入函数scanf( )相对应的是格式化输出函数printf( ),其功能为按控制字符串规定的格式,向缺省输出设备(一般为显示器)输出在输出项列表中列出的各输出项,其基本格式为:
printf(“控制字符串”,输出项列表)
输出项可以是常量、变量、表达式,其类型与个数必须与控制字符串中格式字符的类型、个数一致、当有多个输出项时,各项之间用逗号分隔。控制字符串必须用双引号括起,由格式说明和普通字符两部分组成。
1. 格式说明
一般格式为:
% [ <修饰符> ] <格式字符>
格式字符规定了对应输出项的输出格式,常用格式字符见表3 - 2。
表3-2 输出格式字符
格式字符
意义
格式字符
意义
c
按字符型输出
o
按八进制整数输出
d
按十进制整数输出
x
按十六进制整数输出
u
按无符号整数输出
s
按字符串输出
f
按浮点型小数输出
g
按e和f格式中较短的一种输出
e
按科学计数法输出
[1] [2] [3] [4] [5]