第1章 程序逻辑与C语言概述.docx
《第1章 程序逻辑与C语言概述.docx》由会员分享,可在线阅读,更多相关《第1章 程序逻辑与C语言概述.docx(18页珍藏版)》请在冰豆网上搜索。
第1章程序逻辑与C语言概述
第一章程序逻辑与C语言概述
1.1C语言概述
【学习目标】
(1)了解C语言的发展历史
(2)掌握C语言程序的基本构成及结构特点
(3)了解C语言程序的编译与执行过程
(4)熟悉Dev-C++的运行环境
实例1C语言简介——简单的C语言应用程序
【实例任务】
输出一个表达式“1+1”的结果,然后再输出一个字符串“HelloWorld!
”,输出一串汉字“北京欢迎您!
”。
程序的运行结果如图1-1所示。
图1-1程序运行结果
【程序代码】
#include"stdio.h"
/*当引用一些输入输出函数时,要在程序开始引用此文件*/
main()/*C语言程序的主函数,程序从这里开始执行*/
{inti;/*变量声明*/
i=1+1;/*执行语句,为变量赋值*/
printf("1+1=%d\n",i);
/*输出1+1的结果2,"\n"表示输出时将插入点光标移到下一行起始位置*/
printf("HelloWorld!
\n");
/*输出字符串:
HelloWorld!
*/
printf("北京欢迎您!
\n");
/*输出一串汉字:
北京欢迎您!
*/
getch();}
/*DEVC++环境下,输出时使用此语句显示输出框*/
【相关知识】
1.C语言的发展历程
程序中,main、print、include等都是熟知的英文单词,而计算机不识别这些。
实际上,在C语言产生之前,人们编写系统软件主要是使用汇编语言。
由于用汇编语言编写的程序依赖于计算机硬件,其可读性和可移植性都比较差;而一般高级语言又不具备低级语言能够直观地对硬件实现控制和操作、程序执行速度快的特点。
在这种情况下,人们迫切需要一种既有一般高级语言特性,又有低级语言特性的语言,应运而生的C语言具备这些特性。
C语言的产生和发展与UNIX有很大的关系,其发展历程简述如下。
1972~1973年间,美国贝尔实验室的D.M.Ritchie在B语言的基础上设计出C语言,当时的C语言只是为描述和实现UNIX操作系统的一种工作语言,且只在贝尔实验室内部使用。
1973年,K.Thompson和D.M.Ritchie两人合作,将UNIX90%以上代码用C语言改写,即UNIX第5版。
1975年,UNIX第6版公布后,C语言突出的优点引起人们普遍注意。
1977年,出现了可移植的C语言。
1978年,UNIX第7版公布,K.Thompson和D.M.Ritchie以该版C编译程序为基础,合著《TheCProgrammingLanguage》一书,该书所介绍的C语言,成为后来广泛使用C语言版本的基础,被称为标准C语言。
1983年,美国国家标准化协会(ANSI)根据C语言问世以来的各种版本,对C语言进行发展和扩充,并制定了新的标准,称为ANSIC。
1990年,国际标准化组织ISO制定了ISOC标准。
1972年以来,C语言几经修改和发展,出现了多个版本。
C语言是国际上广泛流行的计算机高级语言,既可用来写系统软件,也可用来写应用软件。
目前在微机上广泛使用的版本有多个,各有特点,但它们一般都是以ANSIC为基础的,其中比较常用的版本有MicrosoftC、QuickC、TurboC、WinTC、C-Free、DevC++等。
2.C语言程序的构成
C语言应用程序是由函数构成的,以main()函数作为入口开始执行应用程序。
main()是C程序的入口函数,每个C程序必须有main()函数,且每个C程序只能有一个main()函数。
{}括起来的部分,称为函数体,是函数的执行部分。
函数体中,每条以分号“;”结尾的元素,称为语句。
C语言的语句必须以分号结尾。
语句可以一行写一条,可以一行写多条,一个单独的“;”可以自成为一条语句。
程序中的第一行语句:
#include"stdio.h"或#include,用于告诉编译器在本程序中包含标准输入/输出库的信息。
函数体中printf函数是一个用于打印输出的库函数,后面小号中的内容为这个函数的参数。
函数体中,语句“inti;”是在进行变量i的定义。
变量是内存中用于存放数据的元素,必须先定义,后引用。
程序中,“/*……*/”符号中所描述的内容,是属于某语句或某段程序的注释,为非执行语句,起到帮助读者理解程序之用。
3.程序的执行方式
计算机只能识别机器语言(即二进制代码),例如:
11011010。
但用二进制代码编程难以记忆、检错,故只能用高级语言编程。
所以
计算机须完成一个翻译过程:
将高级语言翻译成机器语言,如图1-2所示。
图1-2程序翻译过程
这种翻译过程分三种情况。
一种是汇编程序,其语言源程序代码与机器指令一一对应。
一种是编译程序,是按某种约定将源代码翻译为目标代码,通过连接程序将目标程序与所调用的标准函数库连接为一体,然后执行程序,如常用的Pascal、C语言等。
一种是解释程序,与编译程序思想相似,但是一条一条翻译,译出一句执行一句,如早期的BASIC语言。
对于编译程序,编译执行是在编写完代码后,通过特别的工具软件将源代码编译成目标代码进而转换成机器代码(即可执行程序),然后直接交给操作系统执行,也就是说程序是作为一个整体来运行的。
这类程序的优点是执行速度比较快,还有编译连接之后可以独立在操作系统上运行,不需要其它应用程序的支持;缺点是不利于调试,每次修改之后都要执行编译连接等步骤,才能看到其执行结果。
此外,有些集成开发环境与操作系统之间存在一定的依赖性,不同操作系统需要的编译器可能不相同,因此,在一个系统上编译的程序到另外一个系统上并不一定能够运行。
C语言的编译过程执行过程如图1-3所示。
图1-3编译执行示意图
4.C语言的特点
语言简洁,使用方便灵活。
C语言关键字少,ANSIC标准总共只有32个关键字,9种控制语句,压缩了一切不必要的成分。
C语言的书写形式比较自由,表示方法简洁。
可移植性好。
相对于硬件依赖性很强的汇编语言而言,C语言通过编译来得到可执行代码。
统计资料表明:
C语言编译程序80%的代码是公共的,故可以稍加修改即可用于其它的计算机。
C语言表达能力强,表达方式灵活,可以进行结构化程序设计。
另外一个重要的特点是它能直接操作计算机硬件。
当今应用广泛的嵌入式技术和单片机技术,控制硬件的代码,很多都是由C语言开发的。
C语言生成的目标代码质量高,仅比汇编语言生成的代码效率低10%~20%,是其它高级语言无法匹敌的。
5.C语言程序结构的特点
由以上实例程序可以看出,C语言程序的结构有以下几个特点:
(1)C语言程序是由若干函数构成的,每个程序必须有一个主函数,且main后的小括号不能省。
(2)C语言程序的函数体是用{}括起来的多条语句。
且函数体中每条语句均用分号结束。
(3)C语言程序的书写格式自由。
一行可以写多条语句,一条语句可以写在多行上。
(4)C语言程序可以用/*…*/来对语句进行注释。
实例2C语言环境使用介绍——用“*”输出字母A形
【实例任务】
用“*”作为边线,输出字母“A”的形状。
程序运行结果如图1-4所示。
图1-4程序运行结果
【程序代码】
#include"stdio.h"
main()
{printf("*\n");
printf("**\n");
printf("**\n");
printf("****\n");
printf("**\n");
printf("**\n");
getchar();}
【相关知识】
1.Dev-C++简介
Dev-C++是一个C&C++的开发工具,它是一款自由的软件,遵守GPL协议。
它集合了GCC、MinGW32等众多自由软件,也是不断升级的免费软件。
它的开发环境包括多页面窗口、工程编辑器及调试器等,在工程编辑器中集合了编辑器、编译器、连接程序和执行程序,为减少编辑错误,提供了高亮度语法显示。
它有完善的调试功能,能满足不同层次的用户需求,但它难以胜任规模较大的软件项目。
基于完善的调试功能并支持中文输出,本教材选用Dev-C++为开发工具。
2.显示运行结果
在使用TurboTc时,可能通过一步操作查看程序的运行结果,但在Dev-C++编写程序后,你找不到运行结果窗口。
如果要查看结果,需要在程序中进行代码操作,分以下三种情况:
在主函数最后添加语句“getch();”,它只适用于C程序。
在主函数最后添加语句“getchar();”,它适用于C/C++程序。
在主函数最后添加语句“system("pause");”,它适用于C/C++程序。
3.创建并运行C程序
打开Dev-C++,选择“文件/新建/源代码”或使用Ctrl+N,此时光标位于窗口代码编辑区,如图1-5所示。
图1-5新建程序窗口
从图1-5所示的窗口的光标处开始添加代码,如图1-6所示。
图1-6添加代码的窗口
选择菜单命令“运行/编译”或Ctrl+F9来进行编译,然后再选择菜单命令“运行/运行”或Ctrl+F10来运行查看结果。
也可以一步完成,使用“运行/编译运行”或F9来完成编译运行。
编译时如果文件尚未保存,系统会提示保存对话框,此时输入文件名后,在“保存类型”的下拉列表框中请选择“Csourcefiles(*.c)”类型,此对话框如图1-7所示。
图1-7保存文件对话框
如果选择了“运行”命令或使用F9功能键后,可以看到如图1-4所示的运行结果。
如果程序运行过程中陷入死循环,可以使用Ctrl+C结束程序的运行。
【课堂精练】
1.新建一个C语言文件,保存并运行之,程序运行结果如图1-8所示。
图1-8程序运行结果
此程序添加的代码如下:
#include"stdio.h"
main()
{printf("学习无难事,只怕有心人。
");
getch();}
2.新建一个C语言文件,要求从键盘输入两个变量的值,并求和输出。
程序的运行结果如图1-9所示。
图1-9程序的运行结果
程序代码如下:
#include"stdio.h"
main()
{inta,b,sum;/*定义三个变量*/
printf("请在下面输入变量a和b的值:
\n");
/*输出一行提示信息,\n表示将光标输出到下一行*/
scanf("%d,%d",&a,&b);/*从键盘输入两个变量的值*/
getchar();
sum=a+b;/*将a与b的和值存放到变量sum中*/
printf("两个变量的和值为:
%d",sum);/*输出sum的和值*/
getch();}
1.2程序和程序逻辑
【学习目标】
(1)掌握算法与程序的概念
(2)了解算法的基本描述方法
实例3程序与算法的概念——梵塔推理
【实例任务】
将1号柱大小不等的三个物体,移动到3号柱上,顺序必须与1号柱顺序一致。
要求每次只移动一个物体,而且每根柱上小块物体必须置于大块物体之上。
其移动过程如图1-10所示。
图1-10梵塔推理移动过程图
【相关知识】
1.程序
程序包括两部分,一是对数据的描述,即数据结构;二是对操作的描述,即操作步骤,也称为算法,它指明了解决某一具体问题的方法和步骤。
因此,计算机科学家NikiklausWirth提出如下的公式:
数据结构+算法=程序
就算法而言,大致分为两大类。
一类是数值运算算法,用于求解数值。
另一类是非数值运算算法,用于分析推理和逻辑推理。
如实例中梵塔定理,并非求解一定的数值,而只是完成一定的推理操作。
2.算法的自然语言描述
实例为梵塔难题的解题步骤,也是人逻辑思维的基本方法。
计算机的算法思想与此类似,只是表示方法不同而已。
用计算机解此题的难点,在于如何用数据结构表示每块物体的所在位置,及如何描述某一物体由1号柱移动到2号柱这一动作,这也是算法设计的关键所在。
梵塔难题可以用自然语言表示如下:
将A由1号柱移到3号柱mov(A:
1,3)
将B由1号柱移到2号柱mov(B:
1,2)
将A由3号柱移到2号柱mov(A:
3,2)
将C由1号柱移到3号柱mov(C:
1,2)
将A由2号柱移到1号柱mov(A:
2,1)
将B由2号柱移到3号柱mov(B:
2,3)
将A由1号柱移到3号柱mov(A:
1,3)
实例4算法图形描述——求n!
【实例任务】
数学上,n!
=1×2×3×……×n。
现要求输入n的值,求出n!
的值。
程序的运行结果如图1-11所示。
图1-11程序的运行结果
【程序代码】
#include"stdio.h"
main()
{intn,sum,i;
printf("请输入n的值为:
\n");
scanf("%d",&n);
getchar();
sum=1;i=1;
while(i<=n)/*引用while循环*/
{sum=i*sum;/*将i的值乘入sum值*/
i=i+1;/*i记录n的值从1至n的变化过程*/
}
printf("%d的阶乘值为:
%d",n,sum);
getch();}
【相关知识】
1.N-S图
流程图除用自然语言描述外,还可以使用图形来描述,常用的有传统流程图和N-S图。
N-S图又称为结构化盒图,它是使用一种方框来描述程序的基本结构。
以实例中求n!
为例,描绘成如图1-12所示的N-S图。
图1-12N-S图
2.传统流程图
这种方法是通过指定的几何图形框和一些箭头线来描述各个环节的操作和执行的过程。
这种描述方法比较直观,而且程序走向清晰,非常易于读者理解,易于编写C语言代码。
但如果程序比较复杂,使用传统流程图描述比较繁冗,不易理解。
以实例程序为例,绘制成如图1-13所示的传统流程图。
图1-13传统流程图
在描述传统流程时,长方形框表示执行一定的操作,如赋值或计算等。
菱形框表示条件判断。
椭圆矩形框表示程序的开始与结束。
平行四边形表示输入输出数据。
箭头表示程序语句的执行方向。
【课堂精练】
1.用N-S图形式描述1+2+3+…10的值的算法。
请将图1-14中空缺语句补充完整。
i=0
i=i+1
sum=sum+i
输出sum的值
图1-14N-S图
2.用传统流程图描述1+2+3+…10的值的算法。
请将图1-15补充完整。
的传统流程图。
图1-15传统流程图
1.3课后习题
1.3.1项目练习
一.练习目的
1.进行简单程序的编写;
2.进一步熟悉C语言的编程环境;
3.进一步巩固C语言程序的建立、编译、执行过程。
二.练习内容
1.编程输出一行汉字“我坚信:
我一定能学好C语言!
”。
2.用自然语言描述、画N-S图、画传统流程图三种方法来描述求1+2+3+…n和值的算法。
1.3.2练习题
一.选择题
1.下列有关C语言的说法正确的是____________。
(A)机器语言(B)只适合于编写应用软件
(C)高级语言(D)只适合于编写系统软件
2.下列说法中,不属于良好程序设计风格要求的是____________。
(A)程序中要有必要的注释(B)程序应简单、可读性好
(C)程序的效率第一,清晰第二(D)输入数据前要有提示信息
3.用C语言编写的代码是____________。
(A)经过编译解释才能执行(B)可以立即执行
(C)是一个源程序(D)经过编译立刻执行
4.下列语句说法正确的是____________。
(A)语句必须从第一行开始书写(B)一个语句只能写在同一行上
(C)一个语句可以书写在多行上(D)一个语句不得多于80个字符
5.一个程序总是从____________位置开始执行。
(A)第一个函数(B)main()
(C)程序的第一行(D)第一条执行语句
6.下面对C语言的特点,说法不正确的是____________。
(A)C语言是一种结构化模块化的程序设计语言
(B)C语言程序的可移植性较差
(C)C语言兼有高级语言和低级语言的双重特点
(D)C语言既可以用来编写应用程序,又可以用来编写系统软件
7.下列不是C语言特点的是____________。
(A)C语言程序由一个或多个函数组成
(B)C语言程序可以由一个或多个文件组成
(C)C语言程序中有且只有一个main()函数
(D)C语言程序执行时,通常是从程序中的第一个函数开始执行的
8.以下对C语言的描述正确的是____________。
(A)C语言源程序中可以有重名的函数
(B)C语言源程序中要求每行只能书写一条语句
(C)在C语言程序中main函数的位置是固定的
(D)注释可以出现在C语言源程序中的任何位置
9.下列说法中,错误的是____________。
(A)主函数只能调用用户函数或系统函数,用户函数可以相互调用。
(B)每个语句必须独占一行,语句的最后可以是一个分号
(C)每个函数都有一个函数头和一个函数体,主函数也不外
(D)程序是由若干个函数组成,但是必须有且只能有一个主函数
10.在C语言中,对于main()位置要求说法正确的是____________。
(A)必须在最开始(B)必须在系统调用的库函数的后面
(C)可以任意(D)必须在最后
11.一个C语言程序的执行是从____________。
(A)本程序的main()函数开始,到本程序的最后一个函数结束
(B)本程序的第一个函数开始,到本程序的最后一个函数结束
(C)本程序的main()函数开始,到main()函数结束
(D)本程序的第一个函数开始,到本程序的main()函数结束
二.填空题
1.C程序是由_________构成的,这里面有且只有一个______函数,该函数名为___________。
2.C语言源程序文件的后缀名是__________,经过编译连接后,生成的文件的后缀是_____________。
3.C语言程序的执行,总是起始于____________。
4.C语言中函数体以_________开始,以___________结束。
5.C程序注释是由__________和_________所界定的文字信息构成的。