《C语言程序设计》-第1章-概论_第1页
《C语言程序设计》-第1章-概论_第2页
《C语言程序设计》-第1章-概论_第3页
《C语言程序设计》-第1章-概论_第4页
《C语言程序设计》-第1章-概论_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C

语言程序设计但愿她是你知识大厦的又一块基石。但愿她是开启你智慧的又一把钥匙!CLanguageProgramming学习目的通过学习掌握C语言的语法结构,理解程序设计的一般方法和基本技术。学习算法的概念以及结构化程序设计的一般方法,提高分析能力和综合能力。能够用C语言编程解决一定的实际问题,提高计算能力。高级语言的概念计算机的语言在发展的过程中经历了三个阶段:如:表示2+301110000110101000010MOV

AC,3ADD

AC,22+3面向机器的二进制语言、CPU直接运行。面向机器符号化语言,翻译后运行。面向问题的类自然语言,翻译后运行。编译或解释系统SourceObject机器语言汇编语言高级语言语言的基本元素、构词方法、句法、程序结构等规则的集合。解决特定问题的步骤描述。结构化程序设计的思想方法。学习的层次语法算法方法把我所考察的每一个难题,都尽可能地分成细小的部分,直到可以而且适于加以圆满解决的程度为止。

———笛卡尔(法)实践FromRequirementtoProgramRequirement:Triangle’sareaInput:a、b、cabcInput:a,b,c

OutputareaBlackboxFromRequirementtoProgram约束:任意两边和大于第三边。第一章概论Chapter1Introduction1.1C语言简介

1.计算机与程序

C语言是由DennisMRitchie和BrianWKernighan于1972年在B语言的基础上提出的,他们用C语言重写了在PDP–11小型机上的Unix,并取得了成功。程序是用计算机语言描述的、为解决某一问题、满足一定语法规则的语句序列。计算机是可以按照人们事先编写的程序高速、精确地进行数据加工、处理的电子装置。人们通过程序明确地告诉计算机做什么,以及如何去做这些事情,并将事先编写的程序存储到计算机内部,启动计算机执行程序,计算机在执行程序的过程中,完成程序规定的任务

2.计算机的语言

C语言是由DennisMRitchie和BrianWKernighan于1972年在B语言的基础上提出的,他们用C语言重写了在PDP–11小型机上的Unix,并取得了成功。(1)机器语言是由0和1二进制代码按一定的规则组合而成的指令序列,它是面向具体计算机系统的,不同的计算机系统识别的机器语言是不同的(2)汇编语言 汇编语言是采用英文助记符表示的语言(3)高级语言 高级语言是由表达各种意义的英文单词和数学式子按照一定的语法规则构成的语言C语言是面向过程的语言,C++语言是面向对象的语言3.C语言的发展

C语言的发展过程与UNIX操作系统密不可分 1963年英国的剑桥大学推出了,并于1967年对其进行了简化推出了; 1970年美国贝尔实验室以BCPL语言为基础,进行了进一步简化,推出了更简单的B语言,并用B语言书写了第一个操作系统UNIX。 1973年贝尔实验室推出了C语言,而且用C语言重新书写了UNIX操作系统,使其成为较完善的操作系统。 1975年,UNIX推出了6.0版本后,C语言的优点引起了人们的普遍关注,特别是1977年出现了不依赖具体机器的C语言编译文本《可移植C语言编译程序》,使得C语言移植到其他机器比较容易实现,这也使得UNIX操作系统迅速在各种机器上实现。

1983年美国国家标准委员会对C语言进行了标准化,颁布了第一个C语言的标准草案——83ANSIC;1987年又颁布了新标准——87ANSIC;1990年,国际标准化组织ISO(InternationalStandardOrganization)接受87ANSIC为ISO-C的标准。目前流行的C编译系统都以此为基础。80年代后期,贝尔实验室又为C语言增加了面向对象的特性,即C++。C语言系统依然保留在C++中,形成了C++的子集。4.C语言的特点:(1)功能强大。既可书写系统软件,也可书写应用软件。(2)移植性强。(3)是主流的编程语言之一。

(4)是模块化、结构化的程序设计语言。

(5)有着丰富的运算符和数据类型。(6)语法简洁、灵活,使用方便。(7)允许直接访问物理地址,具有一定的低级语言的特性。(8)程序生成的目标代码质量高,程序的执行效率高。1.2C程序初探

1.2.1简单的C程序【例1-1】字符串的输出。编写程序代码1-1如下,其执行结果如图

图1-1代码1-1的执行结果/*example1-1输出信息*/#include<stdio.h>voidmain(void){

printf("欢迎走进C世界!");}程序分析:1)/*example1-1输出信息*/注释语句。在C程序中,/*注释内容*/语句为注释语句,注释内容不影响程序的执行,只是为了帮助读者阅读和理解程序。(2)#include<stdio.h>文件包含,告诉系统必须包含文件stdio.h,此文件为输入和输出提供支持。(3)voidmain(void)表明以下是一个C程序的主函数。(4){表明主函数体由此开始。(5)printf("欢迎走进C世界!");此行为输出函数,其功能是在屏幕上显示双引号中的内容。(6)}表明主函数体到此结束。【例1-2】求三门课程的平均成绩。编写程序代码1-2如下,其执行结果如图/*example1-2计算平均数*/#include<stdio.h>voidmain(void){

int

mathscore,physscore,chemscore;/*代表三门成绩*/ floatavescore;/*代表平均成绩*/

mathscore=75;

physscore=85;

chemscore=95;/*三门成绩赋初值*/

avescore=(mathscore+physscore+chemscore)/3.0;/*计算平均成绩*/

printf("avescore=%f",avescore);/*输出平均成绩*/}程序分析:(1)/*example1-2计算平均数*/注释语句。(2)#include<stdio.h>文件包含,告诉系统必须包含文件stdio.h。(3)voidmain(void)表明以下是一个C程序的主函数。(4){此行表明主函数体由此开始。(5)int

mathscore,physscore,chemscore;说明语句,说明本程序需要用这3个变量,而且它们的数据类型是整型。(6)floatavescore;说明语句,说明本程序需要用这个变量,而且它的数据类型是浮点型。程序分析:(7)mathscore=75;

physscore=85;

chemscore=95;赋值语句,表明给这3个变量的初始值分别为:75、85、95。(8)avescore=(mathscore+physscore+chemscore)/3.0;此行为赋值语句,利用3个变量的初始值计算平均值。(9)printf("avescore=%f",avescore);此行为输出函数,在屏幕上输出平均成绩(10)}表明主函数体到此结束【例1-3】求两个数中的大数,由主函数独立完成。编写程序代码1-3如下,其执行结果如图/*example1-3求最大数*/#include<stdio.h>voidmain(void){int

a,b,maxvalue;/*定义3个变量*/printf("请输入2个数:");/*输出提示信息*/

scanf("%d%d",&a,&b);/*由键盘输入2个数*/if(a>b)/*比较2个数的大小*/

maxvalue=a;else

maxvalue=b; printf("2个数中的最大数是:%d",maxvalue);/*输出最大数*/}程序分析:(1)inta,b,maxvalue;说明语句,说明本程序需要用这3个整型变量。(2)printf("请输入2个数:");在屏幕上输出提示信息。(3)scanf("%d%d",&a,&b);利用输入函数,要求用户从键盘输入2个整数,分别存放到a和b的存储单元。(4)if(a>b)maxvalue=a;elsemaxvalue=b;此4行为if语句,比较2个数的大小,取其中的大数给maxvalue。(5)printf("2个数中的最大数是:%d",maxvalue);输出函数,输出最大数。【例1-4】求两个数中的大数,由主函数和子函数合作完成。编写程序代码1-4如下,其执行结果如图/*example1-4利用子函数求最大数*/#include<stdio.h>int

Getmax(int,int);/*声明子函数*/voidmain(void){

int

a,b,maxvalue;/*定义3个变量*/

printf("请输入2个数:");/*输出提示信息*/

scanf("%d%d",&a,&b);/*由键盘输入2个数*/

maxvalue=Getmax(a,b);/*调用子函数求最大数*/

printf("最大数是:%d",maxvalue);/*输出最大数*/}int

Getmax(intx,inty)/*定义子函数*/{

intz;

if(x>y)/*比较2个数的大小*/ z=x; else z=y; returnz;/*返回最大数*/}程序分析:(1)int

Getmax(int

,int);声明子函数,表明以下有一个名为Getmax的子函数,它有2个整型参数,子函数的返回值为整型。(2)maxvalue=Getmax(a,b);调用语句,调用名为Getmax的子函数,将参数a和b传递给子函数,并将返回结果赋给变量。(3)int

Getmax(intx,inty)子函数定义,表明以下是名为Getmax的子函数。(4){(子函数中的大括号)表明子函数体由此开始。(5)returnz;返回语句,返回最大数。(6)}(子函数中的大括号)表明子函数体到此结束。1.2.2C程序的基本结构实例:输入两个数及其算术运算关系,输出运算结果。/*ThisismyfirstCprogramfilename:first.c*/#include<stdio.h>voidmain(void){

charch;int

iA,iB,c;scanf(“%d%c%d”,&iA,&ch,&iB);c=fun(iA,ch,iB);printf(“%d%c%d=%d”,iA,

ch,iB,c);}intfun(intx,charop,inty){intz;switch(op){case‘+’:z=x+y;break;case‘-‘:z=x-y;break;case‘*’:z=x*y;break;case‘/’:z=x/y;}returnz;/*返回运算结果*/}子函数主函数chp1ex11.函数是构成C程序的基本单位

⒈C程序是由函数组成,其中有且仅有一个名为main的主函数,根据实际编程的需要还可以有若干个子函数,如Getmax为子函数,函数是构成C程序的基本单位

⒉一个C程序总是从主函数main开始执行,也是从主函数结束,无论主函数书写在什么位置。

⒊函数在执行过程中根据需要可以调用系统提供的库函数(如printf()),也可以调用用户定义的函数(如Getmax())。如果调用系统提供的库函数,在调用之前必须将相应的文件包含到本文件中,如果调用用户定义的函数,在调用之前必须声明2.函数的组成

⒈每一个函数由函数首部和函数体组成

⒉函数首部由函数类型、函数名、函数参数类型、函数参数名组成

⒊函数体由说明和执行两部分组成,且函数体以左大括号开始,以右大括号结束3.函数体的组成

⒈函数体内由若干条C的语句组成,C的语句有许多,如:intz;为说明语句;c=a;为赋值语句;returnz;为返回语句;/*……*/为注释语句等

⒉C的语句必须以分号“;”作为语句的结束

⒊C的语句书写比较自由,如:可在一行书写多条语句,也可将一条语句写在多行,但尽量一行只写一条语句,以养成良好的、规范的程序设计风格

4.与任何一种语言一样,C的语句也必须满足一定的语法规则4.C的语句的组成

C程序的语句中含有各种符号、名称、数值等,如:int是英语单词integer(整型)的缩写,表示整型;avescore=(mathscore+physscore+chemscore)/3.0;类似于数学式子;x>y类似于不等式;3.0代表一个数值;returnz代表的功能也与英文原意相同5.C语言程序的书写字母由于C语言区分大小写字母,一般使用小写字母,因此命名时应特别注意1.2.2C程序的基本结构1.字符集⑴字母:A、a、B、b…、Z、z52个⑵数字符号:0、1…、910个⑶特殊符号:+-*/…系统保留字系统占用词(共32个)auto、break、case、char、const、continue、default、do、double、else、enum、extern、float、for、goto、if、int、long、register、return、short、signed、sizeof、static、struct、switch、typedef、union、unsigned、void、volatile、while建议不要使用:define、undef、include、ifdef、ifndef、endif、line、error、elif、pragma2.关键字关键字又称保留字,是C语言预先规定的、具有固定意义的一些单词,如:int、return等,用户只能按其预先规定的意义来使用它们,不能改变其原来的意义。C语言的关键字如表所示关键字语义关键字语义关键字语义关键字语义auto自动double双精度int整型struct结构break中断else否则long长整型switch开关char字符enum枚举register寄存器typedef自定义类型case情况extern外部return返回union共同体const常量float浮点short短整型unsigned无符号continue继续for循环signed有符号void空类型default缺省goto转向sizeof字节数volatile可变的do循环if如果static静态while循环3.标识符C语言的标识符有系统预定义标识符和用户自定义标识符,一般用小写

⒈系统预定义标识符。系统预定义标识符是由系统预先定义的,如:main、printf等,与关键字不同的是,系统预定义标识符允许用户改变它的意义,但这样做会失去其原有的含义,从而造成误解,因而这类标识符用户也不要更改其原意

⒉用户自定义标识符。用户自定义标识符是由用户自己根据需要定义的标识符,通常用作变量名、数组名、函数名等,如:score、aver等,标识符是满足以下规则的字符序列。组成规则:⑴字母和数字以及下划线_组成。⑵以字母和下划线_开头。⑶长度不超过31个字符。⑷不能使用保留字。作用:用户为各种自定义数据命名。4.运算符C语言提供了丰富的运算符,如例1-2中的加法运算符(+)和除法运算符(/),以及例1-3中的关系运算符(>)等5.分隔符

用C语言书写的C程序中含有许多具有特定含义的符号,与自然语言一样,各种符号之间必须有一些分隔符。C语言的分隔符有空格、逗号、分号、回车(换行)等,它们用在不同的场合以区分不同的对象6.数据

例1-1中的“欢迎走进C世界!”是一种字符数据;例1-2中的mathscore、physscore、chemscore是一种整型数据;avescore是一种实型数据;分母3是一个常量;例1-3中的a>b的比较结果有2种可能,即正确(Yes)或错误(No),比较的结果又为以下进行什么操作指明了道路一个程序一般都由说明数据、输入数据、加工数据、输出数据几个部分组成1.3算法及其描述1.3.1小试身手:【例1-5】已知三角形的3条边长,利用海伦公式计算三角形的面积

1.方案一——数学解法已知三角形的3条边a=3,b=4,c=5,利用海伦公式先求三角形的半周长:再利用半周长t计算公式得面积答:由边长为3、4、5的三条边组成的三角形的面积是6

2.方案二——利用C程序解决

/*example1-5(a)计算三角形的面积*/#include<stdio.h>#include<math.h>voidmain(void){ floata,b,c;/*定义3个浮点变量*/ doublet,area;/*定义2个双精度变量*/ a=3; b=4; c=5;/*为3个变量赋值*/ t=(a+b+c)/2;/*计算中间变量*/ area=sqrt(t*(t-a)*(t-b)*(t-c));/*计算三角形的面积*/

printf("三角形的面积是:%f",area);/*输出三角形的面积*/}

3.方案三——改进C程序

/*example1-5(b)计算三角形的面积*/#include<stdio.h>#include<math.h>voidmain(void){ floata,b,c;/*定义3个浮点变量*/doublet,area;/*定义2个双精度变量*/

printf("请输入3条边长:");/*输出提示信息*/

scanf("%f%f%f",&a,&b,&c);/*由键盘输入3个数*/t=(a+b+c)/2;/*计算中间变量*/ area=sqrt(t*(t-a)*(t-b)*(t-c));/*计算三角形的面积*/

printf("三角形的面积是:%f",area);/*输出三角形的面积*/}

4.方案四——再改进C程序

/*example1-5(c)计算三角形的面积*/#include<stdio.h>#include<math.h>voidmain(void){ floata,b,c;/*定义3个浮点变量*/ doublet,area;/*定义2个双精度变量*/

printf("请输入3条边长:");/*输出提示信息*/

scanf("%f%f%f",&a,&b,&c);/*由键盘输入3个数*/ if(a+b>c&&b+c>a&&a+c>b)/*对输入的3个数进行判断*/ {/*可以组成三角形*/t=(a+b+c)/2;/*计算中间变量*/ area=sqrt(t*(t-a)*(t-b)*(t-c));/*计算三角形的面积*/

printf("三角形的面积是:%f",area);/*输出三角形的面积*/ } else/*不可以组成三角形*/

printf("这3个数无法组成三角形");/*输出提示信息*/}

5.方案五——再次改进C程序

/*example1-5(d)计算三角形的面积*/#include<stdio.h>#include<math.h>voidGetarea(float,float,float);/*声明子函数*/voidmain(void){ floata,b,c;/*定义3个浮点变量*/

printf("请输入3条边长:");/*输出提示信息*/

scanf("%f%f%f",&a,&b,&c);/*由键盘输入3个数*/

Getarea(a,b,c);/*调用子函数*/}voidGetarea(float

a,float

b,floatc)/*定义子函数*/{ doublet,s;/*定义2个双精度变量*/ if(a+b>c&&b+c>a&&a+c>b)/*对输入的3个数进行判断*/ {/*可以组成三角形*/t=(a+b+c)/2;/*计算中间变量*/ s=sqrt(t*(t-a)*(t-b)*(t-c));/*计算三角形的面积*/

printf("三角形的面积是:%f",s);/*输出三角形的面积*/ } else/*不可以组成三角形*/

printf("这3个数无法组成三角形");/*输出提示信息*/}1.3.2

算法的基本概念

1.算法(Algorithm)的概念:广义地讲:算法是解决问题的逻辑步骤,是对特定问题求解步骤的一种描述。计算机算法:是用程序解决问题的逻辑步骤,是指令的有限序列。只有通过算法能够描述出来的问题,才能够通过计算机求解。能够用算法描述的问题称为可以形式化的问题。正确的算法有三个条件:

⑴每个逻辑步骤有可以实现的语句来完成;

⑵每个步骤间的关系是唯一的;

⑶算法要能终止(防止死循环)。算法的两个关键要素动作(Action);顺序(Order)。算法举例⒈求数列n=1+2+…+m的值n,当n>10000时结束。

⒉欧几里德求m,n(m>n)的最大公约数算法S1:mModn

kS2:k不为0:

nm,kn

(原除数变成新的被除数,余数变成新的除数)。重复S1

否则:到S3。S3:输出n的值为最大公约数。步骤:S1:初始化0n,0tS2:t+1tn+tnS3:n>10000?

满足到S4,否则到S2。S4:OUTPUTn⒊算法的特征有穷性:在有限的时间和有限的资源下完成算法;确定性:各步骤之间的关系要确定;有输入:有0到多个原始数据输入;有输出:有结果输出;可行性:可以编程实现;高效性:执行速度快、占用资源少;健壮性:对数据响应正确。1.自然语言【例1-6】已知三角形的3条边长,利用海伦公式,计算三角形的面积。自然语言算法可表示如下:(1)设5个变量,其中a、b、c代表3条边,t代表中间变量,S代表面积。(2)输入3条边。(3)如任意2边之和大于第3边(可以组成三角形),则计算中间变量t,再计算面积S,输出面积S。否则,输出不能组成三角形的提示信息。(4)结束算法。1.3.2

算法的各种描述方法【例1-7】输入两个数,求其中的最大数。自然语言算法可表示如下:(1)设两个数为x和y,最大数为z。(2)输入两个数给x和y。(3)如x大于或等于y,则最大数z的值等于x的值。否则,最大数z的值等于y的值。(4)输出最大数z。(5)结束算法。

概念:以特定的图形符号加上说明,表示算法的图,称为流程图或框图。规则:从上到下,从左到右。符号及其意义:2.用传统流程图表示

⒈用框图描述函数

1x0y=

-1

x<0输入xAx0?y=1y=-1yesnoA输出y流程图描述算法举例startend⒉用框图描述求s=1+2+…+100的算法。start1

t0ss+tst+1tt>100?noyesOutputsA0A0end【例1-8】已知三角形的3条边长,利用海伦公式,计算三角形的面积。其流程图描

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论