C语言程序设计课件_第1页
C语言程序设计课件_第2页
C语言程序设计课件_第3页
C语言程序设计课件_第4页
C语言程序设计课件_第5页
已阅读5页,还剩271页未读 继续免费阅读

下载本文档

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

文档简介

C语言程序设计教材分析

本书内容共有11章,可分为三部分。第1、2章为第一部分,为初学者的入门知识,使读者对c语言编写程序的步骤、方法和程序结构及算法描述有一个大致的了解。第3~第5章为第二部分,是程序设计的基础部分,使读者详细了解c语言的基本数据类型和表达式以及c语言的控制结构。掌握了第一、二部分的内容,读者可以完成简单的程序设计。第6章~第11章为第三部分,讲述了模块化程序设计的概念和实现的方法,为程序设计提供了更多、更方便的途径,为进行综合程序设计奠定了基础。每一个章节里都有详细的程序范例来说明程序的设计思想、语句的概念、作用、含义和使用方法,使学生能够由浅入深系统地学习c语言的知识,同时掌握一定的编程方法。成绩考核成绩考核方法:期末成绩=平时成绩20%+期末考试80%;

注:平时成绩包括:上课情况、作业情况、上机作业完成情况等。学习C的忠告上机实践(编程)!!!(Try!!!)C语言程序设计教程第1章引言第2章程序的简单算法制定第3章基本程序语句第4章选择结构第5章循环结构第6章函数与编译预处理第7章数组第8章指针第9章构造数据类型第10章文件第11章位运算

《C语言程序设计》课程的任务

1.指导学生掌握C程序设计语言的基础知识;

2.培养学生综合分析并编制程序解决实际应用问题的能力;

3.培养学生契而不舍的解决问题的精神以及认真的学习态度。

通常我们把设计、书写及检查调试程序的过程称为程序设计。应当指出,简单的程序设计应包括以下几个部分:

确定数据结构

确定算法

编写代码

调试并运行

整理并写出文档资料第一章引言1.1C语言的特点1.2简单的C语言程序介绍1.3C语言程序的结构1.4C程序设计语言的执行1.1C语言的特点C语言有9种控制语句,32个关键字。运算符丰富。共有34种运算符数据结构类型丰富。具有结构化的控制语句语法限制不太严格,程序设计自由度大。C语言允许直接访问物理地址,能进行位操作,可以直接对硬件进行操作。生成目标代码质量高,程序执行效率高。C语言编写的程序可移植性好。1.2简单的C语言程序介绍/*ex101.c-在屏幕上输出ThisisaCprogram.*/#include<stdio.h>

voidmain(){printf(“ThisisaCprogram.\n”);}①注释

/*ex101.c-在屏幕上输出ThisisaCprogram.*/C程序中的“/*…*/”之间的内容称为注释,是程序编写者给程序阅读者留下的一些说明(注释),以帮助阅读者理解程序。编译器不对注释进行编译,只将它们当作空白看待。本程序的第1行中的注释为“ex101.c”,是说明本书编写时将这个程序保存在文件ex101.c中。②库函数与文件包含命令include

#include<stdio.h>库函数:系统提供的标准函数,程序可直接使用;

使用库函数必须将其有关说明信息写入程序。为了用户方便,系统定义库函数时,把一类相关库函数的说明信息,分别写在一些文件中。本例中使用了库函数printf

,其有关说明信息写在文件stdio.h中。所以在程序的开始加入了#include<stdio.h>使用C语言的库函数,要在程序前面加上类似#include<XXXX.h>的预处理命令③main函数任何C程序都必须有且只能有一个主函数main(),它是程序的入口,也是程序的出口。其中,main是函数名,()内可以包含一些参数;{}的内容称为函数体,其包含若干条C程序语句;不同语句之间用分号分隔;一般情况下,每个程序都由一至多个函数组成;表示main函数没有返回值函数名函数体语句voidmain(){

printf(“ThisisaCprogram.\n”);}演示ex101④语句

printf(“ThisisaCprogram.\n”);C语言的主函数体由一些语句组成。每个语句由一个分号结束。如本例中,主函数的一个语句:

printf(“ThisisaCprogram.\n”);

说明:函数printf是系统提供的一个库函数,printf函数的功能是向显示器输出一段信息,具体内容括在双引号内;参数中的“\n”代表一个命令:输出完这行字符后换行,不是要求显示的文字。例2写出以下程序的运行结果写出以下程序的输出结果#include<stdio.h>voidmain(){printf(“Hello\n”);printf(“world!\n”);}演示ex102例3四则运算编程#include<stdio.h>intadd(intx,inty);main(){inta,b,c;scanf("%d%d",&a,&b);c=add(a,b);/*函数调用语句*/printf("c=%d",c);}intadd(intx,inty){return(x+y);}演示ex103演示ex104讨论减、乘、除的编程输入函数Scanf()函数说明函数定义1.4C程序设计语言的执行对于C语言程序来说,这一过程一般分为4步:第1步:编辑源程序;第2步:编译;第3步:链接;第4步:执行;(整个过程如下图)filename.c编辑(edit)编辑器filename.obj预处理编译(compile)编译器filename.exe库函数和其他目标模块链接(link)链接器出错出错执行(excute/run)结果出错出错调试debug编译编译就是把用C语言描述的程序翻译成计算机可以直接理解并执行的机器语言命令组成的程序。C语言的编译过程分为两个阶段:首先是编译预处理,系统要先扫描程序,处理所有预处理命令,如把文件包含命令要求的文件包含(嵌入)到程序中。然后才开始编译。编译后得到的文件称为目标文件。目标文件就是用机器语言描述的文件。C语言的目标文件的后缀为.obj。目标文件的主文件名,一般与源程序文件名相同。在编译过程中,还要对源程序中的语法和逻辑结构进行检查。编译任务是由称做编译器(compiler)的软件完成的。程序在编译过程中,也可能发现错误。这时要重新进入编辑器进行编辑。链接链接是将与当前程序有关的、已经有的几个目标模块链接在一起,形成一个完整的程序代码文件。这些已经有的目标模块有:·库函数:如前面使用的printf;·对于大的程序,常常分成几个模块,分别编写、编辑和编译,形成不同的目标模块。经正确链接所生成的文件才是可执行文件。可执行文件的文件名后缀为.exe(有的系统为.out)。完成链接过程的软件称为链接器(linker)。程序在连接过程中,也可能发现错误。这时也要重新进入编辑器进行编辑。执行链接后得到的可执行文件名,对操作系统来说,相当于一条命令。在操作系统提供的命令界面上打入这个命令,就可以开始执行这个程序。C语言的集成开发环境Turboc2.0Turboc++(选用)Vc++等(1)打开Turboc++运行环境。界面如图:从图可以看到在集成环境的上部,有一行“主菜单”,其中包括下面10个菜单项:

FileEditSearchRunCompileProjectOptionsDebugWindowHelp分别代表:文件操作、编辑、查找、运行、编译、项目文件、选项、调试、窗口、帮助等功能。用户可通过以上菜单项来选择使用TurboC集成环境所提供的各项主要功能。(2)编辑源程序。在File菜单下选择NEW子菜单项命令,系统的光标处于等待输入C源程序状态。输入完源程序后,选择File菜单下选择Saveas子菜单项命令进行保存,在随后弹出的保存文件对话框中,输入文件名*.c后按“↙”(3)编译源程序选择Compile主菜单项并在其下拉子菜单中选择Compile命令,则进行编译。若源程序无语错误,生成可执行文件EXE;若源程序有语法错误,在Message窗口显示错误信息,此时没有生成可执行文件,应回到第2步,修改程序的错误,直到无语法错误、生成可执行文件。返回(4)连接程序在Compile菜单中,选择Link子菜单项命令,程序将被连接成可执行程序。注:按F9键,可一次完成编译和连接。(5)执行程序。选择Run子菜单命令,或按快捷键Ctrl+F9。(6)看结果。程序运行后看结果必须选择File菜单下的DOSShell命令或者按快捷键Alt+F5,才能看到运行的结果。如程序未得到预期的结果,应回到第2步,修改程序的错误。(7)退出TurboC++,File---Quit菜单命令或按Alt+X。总结:简单C语言程序设计步骤分析问题,设计解决方案了解和编写C语言程序代码上机调试(编辑、编译、链接、执行)理论课的主要内容实验课的主要内容上述每个步骤都可能出现很多错误,具体有三种错误:语法错误、逻辑错误、运行错误。总之,出现错误就要进行调试。作业1、在屏幕上输出如下图形:********25****要求:写出程序,并上机调试,尽量保证程序能够得到正确结果。复习本讲内容(第一章),预习教材第二章。第二章程序的简单算法制定2.1结构化程序的算法制定2.2结构化程序的算法描述2.3算法制定的范例§2.1结构化程序的算法制定1利用计算机处理问题简述§2.1结构化程序的算法制定例2.1从键盘输入3个数,找出其中最小的那个数。分析:1、需变量的个数----3个

2、先比较a,b的值,把小的存在min中。

3、再用min与c比较,把数值小的存放在min中。如果a<b则min=a,否则min=b;如果c<min则min=c,否则不变。画出对应的流程图。演示程序ex201【例】让某学生解方程

ax2+bx+c=0

求解过程:①分析问题这是一个一元二次方程(代数问题,须中学代数知识)②确定处理方案用求根公式③确定解题步骤确定a、b、c的值求出b2-4ac的值如果b2-4ac>0(双实根)

X1=……X2=……

如果b2-4ac=0(单实根)

X1=X2=……

如果b2-4ac<0(双复根)

X1=……X2=……④根据上述步骤计算⑤写出答案,整理、分析结果§2.2结构化程序的算法描述什么是算法

为解决一个问题所采取的方法和步骤称为算法。算法的特性

有穷性、确定性、有零个或多个输入、有一个或多个输出、有效性。算法有两个很重要的方面:(1)按什么顺序或步骤执行(2)用什么语句来实现§2.2结构化程序的算法描述自然语言

特点:易懂、冗长、易产生歧义流程图N-S结构化流程图PAD图伪代码计算机语言伪码语句示例之一

ifstudent’sgradesgreaterthanorequalto60display”Passed”elsedisplay”Failed”伪码语句示例之二

如果学生成绩大于或等于60

显示”及格”否则显示”不及格”C语言源程序段示例if(grade>=60)printf(“Passed!”);elseprintf(“Failed”);算法可采用自然语言、流程图、N-S图、PAD图、伪代码等方法来描述。示例:根据学生成绩输出评定结果。一、算法(algorithm)二、算法与流程图——传统流程图特点:直观形象;使用流线。缺点:占面积大,使用流线任意转移,易出现“乱麻”现象,造成编程与阅读程序困难。二、算法与流程图——N-S结构化流程图

77年美学者I.Nassi和B.Scheiderman提出。特点①取消流线②不允许流程任意转移,只能从上而下顺序执行③规定三种基本结构的流程图单元,由这些基本结构象搭积木似的组成各种算法(结构化设计)。优点算法清晰,流程不会无规律乱转移。二、算法与流程图————三种基本结构通常情况下,程序中的语句是以所编写的顺序一句接一句地执行,这种执行方法称为“顺序执行”。许多C语句能够让程序员指定不按编写顺序执行下一条执行语句,这种执行方法称为“控制转移”。Bohm和Jacopini的研究证实,所有的程序都能够只用三种控制结构编写,即◆顺序结构◆选择结构(selectionstructure)◆循环结构(repetitionstructure)顺序结构是C语言的基本结构,除非指示转移,否则计算机自动以语句编写的顺序一句一句地执行C语句。任何C语言程序都是由七种控制结构(顺序结构、三种选择结构和三种循环结构)构成的。二、算法与流程图————三种基本结构顺序结构

A块、B块顺序执行(每块代表一个或一组操作)二、算法与流程图——三种基本结构选择结构条件p成立时执行a块(否则执行b块)if选择结构条件为真时执行某个指定的操作,条件为假时跳过该操作(单路选择)if…else选择结构条件为真时执行某个指定的操作,为假时执行另一个指定的操作(双路选择)switch选择结构根据表达式的值执行众多不同操作中的某个指定的操作(多路选择)二、算法与流程图——三种基本结构循环结构分当型和直到型两类。当型先判断,只要条件为真就反复执行A块,为假则结束循环。直到型先执行A块,再判断条件是否为真,为真则继续执行循环体,为假则结束循环。C语言提供了三种循环结构,即while循环结构,do…while循环结构和for循环结构。§2.2.3PAD图PAD(ProblemAnalysisDiagram)另一种被广泛使用的一种算法的图形表示法。PAD图可以看成是二维的,它能展现算法的层次结构。(顺序结构很简单,在此未画图。)§2.3算法制定范例例2.4把从键盘输入的大写字母转换成小写字母,输出结果。问题:1、描述算法2、根据算法编写C程序3、运行检查程序是否正确。

演示ex202§2.3算法制定范例例2.5已知实数a和b,计算u的值:u=(r+s)2。其中,当a<b时,r=a2-b2,s=a/b;当a≥b时,r=b2-a2,s=a/b+4。算法(自然语言描述):①从键盘输入实数a和b。②如果a<b,则r=a2-b2,s=a/b;否则,r=b2-a2,s=a/b+4。③计算u的值:u=(r+s)2。④输出u的值。开始输入a,ba<bTFr=a*a-b*bs=a/br=b*b-a*as=a/b+4结束u=(r+s)*(r+s)输出u的值流程图输入实数a,ba<bFTr=a*a-b*bs=a/br=b*b-a*as=a/b+4计算的值:u=(r+s)*(r+s)输出u的值N-S图输入实数a,ba<br=a*a-b*bs=a/br=b*b-a*as=a/b+4计算u=(r+s)*(r+s)输出u的值PAD图/*例2.5*/#include<stdio.h>main(){

floata,b,r,s,u; printf("请输入变量a、b的值:"); scanf("%f%f",&a,&b); if(a<b) { r=a*a-b*b; s=a/b; } else { r=b*b-a*a; s=a/b+4; } u=(r+s)*(r+s); printf("所计算的u的值为:%f",u);}C语言描述小结:

本章主要介绍了程序算法的制定方法:自然语言、流程图、N-S图和PAD图。通过用这些方法表示解题思路。作业:

用流程图、N-S图和PAD图描述问题的算法:从键盘输入3个整数a,b,c,输出其中的最大的数。

第三章基本程序语句C语言的数据类型简介几个基本概念C语言的三种基本数据类型基本运算符和表达式C基本语句数据的输出数据的输入简单程序设计举例3.1C语言的数据类型简介字符型(char)整型(short,int,long,unsigned)单精度型(float)实型双精度型(double)

枚举类型(enum)数组类型([])构造类型结构体类型(struct)共用体类型(union)

指针类型(*) 空类型(void)基本类型数据类型C语言的数据结构3.2几个基本概念3.2.1标识符

1.标识符概念:是用来标识名称的,可以用来标识变量名、符号常量名、函数名、类型名、数组名、文件名等。C语言规定标识符只能由字母、数字和下划线组成,且第一个字符必须是字母或下划线。如:Day,month,student,name_1,s2,_12,_t13

注意:C语言中大写字母和小写字母被认为是两个不同的字符,大写字母‘A’与小写字母‘a’则表示不同的标识符。采用“见名知义”的原则3.2几个基本概念3.2.1标识符2.标识符的分类

关键字(代表固定含义,不能另做他用。书P21)分为三类

预定义标识符(有特定含义,包括C语言库函数名和变异预处理命令允许另做他用,但标识符失去原义)

用户标识符(用户自己定义,不能使用关键字,可以使用预定义标识符,建议不要使用预定义标识符)3.2几个基本概念3.2.2常量 在程序运行中,其数值不能被改变的量1.直接常量:是在程序中直接引用的数据

2.符号常量:符号常量是用标识符来代表一个数据符号常量的定义形式:#define符号常量标识符常量数据例如:#definePI3.141593.2几个基本概念3.2.3变量变量是指以标识符为名字,其值可以改变的量。

1、定义形式:类型标识符变量名1[,变量名2,变量名3...];

例如:inta,b,c;floatx,y;charc1,c2;或intc1,c2;

自己设定,满足标识符的规定。如:int,float,char;不可省变量分为整型、实型、字符型等。3.2几个基本概念3.2.3变量2、变量初始化

在说明变量的同时给变量一个初始值。inta=5,b=3;√

inta,b,c;a=b=c=3;√inta=b=c=3;

例如注意:在同一程序块中,变量不能被重复定义;使用变量时必须“先定义,后使用”。3.3

C语言的三种基本数据类型3.3.1整型数据1、整型常量:

(1)十进制形式:与数学上的整数表示相同;例如:12,-100,0(2)八进制形式:在数码前加数字0;例如:012=1*81+2*80=10(十进制)

(3)十六进制形式:在数码前加0X(数字0和字母X)。例如:0x12=1*161+2*160=18(十进制)

*八进制的数码范围为0~7;018

*

十六进制的数码除了数字0~9外,

还使用英文字母a~f(或A~F)表示10~15。如:0x1e√注意!3.3

C语言的三种基本数据类型2、整型变量(1)整型变量分类根据数据所占的二进制位数分为:int、short、long;同样存储长度的数据又分unsigned、signed;故可组合出六种类型。(2)整型数据的存储方式

数据在内存中是以二进制形式存储的。C语言中,一个int型数据通常用两个字节存放,其中最高位用来存放整数的符号,若最高位为0则表示该数为正数,若最高位为1则表示该数为负数。如:inti=-1;则存放形式为:11111111111111113.3

C语言的三种基本数据类型3、值域:变量允许存放的数值范围

由机器中数据的存储长度决定。

VC6.0所支持的整型数据

类型名称所占位数数值范围signed[int]8*4-2147483648~2147483647[signed]short[int]

8*2-32768~32767[signed]long[int]8*4-2147483648~2147483647unsigned[int]8*40~4294967295unsignedshort[int]8*20~65535unsignedlong[int]8*40~42949672953.3

C语言的三种基本数据类型例3.1:P24思考:运行结果是否正确,说明理由!#include<stdio.h>main(){inta,b,c,d;unsignedu,v;a=1;b=3;c=6;d=-7;u=a+b;v=c+d;printf("u=%d,v=%u\n",u,v);}3.3

C语言的三种基本数据类型3.3.2实型数据1、实型常量:(1)十进制小数形式:由数字和小数点组成;例如:3.4,4.,.3(2)指数形式:“十进制小数”+“e(或E)”+“十进制数整数”。例如:12.5e-6

表示12.5×10-6

。规范化指数形式:

小数点不能单独出现;0.√.0√.

e或E的两边必须有数,且其后面必须为整数;如:6E0.2

e5

2、实型变量(分类和值域):关键字字节数取值范围精度(位)float43.4×10-38~

3.4×10387double81.7×10-308~

1.7×1030815注意3.3

C语言的三种基本数据类型字符型数据1、常量:

(1)用单引号括起来的一个字符;如:‘A’、‘1’、‘?’等。

(2)用单引号括起来的由反斜杠(\)引导的转义字符。字符形式功能

\n换行

\t横向跳格

\b退格

\r回车

\\反斜杠字符

\’单引号字符

\ddd8进制数表示的ASCII码对应的字符

\xhh16进制数表示的ASCII码对应的字符例如:字符A的ASCII码为:

65D(十进制)=41H(十六进制)=101Q(八进制)

∴字符A可以表示为‘A’、’\x41’、’\101’。#include<stdio.h>main(){charc1='a',c2='b',c3='c',c4='\101',c5='\116';printf("a%cb%c\tc%c\tabc\n",c1,c2,c3);printf("\t\b%c%c",c4,c5);}转义字符的应用演示ex3043.3

C语言的三种基本数据类型2、变量的分类和值域:分类:

char和unsignedchar;值域:每个字符型数据在内存中占一个字节;包括ASCII字符表中的所有字符(可显示字符和非显示字符)。3、字符串常量:是用一对双引号括起来的字符序列。如:“SHANGHAI”,“FGHijk”,“CHINA”。字符串常量的存放:每个字符均以其ASCII码存放,且在最后加一个“空字符”‘\’’√‘\\’√‘’’

‘\’

‘a’与“a”的区别。注意3.4

基本运算符和表达式

3.4

基本运算符和表达式

3.4

基本运算符和表达式

doublefloatlongunsignedintchar,short

floata=2.0;intb=6,c=3;

a*b/c-1.5+’a’+(b-5)12.0/314.0-1.52.5+97(int)99.5+1100.5(double)3.4

基本运算符和表达式

例如: (1)x=(y=12)/4y值为12,x值为3,表达式的值为3 (2)x=y=12/4y值为3,x值为3,表达式的值为3 (3)x=(y=12/4)y值为3,x值为3,表达式的值为3 (4)(x=y)=12/4

3.4

基本运算符和表达式

3、复合赋值运算符*=、/=、%=、+=、-=等

注意:

复合运算符是一个运算符,但功能上,是两个运算符功能的组合。例如:(1)a+=b相当于a=a+ba*=b相当于a=a*ba*=b+c相当于a=a*(b+c)而不是

a=a*b+c(2)设a=12,计算表达式a+=a-=a*12和a+=a-=a*=12的值3.4

基本运算符和表达式

4.赋值时的类型转换实型数据赋给整型(字符型)变量:去掉小数部分;如:intf=23.457;

变量f的值为23。整型(字符型)数据赋给实型变量:补足有效位。

字符型数据赋给整型变量:将字符数据(8位)放到整型变量的低8位中,高8位进行“符号扩展”。

一个int、short、long、unsigned型数据赋给一个char型变量:截取低8位赋给字符型变量。

带符号的整型数据(int型)赋给long型变量:进行符号扩展。

带符号的long型数据赋给int型变量时,只截取低16位赋给int变量。

unsignedint

型数据赋给longint变量:高位补0。

int

型数据赋给unsignedint变量:内存情况不变,但若是负数,其符号位也作为数值赋给unsigned型变量。3.4

基本运算符和表达式

5、自增与自减运算符

单目运算符,运算对象是变量,不是表达式或者常量++i,--i:先使变量i的值增1(或减1),再使用变量i的值作为整个表达式的值来参加其它的运算;i++,i--:先使用变量i的值进行其它运算,再使变量i的值增1(或减1)。(1)i++;++i;(2)i=3;j=i++;

(3)i=3;j=++i;等价于i=i+1;j=i;i++;所以i的值为4,j的值为3。i++;j=i;所以i的值为4,j的值为4。例如:3.4

基本运算符和表达式

5、自增与自减运算符结合性:自右至左。如:i=2;j=-i++;

等价于:j=-(i++);即:j=-i;i++;

“++”与”-“是同优先级所以i的值为3,j的值为-2。注意“++”或“--”自增与自减运算符的使用。设i=3,k=(i++)+(i++)+(i++),k=?设i=3,k=(i++)+(++i)+(++i),k=?设i=3,j=4,k=i+++j,k=?设i=3;printf(“%d%d”,i,-i++);结果为?3.4

基本运算符和表达式

例如3.4

基本运算符和表达式

3.4.5逻辑运算符和逻辑表达式1.3种逻辑运算符:&&||!

逻辑量:可以是整型、实型、字符型和指针类型,

0——假非0——真;如:0,0.0,‘\0’,NULL都代表假。2.逻辑表达式:用逻辑运算符将表达式连接起来的式子★优先级:!>&&>||★结合性:自左至右;★表达式的值:若为真,则结果为1;若为假,则结果为0。

3.4

基本运算符和表达式

inta=5;floatb=3.5; !a(0) !(a<b)(1) a&&b(1) !a&&b(0) !a&&!b(0) !(a&&b)(0) a||b(1) !a||b(1) !a||!b(0) !(a||b)(0)

(a<b)&&(a>0)(0) (a<b)||(a>0)(1)例如结论:&&:只要有一个为假,结果则为假;||:只要有一个为真,结果则为真;

4-01&&28<41015>3&&2||8<4-!53.4

基本运算符和表达式

注意:

在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。例如:

(1)a=0;b=1;c=a++&&(b=3);

结果:a为1,b为1,c为0。

(2)a=1;b=1;c=0;d=--a||b--||(c=b+3);

结果:a为0,b为0,c为0,d为1。3.4

基本运算符和表达式

逻辑表达式一般用于控制语句中的条件:例如:

(1)n是小于m的偶数:

(2)year是闰年:

(能被4整除但不能被100整除或能被400整除)

n<m&&n%2==0(year%4==0&&year%100!=0)||year%400==03.4

基本运算符和表达式

3.4.6条件运算符

1、条件运算符

?和:,它们与三个操作数组成三目运算。2、形式为:<表达式1>?<表达式2>:<表达式3>3、求值规则和表达式的值:

真(非0),求解表达式2

求解表达式1条件表达式的值假(0),求解表达式3例如: intmax,a=5,b=3; max=a>b?a:b a<b?a:b+1

又如:

--a==b++?a++:b++(a=a-1;)4==3(b=b+1;)?a++:b++a为4b为4

04(b=b+1;)

表达式值为4b为5

a值为4,b值为5,条件表达式的值为4。

4、

优先级:逻辑>条件>赋值

验证:printf("%d%d\n",--a==b++?a++:b++,b);运行结果:453.4

基本运算符和表达式

5、

结合性:自右至左;

y=x>10?x/10:x>0?x:-x;等价于:y=x>10?x/10:(x<0?x:-x);思考:当x的值为15时,表达式的结果为:

当x的值为5时,表达式的结果为:153.4

基本运算符和表达式

逗号运算符:,形式:逗号表达式1,逗号表达式2,…,逗号表达式n

求值规则:从左至右依次计算各表达式的值;

优先级:最低;

结合性:自左至右;

表达式的值:最后一个表达式的值。3.4

基本运算符和表达式

例如:

aby表达式

y=a=4,b=5,a+b;4549y=(a=4,b=5,a+b);4599y=(a=4,b=5),a+b;4559y=a=(4,b=5),a+b;55510注意:

C语言常用逗号作为分隔符,例如:inta=3,b=4,c=5;printf(“%d,%d,%d”,(a,b,c));×

printf(“%d,%d,%d”,a,(a,b,c),c);结果为3,5,53.4

基本运算符和表达式

3.4.8强制类型转换运算符强制类型转换:指将表达式的类型强制转换为指定的类型,其一般形式为:(类型名)表达式其作用:将表达式的结果的类型强制转换为类型名所指的类型。例如(int)(3.4+2.8)的值为6

强制类型转换时,得到所需类型的中间变量,而原来变量的类型不会改变。注意:3.4

基本运算符和表达式

例如:

inta=2,b=5;floatx=4.4;

则有:表达式结果

b/a2(float)b/a2.5(float)(b/a)2.0(int)x%a+x4.4(int)x%(a+x)不合法3.5

C基本语句

C语言的语句可分为以下四类:简单语句(包括输入/输出语句)空语句复合语句流程控制语句3.5

C基本语句

简单语句1.

表达式语句就是一个表达式加上一个分号。如:a++;x=1;

函数调用语句由函数调用表达式加分号构成。

printf(“%d”,a);3.空语句

用一个分号表示,其一般形式为: ;3.5

C基本语句

C语言有丰富的标准函数库,可提供各类函数供用户调用,完成预先设定好的操作.

#include<stdio.h>#include<math.h>main(){inta=2,b=4;floatx,y;x=a/2+sqrt(b);/*x=3.0*/a++;/*a=3*/y=x*a;/*y=9.0*/printf(“x=%6.2f,y=%6.2f”,x,y);}3.5

C基本语句

常用标准库函数求数学函数值:

fabs(x)(求x的绝对值)、pow(x,y)(计算x的y次幂)、

sin(x)、cos(x)、exp(x)(求ex)、log(x)(求lnx)等。调用标准库函数要注意以下几点:在程序中要包含相应的头文件例如:

要使用标准的输入/输出函数printf()等需包含头文件#include<stdio.h>要使用数学函数sqrt()等需包含头文件#include<math.h>调用规则:函数名(参数表)3.5

C基本语句

3.5.2复合语句用一对花括号{}将多条语句组合在一起,在语法上相当于一条语句。1、一般形式:{[内部数据说明;]

语句1;……

语句n;}注意:(1)在复合语句中说明的变量,是局部变量,仅在复合语句中有效。(2)复合语句的}之后,不能有分号。3.5

C基本语句

复合语句(程序块)示例【例3.3】main(){ intx=1;

{ intx=2; { intx=3;

printf(“x=%d”,x);

}

printf(“x=%d”,x);

}

printf(“x=%d”,x);}3.6数据的输出1.格式输出函数printf()

格式:

printf(“……”,输出项1,输出项2,…,输出项n);

例:printf(“x=%d,y=%f\n”,x,x+3);格式控制(用双引号括起来,控制输出项的格式和输出一些提示信息)输出表列(用逗号分隔的数据组,可选项)格式控制分为两个部分:普通字符—原样输出(转义字符按表3-4输出)格式说明—%+格式字符(替换输出)

格式说明的一般形式:

%-0m.n

l(或h)格式字符

-左对齐输出

0数字前的空位填0m输出域宽(长度,包括小数点)

如数据的位数小于m,则左端补以空格如数据的位数大于m,则按实际位数输出

n输出精度(小数位数)

l或h长度修正符

l长整型及双精度注:long型的数据宜用%ld,double型宜用%lfh表示短整型如%hd%hx3.6数据的输出

格式字符(规定了输出的数据形式):

%d

输出十进制整数

%x

以十六进制无符号形式输出整数

%o

以八进制无符号形式输出整数

%u

以无符号十进制数形式输出整数

%f

输出小数形式浮点数(double型用%lf

%s

输出字符串

%c

输出单字符3.6数据的输出【例1】求运行结果。main(){inta=30;printf("%d,%o,%x,%u,%c",a,a,a,a,a);}结果:30,36,1e,30,▲

结论:

格式字符与对应输出项类型要一致,否则正确的运算结果不能得到正确的显示结果。3.6数据的输出

【例】若floaty=1234.9999;printf(“%d”,y);则输出结果为何?

printf函数使用注意事项:在格式控制字符串中,格式说明与输出项从左到右在类型上必须一一对应匹配。在格式控制字符串中,格式说明与输出项的个数应该相同。如果要输出百分号(%),则在格式控制串中用两个连续的百分号(%%)来表示。在调用printf函数时,输出项有自增(自减)运算时,计算输出项的顺序从右至左。

3.6数据的输出【例】.格式输出函数示例程序#include<stdio.h>main(){inti=97;charch=’a’;printf(“i=%d,%c\n”,i,i);

}输出结果:

i=97,a两个输出项都是变量i,但以不同的格式输出,一个是输出的整型数,一个输出的是字符a.其格式是由%d与%c控制的.3.6数据的输出字符输出函数

格式:

putchar(c)

其中c为字符型或整型的常量、变量及其表达式

功能:每次向屏幕输出一个字符供显示。【例】求以下程序运行结果

#include<stdio.h>main(){charx='a';putchar(x);putchar('b');putchar(x+2);putchar('b'+2);}结果:abcd1.格式输入函数scanf()

格式:scanf(“……”,&变量名1,&变量名2,…,

&变量名n);

例:scanf(“%d,%d,%d”,&a,&b,&c);3.7数据的输入格式控制(需要输入数据的类型)地址列表(简单变量要用&开头)格式说明的一般形式:

%*

ml(或h)

格式字符

&

—求地址的运算符&a

表示该变量所占空间的首地址

*

—抑制字符(“虚读”,即读入数据后不送给任何变量)

注意:

scanf()函数没有输出功能(即不会向屏幕显示任何字符)也不能规定小数位数(m.n)典型错误:scanf(“a=%d,b=%d,c=%d\n”,&a,&b,&c);scanf(“%5.2f“,&x);3.7数据的输入正确语句:

printf(“Inputa,b,c=“);scanf(“%d,%d,%d”,&a,&b,&c);scanf(“%5f“,&x);scanf()注意事项字符输入函数格式:

getchar()

功能:从键盘上读入一个字符,getchar()包含在stdio.h中。3.7数据的输入【例一】#include<stdio.h>main(){chara,b;a=getchar();b=getchar();printf(“a=%c,b=%c\n”,a,b);}

运行时,如果——

输入:Student

输出结果为a=S,b=t例3.13

输入圆的半径,输出圆的周长和面积。分析:

1.定义实型变量r、l、s用于存放半径、周长、面积;2.调用输入函数,输入r:3.分别利用周长公式和面积公式求出l、s;4.调用输出函数输出l、s。3.8程序举例例3.10输入圆的半径,输出圆的周长和面积#include<stdio.h>voidmain(){floatr,l,s;

scanf(“%f”,&r);/*输入一个浮点数据,存入地址&r*/l=2*3.14159*r;/*计算周长,赋值给l*/s=3.14159*r*r;/*计算面积,赋值给s*/printf(“\nl=%8.4f”,l);/*周长占8个字符宽,4位小数*/printf(“\ns=%8.4f”,s);

/*输出面积,数据共占8个字符宽,4位小数*/}3.8程序举例3.8程序举例例3.12从键盘输入一个学生的3门课程的成绩,求其平均并输出,保留一位小数。例3.11从键盘输入一个小写字母,用大写形式输出该字母。例3.13从键盘输入两个整数给两个变量x和y,交换变量x和y的值,然后输出。程序流程控制第三章顺序结构程序设计1第四章选择结构程序设计2第五章循环结构程序设计3几种控制语句4顺序结构程序设计顺序结构:自顶向下顺序执行语句例:交换两个数的值

34x3t①②③ybefore:x=3,y=4;after:x=4,y=3;#include<stdio.h>main(){ intx=3,y=4,t;printf(“before:x=%d,y=%d\n”,x,y);t=x;x=y;y=t;printf(“after:x=%d,y=%d\n”,x,y);}例:从键盘输入一个小写字母,输出其对应的大写字母及其相应的ASCII码值。程序如下:#include<stdio.h>main(){ charch1,ch2;

ch1=getchar(); ch2=ch1-32; printf("\nletter:%c,ASCII=%d",ch1,ch1); printf("\nletter:%c,ASCII=%d",ch2,ch2);}scanf(“%c”,&ch1);运行结果为:a↙letter:a,ASCII=97letter:A,ASCII=65第四章选择结构程序设计if语句:

1.单分支if语句

2.双分支if语句

3.多分支if语句选择结构有两种:switch语句按给定条件进行判断,按判断后的不同情况进行不同处理。形式二(一般形式):格式:if(expression)statement1elsestatement2

执行过程:if语句常用的两种形式形式一(缺省形式):格式:if(expression)statement执行过程:表达式语句非00例:if(x>y)printf(“%d”,x);表达式语句1语句2非00例:if(x>y)max=x;elsemax=y;if语句(条件分支语句)【例4-1】在两个数中取大数。main(){intnum1,num2,max;printf("\ninputtwonumbers:");scanf("%d%d",&num1,&num2);

max=num1;if(max<num2)max=num2;printf("max=%d\n",max);}main()

{intnum1,num2;printf("\ninputtwonumbers:");scanf("%d%d",&num1,&num2);

if(num1>num2) printf("max=%d\n",num1);elseprintf("max=%d\n",num2);}如:if(a==b&&x==y)printf(“a=b,x=y”);if(3)printf(“OK”);if(‘a’)printf(“%d”,’a’);

if(s=2)printf(“hello”);if(s=2,s<0)printf(“false”);else要与if配对使用if后面的表达式类型任意语句可以是复合语句同一个条件的多种表达方式

如:if(x)

if(x!=0)if(!x)

if(x==0)例考虑下面程序的输出结果:#include<stdio.h>main(){intx,y;scanf(“%d,%d”,&x,&y);if(x>y)x=y;y=x;elsex++;y++;printf(“%d,%d\n”,x,y);}CompileError!说明:错误信息:misplacedelseinfunctionmain如:if(a<b){r=a*a-b*b;s=a/b;}else

{r=b*b-a*a;s=a/b+4;}#include<stdio.h>main(){intx,y;printf("Enterintegerx:");scanf("%d",&x);

y=x>=0?2*x+1:0;printf(“whenX=%d,f(x)=%d\n”,x,y);}运行:Enterintegerx:10

whenX=10,f(x)=21Enterintegerx:-1

whenX=-1,f(x)=0例求分段函数的值

if(x>=0)y=2*x+1;elsey=0;îíì³+<=)0(12)0(0)(xxxxf#include<stdio.h>main(){intx,y;printf("Enterintegerx:");scanf("%d",&x);if(x)y=1;elsey=-1;printf(“whenX=%d,y=%d\n“,x,y);}运行:Enterintegerx:10

whenX=10,y=1Enterintegerx:0

whenX=0,y=-1例

if(x!=0)îíì=-1!==)0()0(1xxy多分支if语句:if-elseif其格式为: if(表达式1) 语句1 elseif(表达式2) 语句2 …… elseif(表达式n) 语句n else语句n+1【例3-3】将学生成绩由百分制转化为等级制。规则如下:

⑴85分(含)以上为A级。⑵70分(含)以上且85分以下为B级。⑶60分(含)以上且70分以下为C级。⑷60分以下为D级。main(){floatscore;printf("\npleaseinputascore:");scanf("%f",&score);if(score>=85)printf("thescore%fisA\n",score);elseif(score>=75)printf("thescore%fisB\n",score); elseif(score>=60) printf("thescore%fisC\n",score); else printf("thescore%fisD\n",score);}程序运行结果如下:pleaseinputascore:89↙thescore89.000000isA

if语句嵌套例:#include“stdio.h”main(){intx=4,y=5,z=2,max;max=x;

if(z>y)

if(z>x)max=z;

else

if(y>x)max=y;printf(“max=%d”,max);}结果?缺省{}时,else总是和它上面离它最近的未配对的if配对if(…)if(…)if(…)else…...else…...else…...if~else配对原则:main(){ intx=100,y=10,a=30,b=20,k1=10,k2=6; if(a>b) if(b!=10) if(!k1)x=1; elseif(k2)x=10; elsex=20;printf("x=%d\n",x);}运行结果:x=10例:if(a==b)if(b==c)printf(“a==b==c”);elseprintf(“a!=b”);修改:if(a==b)

{if(b==c)printf(“a==b==c”);

}elseprintf(“a!=b”);实现if~else正确配对方法:加{}实现if~else正确配对方法注意:书写格式不能代替程序逻辑

if语句嵌套一般形式:if(expr1)if(expr2)statement1elsestatement2内嵌ifif(expr1){if(expr2)statement1}elsestatement2

内嵌ifif(expr1)statement1elseif(expr3)statement2elsestatement3内嵌ifif(expr1)if(expr2)statement1elsestatement2elseif(expr3)statement3else

温馨提示

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

评论

0/150

提交评论