最基础的C语言教程教学课件

PPT
  • 阅读 33 次
  • 下载 0 次
  • 页数 202 页
  • 大小 1.959 MB
  • 2022-11-24 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档40.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
最基础的C语言教程教学课件
可在后台配置第一页与第二页中间广告代码
最基础的C语言教程教学课件
可在后台配置第二页与第三页中间广告代码
最基础的C语言教程教学课件
可在后台配置第三页与第四页中间广告代码
最基础的C语言教程教学课件
最基础的C语言教程教学课件
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 202
  • 收藏
  • 违规举报
  • © 版权认领
下载文档40.00 元 加入VIP免费下载
文本内容

【文档说明】最基础的C语言教程教学课件.ppt,共(202)页,1.959 MB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-44697.html

以下为本文档部分文字说明:

C语言程序设计1第一章C语言概述主要内容:C语言的发展C语言的特点简单C程序介绍算法结构化程序设计C程序的执行过程2C语言出现的历史背景(1)C语言的发展源于人们希望用高级语言编写操作系统。ALGOL60(高级语言)60->CPL(剑桥大学推出接近硬件规模大难实现

)63->BCPL(剑桥大学简化CPL)67->B语言(贝尔实验室用B写了UNIX操作系统)70->C语言(用C改写了UNIX90%,即第5版)72-73->标准C(K&R《TheCProgramminglanguage》)78->ANSIC83(ANSI美国国家标准化协会)->87

ANSIC->ISOC90(ISO-国际标准化组织)版本:MicrosoftC、TurboC、BorlandC、QuickC(2)C语言既具有高级语言特性,又具有低级语言特性-中级语言。1.1C语言的发展31.2C语言的特点语言简洁,表达能力强

,易于理解只有32个关键字,9种控制语句32个关键字:(由系统定义,不能重作其它定义)autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgot

oifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunsignedunionvoidvolatilewhile49种控制语句:if()~else~for()~while()~do~whil

e()continuebreakswitchgotoreturn5运算符丰富34种运算符,运算能力强、效率高。算术运算符:+-*/%++--关系运算符:<<===>>=!=逻辑运算符:!&&||位运算符:<<>>~|^&赋值运算符:=及其扩

展条件运算符:?:逗号运算符:,指针运算符:*&求字节数:sizeof强制类型转换:(类型)分量运算符:.->下标运算符:[]其它:()-6数据类型丰富C数据类型基本类型构造类型指针类型空类型void定义类型typedef数值类型字符

类型char枚举类型enum整型浮点型单精度型float双精度型double短整型short长整型long整型int数组结构体struct共用体union7具有结构化的控制语句程序书写格式自由能进行位操作,能实现汇编语言的大部分功能,可以直接

对硬件进行操作语言生成的代码质量高,程序执行效率高可移植性好8例1.1编写程序,在屏幕上打印字符串“ThisisaCprogram.\n”。main(){printf("ThisisaCprogram.\n");}1.

3简单C程序介绍9例1.2/*求两数之和*/main(){inta,b,sum;/*定义变量*/a=123;b=456;sum=a+b;printf(“Sumis%d\n”,sum);}Sumis57910例1.3求两数之最大值main(){inta,b,c;scanf(”%d,%

d”,&a,&b);c=max(a,b);/*调用自定义函数max*/printf(“max=%d\n”,c);}intmax(intx,inty)/*自定义函数*/{intz;if(x>y)z=x;elsez=y;return(z);}11C程序结构C程序由函数构成必须有,且只能

有一个main(主函数)总是从main函数开始执行函数由函数首部和函数体组成函数首部指定函数名、函数参数、类型函数体从{开始,到}结束函数内有语句12C程序结构(续)语句包括说明性语句、可执行语句以;表示语句结束注释可以出现在程序的任何

位置用/*和*/括起来,必须成对出现书写格式C语言没有行的概念,书写格式自由。习惯小写字母,缩进格式。131.4程序的灵魂-算法程序包括两方面内容:1.对数据的描述。数据元素及各元素之间的关系,即数据结构。2.对操作的描述。即操作步骤,也

就是算法。程序=数据结构+算法程序=数据结构+算法+程序设计方法+语言工具环境说明:高级语言的数据结构是以数据类型来体现的。141.4.1算法什么是算法为解决某一应用问题而采用的解题步骤算法的描述方式用自然语言描述算法用流程图描述算法用N-S结构图描述算法用计算机语言表示

算法(即实现算法)例如:输出两个数中的最大数15用自然语言描述算法第一步:输入x和y的值第二步:比较x和y的值,如果x大于y,则输出x的值,否则输出y的值。例如当描述“输出10个数中最大数”的算法时,会冗长、难于理解16图1.5用流程图描述算法用流程图描述算法NYz=yz=xx>y?

开始输入x和y结束输出z起止框输入/输出框判断框处理框流程线17用N-S结构图描述算法输入x、y的值x>yTFz=xz=y输出z的值图1.7用N-S结构图描述的算法18第一章1.1引言•算法的特性(1)有穷性。(2)确定性。(3)有效

性。(4)输入。(5)输出。191.4.2结构化程序设计程序的三种基本结构顺序结构程序:按照书写顺序依次执行语句选择结构程序:按照条件判断选择执行语句循环结构程序:通过条件控制循环执行语句三种基本结构的共同点:•都是只有一个入口和一个出口;•结

构内的每一个框都有机会被执行;•结构内没有死循环。20结构化程序设计的三种基本结构:1)顺序结构传统流程图N-S流程图ABAB开始结束其中:A、B为操作框,可由一条或多条语句实现。212)选择结构(分支结构)传统流程图N-S流程图入

口出口ABPPABTFTF其中:P为分支判断条件;A、B必有一个且只有一个被执行;A、B之一可是空操作,用表示。223)循环结构当型循环——先判断后循环,有可能一次也不循环。入口FTPA当P为真A出口其中:P为循环

判断条件;A为要重复执行的操作,称为循环体;23直到型循环——先循环后判断,至少循环一次。入口FTPAA直到P为真出口其中:P为循环判断条件;A为要重复执行的操作,称为循环体;24算法举例例:计算5!(1×2×3×4×5)1→t1→i当i≤5t×i→ti+1→i输

出t1→t1→it×i→ti+1→i直到i>5输出t当型循环直到型循环25结构化程序设计的基本原则:结构化程序设计的基本原则:采用自顶向下、逐步细化的方法进行设计;采用模块化原则和方法进行设计。即将大型任务从上向下划分

为多个功能模块,每个模块又可以划分为若干子模块,然后分别进行模块程序的编写;每个模块都是用结构化程序实现,即都只能由三种基本结构组成,并通过计算机语言的结构化语句实现。261.5C语言的上机操作步骤一.上机过程:编译正确正确正确有错误有错误编辑运行27C程

序的执行过程1.源程序文件的建立和编辑编写源程序,形成.C文件需用编辑工具:tc.exe、记事本2.编译编译源程序,形成目标程序.Obj文件需用编译工具:tcc.exe3.连接连接OBJ文件和调用的库函数,形成运行程序.exe文件需用连接工具:tlink.exe4.

运行.exe文件28装载c程序编辑c程序运行c程序(ctrl+F9)正确?看结果(alt+F5)运行下一程序?是是否退出否2.上机过程流程图:29F3(打开源程序)F2(保存当前源程序)F9(编译当前源程序)CTRL+F9(运行当前源程序)ALT+F5(查看运行结果)3.编写、运行C程序时常用功

能键30三、需要记住的TC中一些常用功能键F1:帮助。F2:将当前文件存盘。F3:装载原有文件或给新文件命名。F4:程序运行到光标所在行。F5:放大或缩小活动窗口切换。F6:开或关活动窗口切换。F7:单步运行程序,跟踪进入函数内部运行。F8:单步运行程序,不跟踪进入函数内部。第一章1.

3C语言集成开发环境31实验报告实验一[实验目的][实验内容和步骤]1.设计算法,写出程序2.在TurboC下编辑,得到源程序(.c)3.编译,得到目标文件(.obj)4.连接,得到可执行文件(.exe)

5.分析结果[实验体会]32C程序设计数据类型、运算符与表达式332.1数据类型2.2常量与变量2.3整型数据2.4实型数据2.5字符型数据2.6变量赋初值2.7混合运算2.8运算符与表达式数据类型、运算符与表达式CHAPTER234数据类

型、运算符与表达式C的数据类型C语言提供的数据结构是以数据类型形式出现的数据在内存中存放的情况有数据类型决定数据的操作要依靠运算符实现,而数据和运算符共同组成了表达式。35数据类型、运算符与表达式C的数据类型数组类型数据类型

构造类型空类型指针类型双精度单精度实型(浮点型)字符型枚举类型基本类型整型结构体类型共用体类型363.2常量与变量3.2.1常量和符号常量1.常量:在运行过程中,其值不能被改变的量称为常量。分类:整型﹑实型﹑字符﹑字符串2.符号常量,用一个标识符代表

的常量。习惯上,符号常量名用大写,变量用小写,以示区别。-1,0,123为整型常量4.6,-1.23为实型常量‘a‘,‗d‘为字符常量#definePRICE255A=PRICE*A+6C=P

RICE+C/120PRICE是标识符,符号常量373.2.2变量1.变量:在程序运行过程中,其值可以改变的量称为变量。2.标识符:用来标识变量名、符号常量名、函数名、类型名、数组名、文件名的有效字符序列称为标识符。由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。合法的

变量名如:average,abd,a,s2,student_name,_init不合法的变量名:M.D.John,1a,#33,a>b3.C语言要求对变量“先定义,后使用”。383.3整型数据3.3.1整型常量由一系列数字组成。也可带有减号,但不使用加号。

十进制整数:123,-456,0八进制整数:以0开头的数据,如:-011,0123十六进制整数:以0x开头的数据,如:0x123整型常量的分类根据其值的范围而决定其类型,并可以赋值给类型相匹配的整型变量。393.3.2整型变量1.整数数据在内存中的存放形式数据在内存中是

以二进制形式存放的。例如:3=(0000000000000011)2要区别:+3和-3方法是:将符号也数码化即:正的符号+用0表示负的符号-用1表示数值是以补码表示的。正数的补码和其原码的形式相同。负数的补码:将该数的绝对

值的二进制形式,按位取反再加1。-3=(11111111111111101)402.整型变量的分类整型…int在内存中以二进制形式存放,每一个整型变量在内存中占2个字节。短整型…以shortint表示或以short表示,一般与int占有的内存相同。长整形…

以longint表示或以long表示,一般占有在内存中字节为int两倍。无符号型…只能存放正整数,它的表示是在上述三种类型之前加上unsigned类型名称类型符bit取值范围整型(短整型)intshort[int]16-215~215-1(-32768~32767

)无符号整型unsigned[int]160~216-1(0~65535)长整型long[int]32-231~231-1无符号长整型unsignedlong[int]320~232-1413.整型变

量的定义对变量的定义一般放在函数的开头部分。[例2.1]main(){inta,b,c,d;unsignedu;a=12;b=-24;u=10;c=a+u;d=b+u;printf(―a+u=%d,b+u=%d\n‖,c,d);}a+u=22,b+u=-14不同类型的数可以直接运算424.整型数据

的溢出main(){inta,b;a=32767;b=a+1;printf(―%d,%d‖,a,b);}运行结果为32767,-327683.3.3整型常量的类型①一个整常量,其值在-2^15~2^15-1内可认为是int型,并

可赋值给int型和longint型变量;②一个整常量,其值在–2^31~2^31-1范围内则认为它是longint型,可赋值给一个longint型变量;③常量中无unsigned型,但一个非负值的整常量可以赋给uns

igned型整变量;433.4实型数据3.4.1实型常量1.十进制小数形式(日常记数形式)1.0+12.0-12.00.02.指数形式(科学记数形式)<尾数>E(e)<整型指数>。例如3.0E+5等。3.4.2实型变量1.类型:单精度:float,分配4Byte双精度:d

ouble,分配8Byte2.存储:指数部分小数部分小数的符号位指数的符号位44实型数据的类型及规定类型类型符Byte绝对值的范围有效数字单精度型float410-38~10386~7位双精度型double810-308~1030815~16位实型常量不分float和doub

le,根据范围赋值给相应的变量。如:floata;doubleb;a=111111.111;b=111111.111a中实际存储的是111111.1(7位有效)b中实际存储的是111111.111(全部有效)453.5字符型数据3.5.1字符常量1.定义用一对单引

号括起来的单个字符,称为字符常量。例如,‘A’、‘1’、‘+’等。2.转义字符C语言还允许使用一种特殊形式的字符常量,就是以反斜杠“\”开头的字符序列。\0字符串结束标志\n回车换行\t跳到下一个输出位置\"双引号字符\dddddd为1到3位八进制数所代表的字符463.5.

2字符型变量字符变量的类型关键字为char,一般占用1字节内存单元。1.变量值的存储将一个字符常量存储到一个字符变量中,实际上是将该字符的ASCII码值(无符号整数)存储到内存单元中。例如:charch1,ch2;/*定义两个字符变量:ch1,ch2*/ch1=‘a‘;ch2=‘b‘;/*给字

符变量赋值*/’a‘、‘b‘的ASCII码为97、98。2.特性1)字符数据在内存中存储的是字符的ASCII码;2)C语言允许字符型数据与整型数据之间通用,可以互相赋值。3)字符数据也可以整数形式输出。47[例1]字符变量的字符形式输出和整数形式输

出。main(){charc1,c2;c1='a';c2='b';printf(―c1=%c,c2=%c\n‖,c1,c2);printf(―c1=%d,c2=%d\n‖,c1,c2);}程序运行结果:c1ac2b48[例2]大小写字母的转换。mai

n(){charc1,c2;c1='a';c2='b';c1=c1-32;c2=c2-32;printf(“%cc2=%c\n”,c1,c2);}程序运行结果:AB49数据类型、运算符与表达式字符型数据3.5.3字符串常量用双引号括起来的字符序列。如:“Howdoyoud

o‖,―CHINA‖,―a‖,―$123.34‖等。字符串可以一次输出。如:printf(―Howdoyoudo‖);C语言规定:在存储字符串常量时,由系统在字符串的末尾自动加一个‘\0’作为字符串的结束标志。在内存中,对字符串常量是采用字符数组表示,即用一个字符型数组来存放一

个字符串。注意:‘a‘是字符常量,“a‖是字符串常量,二者不同。50综上所述,字符常量'A'与字符串常量"A"是两回事:(1)定界符不同:字符常量使用单引号,而字符串常量使用双引号;(2)长度不同:字符常量的长度固定为1,而字符串常量的长度,可以是某个整数;(3)存储要求不同:字符常量

存储的是字符的ASCII码值,而字符串常量,除了要存储有效的字符外,还要存储一个结束标志’\0’。513.6变量赋初值在变量定义的同时可以为变量赋初值。如:inta=3;(相当于inta;a=3;)floatf

=3.56;charc=‗a‘;inta,b,c=5;表示只给c赋初值。(相当于inta,b,c;c=5;)523.7各类数值型数据间的混合运算不同类型的数据(整型、实型、字符型)可进行混合运算。如:10+‗a‘+1.5-8765.1234*‗b‘必须首先将它

们转换成同一类型的数值。转换原则是由低向高转换,运算结果为最高级别的类型。doublefloatlongunsignedintchar,short表示必须要转换表示由低向高高低53数据类型、运算符与表达式混合运算如:10+‘a’+i*f-d/ei

ntdoubledouble–double+double54例2-5:已知:floata=2.0;intb=6,c=3;求解:a*b/c-1.5+’A’+abs(-5)=?12.0/34.0-1.52.5+65(int)67.

5572.5第二章2.3运算符和表达式553.8算术运算符和算术表达式1.基本的算术运算:+、-、*、/、%%是模运算,即求余运算,要求整数。如:7%4的结果是3。说明:5/3的结果仍是整数,小数部分被忽略。5.3/3或5/3.0的结果为double型。C

编译系统将实型常量作为双精度来处理。如果参加+、-、*、/运算的两个数中有一个数为实数,则结果是double型。2.算术表达式:用算术运算符将运算对象按C的语法规则连接起的式子。例如:a*b/c-1.5+‗a‘优先级(算术运算):()*/%+-在同一级别中,采取由左至右的结合方向。如:a-b

+c相当于(a-b)+c563.强制类型转换运算符可将一个表达式转换成所需类型。其一般形式为:(类型名)(表达式)例如:(double)a(int)(x+y)(float)(5%3)在强制类型转换时,得到

一个所需类型的中间变量,原来变量的类型未发生变化。57练习main(){inti;floatx;x=3.6;i=(int)x;printf("x=%f,i=%d\n",x,i);}58数据类型、运算符与表达式运算

符和表达式4.自增、自减运算符使变量的值加1或减1。如:++i,--i在使用i之前,先使i的值加(减)1i++,i--在使用i之后,再使i的值加(减)1例如:i的值为3,则j=++i;j的值为4,i的值

为4j=i++;j的值为3,i的值为4又如:printf(―%d‖,++i);输出结果为4printf(―%d‖,i++);输出结果为3单独使用时,i++,++i等价59第二章2.3运算符和表达式结合性:自右向左例:i=2;j=-i++;分析:(1)++、--、+、-是同级运算符,

结合方向:自右向左。(2)-i++等价于-(i++)(3)对于括号内的自增运算,要先使用i,再使i增加1。运算结果:i的值为3,j的值为-2。60练习a=1,b=2,c=3,d=4下列式子的值分别是多少?a*b/ca*b%c+1+

+a*b-c--613.9赋值运算符和赋值表达式1.赋值运算符:“=‖。2.复合赋值运算:在赋值符号前加上其它运算符号。+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=例如:a+=3;等价于a=a+3;x*=y+8;等价于x=x*(y+8);x%=3;等价于x=x%3;

赋值运算符仅优先于“,”,且具有右结合性例如:a=b=b*c等价于:a=(b=(b*c))赋值号与数学中的等号含义不同例如:数学中a=b等价于b=aC语言中a=b不等价于b=a623.赋值运算中的类

型转换<实型变量>=<整型表达式>–小数部分自动补0<整型变量>=<实型表达式>–自动舍去实型表达式的小数部分(注意不进行四舍五入)<字符变量>=<整型表达式><整型变量>=<长整型表达式>–自动截取表达式值的低字节赋值,舍去高字节<整型变量>=<字符数据><长整型变量>=<整型表达

式>–自动给高字节补0或补163数据类型、运算符与表达式运算符和表达式4.赋值表达式:由赋值运算符将一个变量和一个表达式连接起来的式子。一般形式为:<变量><赋值运算符><表达式>例如:inta=12;求下列运算的结果a+=a-=a*aa=a-a*

a=12-12*12=-132)a+=-132a=a+(-132)=(-132)+(-132)=-264a=-26464练习inti=1,j=2,k=3,m=4;计算下列式子的值i+=j+kj*=k=m+565数据类型、运算符与表达式运算符和表达式3.10逗号运算符和逗号

表达式逗号运算符又称为“顺序求值运算符”,是所有运算符中级别最低的,它将两个表达式连接起来。一般形式为:表达式1,表达式2求解过程是:先求解表达式1,再求解表达式2,整个逗号表达式的值是表达式2的值。例如:a=3*5,a*4;a的值为15,

表达式的值为60(a=3*5,a*4),a+5;a的值为15,表达式的值为20又如:x=(a=3,6*3);x的值为18x=a=3,6*ax的值为3,表达式的值为1866第4章最简单的C程序设计-顺序程序设计671C语句概述2赋值语句3数据的输入输出4字符数据输入

输出5格式输入输出7程序举例684.1C语句概述用C语言编写的程序称为C语言源程序,简称C程序。C语言一般由一个或若干个函数组成,而这些函数可以保存在一个或几个源程序中,这些文件都以.C作为文件扩展名。[例]求园的面积#DEFINEPI=3.141

5926main(){floatr,s;r=20;s=r*r*PI;printf(“area=%f”,s);}area=1256.637C程序源程序文件1源程序文件i源程序文件n……预编译命令函数1函数n…变量申明部分执行部分(语句)语句是计算机执行的

最小单位69C语句分类和其他高级语言一样,C语言的语句也是用来向计算机发出操作命令的。一条语句经过编译后生成若干条机器指令。在C语言中只有可执行语句,没有非执行语句。C语句有以下五类:⑴控制语句,完成一定的控制功能;①if()~else~(条件语句)②

for()~(循环语句)③while()~(循环语句)④do~while()(循环语句)⑤continue(结束本次循环语句)⑥break(中止执行switch或循环语句)⑦Switch(多分支选择语句)⑧goto(转向语句)⑨return(从函数

返回语句)70⑵函数调用语句,由一次函数调用加一个分号构成一个语句,如:printf(―ThisisaCstatement.‖);⑶表达式语句,由一个表达式构成一个语句,如:a=3(是表达式,不是语句)a=3;(是语句)⑷空语句,只有一个分号,什么也不做;⑸复合语句

,用{}把一些语句括起来成为复合语句。相当一条语句,哪里有语句,哪里就可用复合语句。if(a>b){max=a;min=b;}复合语句最后一个语句中最后的分号不能忽略不写。714.2赋值语句赋值表达式后面加上分号,构成赋值语句。

功能:将数据赋给变量。如:x=3.1;a=‗d‘+123+b/d;程序中基本的命令行必须是一个语句,表达式不能单独构成语句。例如:‘d‘+123+b/d是一个表达式a=‗d‘+123+b/d;是一个赋值语句特点:①C语言中的赋

值号“=‖作为赋值运算符;②作为赋值表达式可以被包括在其他表达式之中;if((a=b)>0)t=a;③赋值语句可以连接赋值;a=b=c=2;724.3数据输入输出的概念1.所谓输入输出是以计算机主机为主体而言的。主机向

外部设备-“输出”,外部设备向主机-“输入”。2.C语言本身不提供输入输出语句,输入和输出操作是由函数实现。C语言通过调用四个系统函数来实现输入输出。printf(),scanf(),getchar(),putchar()3.在使用C语言库函数时,要用到预编译命令“#include‖将有关的

“头文件包括到用户源文件中。在调用标准输入输出库函数时,文件开头应有以下预编译命令:#include<stdio.h>或#include‖stdio.h‖734.4字符数据的输入输出1.字符输出函数putc

har()向终端输出一个字符。如:putchar(c);输出变量c的值,c可以是字符型变量或整型变量。[例3.1]#include“stdio.h”main(){chara,b,c;a=‘B’;b=‘O’;c=‘Y’;putchar(a

);putchar(b);putchar(c);}BOY74也可以输出控制字符,如putchar(‘\n‘)输出一个换行符。输出其它转义字符putchar(‗\101‘);输出‗A‘;putchar(‗\‘‘);输出单引号putchar(‗\015‘);使输出回车,不换行[例3.2

]#include<stdio.h>main(){chara,b,c;a='B';b='O';c='Y';putchar(a);putchar('\n');putchar(b);putchar('\n');pu

tchar(c);putchar('\n');}BOY752.字符输入函数getchar()从终端(或系统隐含指定的输入设备)输入一个字符。一般形式为:getchar();函数的值就是从输入设备得到的字符[例]

#include“stdio.h”main(){charc;c=getchar();putchar(c);}aa↓76[例]从键盘上输入一个大写字母,分别用大小写字母形式输出,同时输出它们的ascii码。#include“stdio.h”main(){charc1,c2

;c1=getchar();printf(“%c,%d\n”,c1,c1);c2=c1+32;printf(“%c,%d\n”,c2,c2);}A↓A,65a,97774.5格式输入与输出函数1.格式输出函数printf()按规定格式向终端输出若干个任意类型的数据。一般格式

:printf(控制格式,输出列表)被输出的数据,可以是常量、变量、表达式用双引号括起的转换控制字符串,它包括两种信息:格式说明,由%开始。如:%d,%f,%c普通字符,要输出的字符printf(―%d%d‖,a,b)格式说

明输出列表printf(―a=%db=%d‖,a,b);控制格式输出列表78printf()格式字符格式字符说明d,i以带符号的十进制形式输出整数(正数不输出符号)o以8进制无符号形式输出整数(不输出前导符0)x,X以16进

制无符号形式输出整数(不输出前导符0x)u以无符号10进制形式输出整数79printf()附加格式说明字符字符说明字母l用于长整型整数,可加在格式符d、o、x、u前面m(代表一个正整数)数据最小宽度.n(代表一个正整数)对实数,表示输出n位小数;对字符串,

表示截取的字符个数-输出的数字或字符在域内向左靠例如:%ld——输出十进制长整型数%m.nf——右对齐,m位域宽,n位小数或n个字符%-m.nf——左对齐80例1.main(){intx1=123;longx2=123456;printf("x1=%d,x1=%5d,x1=%-5d,x1=%2

d\n",x1,x1,x1,x1);printf("x2=%ld,x2=%8ld,x2=%5ld\n",x2,x2,x2);}程序运行结果如下:x1=123,x1=□□123,x1=123□□,x1=123x2=123456,x2=□

□123456,x2=12345681例2.main(){intm=-1;longn=123456789;printf(―m=%d,%o,%x,%u\n",m,m,m,m);printf("n=%d\n",n);printf("n=%ld\n",n);}程序输出:11

22a=11,b=22m=-1,177777,ffff,65535n=-13035n=12345678982例3.main(){floatf=123.456;doubled1,d2;d1=11111111

11111.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.333010对于实数,也可使用格式符%e,以标准指数83最简单的C

程序设计数据输出在使用printf()函数时要注意:1.有些系统要求格式字符必须用小写字母;2.格式控制符中,可包含转义字符;3.格式说明必须以“%‖开头;4.欲输出字符%则应在“格式控制”字符串中用连续两个%表示。5.不同的系统在实现格式输出时,输出结果可能会有一些小的差别。8

42.格式输入函数scanf()把从输入设备输入的数值按先后顺序存入在内存的地址中去。一般格式:scanf(格式控制,地址列表)[例]main(){inta,b,c;scanf(“%d%d%d”,&

a,&b,&c);printf(“%d,%d,%d”,a,b,c);}345↓3,4,585最简单的C程序设计数据输入scanf()格式字符格式字符说明d,i用来输入十进制整数o用来输入8进制整数x,X用来输入16进制整数c用来输入单

个字符s用来输入字符串,将字符串送到一个字符数组中,在输入时以非空白字符开始,以第一个空白字符结束。字符串以串结束标志‗\0‘作为其最后一个字符。f用来输入实数,可以用小数形式或指数形式输入e,E,g,G与f作用相同,e和f、g可以互相替换86最简单的C程序设计

数据输入scanf()附加格式说明字符字符说明字母l用于输入长整型数据(可用%ld、%lo、%lx),以及double型数据(用%lf或%le)字母h用于输入短整型数据(可用%hd、%ho、%hx)域宽(为一正整数)指定输入数据所占宽度(列数)87在使用scanf(

)函数时要注意:Scanf()函数中的“格式控制”后面应当是变量地址;如果在“格式控制”字符串中除了格式说明以外还有其他字符,则在输入数据时应输入与这些字符相同的字符;在用“%c‖格式输入字符时,空格字符和“转义字符”都作为有效字符输入;

在输入数据时,遇到以下情况时该数据认为结束:①遇空格,或按回车;②遇指定的宽度结束,如“%3d‖,只取3列;③遇非法输入88[例]输入三角形的边长,求三角形的面积。area=√s*(s-a)*(s-b)*(s-c)s=(a+b+c)/2#inc

lude"stdio.h"#include"math.h"main(){floata,b,c,s,area;scanf("%f,%f,%f",&a,&b,&c);s=1.0/2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c));printf("a=%7

.2f,b=%7.2f,c=%7.2f,s=%7.2f\n",a,c,b,s);printf("area=%7.2f\n",area);}3,4,6↓a=3.00,b=4.00,c=6.00,s=6.50area=5.334.6顺序结构程序设计举例89第五章选择结构程序设计逻辑运算符和逻

辑表达式If语句三种形式条件运算符Switch语句905.1关系运算符和关系表达式1.关系运算符关系运算实际上是两个量的比较,比较的结果只有两种可能:真(1)、假(0)。例如:a>3?当a=5时,比较的结果为真;当a=1时,结果为假。

C语言提供6种关系运算符•<(小于)•<=(小于或等于)•>(大于)•>=(大于或等于)•==相等•!=不等912.关系表达式用关系运算符或者等式运算符将两个表达式连接起来,叫关系表达式。合法的关系表达式:a>b、a+b>b

+c、(a=3)>(b=5)、(a==3)>(b==5)、‘a‘<‗b‘、(a>b)>(b<c)关系表达式的值是一个逻辑值,非真即假.关系表达式5==3的值为假(在计算机中记为0);5>=0的值为真(在计算机中记为1)。例:a=

3,b=2,c=1,则:(1)a>b的值为1(2)(a>b)==c的值为真(即1)(3)b+c<a的值为0(4)d=a>b中d的值为a>b的值,为1。(5)f=a>b>c中f的值为1>c的值,为0。92关系、等式和逻辑运算符关于优先次序<,<=,>,

>=为同一级别,==和!=为同一级别。在同一级别中,采取由左至右的结合方向。算术运算符关系运算符赋值运算符高低[例]c>a+bc>(a+b)a>b!=c(a>b)!=ca==b<ca==(b<c)a=b>ca=(b>c)等式运算符935.2

逻辑运算符逻辑运算:产生真假值的运算。逻辑运算符:①&&逻辑与(AND)②||逻辑或(OR)③!逻辑非(NOT)“&&‖和“||‖是双目运算符。“!”是一元运算符.如:a&&ba,b同时为真,则表达式为真a||ba,b只要有一个为真,表达式为真!aa为真,则表达式为假ab!

a!ba&&ba||bTTFFTTTFFTFTFTTFFTFFTTFF94关系、等式和逻辑运算符逻辑运算符的优先级!&&||逻辑运算符“&&‖和“||‖低于关系运算符,“!‖高于算术运算符a>b&&x>y相当于:(a>b)&&(x>y)a

==b||x==y相当于:(a==b)||(x==y)!a||a>b相当于:(!a)||(a>b)!算术关系逻辑赋值95逻辑表达式用逻辑运算符将关系表达式或逻辑量连接起来就是逻辑表达式。在C语言中,当判断一个量的真假时,一切

非0数均被当成‘真’来处理。例如:若a=4,则!a的值为0若a=4,b=5,则a&&b的值为1a||b的值为1!a||b的值为14&&0||2的值为1区分下面的表达式中算术运算量,关系运算量和逻辑运算量:5>3&&2||8<4-!0结

果为15>3是两个数值间的比较,结果为11&&2是两个非0值(逻辑量)间的运算,结果为11||8<4-!0,根据优先级,先计算!0,结果为196[例]判断某一年是否是闰年。条件是:能被4整除,但不能被100整除;能被4整除,又能被400整除

。用year表示年份,判断闰年的逻辑表达式为:(year%4==0&&year%100!=0)||(year%400==0)如果给year输入一个值,使上面的表达式的值为1时,则year所代表的年份就是闰年。变换一下角度,如何判断year不是闰年?!((year%4==0&&ye

ar%100!=0)||(year%400==0))当year的值使表达式的值为1时,则year所代表的就不是闰年。关系、等式和逻辑运算符975.3if语句if语句的三种形式if用来判断给定的条件的真假,并决定执行哪一种操作。1.if<表达式

>语句条件满足时执行表达式后面的语句,然后继续执行以下的语句。条件不满足时,越过if表达式后面的语句,往下执行。表达式语句真(非0)假(0)例如:如果输入的是正数,则打印出来。if(x>0)printf("%d",x);98选择结构程序设计if语句if语句的三种形式2.if<表达式

>语句1else语句2条件满足时,执行语句1,然后继续执行if以下的语句。条件不满足时,执行语句2,然后继续执行if以下的语句。表达式语句1语句2真假PYNAB例如:输出两个数中较大的一个。if(x>y)printf(

"%d",x);elseprintf("%d",y);99选择结构程序设计if语句if语句的第三种形式if<表达式1>语句1;elseif<表达式2>语句2;elseif<表达式3>语句3;elseif<表达式4>语句4;else语句5表达式1

表达式2表达式3表达式4语句1语句2语句3语句4语句5假假假假真真真真0选择结构程序设计if语句例如:商场促销,购物500元以上,8折;购物300元以上,85折;购物100元以上,9折;购物50元以上,95折;购物50元以下,不打折。根据消费量,计算优惠率。

设:消费量为money;折扣为cost;实际花费priceif(money>500)cost=0.2;elseif(money>300)cost=0.15;elseif(money>100)cost=0.1;else

if(money>50)cost=0.05;elsecost=0;price=money-(money*cost);1选择结构程序设计if语句If语句的嵌套嵌套的定义:在if语句中又包含一个或多个if语句。嵌套的一般

形式:If()if()语句1else语句2Elseif()语句3else语句4(注意!!If与else的配对关系。)2[例]比较两个整数的关系。#include<stdio.h>main(){intx,y;printf("En

terintegerXandY:");scanf("%d%d",&x,&y);if(x!=y)if(x>y)printf("X>Y\n");elseprintf("X<Y\n");elseprintf("X=Y\n");}3[例]输入两个数,按数值大小次序排列输

出.main(){floata,b,t;scanf("%f,%f",&a,&b);if(a>b){t=a;a=b;b=t;}printf("%5.2f,%5.2f",a,b);}输入为3.6,-3.2输出为-

3.20,3.604[例]输入三个数,按由小到大次序排列并输出。main(){flaota,b,c,t;scanf("%f,%f,%f",&a,&b,&c);if(a>b){t=a;a=b;b=t;}if(a

>c){t=a;a=c;c=t;}if(b>c){t=b;b=c;c=t;}printf("%5.2f,%5.2f,%5.2f",a,b,c);}输入为:3,7,1输出为:1.00,3.00,7.005选择结构程序设计程序举例[例]写一程序判断某一年是否是闰年.main(){intyear,l

eap;printf("输入年份:");scanf("%d",&year);if((year%4==0&&year%100!=0)||(year%400==0))leap=1;elseleap=0;if(leap)printf("%disleapyear\n",

year);elseprintf("%disnotleapyear\n",year);}输入年份:20042004isleapyear6选择结构程序设计if语句条件运算符max=(a>b)?a:b;条件表达式当(a>b)为真时,表达

式取a的值当(a>b)为假时,表达式取b的值条件运算符是三目运算符表达式1?表达式2:表达式3条件运算符的结合方向为"从右向左"例如:a>b?a:c>d?c:d相当于a>b?a:(c>d?c:d)如果a=1,b=2,c=3,d=4,

则条件表达式的值为4。7选择结构程序设计if语句main(){intx,y;scarf("%d",&x);if(x==0)y=0;elseif(x>0)y=1;elsey=-1;print("x=%d,y=%d\n",x,y);}[例]-1(x<

0)y=0(x=0)1(x>0)开始输出Y结束输入XX<0X=0Y=-1Y=0Y=1YNYN输入为:4输出为:x=4,y=18[例]输入一个字符,判断大小写,如是大写,则转换成小写,输出。main(){charc;scanf("%c",&c);c=(c>='A'&

&c<='Z')?(c+32):c;printf("%c",c)}选择结构程序设计if语句95.4switch语句Switch语句是多分支选择语句,也叫开关语句或者选择语句。一般形式:switch(表达式){case常量表达式1:语句1;case常

量表达式2:语句2;…………case常量表达式n:语句n;default:语句n+1;}功能:1.计算表达式的值,与常量表达式的值比较,等于第i个值时,顺序执行语句序列i、i+1、…、n+12.若与所有常量

表达式值都不相等,执行语句序列n+1。如:switch(a){case5:printf("&");break;case2:printf("#");break;default:printf("$");break;}如:switch(a){case5:printf("&");

case2:printf("#");default:printf("$");}0选择结构程序设计switch语句[例]根据成绩等级打出成绩范围.main(){chargrade;printf("Entery

ourgrade\n");scanf("%c",&grade);switch(grade);{case'A':printf("85~100\n");break;case'B':printf("70~84\n");

break;case'C':printf("60~69\n");break;case'D':printf("<60\n");break;default:printf("error\n");}}输入为B输出

为70~84111选择结构程序设计switch语句grade流程图如下:'A''B''C''D'default输出"85~100"输出"70~84"输出"60~69"输出"error"输出"<60"2例:

给出百分制成绩,要求输出等级'A','B','C','D','E'。90分以上为'A',80—89分为'B',70—79分为'C',60—69分为'D',60分以下为'E'。main(){intscore,num;c

hargrade;scanf("%d",&score);num=score/10;switch(num){case10:grade='A';break;case9:grade='A';break;case8:grade='B':break;case7:grade='C';break;case6

:grade='D';break;default:grade='E';}printf("%d%c",score,grade);}输入为76输出为76C3选择结构程序设计switch语句switch语句的说明1.条件表达式的类型和常量表达式的类型是整数、字符。2.当表达式的值与某一

个case后面的常量表达式的值相等时,就执行此case后面的语句,若所有的case中的常量表达式的值都没有与表达式的值匹配,则执行default后面的语句。3.每一个case的常量表达式的值必须互不相同。4.case常量表达式只起语句标号作用;必须用break语句终止多个case连续执行,否

则只要有一个case满足后,以下的语句全部无条件执行。5.多个case可共用一组执行语句。41概述2goto语句3while语句4do-while语句5for语句6循环的嵌套7break语句和continue语句8程序举例循环控制56.1概述一般需要使用循环的情况是:有重复的动作(

循环体)循环次数可以控制(循环条件)例如:1+2+3+….+100在C语言中可以用下列语句实现循环:goto和if结合whiledo-whilefor66.2goto语句Goto语句的一般形式:goto语句标号;……语句标

号:语句;功能:无条件转向语句。Goto语句的常用形式:1.与if语句构成循环;2.从循环体中转到循环体外。例:求1+2+3+…+100。main(){inti,sum=0;i=1;loop:if(i<=100){sum=sum+i;i++;gotoloop;}pr

intf(―%d\n‖,sum);}76.3while语句一般形式:While(表达式)语句功能:实现―当型"循环,"先判断,后执行"。表达式为真时(非0值),执行while语句的内嵌语句。说明:①<表达式>可以是关系表达式、逻

辑表达式或其它类型,表达式后不允许有分号结尾;②语句可以是简单的,也可以是复合的;③循环体中应有使循环趋向于结束的语句。表达式语句0非08[例]求1+2+3+….+100。main(){inti=1,su

m=0;while(i<=100){sum=sum+i;//累加器i++;}printf("%d",sum);}i=1,sum=0i<=100sum=sum+ii=i+1输出sum如果有一个以上的语句循环,则必须用{}构成复合语句。要有修改循环变量的语句。96.4do-while

语句一般形式:do循环语句while(表达式);功能:实现―当型"循环结构。说明:①当while后面的表达式的第一次的值为"真"时,两种循环得到的结果相同。否则,二者结果不相同。②dowhile中的循环体至少执行一次,而while语句中的循环语

句可能一次都不执行。表达式语句非0(真)0(假)0[例]求1+2+3+….+100。main(){inti,sum=0;i=1;do{sum=sum+i;i++;}while(i<=100);printf("%d",sum);}i=1,sum=0直到i>100sum=sum+ii

++输出sum16.5for语句在C语言中用for语句构成的循环最为灵活。一般形式:for(表达式1;表达式2;表达式3)语句执行过程:例:for(i=1;i<=100;i++)sum=sum+i;从图中可以看出FOR语句等价于下列程序:表达式1;Wh

ile(表达式2){语句表达式3;}求解表达式1表达式2语句求解表达式3For语句的下一语句假真2说明:①语句的一般形式中的"表达式1"可以省略,此时应在语句之前给循环变量赋初值(注意!省略表达式1时

,其后的分号不能省略);–如:for(;i<=100;i++)sum=sum+i;②如果表达式2省略,即不判断循环条件,循环无终止地进行下去;–如:for(i=1;;i++)sum=sum+1;③表达式3也可以省略,但

此时应另外设法保证循环能正常结束;–如:for(i=1;i<=100;){sum=sum+i;i++}④可以省略表达式1和表达式3,只有表达式2,即只给循环条件;如:for(;i<=100;){sum=s

um+i;i++}⑤for(;;)表示无限循环,相当于while(1)语句;3循环控制for语句说明:循环终止条件的种类:(逻辑)关系表达式:如:for(;a>b&&x<y;)如:for(;(c=getchar())!='\n';)printf("%c",c)

;由以上说明可以看出,C语言中for语句的功能比其它语言中的for语句功能要强、要灵活,它能替代while语句。4[例]求n!=1×2×3×…nmain(){doubles=1;intk;for(k=1;k<=100;k++)s=s*k;printf("s=%f",s);}整数连乘结果一

定是整数,而本例中结果数值相当大,用long型都无法存放,因此将存放累乘结果的变量s定义为double型。1256.6循环的嵌套嵌套的概念:一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。⑴while(){…while(){…}}(2)for(;;){for(;;){…}

}(3)for(;;){…while(){}…}6break语句用来从循环体里退出,中止循环Continue语句用来跳过剩下的语句,回到循环开始表达式1表达式2循环的下一个语句语句语句breaknyyn表达式1表达式2循环的下一个语句语句语句c

ontinuenyyn6.7break语句和continue语句7[例]把100…200之间不能被3整除的数输出。main(){intn;for(n=100;n<=200;n++){if(n%3==0)con

tinue;printf("%d",n);}}8[例]判断m是否是素数。操作:用2~m-1依次去除m,若其中有任意一个数被除尽,则没有必要再判断下去,它肯定不是素数,跳出循环;若所有数都不能被除尽,则循环可以自然完成。#include"math.h"main(){intm

,i,k;scanf("%d",&m);k=m-1;for(i=2;i<=k;i++)if((m%i)==0)break;if(i>k+1)printf("%disprimenumber\n",m);el

seprintf("%disnotaprime\n",m);}或一个数x在[2,sqrt(x)]范围内没有因子,我们就称其为素数(质数)。k=sqrt(m);9[例]打印出100到200之间所有的素数。#include"ma

th.h"main(){intm,i,k,n=0;for(m=101;m<=200;m=m+2){k=sqrt(m);for(i=2;i<=k;i++)if(m%i==0)break;if(i>k){printf("%d\n",m);n=n+1;}if

(n%10==0)printf(―\n‖);}printf(―\n‖);}0[例]用/41-1/3+1/5-1/7+…的公式求的近似值,直到最后一项的绝对值小于10-6为止。#include"math.h"main(){ints;floatn,t,pi;t=1;pi=

0;n=1.0;s=1;while((fabs(t))>=1e-6){pi=pi+t;n=n+2;s=-s;t=s/n;}pi=pi*4;printf("pi=%10.6f\n",pi);}t=1,pi=

0,n=1,s=1当|t|10-6pi=pi+tn=n+2s=-s;t=s/npi=pi*4输出pi1[例]裴波那契数列的第1、2项分别为1、1,从第3个数开始,该数是其前面两项之和。即1,1,2,3,5,8,13,…求前40项菲波那契数。分析:f1-

-第一个数f2--第二个数f1=f1+f2第三个数f2=f2+f1第四个数main(){longf1=1,f2=1;inti;for(k=3;k<=20;k++){printf("%12ld%12ld",f1,f2);if(k%2==0)printf("\n");f1=f1+f2;f2=f2+f1

;}}2循环控制本章总结三种循环语句:while,do---while和for建立循环通常有以下情况:1.给定次数,for比较适用for(i=1;i<100;i++)2.给定条件,while比较适用while((x+y)<z)3.

字符的情况通常以回车做结束符while((c=getchar())!='\n')4.判断字符范围是否为英文字母(c>'a'&&c<'z')||(c>'A'&&c<'Z')3【例】编程序,输出以下图形。****************一共

有4行,每行由空格和星号组成:空格数按行增加,星号按行减少变量i控制输出行数,从1变化到4变量j控制输出每行的空格和星号:–j从1变化到i,每次输出一个空格–j从1变化到8-2*i+1,每次输出一个星号思路:4算法和程序:mai

n(){inti,j;for(i=1;i<=4;i++){for(j=1;j<=i;j++)printf("");for(j=1;j<=8-(2*i-1);j++)printf("*");printf("\n");

}}for(i=1;i<=4;i++)for(j=1;j<=i;j++)输出一个空格for(j=1;j<=8-(2*i-1);j++)输出一个星号换行思考:如何输出10行图形?输出图形向右平移20个字符位置,应如何修改程序?5总结for(…;…;…)while()

{}do{}while()…continuebreakgoto6[例]打印图形。分析:行的控制i:1~4'*'的个数j与当前行的关系j=2*i-1'*'前面的空格k与行的关系:–开始时,第一行有3个空格–每多一行,少一个空格k=4

-iwhile(i<=4){for(k=1,k<=4-i,k++)输出空格;for(j=1,j<=2*i-1,k++)输出*;}****************main(){inti,j,k;for(i=1;i<=4;

i++){for(j=1;j<=4-i;j++)printf("");for(j=1;j<=2*i-1;j++)printf("*");printf("\n");}for(i=1;i<=3;i++){for(j=1;j<=i;j++)pr

intf("");for(j=1;j<=7-2*I;j++)}7[例]输入若干字母,将它们变成其后的第四个字母,A-->E,W-->A,非字母字符忽略。思路:1.建立循环,循环结束以输入回车符为准;while(c=getch

ar()!='\n')2.判断输入是否是字符,否则忽略;if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))3.变成其后的第四个字母c=c+4;4.若变换后超出z时,要轮回.if((c>'Z'&&c<'a')||(c>'z'))c=c-26#inc

lude"stdio.h"main(){charc;while((c=getchar())!='\n'){if((c>='a'&&c<='z')||(c>='A'&&c<='Z')){c=c+4;if((

c>'Z'&&c<=‗Z‗+4)||(c>'z'))c=c-26;}printf("%c",c);}}abdEgWefhIkA`86.1一维数组的定义和引用6.2二维数组的定义和引用6.3字符数组第七章数组9在c语言中,除了前面介绍的基本类型之外

,还有另外一些数据类型---构造类型。其中数组就属于构造类型中的一种。数组是有序数据的集合。数组中的每一个元素都属于同一个数据类型。用一个统一的数组名和下标来唯一的确定数组中的元素。7.1一维数组的定义和引用一、定义一般形式:类型说明符数组名[常量表达式];例如:inta[10

];a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]1204609398011500二、一维数组元素的引用数组元素的引用形式:数组名[下标]每次可引用一个数组元素,不能引用整个数组一个数组元素就如同一个简单变量[例]main(){in

ti,a[10];for(i=0;i<=9;i++)a[i]=i;for(i=9;i>=0;i--)printf("%d",a[i]);}98765432101数组一维数组的定义和引用一维数组的初始化初始化方

法:从数组的第一个元素开始依次给出初始值表;表中各值之间用逗号分开,并用一对大括号括起来。在定义数组时对数组元素赋予初值inta[10]={0,1,2,3,4,5,6,7,8,9};只给一部分元素赋初值inta[10]={0,1,2,3,4};欲使一个数组中全部

元素初值为0,可以写成inta[10]={0,0,0,0,0,0,0,0,0,0,};或inta[10]={0};在对全部数组元素赋初值时,可以不指定数组长度inta[]={0,1,2,3,4,5};2数组一维数组的定义和引用[例]求F

ibonacci数列{1,1,2,3,5,8,13,21,...}main(){intf[20]={1,1};inti;for(i=2;i<20;i++)f[i]=f[i-2]+f[i-1];for(i=0;i<20;i++){if(i%5==0)printf("\n");prin

tf("%12d",f[i]);}}3[例]用冒泡法对10个数排序。第1次,a[0]和a[1]比较9854206137}895420613785942061378549206137854290613785420961378542069137854206193785420

613978542061379第2次,a[1]和a[2]比较第i次,a[i]和a[i+1]比较{9895949297for(i=0;i<9;i++)for(j=0;j<9-i;j++)if(a[j]>a[j

+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}4main(){inta[11]inti,j,t;printf(―input10number:\n);for(i=1;i<11;i++)scanf(―%d‖,&a[i]);//从键盘给数组元素赋值pr

intf(―\n‖);for(j=1;j<=9;j++)//排序for(i=1;i<=10-i;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}for(i=1;i<11;i++)//输出数组元素printf("%3d",a[i]);}

5一、二维数组的定义一般形式:类型说明符数组名[常量表达式][常量表达式];例如:floata[3][4]a[0][0]a[0][1]a[0][2]a[0][3]a[1][0]a[1][1]a[1][2]a[1][3]a[2][0]a[2][1]a[2

][2]a[2][3]二维数组在内存中的存放形式:"按行存放",即在内存中先存放第一行的元素,再存放第二行的元素。7.2二维数组的定义和引用6多维数组的定义多维数组的定义与二维数组相同。例如:三维数组floata[2][3

][4]共有2×3×4=24个元素floata[100][100][100]共有1000000个元素a[0][1][0]a[0][0][0]a[99][99][99]7二、二维数组元素的引用二维数组元素的引用形式:数组名[下标][下标]三、二维数组的初

始化初始化方法:分行给二维数组赋初值inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};可以将所有数据写在一个花括弧内,按数组排列的顺序对各元素赋初值inta[3][4]={1,2,3,4,5,6,7

,8,9,10,11,12};可以对部分元素赋初值,其余元素值自动为0inta[3][4]={{1},{5},{9}};inta[3][4]={{1},{0,6},{9,0,11}};inta[3][4]={{

1},{5,6}};inta[3][4]={{1},{},{9}};8初始化方法:如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省inta[][4]={1,2,3,4,5,6,7,8,9,10,11,12};inta[][4]={{0,2,3},{}

,{0,10}};在程序中为数组赋值的方法:用scanf语句由用户输入由循环变量自动构成for(i=0;i<=2;i++)for(j=0;j<=3;j++)scanf("%d",&a[i][j]);for(i=0;i<3;i++)for(j=0;j<4;j++)a[i][j]=4*

i+j+1;1234567891011129数组二维数组的定义和引用[例]将一个二维数组行和列元素互换,存到另一个数组中。a=12345614b=2536for(i=0;i<3;i++)for(j=0;j<2;j++)b[i]

[j]=a[j][i]0数组二维数组的定义和引用[例]求出3*4矩阵中的最大值及其所在的行列号。分析:1.设一个变量存放最大值max;2.设两个变量row和column存放最大值在数组中的行列;3.遍历数组中的每一个元素。max=a[0][0]forj=0to3a

[i][j]>maxynmax=a[i][j]row=icolumn=j输出max,row,columnfori=0to21main(){inti,j,row,column,max;inta[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2

}};max=a[0][0];for(i=0;i<3;i++)for(j=0;j<4;j++)if(a[i][j]>max){max=a[i][j];row=i;column=j;}printf(―max=%d,row=%d,colum=%d\n",max,row,colu

mn);}27.3字符数组一、字符数组的定义字符数组:可以存放若干个字符,也可以存放字符串。字符串:字符串的末尾必须有‘\0‘字符,它的ASCII码值为0。字符数组定义:char数组名[exp];如:chars[10];s数

组是一维字符数组,它可以存放10个字符或一个长度不大于9的字符串。china\03二、字符数组的初始化1.逐个元素初始化。例如:charc[10]={'c','h','a','r'};2.说明:如果初值个

数>数组长度,则作语法错误处理;如果初值个数<数组长度,则只将这些字符赋给数组中前面那些元素,其余元素自动定为空字符(即’\0’);如果初值个数=数组长度,则在定义时可省略数组长度。3.用字符串来初始化字符数组chara[11]=‖Iamaboy‖;c

har'\0''\0''\0''\0''\0''\0'4三、字符数组的引用main()/*输出一个钻石图形的程序*/{chardiamond[][5]={{'','','*'},{'','*','','*'},{'*','','','','*'},{'

','*','','*'},{'','','*'}};inti,j;for(i=0;i<5;i++){for(j=0;j<5;j++)printf("%c",diamond[i][j]);printf("\

n");}}5四、字符数组的输入输出1.用格式符"%c"逐个输入/输出一个字符scanf("%c",&a[0]);printf("%c",a[0]);2.用格式符"%S"整个输入/输出字符串charc[10];scanf(―%s‖,c);//

注意此处用数组名printf("%s",c);//注意此处用数组名注意事项:用“%s‖格式输入或输出字符数组时,函数scanf的地址项、函数printf的输出项都是字符数组名。这时数组名前不能再加“&”符号,因为数组名就是数组的起始地址。用语句“scanf("%s

",s);‖为字符数组s输入数据时,遇空格键或回车键时结束输入。但所读入的字符串中不包含空格键或回车键,而是在字符串末尾添加'\0'。6同时输入多个字符串,输入数据时以空格或回车键为分隔符。char

str1[5],str2[5],str3[5];scanf("%s%s%s",str1,str2,str3);如果改为:charstr[13];scanf("%s",str);howareyou?how\0strhowareyou?how\0str1are\0str2you?\0str37五、

字符串处理函数函数是一个提供某种功能的程序段,可以通过名字调用,需要参数,返回结果。1.puts(str)在显示器上输出str数组中的字符串,输出后自动换行。例如:charstr[]="China\nBiejing";puts(str);2.

gets(str)从键盘读入一个字符串存入str数组中,并且得到一个函数值,该函数值是str数组的首地址。例如:gets(str);输入为“Howareyou?‖则str中存有整个字符串及‘\0’。main(){charc1[20],c2[20];gets(c1);gets(c

2);puts(c1);puts(c2);}ChinaBeijing程序运行情况如下:Howareyou?Finethankyou.Howareyou?Finethankyou.83.strcat(字符数组1,字符数组2)连接两个字符数组中的字符串,把字符串2接到

字符串1的后面,结果放在字符串字符串1中,函数调用后得到一个函数值——字符数组1的地址。例如:charstr1[30]={"People'sRepublicof"};str2[]={"China"};printf("%s",strcat(str1,str2

));输出:People'sRepublicofChina字符数组1必须足够大,以便容纳连接后的新字符串。连接前两个字符串后面都有一个'\0',连接时将紧跟字符串1后面的'\0'取消,只在新串最后保留一个'\0'。94.strcpy(字符数组1,字符串2)将字符串2拷贝到字

符数组中,相当于赋值语句。例如:charstr1[10],str2[]={"China"};strcpy(str1,str2);字符数组1必须是写成数组名,字符串2可以是数组名也可以是一个字符串。如:strcpy(str1,"china"

);不能用赋值语句将一个字符串常量或字符数组直接赋给一个字符数组。但可以给一个字符变量或字符数组元素赋值。如:charstr1[]={"China"},str2[20];str2=str1;(╳)可以将字符串2前面若干个字符复制到字符数组1中去。

如:strcpy(str1,str2,2);05.strcmp(字符串1,字符串2)比较两个字符串的大小,即对两个字符串自左至右逐个字符相比(ASCII值大的为大),直到出现不同的字符或遇到‘\0’为止。如全部字符相同,则认为相

等;若出现不同的字符,则以第一个不相同的字符的比较结果为准。如:“A”<“B‖,―computer‖>‖compare‖返回值:零,两个串相等正数,str1>str2负数,str1<str2注意:两个字符串不能用关系运算符比较例

如,下面的写法是不合法的:if(str1==str2)printf("yes");应写成:if(strcmp(str1,str2)==0)printf("yes");1数组字符数组6.strlen(字符数组)

测试字符串的长度。函数的值为字符串中的实际长度,不包括'\0'在内。例如:charstr[10]={"China"};printf("%d",strlen(str));7.strlwr(字符串)将字符串中大写字母转换成小写字母。8.strupr(字符串)将字符串中小写字母转换成大写字母

。52例:输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。程序如下:#include<stdio.h>main(){charstring[81];inti,num=0,word=0;charc;gets(

string);for(i=0;(c=string[i])!=‗\0‘;i++)if(c==‗‗)word=0;elseif(word==0){word=1;num++;}printf(―thereare

%dwordsintheline.\n‖,num);}运行如下:Iamaboy.thereare4wordsintheline.解题思路:单词的数目由空格出现的次数决定。若测出某一个字符为非空格,而它的前面的字符是空格,则表示“新的单词出现了”,此时使num

累加1.3第八章函数8.1概述模块化程序设计:基本思想:将一个大的程序按功能分割成一些小模块特点:各模块相对独立、功能单一、结构清晰、接口简单控制了程序设计的复杂性提高元件的可靠性缩短开发周期避免程序开发的重复劳动易

于维护和功能扩充开发方法:自顶向下,逐步分解,分而治之4例:打印图形:******************Howdoyoudo!************************************编程:main(){printf("***************

***\n");printf("Howdoyoudo!\n");printf("******************\n");printf("******************\n");}三个语句一样,可编写成函数:printstar(){printf("******

************\n");}则原程序可简化为:main(){printstar();printf("Howdoyoudo!\n"):printstar():printstar();}5函数分类从用户角度标准函数(库函数):由系统提供用户自定义函数从函数形式

无参函数有参函数6函数的定义形式函数类型函数名(形式参数表){说明部分语句}8.2函数的一般形式intmax(intx,inty)/*形式参数说明*/{intz;/*函数体内部说明*/z=x>y?x:y;return(z);/*返回值*/}78.3函数的参数和函数的值一、形式参数和实际

参数在函数定义时指定的参数为形式参数(形参);在函数调用时给出的参数叫实际参数(实参)。main(){inta,b,c;scanf("%d,%d",&a,&b);c=max(a,b);printf("Maxis%d",c);}max(intx,inty){intz;z=x>y?x:y;r

eturn(z);}8说明:实参必须有确定的值形参与实参类型一致,个数相同参数传递方式为值传递方式:函数调用时,为形参分配单元,并将实参的值复制到形参中;调用结束,形参单元被释放,实参单元仍保留并维持原值。特点:形参与实参占用不同的内存单元;单向值传递。9[例]main(){inta,

b;a=2;b=3;printf("%d%d",a,b);change(a,b);printf("%d%d",a,b);}change(inta,intb){a=10;b=20;printf("%d%d",a,b);}2310202323ab32ab1020main空间change空间

0二、函数的返回值形式:return(表达式);或return表达式;功能:使程序控制从被调用函数返回到调用函数中,同时把返回值带给调用函数说明:函数中可有多个return语句若无return语句,遇}时,自

动返回调用函数若函数类型与return语句中表达式值的类型不一致,按前者为准,自动转换----函数调用转换void型函数用来明确表明函数不带回任何值例无返回值函数voidswap(intx,inty){inttemp;temp=x;x=y;y=

temp;}1说明:函数类型决定返回值类型;[例]main(){floata,b,c;scanf("%f,%f",&a,&b);c=max(a,b);printf("Maxis%f",c);}max(floatx,floaty){floatz;z=x>y?x:y;return(z

);/*返回整数*/}1.5,2.5Maxis2.00000028.4函数的调用一、函数调用的一般形式函数调用的一般形式:函数名(实参表列);实参的个数、类型以及顺序必须与形参表一致。二、函数调用的方式1.函数语句:此时只要求函数完成一定的操作

。printstar();1.函数表达式:被调用函数出现在一个表达式中;函数返回一个值。c=2*max(a,b);2.函数参数:函数作为另一个函数的实参。m=max(a,max(b,c));printf("%d",max(a,b));

3二、对被调用函数的声明和函数原型1.对被调用函数要求:必须是已存在的函数库函数:#include<*.h>用户自定义函数:主调函数对被调函数作函数声明,对函数的声明称为函数原型2.函数声明•一般形式:

函数类型函数名(形参类型1[形参名1],…..);•作用:告诉编译系统函数类型、参数个数及类型,以便检验•函数定义与函数声明不同•函数声明位置:程序的数据说明部分(函数内或外)下列情况下,可不作函数声明若函数返值是char或int型,系统自动按int型处理被

调用函数定义出现在主调函数之前在所有的函数定义之前,在函数的外部已做了函数声明4[例]main(){floatadd(floatx,floaty);/*在主函数中对被调用函数进行声明*/floata,b,c;scanf("%f,%f",&a,&b);c=add(a

,b);printf("sumis%f",c);}floatadd(floatx,floaty){floatz;z=x+y;return(z);}58.5函数的嵌套调用嵌套调用C规定:函数定义不可嵌套,但可以嵌套调用函数main()调用函数a结束a函数b函数调用函数b

68.6函数的递归调用递归调用的概念:在调用一个函数的过程中又出现直接或间接的调用该函数本身—递归调用。递归的说明:递归必须是有条件的;程序中只应出现有限次数的、有终止的递归调用;递归函数的执行在时间和空间上都

不节省,但从算法角度讲,结构清晰,代码紧凑;每调用函数一次,在内存堆栈区分配空间,用于存放函数变量、返回值等信息,所以递归次数过多,可能引起堆栈溢出在实际使用时,除非特殊需要一般尽量不采用递归调用

。f函数调用f函数7例:5个人坐一起,问第5个人多少岁?他说比第4个人大2岁。问第4个人多少岁?他说比第3个人大2岁。问第3个人多少岁?他说比第2个人大2岁。问第1个人多少岁?他说10岁。请问第5个人多大?/

intage(intn){intc;if(n==1)c=10;elsec=age(n-1)+2;return(c);}main(){printf("%d\n",age(5));}age(5)=age(4)+2age(4)=age(3)+2age(3)=age(2)+2age

(2)=age(1)+2age(1)=10age(2)=12age(3)=14age(4)=16age(5)=18递归调用递归返回主函数123432返回18[例]求一个自然数的阶乘。n!=1(n=0,1)n*(n-1)!(n>1)floatfac(intn){floatf

;if(n==0||n==1)f=1;elsef=n*fac(n-1);return(f);}main(){intn;floaty;scanf(“%d”,&n);y=fac(n);printf(“%d!=10.0f”,n,y);}运行情况如下:10!=362880098.7数组作为

函数参数数组元素和整个数组均可以作为实参和形参。1.数组元素做函数实参:值传递[例]比较两个数组的对应元素,比较过程在函数中完成,比较结果在主函数中输出。main(){inta[10],b[10],i,n=0,m=0,k=0;printf("输入数组a:\n");for(i=0;i<10;i

++)scanf("%d",&a[i]);printf("输入数组b:\n");for(i=0;i<10;i++)scanf("%d",&b[i]);for(i=0;i<10;i++){if(large(a[i],b[i])==1)n++;elseif(la

rge(a[i],b[i])==0)m++;elsek++;}printf("a>b%d次\na=b%d次\na<b%d次\n",n,m,k);}large(intx,inty){intflag;if(

x>y)flag=1;elseif(x<y)flag=-1elseflag=0;return(flag);}02.用数组名作函数参数:地址传递(双向传递)用数组名作函数参数,应该在主调函数和被调函数中分别定义数组;实参数组与形参数组类型应一致;

形参数组可以不指定大小,定义时在数组名后跟一个空的方括号;数组名作函数参数时不是―值传送‖,而是把实参数组从起始地址传送给形参数组,“地址传递”。形参和实参共用一个存储空间。形参的改变会导致实参的改变。1[例]一维数组score内放10个学生成绩,求平均成绩。floa

taverage(floatarray[10]){inti;floataver;sum=array[0];for(i=1;i<10;i++)sum=sum+array[i];aver=sum/10;return(aver);}main(){floatsco

re[10],aver;inti;for(i=0;i<10;i++)scanf("%d",&score[i]);aver=average(score);printf("averagescoreis%5.2f",aver);}..2109score5

62312….….88array28.8局部变量与全局变量一、局部变量局部变量也称为内部变量定义:在函数内定义,只在本函数内有效说明:main中定义的变量只在main中有效不同函数中同名变量,占不

同内存单元例:不同函数中同名变量形参属于局部变量局部变量floatf1(inta){intb,c;a,b,c有效…}charf2(intx,inty){inti,j;x,y,i,j有效…}main(){inty,m,n;…y,m,n有效}3

二、全局变量全局变量也称为外部变量定义:在函数外定义,可为本文件其他函数共用有效范围:从定义变量的位置开始到本源文件结束。说明:设全局变量的作用增加了数据联系的渠道为区别局部与全局变量,习惯将全局变量的第一个字母大写应尽量少使用全局变量,因为:4intp=1,q=5;f

loatf1(inta){intb,c;…….}intf3(){…..}charc1,c2;charf2(intx,inty){inti,j;……}main(){intm,n;…….}p,q作用范围c1,c2作用范围58.9变量的存储类别一

、动态存储方式与静态存储方式从变量存在的时间(生存期)分动态与静态两种存储方式静态存储:程序运行期间分配固定存储空间动态存储:程序运行期间根据需要动态分配存储空间生存期静态:从程序开始执行到程序结束动态:从包含该变量定义的函

数内存用户区6在程序开始执行时给全局变量分配存储区,在程序执行过程中占据固定的存储单元,程序执行完毕才释放。用户区程序区静态存储区(全局变量)动态存储区(函数形参变量、自动变量、函数调用时的现场保护和返回地址)在函数调用开始时分配动态存储空间,函数结束时即释放这些空间。(1)au

tointx;(2)staticinty;(3)registerinti;(4)intz;externz;7二、auto变量函数中的局部变量,如不专门声明为static存储类别,都是动态地分配存储空间的,数据存储在动态存储区中。这类局部变量称为自动变量。三、用static声

明局部变量如果希望函数中的局部变量的值在函数调用结束后不消失而保留原值,即其占用的存储单元不释放,在下一次函数调用时,该变量的值为上一次函数调用结束时的值,这时应指定该局部变量为"静态局部变量"。在下列情况下使用静态局部变量:需要保留函数上一次调用结

束时的值;如果初始化后,变量只被引用而不改变其值,则使用静态局部变量比较方便,以免每次调用时重新赋值。8四、register变量如果有些变量使用频繁,则为存取变量的值要花不少时间,为提高执行效率,C语言允许将局部变量的值放在CPU中的寄存器中,需要时直

接从寄存器中取出参加运算,不必再到内存中去存取。这种变量称为"寄存器变量"。说明:只有局部自动变量和形式参数可作为寄存器变量;在调用一个函数时占用一些寄存器以存放寄存器变量的值,函数调用结束时释放寄存器。五、用extern声明外部变量全局变量是在函数外部

定义的,有效范围从定义变量的位置开始到本源文件结束。静态存储。可以使用extern扩展外部变量的作用域。在一个文件内声明外部变量:在定义外部变量的定义点之前的函数想引用该外部变量,则在引用之前用关键字extern做“外部变量声明”,声明时类型名可省略。9局部变量外部变量存储类别autoreg

ister局部static外部static外部存储方式动态静态存储区动态区寄存器静态存储区生存期函数调用开始至结束程序整个运行期间作用域定义变量的函数或复合语句内本文件其它文件赋初值每次函数调用时编译时赋初值,只赋一次未赋初值不确定自动赋初值0或空字符六、存储类别小结局部变量默认为auto型

extern不是变量定义,可扩展外部变量作用域0七、内部函数和外部函数根据函数能否被其他源文件调用,将函数区分为内部函数和外部函数。内部函数:如果一个函数只能被本文件中其他函数所调用,称为内部函数,又称静态函数。static类型标识符函数名(形参表)外部函数:在定义函数时,如

果在函数首部的最左端冠以关键字extern,则表示次函数为外部函数,可供其他文件调用;C语言规定,若定义时省略extern,则隐含为外部函数。1第九章预处理命令作用:对源程序编译之前做一些处理,生成

扩展C源程序种类:宏定义#define文件包含#include条件编译#if--#else--#endif等格式:“#”开头语句尾不加分号2#define宏名字符串宏定义的功能:在进行编译前,用字符串原样替换程序中的宏名。这个替换过程称为“宏替

换”或“宏展开”,字符串也称为替换文本。命令的一般格式:9.1宏定义一、不带参数的宏定义3源程序:#definePI3.14159#defineSPI*r*rmain(){floatr;sca

nf("%f",&r);printf("S=%.2f\n",S);}编译预处理后的程序:main(){floatr;scanf("%f",&r);printf("S=%.2f\n",3.14159*r*r);}进入编译4命令的一般形式二、带参数的宏定义#

define宏名(形参表)字符串功能:在编译预处理时,把源程序中所有带参数的宏名用宏定义中的字符串替换,并且用宏名后圆括号中的实参替换字符串中的形参。例:#defineS(a,b)a*b………..area=S(3,2);宏展开:area=3*2;5

【例】#defineMAX(x,y)((x)>(y)?(x):(y))main(){…printf("%d\n",a,b,MAX(a,b));printf("%d\n",MAX(a+m,b+n));}分两次替换:①将宏名MAX(a,b)替换成字符串((x

)>(y)?(x):(y))。②用实参a替换形参x,实参b替换形参y。程序中的两个printf语句被展开为:printf("%d\n",((a)>(b)?(a):(b)));printf("%d\n",((a+m)>(b+n)?(a+m):(b+n)));

69.2文件包含功能:一个源文件可将另一个源文件的内容全部包含进来一般形式:#include“文件名”或:#include<文件名>#include“file2.c”file1.cfile2.cfile1.cBABA处理过程:预编译时,用被包含文件的内容取

代该预处理命令,再对“包含”后的文件作一个源文件编译7被包含文件内容源文件(*.c)头文件(*.h)宏定义数据结构定义函数说明等文件包含可嵌套#include“file2.c”file1.cAfile3.cC#include“file3.c”file2

.cBfile1.cACB8例文件包含举例/*powers.h*/#definesqr(x)((x)*(x))#definecube(x)((x)*(x)*(x))#definequad(x)((x)*(x)*(x

)*(x))#include<stdio.h>#include"powers.h"#defineMAX_POWER10voidmain(){intn;printf("number\texp2\texp3\texp4\n");printf("----\t----\t-----\t

------\n");for(n=1;n<=MAX_POWER;n++)printf("%2d\t%3d\t%4d\t%5d\n",n,sqr(n),cube(n),quad(n));}99.3条件编译功能:对一部分内容

指定编译的条件。一般形式:条件编译命令有以下几种形式:1.#ifdef标识符程序段1[#else程序段2]#endif2.#ifndef标识符程序段1[#else程序段2]#endif3.#if表达式程序段1#else作

用是:当标识符已经被定义过,则编译程序段1,否则编译程序段2。#else部分可以省略。作用是:当标识符没有被定义过,则编译程序段1,否则编译程序段2。#else部分可以省略。作用是:当表达式的值为真,则编译程序段1,否则编译程序段2。01例输入一行字母,根据需要设置条件编译,

使之能将字母全部改为大写输出,或全改为小写字母输出。#defineLETTER1main(){charstr[20]="CLanguage",c;inti;i=0;while((c=str[i])!='\0'){i++;#ifL

ETTERif(c>='a'&&c<='z')c=c-32;#elseif(c>='A'&&c<='Z')c=c+32;#endifprintf("%c",c);}printf("\n");}2

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?