zoukankan      html  css  js  c++  java
  • 程序设计原则:把计算过程交给计算机

    程序设计原则:把计算过程交给计算机

    一道简单的数学题
    首先,我们先看一道很简单的数学问题,求出 1000 以内所有 3 或 5 倍数的数字的和。

    1. 把计算过程,交给计算机

    写程序的一个目的,就是减少我们人类在解决问题中的具体计算过程

    #include <stdio.h>
    int main() {
        int sum = 0;
        for (int i = 1; i < 1000; i++) {
            sum += i * (i % 3 == 0 || i % 5 == 0);  
        }
        printf("%d
    ", sum);
        return 0;
    }
    

    这段程序中,循环遍历 1000 以内的所有整数,然后把 3 或 5 的倍数累加到变量 sum 中,最后输出 sum 变量的值,就是 1000 以内,所有 3 或 5 的倍数和。

    其中有一个编程技巧,就是利用条件表达式 (i % 3 == 0 || i % 5 == 0) 与数字 i 相乘,条件表达式等于 1 的时候,说明 i 是 3 或 5 的倍数,sum 累加的值就是 i * 1 就是 i 的值;而当条件表达式不成立的时候,sum 累加的值就是 0。掌握这个编程技巧,关键是理解条件表达式的值。

    1. 数学思维:提升计算效率
    #include <stdio.h>
    int main() {
        int sum3 = (3 + 999 / 3 * 3) * (999 / 3) / 2;
        int sum5 = (5 + 999 / 5 * 5) * (999 / 5) / 2;
        int sum15 = (15 + 999 / 15 * 15) * (999 / 15) / 2;
        printf("%d
    ", sum3 + sum5 - sum15);
        return 0;
    }
    

    上面程序中,有三个整型变量分别代表 1000 以内所有 3 的倍数的和 sum3,所有 5 的倍数的和 sum5,和所有 15 倍数的和 sum15。最后呢,用 sum3 + sum5 - sum15 的值,代表了 3 或 5 的倍数的和。

    在 C 语言中,两个整型数字相除,结果会做向零取整,什么是 向零取整呢?解释这个概念之前,先要介绍一下向下取整的概念,所谓向下取整,就是取小于等于当前数字的第一个整数。

    取当前数字和 0 之间,与前数字距离最近的整数。

    将计算过程,留给计算机

    “平方和”以及“和的平方”

    例如,10 以内自然数的平方和就是:
    1^2 + 2^2 + 3^2 + 4^2 + 5^2 + 6^2 + 7^2 + 8^2 + 9^2 + 10^2 = 385
    也就是 1 到 10 每个数字的平方相加之和。
    而,10 以内自然数的和的平方就是:
    (1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10) ^ 2 = 3025
    也就是 1 到 10 所有数字相加之和,然后再取平方的值。

    小结

    具体的计算过程,计算机比你更擅长,所以请把具体的计算过程,留给计算机。
    编写程序,其实是在描述和规定计算过程,而描述的方式不同,效率也不同。
    不同的效率过程,就是我们所谓的不同的算法过程,记住:算法很重要。

  • 相关阅读:
    第1次作业
    第0次作业
    总结报告
    第14、15周作业
    第七周作业
    第六周作业
    第四周作业
    第四次作业
    第三次作业
    2018第二次作业
  • 原文地址:https://www.cnblogs.com/liugangjiayou/p/12650618.html
Copyright © 2011-2022 走看看