史上最全C语言(算法入门)学习目录(更新中) 1.程序的灵魂——算法
废话不多说,我们直接开始如下:
1.程序的灵魂——算法
一个计划应该包括:
数据描述。 在程序中,必须指定数据的类型和数据的组织形式,即数据结构(数据)。
操作说明。 即运算步骤,即算法()。
Wirth提出的公式:
数据结构+算法=程序
笔者认为:
程序=算法+数据结构+编程方法+语言工具和环境
这四个方面是参与项目的人应该具备的知识。
目的是让大家了解如何编写C程序,进行编写程序的初步训练。 因此,仅介绍算法的初步知识。
1.算法的概念
做任何事情都有一定的步骤。 解决问题所采取的方法和步骤称为算法。
计算机算法:计算机可以执行的算法。
计算机算法可以分为两大类:
数值运算算法:求解数值;
非数值算术算法:事务管理领域。
2. 简单算法示例
【例1】求1×2×3×4×5。
最原始的方法:
步骤一:先求1×2,得到结果2。
步骤2:将步骤1得到的乘积2乘以3得到结果6。
步骤 3:6 乘以 4 得到 24。
步骤 4:24 乘以 5 得到 120。
虽然这个算法是正确的,但是它太复杂了。
改进算法:
S1:使t=1
S2:使i=2
S3:设t×i,乘积仍然放在变量t中,可以表示为t×i→t
S4:使i的值+1,即i+1→i
S5:若i≤5,则返回并重新执行步骤S3及后续的S4和S5; 否则,算法结束。
如果算100! 只需将S5:如果i≤5更改为i≤100即可。
如果是时候找到 1×3×5×7×9×11,算法只需要做很少的改变:
S1:1→t
S2:3→i
S3:t×i→t
S4:i+2→t
S5:如果i≤11,则返回S3,否则结束。
这个算法不仅是正确的,而且对于计算机来说也是一个更好的算法。 由于计算机是高速运算的自动化机器,因此很容易实现循环。
思考:如果S5写为: S5:如果i<11,返回S3; 否则,结束。
【例2】有50名学生,要求将成绩在80分以上的学生打印出来。
若n代表学号,则ni代表学号; g代表学生的成绩,gi代表学生的成绩;
那么算法可以表示为:
S1:1→i
S2:如果gi≥80,则打印ni和gi,否则不打印
S3:i+1→i
S4:若i≤50,则返回S2,否则结束。
【例3】判断2000年到2500年每一年是否为闰年并输出结果。
丰年的条件:
能被 4 整除但不能被 100 整除的年份;
能被100整除和能被400整除的年份;
假设y是被检测的年份,算法可以表示如下:
S1:2000→年
S2:如果y不能被4整除,则输出y“不是闰年”,然后进入S6
S3:如果y能被4整除但不能被100整除,则输出“y是闰年”,然后进入S6
S4:如果y能被100整除并且能被400整除,则输出y“是闰年”; 否则,输出y“不是闰年”,然后转S6
S5:输出y“不是闰年”。
S6:y+1→y
S7:当y≤2500时,返回S2继续执行,否则结束。
【例4】找到下图:
该算法可以表示为:
S1:叹息=1
S2:总和=1
S3: 德诺=2
S4:叹息=(-1)×叹息
S5:项=叹气×(1/分号)
S6:项=总和+项
S7: 德诺 = 德诺 +1
S8:若deno≤100,则返回S4; 否则,结束。
【例5】对于大于等于3的正整数,判断是否为素数。
该算法可以表示为:
S1:输入n的值
S2:i=2
S3:n除以i,得到余数r
S4:如果r=0,则表示n可以除以i,则打印n“不是素数”,算法结束; 否则执行S5
S5:i+1→i
S6:若i≤n-1,则返回S3; 否则打印“n是素数”; 然后算法结束。
提升:
S6:如果 i ≤ \sqrt{n},则返回 S3; 否则打印“n是素数”; 然后算法结束。
3.算法特点
4.1. 如何表达算法
用自然语言表示算法
除了非常简单的问题外,算法一般不会用自然语言表达。
4.2. 使用流程图来表示算法
用流程图表示算法,直观易懂。
【例6】用流程图表达5的计算! 例 2.1 中。
[例7] 将例2.2中的计算表示为流程图。
【例8】用流程图表达例2.3中闰年判定的计算。
[例9] 求解例4如下所示:
计算由流程图表示。 流程图包括:
4.3. 三种基本结构及改进流程图
顺序结构:
选择结构:
循环结构:
三种基本结构的共同特点:
4.4. 使用NS流程图来表示算法
1973年,美国学者提出了一种新型流程图:NS流程图。
顺序结构:
选择结构:
循环结构:
4.5. 用伪代码来表达算法
伪代码使用介于自然语言和计算机语言之间的单词和符号来描述算法。
4.6. 用计算机语言表达算法
【例10】求用C语言表示的1×2×3×4×5。
#
int main(int argc, char* argv[])
整数 i,t;
t=1;
我 = 2;
当我