前言
对于程序设计语言(C语言)要有所了解,更重要的是通过不断的编程实践,逐步领会和掌握程序设计的基本思想和方法。
一、一个C语言程序
求阶乘问题。输入一个正整数n,输出n!
源程序
# include <stdio.h> //编译预处理命令
int factorial (int n); //函数声明
int main (void)
{
int n;
scanf("%d",&n);
printf("%d\n",factorial(n));
return 0;
}
int factorial(int n)
{
int fact = 1;
for(int i = 1;i <= n;i++)
{
fact *= i;
}
return fact;
}
运行程序,输入6,输出720,即6!
思考
当输入31时,输出738197504;
输入32时,输出**-2147483648**;
输入33时,输出**-2147483648**;
输入34及以上时,输出0;
这写错误的结果是为什么?
二、程序与程序设计语言
计算机程序是人们为解决某种问题用计算机可识别的代码编排的一系列加工步骤。计算机能严格按照这些步骤去做,包括计算机对数据的处理。程序的执行过程实际上是对程序所表示的数据进行处理的过程。
一方面,程序设计语言提供了一种表示数据与处理数据的功能;
另一方面,编程人员必须按照语言所要求的规范即语法规则进行编程。
1.程序与指令
Input X; | 将当前输入数据存储到内存的X单元 |
---|---|
Otput; | 将内存X的单元输出 |
Add X Y Z; | 将内存X单元的数据与Y单元的数据相加并将结果存储到Z单元 |
Sub X Y Z; | 将内存X单元的数据与Y单元的数据相减并将结果存储到Z单元 |
BranchEq X Y P; | 比较X与Y,若相等程序跳转到P处执行,否则继续执行下一条指令 |
Jump P; | 程序跳转到P处执行 |
Set X Y; | 将内存Y的值设为X |
虚拟程序1:输入三个数A、B、C,求A+B+C的结果。
Input A;
Input B;
Input C;
Add A B D;
Add C D D;
Output D;
虚拟程序2:输入两个数A、B,求A*B的结果。
- Input A;
- Input B
- Set 0 X;
- Set 0 C;
- BranchEq X B 9;
- Add C A C;
- Add 1 X X;
- Jump 5;
- Output C;
程序在计算机中是以0、1组成的指令码来表示的,即程序是0、1组成的序列,这个序列能被计算机所识别。程序与数据一样共同存放在存储器中。当程序要运行时,当前准备运行的指令从内存被调入CPU中,由CPU处理这条指令。
2.程序的编译
计算机硬件能理解的只有计算机的指令,用程序设计语言编写的程序不能被计算机直接接受,这就需要一个软件将相应的程序转换成计算机能直接理解的指令序列。
这种软件就是编译程序即编译器。编译器首先要对源程序进行词法分析,然后进行语法与语义分析,最后生成可执行的代码。如果程序中有语法错误,编译器会直接指出程序中的语法错误。
但是,编译程序能生成可执行文件的代码并不意味着程序就没有错误了。对于程序中的逻辑错误,编译程序是发现不了的,必须通过程序的调试才能发现。
所以编写一个程序需要做很多工作,包括编辑程序、编译和调试等过程。