[编程语言][C语言]C语言的顺序结构

来源:互联网 发布:node.js 个人博客 编辑:程序博客网 时间:2024/05/24 22:41

    到目前位置,我们其实没有真正得编写出一个像样的、可以执行的程序出来。自己编写代码并且执行所带来的成就感是很强的,虽然之前看了很多枯燥又无味的文字,这个时候还是会小兴奋一会。这就是我第一次写出一段代码后的感受。在这一部分,我们将较为正式地开始编写代码,并且学习程序的三种基本结构之一——顺序结构。

    计算机的组成原理决定了我们程序指令在局部是顺序执行的。也就是说,只有执行了前一条指令,后一条指令才能够被执行。这就要求我们编写代码时,一定要安排好语句的先后顺序。下面我们设计一个计算长方形的周长和面积的小程序。


    我们分析一下程序的流程应该是怎样的。

    程序设计的目的是将重复枯燥的工作自动化,不应该只计算一个正方形的周长和面积。相反,程序只要被告知长和宽,就应该能够正确得反馈出计算的结果。所以,程序的第一个步骤是输入长和宽。

    得到了长和宽,再依据数学计算公式,程序就可以正确计算结果了。所以,程序的第二个步骤是计算。

    程序应该告诉别人它计算的结果。所以,第三个步骤是输出。

    简单的来说,我们要编写的这个程序的流程就是:输入->计算->输出。


    下面,我们按照之前想好的流程来组织代码。

    计算机的数据是以常量或变量的形式出现。每一个常量或是变量都在内存中占据一定的内存空间,否则他们无法保存自己的值。我们来数数这个小程序到底要用到哪些变量呢?作为输入的变量,长方形的长和宽必须得有;而作为输出的变量,长方形的周长和面积也必须得有。这样我们就必须在程序中声明四个变量,以告诉计算机及时分配相关的内存空间:

double length1;         // 长方形的长
double length2;         // 长方形的宽
double perimeter;       // 长方形的周长

double area;            // 长方形的面积

定义变量的格式为:数据类型关键字 变量名;

    我们一般都会在变量声明后面加上注释,否则别人可能无法理解变量的作用,甚至作为作者的自己,也会忘记为什么要搞这个奇怪的变量。我们会精心地为自己的小孩取一个好听的名字。变量名如人名,我们也不能随便给变量起个abc这样的名字。变量名不用太长,但也要一目了然,一眼就可以明白其含义和发挥的作用。


    变量有了,我们就可以输入长和宽了。为了用户的方便,才用问答式的交互更好。所以我们用下面的语句让计算机对人进行提问:

printf("请输入长方形的长:");

这条语句是调用库函数printf()。其本质就是在屏幕上打印出几个字符。下面,我们需要回答,需要就用下面语句。

scanf("%lf", &length1);

这条语句是调用库函数scanf()。其中,"%lf"是个占位符,当要输入double类型的值时需要用到这个占位符。后面的&length1,表示取变量length1的的内存地址。这条语句的意思是,首先从键盘获得数字的输入,然后把它保存到变量length1所在内存空间中去。

同样的,对长方形宽的问答有下面的语句:

printf("请输入长方形的宽:");
scanf("%lf", &length2);


    此时,计算机已经知道了我们要计算的长方形的长和宽了。下面就可以进行计算了。依据数学公式就可以有下面的两条语句:

perimeter = (length1 + length2) * 2;
area = length1 * length2;

上面两条语句均为赋值语句,而其中的等号"="是赋值的意思。赋值语句的意思是,首先计算等号右边的表达式的值,然后把表达式的值在保存在等号左边的变量所在的内存空间中。


    这时,程序已经计算出结果了,并且长和宽分别保存在变量perimeter和area所在的内存空间中。(以后,除非特殊说明,提到某个变量其实就是指变量所在的内存空间。)接下来的任务就是输出结果了。相关的语句就是:

printf("长方形的周长:%lf\n", perimeter);
printf("长方形的面积:%lf\n", area);

上面两条语句似曾相识,但和之前遇到的那条函数调用有点不一样。引号中出现了"%lf",而且多了", perimeter"。估计你也猜出来了,"%lf"是个占位符,表示这个地方要放一个double类型的值,其值的内容要由后面的变量perimeter决定。(printf()函数和scanf()函数的使用需要注意的地方是,printf()里面的变量名前面是没有"&",而scanf()里面的变量名前面是有"&"的。)


    为了告诉人们整个流程结束了,我们可以加上下面这一条语句:

printf("Done!\n");

这一条语句中出现了'\n',这个是换行符,表示到这个地方要换行。其实在程序上,这一条不是必须的,只是我们输出这一句在逻辑上表示程序的结束。同样的,我们也可以在输入长和宽之前加上下面的一句,表示程序的开始:

printf("Begin!\n");


    这样,我们把上面的代码片段组合在一起,就得到了下面的代码

============================================================

/* rectangle.c —— 计算长方形的周长和面积 */

#include<stdio.h>


int main(void)
{
    double length1;         // 长方形的长
    double length2;         // 长方形的宽
    double perimeter;       // 长方形的周长
    double area;            // 长方形的面积


    printf("Done!\n");


    printf("请输入长方形的长:");
    scanf("%lf", &length1);
    printf("请输入长方形的宽:");
    scanf("%lf", &length2);
    
    perimeter = (length1 + length2) * 2;
    area = length1 * length2;


    printf("长方形的周长:%lf\n", perimeter);
    printf("长方形的面积:%lf\n", area);


    printf("Done!\n");


    return 0;
}

============================================================


    可能还有人对最开始的#include <stdio.h>有疑惑。因为我们用到了库函数printf()和scanf(),所以就必须包含它们的函数原型所在头文件stdio.h。


    下面,赶快编译执行吧,看看结构是否正确。

0 0
原创粉丝点击