【文档说明】第2章_C语言程序设计基础课件.ppt,共(57)页,1.833 MB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-44635.html
以下为本文档部分文字说明:
第2章C语言程序设计基础要学蜜蜂采百花,问遍百家成行家2回顾C语言的特点C程序的编译和运行过程编译器将源程序转换成机器能理解的程序连接器用于连接相关的目标文件以生成可执行程序要学蜜蜂采百花,问遍百家成行家3教学目标算法的表示方法理解变量和常量的含义熟悉基本数据类型——int、char、float
和double掌握算术运算符和赋值运算符的用法理解表达式理解类型转换要学蜜蜂采百花,问遍百家成行家4算法著名计算机科学家沃思提出一个公式:数据结构+算法=程序算法:为解决一个具体问题而采取的确定的有限的操作步骤,仅指计算机能执行的算法对数
据的描述:数据结构(datastructure)对操作的描述:算法(algorithm)要学蜜蜂采百花,问遍百家成行家5算法的特性有穷性在合理的时间内完成确定性(无歧义)如果x≥0,则输出Yes;如果x≤0,则输出No;可行性(有效性)能有效执行负数开平方没有输
入或有多个输入有一个或多个输出有足够的情报要学蜜蜂采百花,问遍百家成行家6算法的表示方法自然语言描述流程图在1966年,Bohra与Jacopini提出N-S图1973年,美国学者I.Nassi和B.Shneiderman提出伪代码要学蜜蜂采百花,问遍百家成行家7例1有两个存储单元a和b,要求
将它们的值互换。分析:按存储器的性质,如果将单元a的值直接送到单元b中,那么就会覆盖掉b原来的内容,因此,需要借助一个临时单元c来交换。具体算法如下:步骤1:将单元a的值送给单元c;步骤2:将单元b的值送给单元a;步骤3:将单元c的值送给
单元b。自然语言描述要学蜜蜂采百花,问遍百家成行家8例2求1+2+3+4+…+10。步骤1:将0送到S中;步骤2:将1送到n中;步骤3:把n的值加到S中;步骤4:n增1;步骤5:若n≤10则转
回步骤3,否则执行步骤6;步骤6:输出S的值。自然语言描述要学蜜蜂采百花,问遍百家成行家9流程图通常采用一些几何图形来代表各种类型的操作,在图形内标明文字或符号来表示操作的内容,并用箭头来表示操作的顺序。用流程图表示算法,直观形象,易于理解,但由于流程图允许使用箭头随意跳转,对表示算法的层次
结构非常不利,且流程图占的篇幅较大,作图工作量也很大。流程图起止框输入/输出框判断框处理框流程线连接点要学蜜蜂采百花,问遍百家成行家10顺序结构流程图表示方法BA要学蜜蜂采百花,问遍百家成行家11选择结构流程图表示方法BN如果成绩<6
0那么通知补考否则告知你考试成绩AY条件P要学蜜蜂采百花,问遍百家成行家12循环结构流程图表示方法A条件PA当型循环直到型循环真假假条件P假真要学蜜蜂采百花,问遍百家成行家13将例2求1+2+3+4+…+10用流程图进行描述。n+1
=>n1=>ns+n=>s0=>sn≤10输出s是否流程图要学蜜蜂采百花,问遍百家成行家14针对流程图存在的缺点,I.Nassi和B.Shneiderman提出了结构化程序设计的流程图,称为N-S图,更能体现结构化程序设计的思想。推荐使用N-S图。N-S图完全去掉了流程线,算法的所有处
理步骤都写在一个大矩形框内(表示简单、符合结构化思想)(象堆积木)结构化程序设计的三种基本结构——顺序结构、选择结构、循环结构N-S图(盒图)要学蜜蜂采百花,问遍百家成行家15结构化程序设计的三种基本
结构具有以下共同的特点:只有一个入口;只有一个出口;结构内的每一部分都有机会被执行到;结构内不存在“死循环”。N-S图(盒图)要学蜜蜂采百花,问遍百家成行家16将例2求1+2+3+4+…+10用N-S图进行描述。0s1nn≤10n+ssn+1n输出sN-S图
(盒图)要学蜜蜂采百花,问遍百家成行家17将求10个任意整数中的最大数用N-S图进行描述。输入max1nn<10输入xTx>max?Fxmaxn+1n输出maxN-S图(盒图)要学蜜蜂采百花,问遍百家成行家18程序设计步骤根据实际问题设计应用程序大致要经过
以下四个步骤:分析问题画流程图或N-S图编写程序运行并调试程序采用自顶向下、逐步细化的结构化分析的方法要学蜜蜂采百花,问遍百家成行家19例3求三个数中的最大数。要学蜜蜂采百花,问遍百家成行家20数据类型(DataType)数据为什么要区分类型?不同类型的数据代表不同的–数据表
示形式–合法的取值范围–占用内存空间大小–可参与的运算种类要学蜜蜂采百花,问遍百家成行家21数据类型在C语言中,数据类型一般包括基本数据类型、构造数据类型、指针类型和空类型等四大类。数据类型指针类型构造类型基本类型空类型void整型int(含枚举类型)实型(浮点型)字符型char数组结
构体共用体单精度float双精度double要学蜜蜂采百花,问遍百家成行家22一个简单的C程序例子#include<stdio.h>/*函数功能:计算两个整数相加之和入口参数:整型数据a和b返回值:整型数a和b之和*/intAdd
(inta,intb){return(a+b);}/*主函数*/main(){intx,y,sum=0;printf("Inputtwointegers:");scanf("%d%d",&x,&y);/*输入两个整型
数x和y*/sum=Add(x,y);/*调用函数Add计算x和y相加之和*/printf("sum=%d\n",sum);/*输出x和y相加之和*/}并列的两个函数其中一个是程序的入口程序注释要学蜜蜂采百花,问遍百家
成行家23C语言中的基本元素程序语句标识符关键字常量、变量运算符分隔符……关键字(Keyword)–又称为保留字–数据类型修饰符int,控制语句return等标识符(Identifier)–系统预定义标识符,main,printf等–用
户自定义标识符,Add,x,y等运算符(Operator)–34种,+分隔符(Separator)–空格、回车/换行、逗号等其它符号–大花括号“{”和“}”–“/*”和“*/”是程序注释所需的定界符数据(Data)–变量(Variable)–常量(Constant)要学蜜蜂采百花,
问遍百家成行家24常量常量是在程序中保持不变的量常量区分为不同类型:整型、实型、字符型和字符串型如12、3.2、'a'、"hello"要学蜜蜂采百花,问遍百家成行家25整型常量整型常量有三种不同的表示形式:十进制:无前缀,无
后缀八进制:在八进制数值前面加前缀“0”,其数码取值为0~7。例如:023,0457,01324等十六进制:前缀为“0X”或“0x”,其数码取值为0~9、A~F或a~f。例如:0X2A,0XA0,0XFFFF等当任意整型常量后跟一个字母u或U时,表示是无符号整型。例如:
123u当任意整型常量后跟一个字母l或L时,表示是长整型。例如:123L要学蜜蜂采百花,问遍百家成行家26实型常量实型(浮点型)常量有2种不同的表现形式:小数形式:由数字和小数点组成,必须要有小数点。例如
:0.123,123.,123.0,0.0等。指数形式:如123e3或123E3都代表123×103。注意字母e或E之前必须有数字,且e或E后面的指数必须为整数。规范化的指数形式:在字母e或E之前的小数部分中,小数点左边应有一位且只能有一位非零的数字,如1.23e5。要学
蜜蜂采百花,问遍百家成行家27字符型常量C语言的字符常量是用单撇号括起来的一个字符,如'A','a','$'等。转义字符:以一个字符“\”开头的字符序列,代表特殊的含义。1到2位十六进制所代表的字符\xhh1到3位八进制数所代表的字符\ddd代表一个双引
号字符\"代表一个单撇号字符\'代表一个反斜杠字符”\“\\退格,将当前位置移到前一列\b水平制表,跳到下一个Tab位置\t换行,将当前位置移到下一行开头\n含义字符形式1到2位十六进制所代表的字符\xhh1到3位八进制数所代表的字符\ddd代表一个双引号字符\"代表一个单撇号字符\
'代表一个反斜杠字符”\“\\退格,将当前位置移到前一列\b水平制表,跳到下一个Tab位置\t换行,将当前位置移到下一行开头\n含义字符形式要学蜜蜂采百花,问遍百家成行家28八进制数字表示(\ddd):'\123''\3'注意数字的取值
范围十六进制数字表示(\xdd):'\xFF''\x5'说明:字符可用对应的编码(整数)表示如:用065530x35表示'5'C中经常将字符常量等价为整数参与运算:如:'A'+32结果为'a''0'-48为0字符型常量要学蜜蜂采百花,问遍百家成行家29字符串由若干字
符(含转义字符)组成,用双引号界定如:"hello""a""123""""\n""Tom\tis\078\n"含几个字符?没有长度为零的字符(''),但有长度为零的字符串("")注:双引号在一行内成对出现,长字符串可写在多行上,C会自动连接为整体。
例如:"hello,I'm""yu.""Whoareyou?"输出显示:hello,I’myu.Whoareyou?字符串常量要学蜜蜂采百花,问遍百家成行家30符号常量在C语言中,用一个标识符来表示一个常量,称之为符号常量一般形式为:#define<符号常量名
><常量值>#include<stdio.h>#definePI3.14159main(){doubles,r;r=5;s=PI*r*r;printf("areas=%f",s);}要学蜜蜂采百花,问遍百家成行家31声明和使用变量声明变量:Datatype
variablename;如:intage;定义后给变量赋值:variablename=value;如:age=20;定义时初始化变量:Datatypevariablename=value;如:intage=20;给变量赋值,除了给一个直接的值以外,还可以通
过计算获得要学蜜蜂采百花,问遍百家成行家32变量的命名规则:变量名可以由字母、数字和_(下划线)组合而成变量名不能包含除_以外的任何特殊字符,如:%、#、逗号、空格等变量名必须以字母或_(下划线)开头变量名不能包含空白字符(换行符、空格和制表符称为空白字符)C语言中的
某些词(例如int和float等)称为保留字,具有特殊意义,不能用作变量名C语言区分大小写,因此变量price与变量PRICE是两个不同的变量变量命名在C语言中,变量命名需要遵循一定的规则(标识符)有效名称principalcost_pricemarks_3lastnamecity无效名
称123ratecurrency$discount%zipcode要学蜜蜂采百花,问遍百家成行家33使用整型变量声明:intpage_number;longintpopulation;unsignedintage;初始化:intmax_marks=10
0;在同一语句中可以声明多个类型相同的变量:intpage_number,copies,paper_width;要学蜜蜂采百花,问遍百家成行家34单精度实型float在C语言中用于存储单精度实数float32位-3.4×10-38~3.4×10+38,7位有效数字声明:floatsel
ling_price;初始化:floatselling_price=11.3;要学蜜蜂采百花,问遍百家成行家35双精度实型内存floatdouble213.567143556896764位取值范围:-1.7×10-308~1.7×1030816位有效数字声明:do
ublepressure_level;初始化:doublepressure_level=213.5671435568967;double在C语言中用于存储双精度实数213.5671要学蜜蜂采百花,问遍百家成行家36s
hortintintlongfloatdoubleTurboC2B2B4B4B8BVC++6.02B4B4B4B8B数据类型所占的位数与机器硬件(CPU)、操作系统、开发环境有关。基本数据类型与环境间的关系要学蜜蜂采百花,问遍百家成行家37字符型占8位内存c
hargender;gender='m';chargender='m';值符号值符号值符号0空字符44,91[32空格45-92\33!46.93]34"47/94^35#48~570~995-36$58:96`37%59;97~122a~z38&60<123{39'61=124|40(
62>125}41)63?126~42*64@127DEL(Delete键)43+65~90A~Z要学蜜蜂采百花,问遍百家成行家38char型与int型之间的关系#include<stdio.h>main(){charch='b';printf("%c,%d\n",ch
,ch);ch='b'-32;printf("%c,%d\n",ch,ch);}#include<stdio.h>main(){charch='b';printf("%c,%d\n",ch,ch);ch='b'-('a'-'A'
);printf("%c,%d\n",ch,ch);}b,98B,66b,98B,66例:小写字母转换为大写字母要学蜜蜂采百花,问遍百家成行家39函数C语言提供了丰富的内部函数,又叫库函数,也称标准函数,其定
义按函数类型存放在不同的“头文件”中,使用时应该在源文件中的开始位置包含上相应的头文件。例如,使用数学函数时,应该在源文件中的开始位置使用#include"math.h"把头文件math.h包含到源文件中。
引用内部函数时,只需要写出相应的函数名,并在后面的括号中给出所要计算的自变量值,即可得到所需要的函数值。例如,sqrt(4.0)得2.0,fabs(-100.0)得100.0。使用标准函数时,必须注意以下两点:(1)使用三角函数时,必须注意角度
的单位是“弧度”;(2)引用标准函数时,自变量要写在括号里面,自变量可以是常量、变量或表达式。要学蜜蜂采百花,问遍百家成行家40常用的标准数学函数函数名功能函数名功能sqrt(x)计算x的平方根,x应大于等于0exp(x)计算ex的值fabs(x)计算x的绝对值pow(x,y)计算xy的值lo
g(x)计算lnx的值sin(x)计算sinx的值,x为弧度值log10(x)计算lgx的值cos(x)计算cosx的值,x为弧度值要学蜜蜂采百花,问遍百家成行家41表达式表达式由操作数和运算符的组合而成表达式中的操作数可以是
变量、常量或者子表达式表达式是常量、变量、数组元素、函数等运算对象和运算符以及括号的有意义组合。类似数学算式或公式,但写法有所不同。运算符的类型有:算术运算符+-*/%++--指针运算符*&关系运算符><==>=<=!=求字节数运算符sizeof逻辑运算符!&&|
|强制类型转换运算符(类型)位运算符<<>>~|^&分量运算符.->赋值运算符=下标运算符[]条件运算符?:其他逗号运算符,注意:运算符具有优先级和结合性。要学蜜蜂采百花,问遍百家成行家42算术运算符算术一元二元操作数操作数运算符两个整数
相除,其值为整数,如5/3值为1操作数中有一个为实数时,结果为double型%(模(求余)运算符):%两侧均为整型数据要学蜜蜂采百花,问遍百家成行家43算术运算符和算术表达式算术一元--++num++num=num+1num--num=num-1++num--numnum++n
um--前缀后缀二元表达式如何计算结果(num1=5)num2=++num1;num1=num1+1;num2=num1;num2=6;num1=6;num2=num1++;num2=num1;num1=num1+1;num2=5;num1=6;n
um2=--num1;num1=num1-1;num2=num1;num2=4;num1=4;num2=num1--;num2=num1;num1=num1-1;num2=5;num1=4;要学蜜蜂采百花,问遍百家成行家44例:算术运算符和算术表达式应用#include<stdio.h>ma
in(){inta=5,b=3,c=25,d=12;floatqu;intre,in,de;/*使用算术运算符*/qu=a/b;//除法re=a%b;//求模in=++c;de=--d;printf("商为%f\n",qu);printf("
余数为%d\n",re);printf(“加1后为%d\n",in);printf("减1后为%d\n",de);}商为1.000000余数为2加1后为26减1后为11要学蜜蜂采百花,问遍百家成行家45赋值运算符和赋值表达式变量表达式Hei
ght=177.5Weight=78Gender=’m’x=a+bw=sin(a)+sin(b)y=i++-j作用是将一个数据(或表达式的值)赋给一个变量。注意:赋值符号左边只能是变量,不能是表达式,也不允许是常量。要学蜜蜂采百花,问遍百家成行家46复合赋值运算符运算符表达式计算
结果(假设X=10)+=X+=5X=X+515-=X-=5X=X-55*=X*=5X=X*550/=X/=5X=X/52%=X%=5X=X%50要学蜜蜂采百花,问遍百家成行家47赋值运算符和赋值表达式使用#include<stdi
o.h>main(){floatbook_price=60.75;//存放书的价格printf("\n书的价格=%f",book_price);book_price+=12.50;printf("\n书的新价格=%f\n",book_
price);}book_price=book_price+12.50;要学蜜蜂采百花,问遍百家成行家48逗号运算符与逗号表达式形式:表达式1,表达式2作用:用于连接表达式计算过程:先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。如:3+5,6
+8例:x=(a=3,6*3)x=a=3,6*a逗号表达式可组合逗号运算符的优先级最低,结合方向自左到右并不是任何地方出现的逗号都是逗号运算符如:printf("%d,%d,%d\n",a,b,c);如:(a=3*5,a*4),a+5要学蜜蜂采百花,问遍百家成行家49类型溢出C
语言直接提供的任何类型都有取值范围。当向其赋超过此范围的数值,就会产生数值溢出,得到一个不正确的结果。int的范围是-2147483648~2147483647如果超出取值范围,给它一个小于-2147483648或者大于2
147483647的数会如何呢?编程测验……小蛇能吞下大象吗?要学蜜蜂采百花,问遍百家成行家50类型溢出解决方案解决方案:预先估算运算结果的可能范围,采用取值范围更大的类型。1+2+3+…1!+2!+3!+…13+23+33+…如果不需要处理负数,则采用无符号类型。在运算还没开始之前就判断
运算数是否在合理的取值范围内。如果超出,则停止运算,转错误处理。要学蜜蜂采百花,问遍百家成行家51运算符的优先级和结合性优先级:++、--、+、-、sizeof()*、/、%+、-=、+=、-=、*=、/=、%
=,结合性:右结合——++、--、+、-、sizeof()=、+=、-=、*=、/=、%=左结合——*、/、%、+、-、,要学蜜蜂采百花,问遍百家成行家52自动类型转换doublefloatlongunsignedintch
ar,short低高说明:必定的转换运算对象类型不同时转换例charch;inti;floatf;doubled;ch/i+f*d-(f+i)intintdoubledoubledoubledoubledoubledoubleintintdoubledoubledoubledo
ubledoubledouble10+'a'+i*f-d/l例inti;floatf;doubled;longl;要学蜜蜂采百花,问遍百家成行家53强制类型转换一般形式:(类型名)(表达式)例(int)(x+y)(int)x+y(double)(3/2)(int)3.6说明:强制转换得到所需类型
的中间变量,原变量类型不变强制类型转换与指针,并称C语言两大神器,用好了可以呼风唤雨,用坏了就损兵折将屠龙刀倚天剑要学蜜蜂采百花,问遍百家成行家54类型转换举例#include<stdio.h>main(){intm=5;printf("m/2=%d\n",m/2);printf("(float)
(m/2)=%f\n",(float)(m/2));printf("(float)m/2=%f\n",(float)m/2);printf("m=%d\n",m);}两个整数运算的结果还是整数,不是实数要学蜜蜂采百花,问遍百家成行家55类型转换举例#include<std
io.h>main(){floatx;inti;x=3.6;i=(int)x;printf("x=%f,i=%d",x,i);}精度损失问题较高类型向较低类型转换时可能发生要学蜜蜂采百花,问遍百家成行家56总结
算法的表示方法常量是在程序中不能被更改的值;而变量在程序中可以被更改的,通过变量可以引用存储在内存中的数据C语言中的基本数据类型包括整型、单精度实型、双精度实型和字符型整型分为短整型、整型、长整型,每种整型
又可分为有符号型和无符号型单精度实型和双精度实型变量可以存储实数,但双精度型取值范围要比单精度型大的多字符型变量可以存储单个字符,其值是该字符的ASCII码表达式是操作数和运算符的集合赋值运算符的语法如下:variable=expression
算术运算符提供运算功能,包括+、-、*、/、%、++和--要学蜜蜂采百花,问遍百家成行家57作业习题2:2.1~2.5描述算法2.10~2.13、2.15、2.16做在书上2.18先写出结果,再上机验证