C语言与程序的算法

更新时间:2023-07-26 13:27:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

C语言与程序的算法

第1章 C语言与程序的算法

总体要求:

了解C程序的一般结构及特点。

了解C程序的编辑、调试与运行等上机操作过程。

理解算法的概念及其特性,了解算法的描述方法。

相关知识点:

了解计算机软件、计算机语言及分类的知识。

熟悉Windows系统基础知识及操作。

学习重点:

C程序的结构、特点以及算法的概念。

C语言是20世纪70年代初出现的、国际上广泛流行的计算机高级语言,它既可以用来编写底层系统软件,也可以用来开发应用软件。目前,C语言在我国已经成为学习程序设计的入门语言。本章将首先向大家展示几个简单的C程序,并介绍C程序的特点,然后在Visual C++ 6.0中演示C程序的编辑、编译、调试和运行的操作过程,最后介绍程序算法的概念及其描述方法。

1.1 简单的C程序及特点

1.1.1 几个简单的C程序

【实例1-1】 显示Hello, World!

#include "stdio.h"

main()

{

} printf("Hello,World!\n");

本程序的作用是输出以下一行信息:

在该程序中,#include用来引用C语言的库函数文件。stdio.h是标准输入输出库函数文件。main表示主函数的名字。每一个C程序都必须有一个main()函数。函数体由若干行语句组成,由大括号{}括起来。函数体中的每一条语句以分号结尾。本例的函数体中只包含一条语句。printf()是C语言中的输出函数,将圆括号()内的字符串显示输出。字符串可

C语言与程序的算法

\n”是换行符,表示在输出“Hello,World!”之后自动 main()

{

}

int a,b,money; /*定义了三个变量名*/ a=1219; b=23; /*设单价a=1219元/台,数量b=23台*/ money=a*b; printf("应付款是%d元\n",money);

本程序的作用是计算两个整数a和b的乘积,并显示以下一行结果信息:

在该程序的主函数main中,第一行的int表示定义整数型变量。“/* */”表示注释,增加注释的目的是为了方便人阅读或修改程序,程序被编译时它将被忽略,在运行时不起作用。注释可以添加在程序中的任何位置。第三行“money=a*b”表示先将变量a和变量b的值相乘,再将乘积保存到变量money中。第四行中“%d”是输入输出的“格式字符串”,表示以十进制整数形式输出money的值。

【实例1-3】 显示使用字符拼成的图案。

#include "stdio.h"

main()

{

void stars(void); /*声明函数stars*/ stars(); /*调用函数stars*/ printf("* 你好,我是小罗 *\n"); stars(); /*调用函数stars*/

}

void stars() /*定义函数stars*/

{

} printf("******************

\n");

本程序的作用是输出以下3行字符组成的图案:

该程序由两个函数组成,一个是主函数main(),另一个是显示星号的函数stars()。在该程序中,主函数体的第一行是声明函数stars,stars前的void表示不需要stars()返回任何值给main(),圆括号中的void表示不需要main()传送任何值给stars()。第二行和第四行表示重复调用函数stars()。stars()函数的作用是显示一行由18个星号组成的图案,因此其函数体仅由一条printf语句组成。

C语言与程序的算法

【实例1-4】 求两个数的较大数。

#include "stdio.h"

main()

{

}

int max(int x,int y) /*定义函数max,x和y是整数型的形式参数*/

{

int z;

if(x>y) z=x; /*if_else表示汉语逻辑:如果 ,否则 */

} else z=y; return(z); /*返回比较结果z*/ int a,b,c; /*定义三个整型变量a、b、c*/ int max(int,int); /*声明函数max*/ printf("a="); scanf("%d",&a); /*输入变量a的值*/ printf("b="); scanf("%d",&b); /*输入变量b的值*/ c=max(a,b); /*调用函数max并将结果返回给变量c*/ printf("max=%d\n",c); /*显示变量c的值*/

本程序的作用是首先输入两个任意整数,然后显示较大的那个数。本程序由两个函数组成:一个是主函数main(),另一个是求较大数的函数max()。在本程序中,max()函数的功能是首先求出x和y中的较大者,并存放到变量z中,然后通过return语句将z的值返回给调用它的函数main()。

main()函数体的第一行是定义3个整数型变量a、b、c,第二行是声明函数max(),第三行和第四行提示用户运行程序时输入变量a和b的值,第五行调用函数max()并返回较大数给变量c,第六行显示变量c的值。其中的scanf()是C语言中的输入函数,其后面的圆括号包括了两个东西:一个是"%d",表示输入给变量a或b的值是十进制整数;另一个是&a或&b,其中“&”表示“取地址”,不可缺少。scanf语句执行的结果是将十进制整数的数值输入到变量a或b的地址所标志的内存单元中。main()函数在调用函数max()时,首先将实际参数a和b的值分别传送给max()函数中的形式参数x和y,执行函数max()后,即可获得a

和b的较大数。

本程序的运行效果如下:

1.1.2 C程序的特点

C语言与程序的算法

printf()函数用户自己定义的函数由用户自己命名(须。每一个函数名后紧跟一对圆括号,不

1-3中的函数stars()。

2.C程序中的函数的组成

C程序中一个函数由两部分组成:函数的头部和函数体。

(1)函数的头部

函数的头部即函数的第一行,包括函数返回值类型、函数名、函数形参名及函数形参类型的说明。一个函数的形参可以没有,也可以有多个。当一个函数带多个形参时,形参之间用逗号隔开。例如在实例1-4的“int max(int x,int y)”中max是函数名,x和y是函数的形参名,int表示函数返回值和形参的类型都是整数型。

(2)函数体

函数体使用一对大括号{}括起来,通常由声明部分和执行部分组成。函数的声明部分用来定义即将使用的变量名或声明即将调用的函数,例如在实例1-4中的语句“int a,b,c;”和“int max(int,int);”,前者表示定义3个整型变量a、b、c,后者表示声明函数max。函数体的执行部分由若干个语句组成。一个函数体可以没有声明部分,也可以没有执行部分,甚至不包括任何语句,例如:

它是一个空函数。

3.C程序的执行

一个C程序总是从主函数main()开始执行,而不论它处在整个程序的什么位置。因此,main函数可以放在所有其他函数之前,也可以放在所有其他函数之后。

4.C程序的语句

C程序中的每个语句必须以分号结尾。在书写时,源程序的一行可以书写几条语句,一条语句也可以分写在多行上。

5.C程序的输入与输出操作

C语言本身没有输入输出语句。输入输出操作是通过调用头文件stdio.h中的库函数scanf()和printf()来完成的,因此在程序的最开始需要使用include来引用头文件stdio.h。函数scanf()表示将数据输入到变量名所标识的内存单元,例如在实例1-4中的scanf("%d",&a)。函数printf()用来输出字符串数据,如果需要输出变量的值,则只需在字符串中用诸如%d的格式字符代替变量名,并在右括号之前列出变量名即可,例如在实例1-2中的printf("应付款是%d元\n",money)。

6.C程序的注释

在C程序中,用户可以使用/* */添加注释信息,增加注释的目的是为了方便人阅读或修改程序,程序被编译时它将被忽略,在运行时不起作用。注释可以添加在程序中的任何位置。经验表明适当地添加注释,对程序的重要部分进行说明,可大大增强程序的可empty() { }

C语言与程序的算法

读性。

1.2 C程序的上机操作

从上一节所展示的例子可以看出,C程序实际上是根据问题的要求并遵照C语言的某些规定书写出来的东西。作为程序设计的初学者,要知道良好的程序设计习惯是先在纸上写好程序再上机运行,切忌盲目上机。

1.2.1 C程序的上机操作过程

在编好一个C程序后,该如何上机运行呢?在纸上写好一个程序后,要经过“上机输入并编辑源程序→对源程序进行编译→与库函数进行连接→运行可执行的目标程序”这样几个步骤,操作过程如图1-1所示。其中,实线表示操作流程,虚线表示文件的输入和输出。.cpp

、.obj、.exe分别表示完成编辑、编译、连接后所产生的文件的扩展名。

图1-1 C程序的上机操作过程

1.2.2 C程序的编译器

C语言与程序的算法

DOS平台上使用的Turbo C 、在C++和Microsoft Visual C++以及在Linux平台上使用的为蓝本阐述C语言在程序设计上的应用。

C程序的操作过程

1.编辑C语言源程序

Microsoft Visual C++ 6.0是一个功能非常强大的集编辑、编译、连接、调试和运行程序于一体的软件开发平台。若要编辑C语言源程序,则按如下操作步骤进行:

(1)启动计算机,进入Windows XP。

(2)选择“开始→所有程序→Microsoft Visual Studio 6.0→Microsoft Visual C++ 6.0”菜单命令,以启动

Microsoft Visual C++ 6.0。Microsoft Visual C++启动后的操作界面如图1-2所示。

图1-2 Microsoft Visual C++的主窗口

(3)在Microsoft Visual C++主窗口中选择“File→New”菜单命令,以弹出“New”对话框。

(4)在“New”对话框选择“Files”选项卡,在列表框选择“C++ Source File”,然后在“File”文本框中输入想要创建的源程序文件名(如myfile),并在“Location”文本框中输入存盘路径(如d:\test),也可以通过单击右边的按钮

主窗口。

(5)在新出现的源程序文档窗口(如“d:\test\myfile.cpp”)中输入源程序代码。源程序文档的编辑操作与Word操作相同,如图1-4所示。

(6)源程序文档编辑操作结束后,如果需要保存,选择“File→Save”菜单命令即可。注意,在Microsoft Visual C++中C语言源程序文件扩展名为.cpp。 ,弹出“Choose Directory”对话框后选择磁盘路径,如图1-3所示。之后,单击“OK”按钮,返回Microsoft Visual C++

C语言与程序的算法

图1-3 “New”对话框

图1-4 编辑源程序

C语言与程序的算法

图1-5 编译创建对话框

编译结束后,Microsoft Visual C++编译器在主窗口下方的“Output”窗框中输出编译结果信息(如果在主窗口中看不到“Output”窗框,可右击主窗口的菜单栏,勾选“Output”快捷菜单),如图1-6所示。如果源程序中存在错误,则显示错误的个数以及错误原因分析信息。此时需要修改源程序中的所有错误,重新编译。如果源程序通过编译,则显示“0 error(s)”,同时编译器在源程序文件所在文件夹中生成一个新文件夹“

Debug”,并将目标程序.obj文件存入到该文件夹中。

图1-6 在“Output”窗框中的编译信息

注意,编译器除了输出源程序中是否存在错误外,还显示警告信息,如图1-6中所示的“1 warning(s)”,因为警告信息不影响程序的运行,因此初学者可以不予理会。

3.连接目标程序

当源程序通过编译生成目标程序.obj文件后,如果选择“Build→Build .exe”菜单命令或按<F7>键,即可进行连接目标程序操作。连接操作的意义是将目标程序.obj文件和库函数或其他目标程序连接成可执行的目标程序。连接过程由Microsoft Visual C++自动完成。连接操作结束后,系统显示“0 error(s),0 warning(s)”信息(如图1-7所示),同时在

“Debug”文件夹中生成可执行的目标程序文件.exe。

图1-7 在“Output”窗框中的连接信息

4.执行目标程序

当源程序经过编译和连接操作最终生成可执行的目标程序后,在Microsoft Visual C++主窗口选择“Build→Execute .exe”菜单命令或按<Ctrl>+<F5>键,即可执行目标程序。

C语言与程序的算法

1.3 程序的算法

1.3.1 算法的概念与特性

1.算法的概念

什么是程序?程序就是一组计算机能识别和执行的指令(其中指令表示计算机能执行的特定操作)。对于初学者来说,这个描述往往让人一头雾水而不得要领。实际上,程序就是使用某一种计算机语言,根据问题的要求而编写出来的文档,如实例1-4所示。

编写程序的目的是对问题中的数据进行分析或计算,最终得到我们想要的结果。对于一个复杂的问题,往往从两个方面入手解决:一是明确要解决的问题是什么,它隐含了哪些数据;二是针对这些复杂的数据,该使用何种方法完成计算(即算法)。因此,一个程序也应该包括两方面的内容:一方面对数据进行描述,指定数据的类型和数据之间的关系(即数据结构),如在实例1-4中的“int a,b,c;”;另一方面对数据的操作进行描述,根据操作步骤书写出能实现操作的语句序列,如在实例1-3中的“a=1219; b=23; money=a*b; printf("应付款是%d元\n",money);”。

可见,作为程序设计人员,必须认真考虑和设计数据结构和操作步骤(即算法)。著名计算机科学家沃思(Nikiklaus Wirth)提出一个公式:

数据结构+算法=程序

综上所述,对于人来说,算法是为解决一个问题而采取的方法;而对于计算机来说,算法是具体的实实在在的操作序列或语句序列。C程序就是根据C语言的语法规则而编写的语句序列,语句的先后序列就体现了C程序的算法。

2.算法的特性

一个算法应该具有以下特性:

(1)有穷性

一个算法包含有限的操作步骤,而不能是无限的,否则意味着执行程序时永远不会 停止。

(2)确定性

算法中的每一步骤操作应当是确定的,而不应当是含糊的、模棱两可的。如果算法中具有不确定的操作描述,则算法无法通过编译,也就无法得到目标程序。例如,在实例1-3的“a=1219; b=23; money=a*b;”中,如果去掉前面的“a=1219; b=23;”,则操作“money=a*b;”就是不确定的。

(3)有零个或多个输入

如果运算所依赖的对象在程序设计时无法确定,则需要在程序执行时指定。这就意味着在执行程序时需要输入数据。一个算法可以没有输入,也可以有多个输入。例如在实例

C语言与程序的算法

例如在实例1-4中函数max()

z的值)返回给调用它的main()函数。

(5)有效性

有效性是指算法中的每一个操作步骤都应当有效地执行,并得到确定的结果。例如,若设x=1,a=0,则x/a是不能有效执行的。

1.3.2 算法描述方法

算法的描述方法有用自然语言表示算法、流程图表示算法、N-S盒图表示算法、伪代码表示算法、计算机语言表示算法等。下面重点介绍如何用自然语言、流程图和计算机语言描述算法。对于N-S盒图和伪代码表示算法的问题,请参考相关书籍。

1.用自然语言表示算法

自然语言就是人们日常使用的语言,可以是汉语、英语或其他语言。用自然语言表示算法,则算法通俗易懂,但文字冗长,容易出现歧义。自然语言所描述的内容往往不太严格,要根据上下文才能判断其正确含义。在算法分析的初始阶段使用自然语言描述算法是恰当的,尤其对于初学者来说,这是学习程序设计时迈出的第一步。

【实例1-5】 用自然语言描述1+2+3+ +1000的算法。

【分析】 对于此问题,人工计算时有两种方法:第一种方法是先进行1+2,再加3,再加4,一直加到1000,这种方法称为逐个相加法;第二种方法是进行(1+1000)+(2+999)+ (3+998)+ +(500+501)=500*1001=500500。逐个相加法虽然在人工计算时比较慢,但更具有规律性,因此适合计算机进行。在使用逐个相加法进行计算时,如果引入两个变量,一个变量代表要逐个相加的数,另一个变量代表每一次相加的结果。刚开始设前者的值为1,后者的值为0。在第一次将两个变量的值相加时,实际进行0和1相加,得1。然后,将结果1存入到后一个变量中,再将前一个变量的值增加1,进行第二次相加。在第二次将两个变量的值相加时,实际上进行1和2相加,得3。然后将结果3存入到后一个变量中,再将前一个变量的值增加1,再进行第三次相加 依此类推,直到前一个变量的值大于1000时,停止操作。最后,将后一个变量的值输出,所输出的结果就是希望得到的结果。而当计算停止的时候,我们一共重复了1000次相同的操作。

【算法】 现在设前一个变量为i,后一个变量s,在进行每一次重复操作之后增加逻辑判断,判断i的值是否大于1000,如果大于1000,则停止计算,否则重复相同操作。相应算法描述如下:

S1:把1存入变量i中;

S2:把0存入变量s中;

S3:把i的值和s的值相加,相加结果再次存入变量s中;

S4:把变量i的值增加1,相加结果再次存入变量i中;

S5:如果变量i的值不大于1000,则返回到S3,从第S3步起重复进行操作;否则继

C语言与程序的算法

续下面操作;

S6:将s的值输出,结束。

如果用“=”表示把左边的数据或计算结果存入右边的变量中,则上面的算法可简写成如下形式:

S1:i=1;

S2:s=0;

S3:s=s+i;

S4:i=i+1;

S5:如果i≤1000,则返回S3,重复操作,否则继续;

S6:输出s,结束。

2.用流程图表示算法

流程图使用一些图形符号来表示算法中的各种操作。用图形表示算法,直观、形象、易于理解。在流程图中常用的符号如图1-8所示。

图1-8 流程图常用的图形符号

在图1-8中菱形框的作用是对一个给定的条件进行逻辑判断,根据给定的条件是否成立来决定如何执行其后的操作。连接点(小圆圈)用于将画在不同地方的流程线连接起来。使用连接点,可以避免流程线交叉或者过长,使流程图更加清晰。注释框不是流程图的必要部分,不反映流程和操作,只是为了对流程图中某些框的操作做必要的补充说明,以帮助人们阅读和理解流程图。

【实例1-6】 使用流程图描述实例1-5中的算法。

该算法的流程图如图1-9所示。

3.用计算机语言表示算法

自然语言体现了我们分析问题的过程,流程图直观形象地表示了算法。实际上,无论是自然语言描述的算法,还是流程图描述的算法,它们都是从人的角度出发并为人写的,计算机是无法识别的。我们的任务是用计算机完成问题的求解,因此最终还是要考虑如何

C语言与程序的算法

图1-9 流程图

【实例1-7】 使用C语言描述实例1-5的算法。

#include "stdio.h"

main()

{

int i,s;

i=1;s=0;

while(i<=1000)

{

s=s+i; i=i+1;

}

printf("%d\n",s);

在这里,不打算详细介绍上述程序的细节,读者只需大体看懂它即可。在后续各章中会详细介绍C语言有关的使用规则。 }

本 章 小 结

在我国,C语言已经成为大多数学生学习程序设计时的入门课。作为C语言教材来说,其第一章也就是学习程序设计时的第一道门槛。本章从初学者的角度出发,重点回答了C程序是什么、它有什么特点、如何上机操作及其算法如何描述等问题。

C语言与程序的算法

习 题 一

一、选择题

1.下面是有关C程序的叙述,不正确的是( )。

A)一个C源程序可由一个或多个函数组成

B)一个C源程序必须包含一个main函数

C)C程序的基本组成单位是函数

D)在C程序中,注释说明只能位于一条语句的后面

2.下面是有关C程序的叙述,不正确的是( )。

A)C程序是用C语言书写的程序

B)C程序的每一行都以分号为结束标志

C)C程序中的函数可以是空函数

D)C语言本身不具备输入输出语句,但C程序可以有输入输出操作

3.下面是有关C程序上机操作的描述,正确的是( )。

A)Microsoft Visual C++ 6.0 具有编辑、编译、连接和执行程序的功能

B)将C程序转化成.exe文件的操作称为编译操作

C)在Microsoft Visual C++ 6.0中C源程序文件的扩展名是.obj

D)学习程序设计最好的方法就是一边上机操作一边写程序

4.程序的算法不具有的特点是( )。

A)有穷性 B)确定性 C)可执行性 D)有效性

5.下面是有关流程图符号的描述,说法正确的有( )。

A)平行四边形框表示逻辑判断

B)菱形框表示计算处理

C)矩形框表示算法的开始和结束

D)带箭头的线段表示算法操作流程的方向

二、判断题

1.C程序总是从第一行开始执行,直到最后一行为止。 ( )

2.C程序中函数名后面的圆括号不可省略。 ( )

3.C源程序中的/* */表示要求计算机重复执行的部分。 ( )

4.算法中的输入操作就是要求用户在执行程序过程中要键入相应数据。 ( )

5.使用流程图表示的算法,计算机是不能够识别的。 ( )

三、设计题

1.用自然语言写算法,计算1到1000之间能被2或3整除的数的总和。

2.画流程图,输入50个考试成绩,求最高分,然后显示输出。

本文来源:https://www.bwwdw.com/article/gr4m.html

Top