1
C/C ++程序设计
1.2.4.1 4.1 顺序结构

4.1 顺序结构

4.1.1 C语句的种类

评价一个程序优劣的主要依据是程序是否“结构清晰、便于阅读和修改、容易验证”。结构化程序设计是一种进行编程的原则和方法,根据该原则和方法可以实现上述要求。顺序结构、选择结构和循环结构是结构化程序设计的三种基本结构。

在学习最基本的顺序结构之前有必要熟悉C语句的种类。C语言中主要分五种类型的语句:

(1)控制语句:具有相应的控制功能,决定程序执行的流程及转向。具体的控制语句如图4-1所示。

img56

图4-19 种控制语句

其中if-else语句、switch语句、while语句、for语句、do-while语句以及break和continue语句在本章都有介绍。return语句是在函数中使用的(详见第5章),goto语句由于其自身的局限性(破坏程序的流程结构),现在很少使用故不再详细介绍。

(2)声明语句:声明变量时使用,C语言中变量必须先声明后使用,故使用频率较高。例如:

img57

(3)表达式语句:在C表达式之后加一分号即构成表达式语句。例如:

img58

(4)复合语句:由“{”和“}”括起来的两个或者两个以上的C语句即是复合语句。如果希望将若干个语句构成一个整体则可以使用复合语句。例如:

img59

提示:复合语句在C语言中被认为是一个语句,故执行一个复合语句时,该复合语句中的语句都要被执行。

(5)空语句:只含有一个分号的语句即是空语句,在程序执行时什么也不做。具体形式如下:

;/*只有一个分号即空语句*/

提示:虽然执行空语句时什么也不做,但不能滥用空语句。特别是在后面的选择语句和循环语句中应注意,如果使用出错的话将直接导致程序结果异常。

4.1.2 顺序结构的描述

顺序结构是最简单也是最基本的程序结构,执行的原则是根据语句的先后顺序依次执行,即是一种线性的过程。例如,A、B、C代表三个语句,则先执行A,然后执行B,最后是C。用流程图来描述如图4-2所示。

img60

图4-2 顺序结构

在日常生活中有许多顺序结构的例子,例如要做一盘番茄炒蛋,首先往锅内倒油,然后放入打好的鸡蛋,放入番茄,最后放入调味料,一盘美味的菜肴出锅了,这就是顺序结构。再举个例子,要和朋友通电话,应首先拿出手机,拨对方号码,等待应答然后通话,最后结束。我们平时都是这样做的,只是没有意识到它就是程序设计中的顺序结构。

4.1.3 声明语句和赋值语句

声明语句和赋值语句是使用很广泛的两种语句,先学习声明语句。

我们写程序要用到数据,数据需要在内存中存放,因此我们必须声明变量。声明语句的语法规则为:

数据类型变量名;

例如:

int m,n;

char ch;

double average;

提示:在数据类型和变量名之间用空格分隔,变量名之后以分号结束。

声明过变量之后我们可以给变量赋值,赋值语句属于表达式语句,在赋值表达式之后加上分号构成赋值语句。即:

变量=表达式;

例如:

m=10;

n=m*3;

ch=ˊAˊ;

average=12.56;

提示:赋值语句必须以分号结束,没有分号是赋值表达式;另外,“=”是赋值符号,不同于数学中的等号,这里的含义表示将右边表达式的值赋给左边的变量,左右两边不能互换。

4.1.4 数据的输入与输出

程序设计中经常会涉及信息的交互,即输入或输出数据。“输出”是指把数据从计算机内部输送到计算机外部设备(例如显示器)的过程,而“输入”指从计算机外部设备(例如键盘)输送数据到计算机内部的过程。

C语言本身并无输入输出语句,实现输入和输出主要采用scanf()和printf()这两个库函数来实现(关于库函数的内容详见5.2节),如图4-3所示。利用这两个函数可以输入或输出整数、小数、字符或者字符串等信息。在使用printf()和scanf()时,需要在程序开头部分加上#include<stdio.h>命令,stdio.h是标准输入输出头文件。

img61

图4-3 输入和输出

(1)数据的输出

输出数据使用printf()库函数,该函数既可以按原文输出内容,也可以输出特定的变量或表达式的值。

第一种用法:

printf(格式控制字符串);

说明:格式控制字符串需要用双引号引起来。

假如你想输出一句话“今天天气不错!”示例如下:

printf("今天天气不错!\n");/*双引号中直接写想要输出的内容,\n为换行*/

【例4.1】利用printf()输出一个三角形。

img62

img63

运行结果如图4-4所示。

img64

图4-4

分析:在双引号中的内容无论是汉字、英文还是符号(格式说明符和转义字符除外)都会按原样输出,因此第4行代码双引号中的四个空格符也原样输出。“\n”起到的是换行作用,在输出一个星号后另起一行开始输出。

【例4.2】利用printf()输出一个图形菜单。

img65

运行结果如图4-5所示。

img66

图4-5

分析:主函数中利用printf()来输出一个简易计算器的界面,每一个printf()都是原样输出了双引号中的内容。

第二种用法:

printf(格式控制字符串,输出项列表);

说明:格式控制字符串必须用双引号引起来,此种用法中格式控制字符串通常包括两部分内容,即需要原样输出的字符序列和起特殊作用的格式说明符。其中格式说明符以“%”开头,后跟一个格式字符,用来输出不同类型的数据。输出项列表即是列出想要输出的变量、常量或是表达式,输出几项就需要几个格式说明符与之对应,不同类型的数据其格式说明符不一样,下面分别介绍。

①%d:用来输出十进制整数。

例如:

img67

②%c:用来输出一个字符。

例如:

img68

③%f:用来输出float或者double类型数据。

例如:

img69

【例4.3】利用printf()输出变量的值。

img70

运行结果如图4-6所示。

img71

图4-6

分析:程序中分别定义了7个变量,其中两个字符变量,输出时应该用%c来控制(第8行);两个整型变量,输出时应该用%d来控制(第9行);两个float型变量和一个double型变量,输出时都用%f来控制(第10行)。在第8、9、10行的printf()的格式控制字符串中除了格式说明符和转义字符“\n”以外,其他的字符均原样输出。

以第8行为例,“输出字符用”按照原样输出,后面的“%%c”输出%c,冒号原样输出,紧跟着的是格式说明符“%c”,对应第一个输出项c1的值,“,”原样输出,最后是c2的值并且换行。

特别要指出的是为了原样输出“%”必须用“%%”才能实现。

除了上面介绍的3种格式说明符之外,还有%x等,具体如表4-1所示。

表4-1 printf()的格式说明符

img72

除了基本的输出方法之外,C语言也提供格式化输出方法,即通过格式说明符加以格式修饰符,使数据按照预期的格式进行格式化显示,如数据左对齐、限定结果的宽度以及实数的小数位数等等。具体用法如表4-2所示。

表4-2 printf()的格式修饰符

img73

【例4.4】利用格式修饰符格式化输出结果。

img74

运行结果如图4-7所示。

img75

图4-7

分析:

第8行“%+6d”中的“6”是指结果所占的总列数,“+”强制显示数值的正负符号;第9行“%6.2f”中的“6”是结果占的总列数(注意包含小数点在内),“.2”是小数点后面的位数,如果小数点后原位数超过设置值,则系统会自动进行四舍五入以符合设置的小数位数。

(2)数据的输入

输入数据使用scanf()库函数,该函数可以输入整数、实数、字符、字符串等信息。其语法规则为:

scanf(格式控制字符串,地址列表);

说明:格式控制字符串的用法和printf()函数一样,必须用双引号引起来。只是对于输入来说双引号中除了格式说明符之外一般不加其他字符(如“\n”),如果有其他字符则输入时也必须原样输入这些字符,然后再输入数据。地址列表是若干变量的地址组成的列表,地址与地址间用逗号分隔。

①%d:用来输入十进制整数。例如:

img76

例如:

img77

注意:输入double型变量,格式说明符必须用“%lf”;而输出double型变量时,格式说明符可以用“%f”。

【例4.5】利用scanf()来输入数据。

img78

img79

运行结果如图4-8所示。

img80

图4-8

分析:

第13行的scanf()函数中格式控制字符串为“%f,%f”,故输入实数时必须以一个逗号分隔,下面是正确的输入方式:

25.88,96 .56↙

第15行中输入的数据是double类型,只能用“%lf”。在使用scanf()函数输入数据时常配合printf()函数来使用,以便提示用户输入的信息,避免用户输入一些无效数据。通常的做法是用printf()输出一行字符串提示信息,然后用scanf()函数接收用户输入的数据。如第8、9行,第10、11行,第12、13行等均是如此用法。

4.1.5 字符的输入与输出

数据的输入与输出可以采用标准库函数scanf和printf来实现,不论是输入输出整型、实型、字符型还是字符串都可以做到。因此,可以称scanf和printf是“万能”的输入和输出方法。本节学习的是字符所专有的输入输出方法。

字符数据的输入与输出可以使用getchar()和putchar()两个库函数来实现。这两个库函数位于头文件stdio.h中。在使用时,应在程序的开始部分加上#include<stdio.h>命令。

(1)getchar()函数

该函数的作用是从系统隐含指定的输入设备(例如键盘)输入一个字符。使用方法如下:

变量=getchar();

说明:括号中是没有参数的,而且getchar()只能输入一个字符。例如:

img81

(2)putchar()函数

该函数的作用是把一个字符在屏幕上输出显示。使用方法如下:

putchar(变量);

说明:括号中带参数,即想要输出的字符,而且只能放一个字符。另外,括号中也可以是转义字符如ˊ\nˊ等。例如:

img82