当前课程知识点:C语言程序设计(上) >  从问题到C语言程序设计 >  1.1 计算机的问题求解方法 >  1.1.2--关于计算

返回《C语言程序设计(上)》慕课在线视频课程列表

1.1.2--关于计算在线视频

1.1.2--关于计算

下一节:1.1.3-1关于算法-算法的特征

返回《C语言程序设计(上)》慕课在线视频列表

1.1.2--关于计算课程教案、知识点、字幕

今天我们来讨论关于计算

本来呢 我们学程序设计

为什么要关心计算问题呢

于人而言 计算机就什么

抽象讲 它就是一个数据加工厂

把我们

送给计算机的数据加工成

我们需要的结果

怎么进行加工呢

就是通过计算完成

所以 我们讨论三个问题

我们先从最简单的

加法看计算

对加法而言

或者说 对这个计算而言

就是给它输入两个要加的数

然后它输出一个结果

计算完成

我们在从另一个

排序 来看计算

对排序这个计算而言

我们送进去了一组数

它输出的是排好序的

这一组数

这两个计算

我们可以看到从输入

计算 以及它的输出

从形式上看 是一样的

但是计算的结果

或者计算的过程

却是依据问题的不同而不同的

程序设计就是要讨论

这样的问题

以及问题来选择

我们所要进行的计算

什么是计算呢

我们给计算下个定义

在详细一点说

这段话

大家记起来还是挺麻烦的

我们看几个关键词

也就是我们这门课

要关注的几个方面的问题

接下来 我们看

这个问题很重要

如果对程序设计来说

这个问题根本就不可计算

那程序设计是没法进行的

所以呢 我们先看

什么东西可计算

也就是说

什么东西我们可以通过程序的方式

来用计算机去求解

对可计算问题我们这样定义

同样 我们拿加法举例子

我们看 对加法来说

它的 输入是两个数据

就是说它对应的输出是一个数据

它的对应关系是非常明确的

所以这个加法是课计算的

对于可计算问题还有哪些呢

其实我们大多数碰到的是可计算的

比如说

求一个正弦函数

求和 排序

经典的鸡兔同笼问题

梅森素数问题

都是可计算的 

接下来我们会关心说

什么东西我们没办法用

计算机程序的方法去解决呢

必然是这些问题不可计算

什么不可计算

最经典的是

那么 我们想

讨论一下 对现在计算机的病毒

如果要找计算机是否存在有病毒问题

可计算吗

这个大家想想

其实它是不可以计算的

这就如同说医生看病一样

他永远是看已经有的病

他对没有发生的病是无法预知的

计算机的病毒也是一样的

不管是消病毒的 还是查病毒的工具

它都是对已经存在的病毒

在做消 查的工作

没有发生的病毒

这个软件还没有制作出来

所以对这个问题也是不可计算的

最后我们其实质关心一句话

计算机只能完成可计算问题的求解

和大家讨论一个问题

著名的四色定理

或者说四色猜想

接下来我们讨论

计算复杂度的问题

计算复杂度

对程序设计来说也是非常重要的一个问题

在这里边

用一个我例子来说

这个最著名的汉诺塔问题

这个例子我们是想说

我们通过汉诺塔来看一下

汉诺塔问题里是说

这里有三根针

这个结果对我们来说

它可计算 但是有意义吗

那是没有意义的

我们再来看一个例子

我们刚才提到梅森素数

不知道大家有没有了解

一个著名的国际项目

而且是正在进行中的一件事

为什么这个多人投入

这件事情的一个叫

梅森素数大搜索呢

这里边 我们看一下有几个概念

这个很简单 它并不复杂

这样的素数在

在整个素数里边是为数很少的

梅森 这个伟大的数学家

对它有卓越的贡献

所以以他命名为 梅森素数

它是多大的一个数呢

这件事情大家听下来

一看这个数字的长度

它是复杂了呢 还是规模大了呢

应该是说

问题求解的方式是一样的

只是它规模增大了

我们讨论这些好像

离我们自身负生活比较远

是想说明什么呢

想说明我们现在要用的

程序求解的问题

当这个问题的规模增大的时候

本来问题本身的计算并不复杂

但是当问题的规模加大的时候

也带来了复杂度

这个复杂度最主要的是时间复杂度

我们下来再看一个

非常贴近我们生活的问题

是最简单的 ∑求和的问题

这个问题大家一看就非常简单

可计算并且不复杂

但是我们这里边取

n等于10 当然很简单

计算瞬间就出来 我们看一下演示

在这里我们看

当我们给了输入

n等于10的时候 结果瞬间就出来了

我们再看一下这个结果

我们把n输入调成

1000

我们看一下 屏幕上

除刷新之外 结果也是可以接受的

如果我们把n给到十万这个大

我们再看 无论是

cpu的计算速度

还是屏幕的结果

两个谁造成的这个问题

都会使我们感觉到

这个结果是我们等待起来

不是那么好接受

我们想要知道这个问题是

计算的速度造成的 还是

输出造成的 我们可以看一下

改一下这个程序

我们看一下

如果我们不要这个过程中的输出

只看结果

我们来看一下

n等于十万的时候

这个输出会不会慢

好了

我们看这个过程

也是 瞬间完成

这个问题是想说明什么呢

是说

如果我们把一个实际问题

拿到计算机上来求解的话

它除本身计算的速度之外

他有系统架构造成的问题

比如说我们刚才这个演示

就是因为输出他需要刷新

输出的速度和cpu是不匹配的

我们如果不能放弃这个过程中的输出

也就是是我们还是在想关注

这个过程中的输出

又不想等待 怎么办呢

我们一定要在程序上做一些处理

比如说 我们可以说

隔一段 输出一个过程

那么这一段是多长呢

是以人能接受的方式

我们如果采取了这样的方式

你的程序必然

写起来跟刚才那些程序就会不一样

我们可以得到这样的一个结论

理论上可计算的问题

不一定在实际中等候能得到解

或者说

在你的等待中都愿意等待这个解

还有一个

计算机只适合做

可计算并且有限步骤

能够结束的计算

所以 在实际中

要把分之的问题

进行分解 分解 再分解

分解到什么程度呢

计算机能够在

有限步骤内完成这样的程度

C语言程序设计(上)课程列表:

从问题到C语言程序设计

-1.1 计算机的问题求解方法

--1.1.1--程序设计面向的问题

--1.1.2--关于计算

--1.1.3-1关于算法-算法的特征

--1.1.3-2关于算法——算法的表示

--1.1.3-3关于算法——算法的优化

--1.1.4-1-程序设计方法

--1.1.4-2-程序设计方法

--讨论题:数学模型

-1.1 计算机的问题求解方法--作业

-1.2 C语言与C程序

--1.2.1-1-C概述

--1.2.1-2-C概述

--1.2.2-C初步

--讨论题:运算符

-1.3 C语言处理系统与程序调试运行

--1.3.1C程序如何调试运行

--1.3.2常用C语言处理系统

--1.3.3DEVC++的使用-v1

--1.3.4C语言概貌小程序

--例程

-1.4 程序中的人机交互

--1.4 printf用法

--1.4.2 scanf的用法

--例程

--作业讨论区

数据计算实现与顺序结构程序设计(一)

-2.1 算术运算的C程序实现

--2.1.1 第二章

--2.1.2 C语言算术表达式概念

--2.1.3 算术运算的实现

--2.1.4 整数相除

--2.1.5 输入格式造成的计算错误

--2.1.6 求余运算

--2.1.7 自增自减运算

--2.1.8 复合运算

--fangcheng.c

--fangcheng-1.c

--fangcheng-2.c

--fangcheng-3.c

--fangcheng-4.c

--算术混合运算.c

--讨论题:自增自减符

--讨论题:程序输出结果

--讨论题:程序运行结果

-2.1 算术运算的C程序实现--作业

-2.2 关系运算的C程序实现

--2.2.1 关系比较问题

--2.2.2 C语言关系表达式

--2.2.3关系运算优先级

--2.2.4 用关系运算做判断条件

--2.2.5 程序实例

--2.2.6 字符比较

--bukao.c

--pingshifen-1.c

--panduanzhengshu.c

--pingshifen-2.c

--字符比较.c

--讨论题:比较大小

--讨论题:程序的运行

-2.2 关系运算的C程序实现--作业

-第二周作业--作业

数据计算实现与顺序结构程序设计(二)

-2.3 逻辑运算的C程序实现

--2.3.1 逻辑运算问题~1

--2.3.2 逻辑运算表达式

--2.3.3 如何判断闰年

--2.3.4 逻辑运算优先级

--2.3.5 条件运算符

--计算结合性

--2.3.7 一个简单实例

--闰年.c

--自动购票问题.c

--讨论题:逻辑表达式

-2.3 逻辑运算的C程序实现--作业

-2.4 位运算的C程序实现

--2.4.1 什么是位运算

--2.4.2 位运算有哪些

--2.4.3 位运算怎么用

--讨论题:位运算

-2.5 几种很个别的运算

--2.5 几个很个别的运算

--讨论题

--讨论题

-2.5 几种很个别的运算--作业

-2.6 混合运算及数据类型转换

--2.6 混合运算及数据类型转换

--讨论题:数据类型

-2.7 顺序结构程序实例

--2.7.1 第一个程序:三角形

--Video

--三角形面积.c

--讨论题:工业产值

--讨论题:程序无效结果

-2.7 顺序结构程序实例--作业

选择结构的程序设计

-3.1 程序中的路径选择实现

--3.1.1_1 第三章

--3.1.1_2 神奇的if_else

--打印学生成绩.c

--一元二次方程.c

-3.1 程序中的路径选择实现--作业

-3.2 路径中的再选择——嵌套判断

--3.2.1_1 if语句的嵌套

--3.2.1_2三个数排序1029

--例程

--3.2.2 用户登录检查

--三个数排序_未优化.c

--三个数排序_优化.c

--讨论题:程序改错

-3.2 路径中的再选择——嵌套判断--作业

-3.3 复杂判断问题的C程序设计

--3.3 多级选择

--银行存款.c

--讨论题:多级选择

-3.4 多分支问题的C程序设计

--3.4.1 switch语句表达式

--3.4.2 加减乘除计算

--3.4.3 几类说明

--加减乘除运算.c

--讨论题:关于switch

-3.4 多分支问题的C程序设计--作业

-3.5 GOTO的适当使用

--3.5 GOTO的适当使用

-3.6 选择结构的程序实例

--3.6 程序展示

--计算第几天.c

--存款利息__switch实现.c

--讨论题:输出奇数

--讨论题:计算税金

-3.6 选择结构的程序实例--作业

-第四周作业--作业

循环结构的程序设计(一)

-4.1 需要重复执行的程序

--4.1.1----第四章~1

--4.1.2---while实现先判断后循环~1

--4.1.3----while循环的应用-录入速度~1

--求和.c

--打印学生成绩.c

--统计录入速度.c

--求平均数.c

-4.1 需要重复执行的程序--作业

-4.2 至少要执行一次的循环

--4.2.1至少要执行一次的循环

--4.2.2-do-while循环应用

--成绩录入_do while实现.c

--n的阶乘.c

--字符分类统计.c

--讨论题:关于while

-4.2 至少要执行一次的循环--作业

-4.3 已知循环次数用for语句

--4.3.1--用for语句控制循环次数

--4.3.2--循环的应用-求和

--求和问题.c

--斐波那契数列问题.c

--数列求和.c

--讨论题:循环语句的不同

--讨论题:循环语句

-4.3 已知循环次数用for语句--作业

-4.4 循环控制——简单循环应用

--4.4.1-循环的应用-找数-水仙花数

--4.4.2--循环的应用-求素数

--水仙花数.c

--讨论题:死循环

--讨论题:continue和break

--讨论题:猜数字

-循环结构的程序设计(一)--4.4 循环控制——简单循环应用

循环结构的程序设计(二)

-4.5 循环的嵌套

--4.5.1 循环的嵌套——九九乘法表

--4.5.2 循环的嵌套——打印三角形

--打印九九乘法表.c

--打印实心三角图案.c

--打印空心三角图案.c

--讨论题:程序运行

-4.5 循环的嵌套--作业

-4.6 break与continue

--4.6 循环中断与继续循环——break再讨论

--最大素数.c

--求正数个数及平均数.c

-4.6 break与continue--作业

-4.7 循环的综合应用

--4.7.1 数的排列组合问题

--4.7.2 循环综合应用——穷举算法

--4.7.3 循环综合应用——满足条件的数

--4.7.4 循环综合应用——求最后三位数

--4.7.5 循环综合应用——打印空心图案

--数的排列组合.c

--数的排列组合优化.c

--鸡兔同笼.c

--找满足条件的数.c

--输出14的13次方的最后三位数.c

--打印空心字符.c

--讨论题:打印图形

--讨论题:打印空心图形

--讨论题:计算闰年

-第六周作业

--虚拟实验:循环程序设计实验

-第六周作业--作业

数组(一)

-5.1 同类有序数据处理问题

--5.1.0 数组开篇

--5.1.1 同类有序数据存储问题

--讨论题:下标变量与下标

-5.2 一维数组的定义和引用

--5.2.1_1 数组的定义~1

--5.2.1_2 数组的初始化

--5.2.2 一维数组的输入输出

--5.2.3 一维数组的应用1--成绩排序(选择法)~2

--5.2.4 一维数组的应用2--Fibonacci数列

--数组定义.c

--数组初始化.c

--输出大于平均值的数.c

--反向输出.c

--选择法_成绩排序.c

--求斐波那契数列前n项.c

--讨论题:对称数

--讨论题:关于'\0'

-5.2 一维数组的定义和引用--作业

-5.3 一维字符串数组

--5.3 一维字符串数组11.24~1

--用函数测试字符串长度.c

--讨论题:编程

-5.4 字符串处理函数

--5.4 字符数组的输入与输出

--字符串反向.c

--字符串函数

--讨论题:程序如何运行

--讨论题:黑色星期五

数组(二)

-5.5 二维数组的定义与使用

--5.5 二维数组定义

--二维数组的定义与初始化.c

-5.6 二维数组的输入输出

--5.6 二维数组的输入与输出

--二位数组输出_矩阵输出.c

--讨论题:随机数据存储

-5.6 二维数组的输入输出--作业

-5.7 二维数组的应用‍

--5.7.1二维数组的应用-转置矩阵

--5.7.2 用一维数组方式引用二维数组元素

--转置矩阵.c

--找二维数组最大数.c

--讨论题:修改程序

--讨论题:关于随机数函数 rand()

-5.8 二维字符数组

--5.8 单词排序

--单词排序.c

--讨论题:回文字符串

-5.8 二维字符数组--作业

-5.9 数组综合应用

--5.9.1 应用1——学生成绩统计

--统计成绩.c

--5.9.2 应用2——删除重复字符

--删除串中的重复字符串

--5.9.3 应用3——统计字符

--5.9_4数组的应用4--矩阵相乘

--统计字符次数.c

--讨论题:洗牌

-本期课程结束语

--end

-第八周编程作业

--虚拟实验:冒泡排序算法程序设计实验

期末复习

-《C语言程序设计(上)》期末复习参考

--html

期末复习答案

-《C语言程序设计(上)》期末复习参考答案

--html

1.1.2--关于计算笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。