1.1 从一个C语言程序开始
1.2 程序与程序设计语言
1.2.1 程序与指令
1.2.2 程序设计语言的功能
1.2.3 程序设计语言的语法
1.2.4 程序的编译与编程环境
1.3 C语言的发展与特点
1.4 如何实现问题求解
1.5 本章总结
例1-1. 求阶乘问题。输入一个正整数$n$,输出$n!$
比如,输入4
,输出24
main
是主函数,factorial
是我们自己定义的函数int n;
): 在内存中预留一个名为"n"的空间,用于存放整数。int factorial(int n)
): 提前告诉main
函数,“后面有一个叫"factorial"的函数,它是这样用的”,避免“先使用后定义”的编译错误。scanf
): 从键盘读取用户输入。&n
表示读取到的值要存放到变量n
的地址去。for
loop): 重复执行一段代码。这里用于实现从1到n的连乘。一份菜谱:
菜谱名 (程序名) -> 番茄炒蛋
指令1 -> 拿出两个鸡蛋
指令2 -> 将鸡蛋打入碗中并搅拌
...
例1-2. 编写程序,分别求和与乘积,其中指令定义如下:
虚拟计算机指令系统共定义7条指令
(1) 输入3个数A, B和C, 求A+B+C的结果
思考:如何求A+B-C?
(2) 输入A, 求A+A+A的结果
虚拟程序1:
Input A;
Add A A D;
Add A D D;
Output D;
虚拟程序2:
Input A;
Set 0 Z;
Add Z A Z;
Add Z A Z;
Add Z A Z;
Output Z;
(3) 输入2个数A和B,求A*B
A*B=A+A+...+A,相当于B个A相加
Input A;
Input B;
Set 0 Z;
Add Z A Z;
Add Z A Z;
...
Add Z A Z;
Output Z;
这样的思路可行否?关键在哪里?如何改进?
(续)(3) 输入2个数A和B,求A*B
A*B=A+A+...+A,相当于B个A相加
Input A;
Input B;
Set 0 X;
Set 0 Z;
BranchEq X B 9;
Add Z A Z;
Add 1 X X;
Jump 5;
Output Z;
思考:如何求(A+B)*C?
结构化程序设计方法
任何程序都可以将模块通过三种基本控制结构进行组合来实现
程序必须符合的“语法规则”,规定了代码该怎么写
问题:求1-100之间所有偶数的和
用代码编辑器编写生成程序的源文件,C语言源文件的后缀为
问题: 编写一个C程序,计算从1到n的之间的奇数之和。
(例如: 输入 100
, 输出 2500
)
要求: