C语言程序设计2完整版课件全套ppt整本书电子讲义全书ppt电子课件最全教学教程_第1页
C语言程序设计2完整版课件全套ppt整本书电子讲义全书ppt电子课件最全教学教程_第2页
C语言程序设计2完整版课件全套ppt整本书电子讲义全书ppt电子课件最全教学教程_第3页
C语言程序设计2完整版课件全套ppt整本书电子讲义全书ppt电子课件最全教学教程_第4页
C语言程序设计2完整版课件全套ppt整本书电子讲义全书ppt电子课件最全教学教程_第5页
已阅读5页,还剩584页未读 继续免费阅读

下载本文档

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

文档简介

第1章C语言概述1.1C语言的发展简史1.2C语言的特点1.3认识C程序1.4C程序的运行与调试[Return]本章学习目标了解C语言的发展简史和特点掌握C语言的基本结构及如何编写可读性良好的C程序掌握一个C程序的编辑、编译、运行和调试的一般过程1.1C语言的发展简史C语言发源于著名的美国贝尔实验室,是由该实验室的研究人员DennisRitchie

和KenThompson两人于二十世纪七十年代初在设计UNIX操作系统时开发出来的。在C语言诞生以前,系统软件主要是用汇编语言编写的,原来的UNIX操作系统就是1969年由美国贝尔实验室的KenThompson和DennisRitchie利用汇编语言开发成功的。由于汇编语言程序依赖于计算机硬件,其可读性和可移植性都很差;但一般的高级语言又难以实现对计算机硬件的直接操作,于是KenThompson于1970年设计出一种简单而且接近硬件的高级语言——B语言,并用B语言写了UNIX操作系统。1972年到1973年间,DennisRitchie在B语言基础上又设计了C语言。后来,C语言又被多次改进,并出现了多种版本。80年代初,美国国家标准化协会(ANSI),根据C语言问世以来各种版本对C语言的发展和扩充,制定了ANSIC标准(1989年再次做了修订)。

本书的叙述以ANSIC新标准为基础。本书选定的编译环境是TurboCV3.0。

目前,在微机上广泛使用的C语言编译系统有MicrosoftC、TurboC、BorlandC等。虽然它们的基本部分都是相同的,但还是略有差异,所以请大家注意自己所使用的C编译系统的特点和规定(参阅相应的手册)。[Return]C语言同时具有汇编语言和高级语言的优势。概括如下:(1)语言简洁、灵活,程序执行效率高。(2)运算符极其丰富,能够实现在其他高级语言中难以实现的运算功能。(3)数据类型丰富,可实现各种复杂的数据结构的运算。(4)灵活的结构化控制语句,是理想的结构化程序设计语言;以函数为程序基本单位,容易实现模块化程序设计。(5)语法不严,程序设计自由。(6)具有直接对硬件进行控制的功能。(7)可移植性好。

1.2C语言的特点(8)C语言的另一面:相对“难”学。[Return]1.3.1一个简单的C程序

1.3认识C程序

WelcometotheCworld!/*exam1_1*/#include<stdio.h>main(){printf(“WelcometotheCworld!\n”);}程序运行结果:【例1-1】在屏幕显示字符串“WelcometotheCworld!”【例1-2】计算两个数的和并输出结果。01

/*exam1_2*/02 #include<stdio.h>/*将stdio.h这个文件包含进来*/03 main() /*主函数名,函数从这里开始*/04 {05 inta,b,sum;/*定义三个整形变量:a,b和sum*/06 a=5;/*给a赋值为5*/07 b=10;/*给b赋值为10*/08 sum=a+b;/*把a+b的值赋给sum*/09 printf(“sumis%d.\n”,sum);/*输出sum的值*/10 }1.3.2C程序的基本结构

下面再来看另一个简单的C程序,并从这个例子出发说明C程序的基本结构。程序行最左边的行号是为了方便介绍程序而添加的,实际输入程序时是不需要的。【01】第1行为注释,C语言的注释以“/*”和“*/”作为注释内容的分界符。注释可增强程序的可读性,帮助我们理解程序的含义。【02】第2行是让计算机系统把文件stdio.h“包含”进来。C语言里有关输入和输出的函数都定义在这个文件里,要把结果输出到屏幕上,就要调用输出函数,也就需要把stdio.h文件包含进来。【03】第3行为程序执行的起点,即main()函数,我们把它称为“主函数”。每一个C程序都由一个或多个函数组成,其中必须有一个名为main的函数。函数体由花括号括起来,main前的int是声明main函数的返回值类型为整形,main右边的园括号内的void表示这个函数没有参数。【04】第4行的左花括号“{”为main()函数体的开始分界符。

下面我们逐行对这个程序进行详细解说。【06】第6行是一个赋值语句,把整数5赋给a。【07】第7行也是一个赋值语句,把整数10赋给b。【08】第8行把运算表达式a+b的计算结果赋给sum。【09】第9行是调用系统函数printf(),按照双引号(””)内的指定格式输出结果,在%d位置上用sum的值代替,引号内的其余字符照原样输出,\n是换行符,告诉计算机在输出完结果后将光标移到下一行的开头。【10】第10行是右花括号“}”是main()函数的结束分界符。【05】第5行声明a、b和sum为整形变量。C语言在使用变量之前必须先声明其类型,这是与Basic语言不同的。一个C程序基本包括以下几个部分:1.#include宏命令及头文件2.main()函数3.花括号{}、语句块和函数体4.变量5.语句6.输入和输出

当我们在程序中加入#include<filename>时,C编译系统会自动把<>内的头文件的内容全部包含进来,并且放置在#include这行的位置上。有时我们需要将已经编写好的另一个程序包含到本程序中,或者在程序中需要调用系统库函数,这时我们就需要使用#include命令。

如,上例中由于使用系统标准输出函数printf(),所以要将含有该函数声明信息的stdio.h文件包含进来。

#include<stdio.h>main(){…}main(){…}char*_Cdeclgets(char*s);void_Cdeclperror(constchar*s);int_Cdeclprintf(constchar*format,...);[Return]

一个C程序由一个或多个函数构成,其中必须有且只有一个主函数main(),一个函数可以调用其他函数,如上面例子中main函数调用printf函数。所有的C程序都是从main函数开始执行,并在main函数中结束。[Return]C程序以函数为单位,编写C程序就是编写一个个函数。每个函数的主体都包括在一对花括号“{}”内。有时把完成某个功能或操作的几个语句用一对花括号括起来,组成一个语句块(也叫复合语句)。若一个函数体内有多对花括号,则最外层的一对是函数体的分界符。[Return]

变量是一个C程序不可缺少的最基本的部分,是用来存放数据的。概括地说,一个计算机程序包括两个部分,第一部分是对数据的描述,第二部分是对操作的描述。变量就是用来描述数据的。C语言的变量必须先声明后使用,声明时要说明变量的数据类型和名字。C语言中的数据类型有整形(int)、浮点型(float)、字符型(char)等。[Return]每个C函数由若干个语句构成,每个语句以“;”结束,可以一行书写多个语句。C语言有表达式语句、函数调用语句、控制语句、变量定义语句等。如上面main()函数体有5个语句,第1个语句(【05】行)为变量定义语句,第2~4语句(【06】~【08】行)为赋值(表达式)语句,第5个语句(【09】行)为函数调用语句。[Return]每个程序必须有0个或多个输入,有至少一个输出。如果一个程序没有输出,我们就无从知道它的运算和操作结果。C语言的输入和输出是通过调用系统提供的标准输入输出函数实现的。如上例中调用printf()函数以指定格式输出计算结果。上例中的“printf(“sumis%d\n”,sum);”指定以双引号内的格式输出,%d处将代入相应的sum的值,双引号内的所有其它字符照原样输出,“\n”是换行符。1.3.3C程序中的单词

C语言的单词可分为标识符、关键字、分界符、空白、和运算符几类。1.C语言的标识符2.C语言的关键字3.C语言的分界符4.C语言的空白5.C语言的运算符

在C语言中,我们称变量、函数的名称、符号常量或者标号为用户标识符。C语言的标识符由英文大小写字母、数字或下划线所组成,首字母必须是英文字母或下划线。标识符的长度没有限定,决定于使用的编译系统,如Turbo

C允许标识符长度为32个字符。通常取前8个字符为有效字符,所以给变量或函数取名时最好保证前8个字符能够区别不同。要注意的是,系统的保留字(又称关键字),是不可以用作标识符的。

以下是合法的标识符例子:

min,t,SIZE,M1,x10,count_1,_myargument以下是不合法的标识符例子:for 使用关键字8h以数字开头-5以减号开头A*出现非法字符*x<y出现非法字符<下面是三个不同的标识符:count,Count,COUNT。[Return]

关键字是编译系统本身提供给用户使用的标识符,用户在进行编程时必须按照系统规定的方式使用这些关键字,而不能更改或者重新定义它们。所以用户自定义的变量名或函数名等标识符不能与关键字相同,如上面的for和short都是关键字,所以不可用作标识符。C语言提供的关键字共有32个,如表1-1所示。※注意:C语言是大小写敏感的!所有关键字都是小写的,若把某个或全部字母写成大写形式,则系统不把它当做关键字,而当成普通标识符。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 表1-1C语言的关键字[Return]※注意:为避免遗漏必须配对使用的符号,例如注释符号、函数体的起止标识符(花括号)、圆括号等等,在输入时,可连续输入这些起止标识符,然后再在其中进行插入来完成内容的编辑。C语言的分界符是用来分隔特定的语法单位的。如,花括号“{}”用来界定函数体的范围;圆括号“()”用来界定函数的参数;中括号“[]”用来界定数组的下标;“/*”和“*/”用来界定注释内容的范围;分号“;”用来表示一个语句的结束;等等。[Return]

一个C程序除了必需的关键字和用户自定义的标识符以外,一般还需要有一些辅助性的字符,如空格(space)、制表符、回车、换行、注释等,这些字符起到使程序的版面的层次、段落分明,反映出程序的逻辑结构,从而提高程序的可读性的作用。这些字符在编译时不会被生成任何代码,所以称它们为空白(blank)。[Return]

运算符在表达式中表示对数据执行某类运算。C语言的运算符非常丰富,共有13类34种,其中最常用到的有,算术运算符:加(+)、减(-)、乘(*)、除(/)、求余(%)5种,关系运算符:大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)、不等于(!=)6种,赋值运算符(=),等等。各种运算符的作用将分散在后面各章节分别作详细介绍。※注意:C语言的等于运算符由两个“=”组成,即“==”,而赋值运算符是一个“=”。千万别写错!1.3.4如何编写可读性良好的C程序1.命名风格2.注释风格3.布局风格

标识符的命名习惯,尽量遵循如下原则:(1)含义明确(2)规范缩写(3)规范分隔(4)限制长度(5)大小写约定[Return]

C语言的注释格式为:/*……*/。注释时要注意以下几点:(1)“/*”和“*/”

必须成对使用,且“/”和“*”、以及“*”和“/”之间不能有空格,否则都出错。(2)注释的位置,可以单占1行,也可以跟在语句的后面。(3)如果1行写不下,可另起1行继续写。(4)注释中允许使用汉字。在非中文操作系统下,看到的是一串乱码,但不影响程序运行。(5)编写程序时先编写注释、后编写代码;修改程序时先修改注释、后修改代码。(6)注释不仅仅是只列出代码执行的功能,而且还应给出为什么如此编写代码的原因或理由。[Return]

一个程序的可读性与它的版面布局有很大关系。程序的版面布局又与花括号的格式和空白的使用密切相关。下面介绍常见的几种花括号格式以及空白的使用:(1)花括号的格式1)

1TBS2)

Allman3)

Whitesmith4)

GNUfor(i=1;i<=100;i++){

sum=sum+i;

}for(i=1;i<=100;i++)

{

sum=sum+i;

}for(i=1;i<=100;i++)

{

sum=sum+i;

}for(i=1;i<=100;i++)

{

sum=sum+i;

}[Return](2)空白的使用

在一个程序中适当地使用空白可提高程序的可读性。下面重点说明一下缩进的格式和标识符周围的空白。1)

缩进for(

j=0;j<2;j++)sum=sum+a[j];2)标识符周围的空白for(j=0;j<2;j++)  for(k=0;k<3;k++)  scanf(“%d”,&a[j][k]);for(j=0;j<2;j++)  for(k=0;k<3;k++)  printf(“a[%d][%d]=%d\n”,j,k,a[j][k]);一个采用4个空格的缩进的例子:在圆括号旁使用空格和在分号的右侧使用空格例子:[Return]1.4C程序的运行与调试1.4.1C程序设计的基本步骤1.规划程序——流程图

2.编写程序代码及注释——源程序(.C文件)3.编译程序代码——目标程序(.obj文件)

4.链接与执行程序——可执行程序(.exe文件)

5.排错与测试

6.程序代码的优化、修饰和保存[Return]下面以一个简单的例子说明如何绘制程序流程图。【例1-5】画出求5!的程序流程图。

(1)使result=1

(2)使i=2

(3)使result*i=>result(用=>表示存放)

(4)使i+1=>i

(5)如果i的值不大于5,返回(3)继续执行;否则输出result(此时的result的值就是5!),算法结束。用自然语言描述的算法(求解步骤)如下:绘制成流程图如下:图1-5求5!的流程图结束1=>result开始2=>iresult*i=>resulti+1=>ii>5?输出resultfalsetrue开始/结束程序前进方向数据处理判断预定义函数文件输入/输出连接点图1-6常用的流程图符号[Return]

在完成对程序的规划之后,我们便可以根据程序流程图编写程序代码了。在编写代码的过程中,我们会体会到先做规划的好处。程序规划得好,编写程序时逻辑清晰,不容易产生逻辑上的错误,避免反复修改,从而提高效率。编写代码时,不要忘记加上注释。加上注释不但方便别人了解程序的功能,而且方便日后对程序的维护与扩展。总之,一个好的程序员应该养成给编写的代码加上注释的好习惯。

程序编写完后,这些用计算机高级语言编写出来的源代码还不能直接被计算机执行,我们知道计算机能够理解的是由0和1所组成的二进制代码,所以还必须将写好的源程序翻译成为计算机能够理解的目标代码文件(扩展名为obj)。这个工作由高级语言系统提供的编译程序来完成。[Return]

一个源程序经过编译后,若这个程序与库函数或其它程序没有任何联系,便可以执行了。否则,还必须经过链接(link),才能够生成可执行文件(扩展名为exe)。这时运行这个可执行文件,便可看到程序的运行结果了。[Return]

程序通过了编译和链接,执行后得到的并不一定是期望的结果。这就说明程序虽然在语法上没有问题,但是可能在逻辑上出了问题,从而导致输出非预期的结果。这种情况下我们必须根据流程图,逐个排除每个语句的逻辑错误。另外,有时程序在某种输入数据条件下输出正确结果,但是在其它一些输入数据条件下得到不正确的结果。所以我们还必须使用各种可能的输入数据,对程序进行测试,才能保证在任何情况下程序都能正常运行,并得到正确结果,即确保程序的“健壮性”。[Return]

当程序经过测试证明结果完全正确后,有时我们还需要对程序进行优化,以提高程序的运行效率。另外,还要对源程序进行适当的排版、增加注释等修饰性操作,使程序更加层次分明,更加易读。最后,千万别忘记把我们的劳动成果妥善保存起来。1.4.2如何使用TurboC/C++3.0运行与调试C程序(1)启动TC,进入TC集成环境。(2)编辑(或修改)源程序。编辑一个新文件——选择File菜单的New菜单项。图1-5编辑一个新文件1.运行一个C程序的一般步骤修改一个旧文件——选择File菜单的load菜单项。图1-9调入已经存在的文件保存文件——选择File菜单的save或write

to菜单项。

以原文件名进行保存,选择Save;以新的文件名保存,选择Write

to。图1-6以新文件名保存(3)编译——选择Compile菜单的CompiletoOBJ菜单项。图1-9编译(4)连接——选择Compile菜单的LinkEXEfile菜单项。

图1-10连接※注意:若想要一次性完成编译和连接,可以直接按【F9】,也可以按【F10】或【Alt+C】后选择Compile菜单的MakeEXEfile菜单项并回车即可。(5)运行——选择Run菜单的Run菜单项。

图1-11运行※注意:若想要一次性完成编译、连接并运行,可以直接按【Ctrl+F9】并回车即可。2.如何设置用户文件存放目录

选择File菜单的Changedir项,在弹出的“NewDirectory”对话框中输入已建立好的自己的工作目录名即可(见图1-18)。图1-12设置用户工作目录3.如何设置TC工作环境

图1-13TC工作环境设置图1-14保存工作环境设置

假如安装时系统文件存放在C:\Turboc2目录下,而用户的目标文件和可执行文件存放在C:\output目录中,则各项内容设置如图1-13所示。4.常用快捷键及其功能

请看书中表1-2。[Return]本章结束

谢谢!第2章基本数据类型、运算符与表达式

2.1C语言的数据类型2.2

常量与变量2.3

整型数据2.4

实型数据2.5

字符型数据2.6

各类数据混合运算2.7C语言的运算符与表达式2.8

运算符的优先级及其结合性

[Return]本章学习目标熟悉C语言的数据分类掌握常量的表示方法与变量赋初值的方法掌握不同类型数据间的混合运算掌握基本运算符及其表达式的使用2.1C语言的数据类型

C语言提供了以下一些主要数据类型:

说明:①

C语言为每个类型定义了一个标识符,称为类型名。例如:整型用int标识、字符型用char标识等。一个类型名由一个或几个关键字组成,仅用于说明数据属于哪一种类型。

②对于基本数据类型,按取值是否可改变分为常量和变量两种。在程序执行过程中,其值不发生改变的量称为常量,取值可变的量称为变量。它们可与数据类型结合起来分类。例如,可分为整型常量、整型变量、字符常量、字符变量等。在程序中,常量是可以不经过说明而直接引用的,而变量则必须先说明后使用。

[Return]2.2常量与变量

在程序运行中,其值不改变的量称为常量。常量区分为不同的类型,如:5、0、-7为整型常量3.2、-4.68为实型常量‘a’、’f’为字符常量常量从字面形式即可判别。也可用一个标识符代表一个常量,称为符号常量。习惯上,符号常量名用大写,变量名用小写字母表示,以示区别,例如:#definePI3.1415926[Return]2.2.1常量【例2-1】符号常量的使用。

已知圆半径为r,求圆周长c和圆面积s的值。#definePI3.1415926main(){floatr,c,s;scanf(“%f”,&r);c=2*PI*r;s=PI*r*r;printf(“c=%6.2f,s=%6.2f\n”,c,s);}

在该程序中,用#define命令行定义PI,PI为定义的符号常量代表3.1415926,此后凡在程序中出现的PI都代表3.1415926。从上面的例子可以看出使用符号常量的好处:

一是含义清楚、见名知意。

看程序时从PI就可以知道它代表圆周率;

二是修改方便,一改全改。

如要“#definePI3.1415927”,则在程序中所有出现PI的地方值全部改为3.1415927。[Return]在程序运行时其值可以改变的量称为变量。变量是由变量名、变量值和存储单元组成的。2.2.2变量1.变量名的命名规则:

变量名用标识符表示。在C语言中,用来对变量、符号常量、函数、数组等数据对象命名的有效字符序列统称为标识符。C语言规定标识符只能由字母、数字和下划线3种字符组成,且第一个字符必须是字母或下划线。下面列出的是合法的标识符,可作为变量名:

abc,

sum,f4,student_1下面是不合法的标识符:8h以数字开头-5以减号开头A*出现非法字符*x<y出现非法字符<在使用标识符时须注意以下几点:(1)建议变量名的长度最好不要超过8个字符。(2)标识符大小写是有区别的。(3)标识符命名时应尽量有相应的含义,增加程序的可读性。2.变量的定义

在C语言中,要求对所有用到的变量必须先定义。

定义格式:类型说明符变量1,变量2,……;

其中,类型说明符是C语言中的一个有效的数据类型,如整型类型说明符int、字符型类型说明符char等。例如:inta,b,c;charcc;

在C语言中,要求对所有用到的变量作强制定义,也就是“先定义,后使用”。

[Return]2.3整型数据2.3.1

整型常量

[Return]整型常量即整常数。C语言中的整常数可用以下3种形式表示:(1)十进制整常数。十进制整常数没有前缀,其数码为0~9。如:123、-234、0(2)八进制整常数。八进制整常数以0作为前缀。如:0123、-0234,后面只能是有效的八进制数字0~7,若写成09就错了。(3)十六进制整常数。十六进制整常数的前缀为0X或0x。其数码取值为0~9,A~F或a~f。如:0x123、-0x234。2.3.2

整型变量

1.整型数据在内存中的存放形式整型数据在内存中是以二进制形式存放的。例如,定义了一个整型变量a:inta;/*定义a为整型变量*/a=25;/*给a赋以整数25*/

十进制数25的二进制形式为11001,TurboC2.0和TurboC++3.0为一个整型变量在内存中分配2个字节的存储单元(不同的编译系统为整型数据分配的字节数是不相同的),在这里我们假定每一个整型变量在内存中占2个字节。2.整型变量的分类

整型变量的基本类型符为int。

可以根据数值的范围将变量定义为基本整型、短整型或长整型。有以下3类整型变量:

基本整型,以int表示。短整型,以shortint表示。长整型,以longint表示。在int前可以加上以下类型修饰符,用来改变和扩充基本类型的含义:long长short短signed有符号unsigned无符号这些修饰符与int可以组合成以下6种整型变量。即:有符号的基本整型[signed]int无符号的基本整型unsignedint有符号的短整型[signed]short[int]无符号的短整型unsignedshort[int]有符号的长整型[signed]long[int]无符号的长整型unsignedlong[int]上面的方括号表示其中的内容是可选的。

【例2-2】下图保存了整数14的各种整型数据类型。3.整型变量的定义

在C语言程序中所有用到的变量都必须在程序中定义。

格式:

数据类型名变量名;【例2-3】变量的定义与使用。/*exam2_3*/main(){inta,b,c,sum;/*定义整型变量a、b、c、sum*/a=3,b=-4,c=9;/*a、b、c分别赋初值*/sum=a+b+c;/*求a、b、c的和赋给变量sum*/printf(“\nsum=%d”,sum);/*换行输出变量sum的值*/}程序运行结果:sum=8[演示]4.整型数据的溢出

一个int型变量的最大允许值为32767,如果再加1,那么结果会是什么样的呢?我们看下面这个例子。【例2-4】整型数据的溢出。/*exam2_4*/main(){inta,b;a=32767;b=a+1;printf("\na=%d,a+1=%d\n",a,b);a=-32768;b=a-1;printf("\na=%d,a-1=%d\n",a,b);}程序运行结果:a=32767,a+1=-32768a=-32768,a-1=32767[演示]5.整型常量的类型(1)一个整数如果其值在-32768~32767范围内,则认为是int型,可以赋给int型和longint型变量。(2)一个整数如果其值超过了上述范围,在-2147483648~2147483647内,则认为是longint型,可赋给longint型变量。(3)如果所使用的C语言版本确定shortint和int型数据在内存中占据长度相同,则其表示范围与int型相同。因此一个int型的常量也同时是一个shortint型常量,可以赋给int型或shortint型变量。(4)常量中无unsigned型,但可以将一个非负值且在取值范围内的整数赋给unsigned型变量。(5)在一个整常量后面加一个字母l或L,则认为是longint型常量。[Return]2.4实型数据1.实型常量的表示方法2.4.1

实型常量C语言中的实数(浮点数)有两种表示形式:(1)十进制小数形式由数字0~9和小数点和正负号组成(必须有小数点)。(2)指数形式也称为科学计数法,以幂的形式表示,以字母e或E后跟一个以10为底的幂数。其一般形式为:ae±b,表示a×10±b,其中a是十进制数,可以是整数或是小数,字母e或E之前必须要有数字,且字母e或E后面的指数b必须为整数,字母e或E的前后及数字之间不得有空格。[Return]2.实型常量的类型

许多C编译系统将实型常量作为双精度实数来处理。这样可以保证较高的精度,缺点是运算速度降低。可以在实数的后面加字符f或F,如1.65f、654.87F,使编译系统按单精度处理实数。

实型常量可以赋值给一个float、double、longdouble型变量。根据变量的类型截取实型常量中相应的有效数字。【例2-5】显示个人微机上不同类型变量所占的字节数。/*exam2_5*/#include<stdio.h>main(){printf(“thebytesofthevariablesare:\n”);printf(“int:%dbytes\n”,sizeof(int));printf(“char:%dbytes\n”,sizeof(char));printf(“short:%dbytes\n”,sizeof(short));printf(“long:%dbytes\n”,sizeof(long));printf(“float:%dbytes\n”,sizeof(float));printf(“double:%dbytes\n”,sizeof(double));printf(“longdouble:%dbytes\n”,sizeof(longdouble));}程序运行结果:thebytesofthevariablesare:

int:2bytes

char:1bytes

short:2bytes

long:4bytes

float:4bytes

double:8bytes

longdouble:10bytes[演示]2.4.2

实型变量

1.实型数据在内存中的存放形式

一个实型数据一般在内存中占4个字节(32位)。与整数存储方式不同,实型数据是按照指数形式存储的。系统将实型数据分为小数部分和指数部分,分别存放。2.实型变量的分类

C语言的实型变量,分为两种:

(1)单精度型。类型关键字为float,一般占4字节(32位)、提供7位有效数字。(2)双精度型。类型关键字为double,一般占8个字节、提供15~16位有效数字。3.实型数据的舍入误差

实型变量是由有限的存储单元组成的,因此提供的有效数字总是有限的。在有效位以外的数字将被舍去。由此可能会产生一些误差。

【例2-6】实型数据的舍入误差。/*exam2_6*/main(){floatx,y;x=123456.789e5;y=x+20;printf("x=%f,y=%f\n",x,y);}程序运行结果:x=12345678848.000000,y=12345678848.000000

[演示]【例2-7】实型数据的定义和使用。/*exam2_7*/main(){

floatx;

doubley;

x=123456.1234;y=123456.1234;printf(“x=%f,y=%lf\n”,x,y);}程序运行结果:x=123456.125000,y=123456.123400[演示]2.5 字符型数据

字符型常量是用一对单引号(′′)即撇号括起来的一个字符。只能用单引号括起来,不能用双引号或其它括号。字符常量只能是单个字符,不能是字符串。注意:′a′和′A′是不同的字符常量。例如:′d′,′R′,′=′,′$′,′?′等都是合法字符常量。2.5.1字符常量1.定义[Return]2.转义字符

转义字符是一种特殊的字符常量,是以反斜杠\开头的字符序列。【例2-8】转义字符的使用。/*exam2_8*/main(){printf(“\x4F\x4B”); }OK程序运行结果为:[演示]2.5.2

字符变量1.变量值的存储字符变量的定义形式如下:chara1,a2;

它表示a1和a2为字符型变量,各可以放一个字符,因此在本函数中可以用下面语句对a1、a2赋值:

a1=′x′;

a2=′y′;2.特性(1)一个字符型数据,既可以字符形式输出,也可以整数形式输出。(2)允许对字符数据进行算术运算,此时就是对它们的ASCII码值进行算术运算。【例2-10】用字符形式和整数形式输出字符变量。/*exam2_10*/main()

{charch1,ch2;ch1='a';ch2='b';printf(“ch1=%c,ch2=%c\n”,ch1,ch2);printf(“ch1=%d,ch2=%d\n”,ch1,ch2);}程序运行结果:ch1=a,ch2=bch1=97,ch2=98[演示]【例2-11】字符数据的算术运算。/*exam2_11*/main(){charch1,ch2;ch1=‘a’;ch2=‘B’;printf(“ch1=%c,ch2=%c\n”,ch1-32,ch2+32);/*字母的大小写转换*/}程序运行结果:ch1=A,ch2=b[演示]2.5.3

字符串常量1.字符串常量的概念和字符串长度字符串常量是用一对双引号“

”括起来的若干字符序列。这里的双引号仅起到字符串常量边界符的作用,它并不是字符串常量的一部分。字符串中字符的个数称为字符串长度。长度为0的字符串(即一个字符都没有的字符串)称为空串,表示为“”(一对紧连的双引号)。2.字符串的存储

C语言规定:在存储字符串常量时,由系统在字符串的末尾自动加一个‘\0’作为字符串的结束标志。CHINA\0如有一个字符串为“CHINA”,则它在内存中的实际存储如下图所示:(存储长度为6)[Return]2.6各类数据混合运算整型、实型、字符型数据之间可以混合运算。运算规则:不同类型的数据先转换成同一类型,然后进行计算。转换方法:自动转换(隐式转换)、强制转换。[Return]自动转换(隐式转换)

自动转换发生在不同类型数据进行混合运算时,由编译系统自动完成。

自动转换规则:类型不同,先转换为同一类型,然后进行运算。(1)图中纵向的箭头表示当运算对象为不同类型时转换的方向。

(2)图中横向向左的箭头表示必定的转换。2.强制转换:通过类型转换运算来实现。格式:(类型说明符)表达式功能:把表达式的结果强制转换为类型说明符所表示的类型。例如:

(double)a/*将变量a的值转换成double型*/(int)(x+y)/*将x+y的结果转换成int型*/【例2-12】强制类型转换。/*exam2_12*/main(){floatx;inti;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);}程序运行结果:x=3.600000,i=3x的类型仍为float型,值仍等于3.6。[演示]2.7C语言的运算符与表达式运算符:表示各种运算的符号。

表达式:使用运算符将常量、变量、函数连接起来的式子。

[Return]C语言的运算符有以下几类:

算术运算符(+-*/%++--)关系运算符(<<===>>=!=)逻辑运算符(!&&||)位运算符(<<>>~|∧&)赋值运算符(=及其扩展赋值运算符)条件运算符(?:)逗号运算符(,)指针运算符(*&)求字节数运算符(sizeof)强制类型转换运算符(类型)分量运算符(.->)下标运算符([])其它(如函数调用运算符())C语言有以下类型的表达式:

赋值表达式,如:a=1算术表达式,如:1*2+3/4.5关系表达式,如:4>7逻辑表达式,如:8>4&&a<b条件表达式,如:a>b?a:b逗号表达式,如:a=1,b=2,c=3位表达式,如:0&1=0,1|1=1,1^0=12.7.1

算术运算符和算术表达式1.算术运算符C语言提供的算术运算符及功能如下:+加法运算符或正值运算符。如31+18,+2。-减法运算符或负值运算符。如6-3,21+(-57)。*乘法运算符。如4*1.9。/除法运算符。如5/3。%模运算符或称取余运算符,要求%的两边必须为整型数据。如123%15,2%7都是正确的,而25%1.5,12.0%6.0都是错误的表示。2.算术表达式

用算术运算符和括号将数据对象连接起来的式子,称为算术表达式。运算对象包括常量、变量、函数等。例如:3+6*9(x+y)/2-aa*b+c-1.5+′a′

都是算术表达式。

算术运算符的结合方向为“自左至右”。

【例2-13】将430分钟换算成小时和分钟表示,然后输出。/*exam2_13*/main(){inti,h,m;i=430;h=i/60;m=i-60*h;printf(“\n%dminutes:%dhour%dminutes”,i,h,m);}程序运行结果:430minutes:7hour10minutes[演示]【例2-14】求表达式2+d-10的值。(设a=64,d=6)/*exam2_14*/#include<math.h>/*调用标准数学函数*/main(){floata,d,s;a=64,d=6;s=2*sqrt(a)+d-10;printf(“\n%6.2f”,s);}程序运行结果:12.00[演示]2.7.2

自增与自减运算符1.功能自增运算符++的作用是使变量的值增1,自减运算符--的作用是使变量的值减1。2.用法与运算规则自增、自减运算符都有两种用法:(1)前置运算──运算符放在变量之前:++变量、--变量

(2)后置运算──运算符放在变量之后:变量++、变量--

【例2-16】自增、自减运算符的用法。/*exam2_16*/main(){intx=6,y;printf("x=%d\n",x); /*输出x的初值*/y=++x; /*前置运算*/printf("y=++x:x=%d,y=%d\n",x,y);y=x--; /*后置运算*/printf("y=x--:x=%d,y=%d\n",x,y);}程序运行结果:x=6y=++x:x=7,y=7y=x--:x=6,y=7[演示]

※注意:在表达式中,连续使同一变量进行自增或自减运算时,很容易出错,所以最好避免这种用法。[Return]2.7.3

赋值运算符和赋值表达式1.赋值运算符

赋值运算符为“=”,它的作用是将一个数据赋给一个变量。

转换原则:先将赋值号右边表达式类型转换为左边变量的类型,然后赋值。

【例2-17】赋值运算中类型转换的规则。

/*exam2_17*/main(){

inti=5;

/*说明整型变量i并初始化为5*/

floata=3.5,a1;

/*说明实型变量a和a1并初始化a*/doubleb=123456789.123456789;

/*说明双精度型变量b并初始化*/

charc='A';

/*说明字符变量c并初始化为'A'*/

printf("i=%d,a=%f,b=%f,c=%c\n",i,a,b,c);

/*输出i,a,b,c的初始值*/

a1=i;i=a;a=b;c=i;

/*整型变量i的值赋值给实型变量a1*//*实型变量a的值赋给整型变量i*//*双精度型变量b的值赋值给实型变量a*//*整型变量i的值赋值给字符变量c*/

printf("i=%d,a=%f,a1=%f,c=%c\n",i,a,a1,c);

/*输出i,a,a1,c赋值以后的值*/

}程序运行结果:i=5,a=3.500000,b=123456789.123457,c=Ai=3,a=123456792.000000,a1=5.000000,c=[演示]2.复合的赋值运算符

在赋值符“=”前加上某些运算符,可以构成复合赋值运算符。即+=,-=,*=,/=,%=,<<=,>>=,&=,|=,^=(共10种)

复合赋值运算符均为双目运算符,右结合性。功能:对"变量名"和"表达式"进行复合赋值运算符所规定的运算,并将运算结果赋值给复合赋值运算符左边的"变量名"。3.赋值表达式

赋值表达式:由赋值运算符组成的表达式称为赋值表达式。赋值表达式一般形式:

变量名赋值运算符表达式赋值的含义:将赋值运算符右边的表达式的值存放到左边变量名标识的存储单元中。例如:a=5+b;执行赋值运算,将5+b的值赋给变量a,同时整个表达式的值就是刚才所赋的值。赋值运算符的功能:一是计算,二是赋值。[Return]2.7.4

关系运算符及其表达式1.关系运算符C语言提供了6种关系运算符:<小于>大于<=小于或等于>=大于或等于==等于!=不等于2.关系表达式

用关系运算符将两个操作数连接起来的合法的C语言式子,称为关系表达式。

例如,关系表达式”1==2”的值为“假”,

“4>3”的值为“真”。在C语言中以0表示逻辑假,以1表示逻辑真。当输出结果为逻辑真时,显示1;当输出结果为逻辑假,显示0。[Return]2.7.5

逻辑运算符及其表达式1.逻辑运算符C语言提供三种逻辑运算符:|| 逻辑或(相当于“OR”)&& 逻辑与(相当于“AND”)! 逻辑非(相当于“NOT”)逻辑运算符的运算规则:&&:当且仅当两个运算量的值都为“真”时,运算结果为“真”,否则为“假”。||:当且仅当两个运算量的值都为“假”时,运算结果为“假”,否则为“真”。!:当运算量的值为“真”时,运算结果为“假”;当运算量的值为“假”时,运算结果为“真”。逻辑运算符的优先级:“逻辑非”的优先级最高“逻辑与”次之“逻辑或”最低2.逻辑表达式

逻辑表达式是指用逻辑运算符将1个或多个表达式连接起来,进行逻辑运算的式子。在C语言中,用逻辑表达式表示多个条件的组合。[Return]2.7.6

逗号运算符(,)及其表达式逗号运算符的结合方向是“从左向右”,它的优先级是所有运算符中最低的。用逗号运算符连接起来的表达式称为逗号表达式。它的一般形式为:表达式1,表达式2,…,表达式n逗号表达式的运算过程是:先算表达式1,再算表达式2,依次计算直到表达式n。整个逗号表达式的值是表达式n的值。2.7.7

位运算符及其表达式

位运算符是位运算使用的运算符;位运算是指针对二进制位进行的运算。

C语言提供以下6种位运算符:

关系运算符含义&按位与|按位或^按位异或~按位取反<<左移位>>右移位位运算符优先级别

:~高<<、>>&^|低[Return]2.8运算符的优先级及其结合性1.运算符的优先级一般而言,单目运算符优先级较高,赋值运算符优先级低,算术运算符优先级较高。2.运算符的结合性多数运算符具有左结合性,单目运算符、赋值运算符和复合赋值运算符为右结合性。[Return]作业与实验作业:[习题二]上机操作:[实验二][Return]第3章简单的C程序设计本章学习目标了解C语言的基本语句熟悉程序设计的三种基本结构及其特点掌握赋值语句的使用方法掌握数据输入、输出函数的调用规则和格式控制字符的正确使用掌握顺序结构程序的设计方法[Return]3.1C语句概述

3.2程序的三种基本结构

3.3赋值语句

3.4数据输入输出

3.5顺序结构的C程序设计举例

一个C程序一般包含若干个C语句。C语句可以分为以下七类:1.控制语句

(1)条件语句:if~else(在第4章中介绍)(2)多分支选择语句:switch~case(在第4章中介绍)(3)结束本次循环语句:continue(在第5章中介绍)(4)中止switch或循环语句:break(在第5章中介绍)(5)循环语句:for,while,do~while(在第5章中介绍)(6)转向语句:goto(在第5章中介绍)(7)从函数返回语句:return(在第7章中介绍)2.表达式语句:在表达式后面加分号构成。例如:a=3/*后面无分号,是表达式,不是语句*/a=3;/*后面有分号,是语句*/i++;/*为语句,相当于赋值语句i=i+1;*/3.变量定义语句:定义指定类型的变量,也可同时给变量赋初值。例如:inta=8;/*定义整型变量a,并给它赋初值8*/charc;/*定义字符型变量c*/4.数据类型定义语句:定义新的类型名来代表已有的类型名,以方便用户更好地使用C语言编写程序。例如:typedefcharSTR[10];/*定义STR为字符数组*/STRa,b;/*定义a,b为字符数组*/5.空语句:仅包含一个分号的语句,语句中无实质性内容。例:;/*仅由一个分号组成*/6.复合语句:由大括号{}括起来的语句序列。例如:

{c=a+b;c=c/100;

printf("%f",);

}7.函数调用语句:是函数的具体执行部分,用于完成对数据的操作。例如:printf("WelcometotheCworld.");/*该语句是调用printf函数实现字符串输出*/※注意:C语言允许一行写多个语句,每条语句后面必须要有分号;也允许一个语句写多行。[Return]3.2程序的三种基本结构C语言是理想的结构化程序设计语言。结构化程序的最大特点是以控制结构为单位,每个单位只有一个入口和一个出口。结构化程序中常见的基本结构有三种:1.顺序结构2.选择结构3.循环结构

图3-1顺序结构程序框图在顺序结构程序中,一般包括以下几个部分:(1)程序开头的编译预处理命令在程序中若要使用标准函数(又称库函数),除printf()和scanf()函数外,使用其它的标准函数都必须使用编译预处理命令,将相应的头文件包含进来。(2)顺序结构程序的函数体顺序结构程序的函数体中包括完成程序具体功能的各个语句,主要有以下四部分:①变量类型的说明部分;②数据的输入部分;③数据的处理部分;④数据的输出部分。[Return]

根据条件p成立与否来选择执行程序的某部分,即:当条件P成立(“真”),执行A操作,否则执行B操作。但无论选择哪部分,程序均将汇集到同一个出口。程序流程图如图3-2所示:图3-2选择结构程序流程图

选择结构还可以派生出“多分支选择结构”,程序框图如图3-3所示。根据k的值(k1、k2、...、kn)不同,来选择执行多路分支A1、A2、...、An之一。图3-3多分支选择结构程序流程图[Return](1)当型循环结构。当条件p成立(“真”)时,反复执行A操作,直到p为“假”时才停止循环。程序流程图如图3-4所示:图3-4当型循环结构程序流程图(2)直到型循环结构。先执行A操作,再判别条件p是否为“真”,若为“真”,再执行A,如此反复,直到p为“假”为止。程序流程图如图3-5所示:假真图3-5直到型循环结构程序流程图

使用循环结构时,在进入循环前,应设置循环的初始条件。同时,在循环过程中,应修改循环条件,以便程序退出循环。如果不修改循环条件或循环条件错误修改,可能导致程序不能退出循环,即进入“死循环”。

三种基本结构可以处理任何复杂的问题。[Return]3.3赋值语句1.一般格式:<变量名>=<表达式>;例如:c=a+b;2.功能:先计算赋值号右边表达式的值,然后将计算得到的结果赋值给赋值号左边的指定变量。3.说明:①C语言中的“=”作为赋值运算符,又称“赋值号”,不是“等号”。②赋值语句和赋值表达式是不同的概念,赋值表达式使C语言非常灵活。例如:if((a=b)>0)t=a;

if((a=b;)>0)t=a;[Return]3.4数据输入输出C语言不提供输入输出语句,输入输出由开发系统提供的函数实现,其中:putchar()、printf()是输出到终端(系统标准输出设备,如显示器)的函数;getchar()、scanf()是从系统标准输入设备(一般指键盘)输入数据的函数。 输入输出库函数的原型在文件stdio.h中定义,因此,使用输入输出函数时,应在源程序的开头使用如下语句:#include“stdio.h”

或#include<stdio.h>(关于编译预处理命令的使用可参考第8章。)

stdio.h放在程序的开头,称为“头文件”;由于使用#include(包含)命令,又称为“包含文件”。

C语言开发系统提供很多库函数,它们的原型在不同的头文件中定义,因此,在程序开头总是包含需要的头文件。最常用的头文件如表3-1所示。

表3-1最常用的头文件头文件名作用stdio.h定

定义输入输出函数string.h定义字符串操作函数math.h定义sin、cos、sqrt等数学函数3.4.1printf()——格式化输出函数1.一般形式(1)格式:printf("格式字符串"[,输出项表]);(2)功能:向系统默认的输出设备(一般指终端或显示器)格式化输出一个或多个任意类型的数据。(3)说明:格式字符串:又称“转换控制字符串”,可以包含格式字符、转义字符和普通字符三种字符。

输出项表:输出项表是可选的。如果要输出的数据不止1个时,则相邻2个数据之间有用逗号分开。

例如:

printf("a=%f,b=%5d,c=%c\n",a,b,c); /*a、b、c为输出项表,中间用逗号隔开*/

“格式字符串”中的格式字符,必须与“输出项表”中的输出项的数据类型一致,否则会引起输出错误。

2.格式字符输出不同类型的数据,printf()函数中可以使用不同的格式字符:(1)d格式符:以带符号的十进制整数形式输出。

格式字符意义%d输出数字长度为变量数值的实际长度%md输出m位(不足补空格,大于m位时按实际长度输出)%ld,%mldl(小写字母L)表示输出“长整型”数据%0md,%0mld0(数字0)表示位数不足m时补0【例3-1】

格式字符d的使用。/*exam3_1*/main(){ intnum1=123; longnum2=123456; printf("num1=%d,num1=%5d,num1=%-5d,num1=%2d\n",num1,num1,num1,num1); printf("num2=%ld,num2=%8ld,num2=%5ld\n",num2,num2,num2); printf("num1=%ld\n",num1);} 用4种不同格式,输出int型数据num1的值用3种不同格式,输出long型数据num2的值num1=123,num1=□□123,num1=123□□,num1=123num2=123456,num2=□□123456,num2=123456num1=11272315

程序运行结果如下:(□表示空格)说明:a.对于整数,还可用八进制、无符号形式(%o)和十六进制、无符号形式(%x)输出。b.对于unsigned型数据,也可用%u格式符,以十进制、无符号形式输出。(2)f格式:以小数形式,按系统默认的宽度,输出单精度和双精度实数。格式字符意义%f按实数格式输出,整数部分按实际位数输出,6位小数%m.nf总位数m(含小数点),其中n位小数,右对齐%-m.nf同上,左对齐【例3-2】

格式字符f的使用。/*exam3_2*/main(){ floatf=123.456; doubled1,d2; d1=1111111111111.111111111; d2=2222222222222.222222222; printf("%f,%12f,%12.2f,%-12.2f,%.2f\n",f,f,f,f,f); printf("d1+d2=%f\n",d1+d2);}屏幕显示运行结果为:123.456001,□□123.456001,□□□□□□123.46,123.46□□□□□□,123.46d1+d2=3333333333333.333010float实数(单精度)的有效位数是7位,double实数(双精度)的有效位数是16位,超过有效位数的输出和输入均无意义。说明:

a.对于实数,也可使用格式符%e,以标准指数形式输出:尾数中的整数部分大于等于1、小于10,小数点占一位,尾数中的小数部分占5位;指数部分占4位(如e-03),其中e占一位,指数符号占一位,指数占2位,共计11位。

b.也可使用格式符%g,让系统根据数值的大小,自动选择%f或%e格式、且不输出无意义的零。(3)C格式:仅输出一个字符(只占一列宽度)。一个整数,若其值在0~255范围内,可以用字符形式(c格式)输出,也可以用整数形式(d格式)输出。当用字符形式输出时,在输出前,将该整数转换为对应的ASCII字符。【例3-3】格式字符c的使用。/*exam3_3*/main(void){ chara='A'; intb=65; printf("%c,%5c,%d\n",a,a,a); printf("%d,%c",b,b);}屏幕显示运行结果为:A,□□□□A,6565,A※注意:在C语言中,整数可以用字符形式输出,字符数据也可以用整数

温馨提示

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

评论

0/150

提交评论