7.17 C语言程序引言

一、一个C语言程序

运行程序,输入4,输出24,即4的阶乘

        C程序由函数(Function,一种子程序)所组成。上述程序涉及4个函数:main()、factorial()、scanf()和printf()。其中,scanf()和printf()是系统事先设计好的函数,分别用于数据的输人和输出:factorial()是程序中定义的函数,主要目的是求!,并将作为函数的参数;main()函数是程序的主函数。

        所有的C程序都有且只有一个main()函数。C程序从main()函数处开始运行,当main()函数结束时,程序也就结束了。对于上述例子,程序先执行main()函数中的seanf()函数调用,输人数据n,然后调用print()函数,输出结果。当调用print()函数时,必须要先知道所要输出的数据,即factorial(n)。因此,此时发生了对factorial()函数的调用(Call),调用该函数所获得的结果作为printf()函数的参数(Argument),由prin()函数负责将该值按十进制整数(%d)的形式输出。

二、程序与程序设计语言

    1.程序和指令

        计算机程序(Program)是人们为解决某种问题用计算机可以识别的代码编排的一系列加工步骤。

        计算机最基本的处理数据的单元应该就是计算机的指令了。单独的一条指令本身只能完成计算机的一个最基本的功能,如实现一次加法运算或实现一次大小的判别。计算机所能实现的指令的集合称为计算机的指令系统。

        程序在计算机中是以0、1组成的指令码来表示的,即程序是0、1组成的列,这个序列能够被计算机所识别。程序与数据一样,共同存放在存储器中。当程序要运行时,当前准备运行的指令从内存被调入CPU中,由CPU处理这条令。这种将程序与数据共同存储的思想就是目前绝大多数计算机采用的冯:诺依曼模型的存储程序概念。

        如果程序设计直接用0、1序列的计算机指令来写,那将是一件难以忍受的事。所以,人们设计了程序设计语言,用这种语言来描述程序,同时应用一种软件(如编译程序)将用程序设计语言描述的程序转换成计算机能直接执行的指令序列。

   2.程序设计语言的功能

       程序设计语言是人用来编写程序的手段,是人与计算机交流的语言。人为了让计算机按自己的意愿处理数据,必须用程序设计语言表达所要处理的数据和数据处理的流程。因此,程序设计语言必须具有数据表达和数据处理(称为控制)的能力。

    (1) 数据表达(Data Representation)
        世界上的数据多种多样,而语言本身的描述能力总是有限的。为了使程序设计语言能充分、有效地表达各种各样的数据,一般将数据抽象为若干种类型。数据类型(DataType)就是对某些具有共同特点的数据集合的总称。如人们常说的整数、实数就是数据类型的例子。

        在程序设计语言中,一般都事先定义几种基本的数据类型,供程序员直接使用,如整型、实型(浮点型)、字符型等。这些基本数据类型在程序中的具体对象主要是两种形式常量(又称常数,Constant)和变量(Variable)。常量值在程序中是不变的,例如123是一个整型常量,12.3是一个实型常量,"a是一个字符型常量。变量则可对它做一些相关的操作,改变它的值。例如,在C语言中可以通过imni来定义一个新的变量i,然后就可以对该变量进行某种操作,如赋值i=20。
        同时,为了使程序员能更充分地表达各种复杂的数据,程序设计语言还提供了构造新的具体数据类型的手段,如数组(Array)、结构(Siueture)、文件(File)、指针(Pointer)等。例如,在C语言中可以通过int a[10]来定义一个由10个整数组成的数组变量。

    (2) 流程控制(Flow Control)

        程序设计语言除了能表达各种各样的数据外,还必须提供一种手段来表达数据处理的过程,即程序的控制过程。程序的控制过程通过程序中的一系列语句来实现。

        在结构化程序设计方法中,一个模块可以是一条语句(Statement)、一段程序或一个函数等。

        按照结构化程序设计的观点,任何程序都可以将模块通过3种基本的控制结构进行组合来实现。这3种基本的控制结构是顺序、分支和循环。

    (3)程序设计语言的语法

        程序员用程序设计语言编写程序以处理相应的问题。在程序中,一般要表达数据,包括定义用于存储数据的变量;还要描述数据处理的过程,包括语句级的控制和单位级的控制。为了让计算机能理解程序员在程序中所描述的这些工作,用程序设计语言所写的程序必须符合相应语言的语法(Grammar)。

        一般把用程序设计语言编写的未经编译的程序称为源程序(SourceCode,又称源代码)。从语法的角度看,源程序实际上是一个字符序列。这些字符序列按顺序分别组成了一系列“单词”。这些“单词”包括语言事先约定好的保留字(Reserved Words,如用于描述分支控制的if、else,用于描述数据类型的int等)、常量、运算符(0perator)、分隔符以及程序员自己定义的变量名、函数名等。

    (4)程序的编译与编程环境

    a.程序的编译
        计算机硬件能理解的只有计算机的指令,用程序设计语言编写的程序不能被计算机直接接受,这就需要一个软件将相应的程序转换成计算机能直接理解的指令序列。对C语言等许多高级程序设计语言来说,这种软件就是编译程序(Compiler,又称为编译器)。编译程序首先要对源程序进行词法分析,然后进行语法与语义分析,最后生成可执行的代码如果程序中有语法错误,编译器会直接指出程序中的语法错误。但是,编译程序能生成可执行的代码并不意味着程序就没有错误了。对于程序中的逻辑错误,编译程序是发现不了的、必须通过程序的调试才能发现。

    b.编程环境
        编写一个程序需要做很多工作,包括编辑程序(Edit)、编译(Compile)和调试等过程。所以,许多程序设计语言都有相应的编程环境。程序员可以直接在该环境中完成上述工作,以提高编程的效率。
        总的来说,要掌握一门程序设计语言,最基本的是要根据程序设计语言的语法要求掌握表达数据、实现程序的控制的方法和手段,并会使用编程环境进行程序设计。

    3.实现问题求解的过程

        问题:求1~100间所有偶数的和。
    (1)问题分析与算法设计
           本问题求在一定范围内(1~100)、满足一定条件(偶数)的若干整数的和,是一个求累加和的问题。
           这类问题的基本求解方法是:设置一个变量(如sum),将其初值置为0,再在指定的范围(1~100)内寻找满足条件(偶数)的整数,将它们一个一个累加到sum中。为了处理方便,将正在查找的整数也用一个变量表示(如i)。所以,一次累加过程的C语言语句为:

        sum=sum+i;
它表示把sum的值加上i后再重新赋给sum。
        这个累加过程要反复做,就要用程序设计语言的循环控制语句来实现。在循环过程中:

                ①需要判别i是否满足问题要求的条件(偶数)。可以用分支控制语句实现只把满足条件的整数累加到sum中。
                ②需要对循环次数进行控制。这可通过i值的变化进行控制,即i的初值设为1,每
循环一次加1,一直加到100为止。

        流程图是算法的图形表示法,它用图的形式掩盖了算法的所有细节,只显示算法从开始到结束的整个流程。

        对于求1~100偶数和的问题,基于前面的分析,可以用流程图来描述解决步骤(算法)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值