版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
LanguageProgramming第1章C语言概述1.1C语言概述.ppt1.2-1.4简单C程序.ppt1.5经典算法.ppt2.1算法初步.pptx2.2经典算法.pptx3.1关于常量与变量.pptx3.2关于数据类型.ppt3.3-3.4关于C的运算.pptx3.5经典算法.pptx4.1-4.2标准的输出函数.ppt4.3-4.5标准的输入函数.ppt5.1-5.3选择结构.ppt5.3-5.4switch语句和条件运算符.ppt5.5经典算法.ppt6.1-6.3循环语句.pptx6.4辅助语句.ppt6.5经典算法.ppt7.1一维数组.pptx7.2二维数组.pptx7.3字符数组.pptx7.4字符串函数.pptx7.5经典算法.pptx【后面缺失的章节,可以私信获取】如何变成一个程序猿?让我们从计算机语言开始吧!1.1关于计算机语言计算机程序机器语言汇编语言高级语言C745F802000000movdwordptr[a],2inta=2,b=5,c;C745EC05000000movdwordptr[b],58B45F8moveax,dwordptr[a]c=a+b;0345ECaddeax,dwordptr[b]8945E0movdwordptr[c],eax计算机语言与计算机进行交流命令计算机按人的意愿自动工作问题导入:
选择哪种语言合适呢?选择C语言的理由C语言起源于20世纪70年代,成熟于80年代,是迄今为止最经典的一门计算机语言。
C语言是学习其它语言的基础。如:C++,C#,Java都借鉴了C的思想和灵魂,学会C就可以学习其它任何高级语言。因为经典我们要学!4、C语言无所不能。既可以编写系统软件,又可以编写应用程序。如,操作系统和设备驱动程序都是用C开发的、嵌入式系统、工业机器人、智能家电等也都是用C开发,几乎没有不能用C语言实现的软件,也几乎没有不支持C语言的系统。5、交流、笔试、面试最常用的语言,它能给你提供好的工作机会。6、全国计算机等级考试的需要。选择C语言的理由C语言的数据成分;C语言的运算成分;C语言的传输成分;C语言的控制成分;C语言的复杂成分。C语言课程内容总览)32(95-f3.5a+5sinx-常数函数及自变量表达式变量运算符C语言的数据成分观察下列表达式符号-标识符常量变量关键字数据类型教材内容:第1、3章)32(95-f3.5a+5sinx-常数函数及自变量表达式变量运算符C语言的运算成分观察下列表达式,隐含了乘号运算符。+、-、*、/、()、……34种运算符优先级与结合方向见教材:第3章★C语言的传输成分见教材:第4章数据的输入:scanf()函数数据的输出:printf()函数C语言的控制成分见教材:第5、6章if()...else... (条件语句)switch (多分支选择语句)for()... (循环语句)while()... (循环语句)do...while()... (循环语句)continue (结束本次循环语句)break (结束循环或switch)goto (跳转语句)return (从函数返回语句)C语言的复杂成分见教材:第9、10章、11章指针结构体文件C语言语句C语句可分为以下五类:表达式语句函数调用语句复合语句空语句控制语句a=2*b+3;printf("Thisisabook!");{t=m;m=n;n=t;};if()...else... LanguageProgramming第1章C语言概述主讲:胡春安副教授本章要解决的问题1、C语言程序长什么样?2、C语言程序到哪编写?3、C语言程序如何运行?4、如何获得基本的编程能力?1.2C语言程序KenThompson江湖人称ken中文名:肯·汤普森DennisM.Ritchie江湖人称dmr中文名:丹尼斯·里奇1.2.1C语言起源他们干了什么?1969年,ken和dmr梦想能遨游宇宙ken设计了一款电子游戏——“SpaceTravel”游戏在PDP-7小型机上开发,因为这台机器免费免费的机器没有操作系统玩游戏之前,先给PDP-7做个操作系统,命名为“UNIX”汇编编写UNIX太慢,又没有称手的高级语言,怎么办?dmr设计了一种新的高级语言,命名为“C语言”1983年,因为UNIX和C语言的巨大成功,ken和dmr共同获得当年度的计算机界最高奖:图灵奖图灵是谁?为什么要以他的名字命名?他们干了什么?(1)语言简洁、紧凑,使用方便、灵活。共
32个关键字、9种控制语句,程序书写自由。(2)运算符丰富,34种运算符。(3)数据类型丰富,具有现代语言的各种数据结构。(4)具有结构化的控制语句,是完全模块化和结构
化的语言。(5)语法限制不太严格,程序设计自由度大。(6)执行效率高,可移植性好。C语言的特点C语言标准1978年Dmr与Kernighan著有TheCProgrammingLanguage(C程序设计语言)。1983年,美国国家标准化协会(ANSI)根据C语言问世以来的各种版本对C的发展和扩充制定了新的标准,称为ANSIC。1989年,ANSI公布了新标准ANSIC89,这个标准被国际化标准组织所接受。1999年,ANSI又公布了新标准ANSIC99。2011年,ISO正式公布C语言新的国际标准C11。1.2.2简单的C语言程序【例1-1】请用C语言说“Howdoyoudo!”。1#include<stdio.h> /*头文件*/2intmain()
/*主函数*/3{/*函数开始标志*/5return0;
/*返回0值*/6}/*函数结束标志*/C程序长什么样呢?4printf(“Howdoyoudo!\n”); /*输出结果
*/【例】求圆锥体的体积,已知半径r和高h.分析:(1)已知公式:(2)已知π
、r、h的值(3)求v(4)记录结果人工求解v=πr2h1.2.2简单的C语言程序计算机求解/*求圆锥体体积*/
#include<stdio.h>intmain(){return0;}头文件主函数注释只是给人看的,对编译和运行不起作用。floatr,h,v;/*变量定义语句*/r=2;h=3; v=1.0/3*3.14159*r*r*h;/*数据计算*/printf(“%f”,v);/*数据输出*/#include<stdio.h>/*编译预处理命令*/intmain(){
变量定义;
执行语句组;/*程序功能的实现*/printf(.......);/*输出结果*/
return0
;/*程序正常结束*/}1.2.3C语言程序基本组成解决C语言程序长什么样的问题。intmain(){
变量定义;
执行语句组printf(.......);
return0
;
}funtion2(参数表)
/*函数说明*/{变量定义/*函数体*/
执行语句组}(1)由若干个函数构成。包括:主函数main,用户自定义函数和系统提供的库函数,此特点称为程序的模块化。(2)C程序总是从主函数main开始执行,在main中结束。它可以出现在程序的任何位置。1.2.3C语言程序基本组成function1(参数表)/*函数说明*/{变量定义/*函数体*/
执行语句组
}#include<stdio.h>(3)每个语句和数据定义的后面必须有一个分号。对于复合语句要用花括号将{多条语句}括起来。if(条件成立){语句1;语句2;语句3;…}1.2.3C语言程序基本组成(4)32个关键字:具有特定语义的词。如float、char、double、int、void、return、case、if、else、default、switch、for、while等关键字。C语言程序有哪些规定?(5)C程序的书写相对自由,一行可以写多条语句,但建议按规范书写。(6)程序中“/**/”内(或“//”后)的文字是程序的注释部分,是便于阅读理解程序的说明。1.2.3C语言程序基本组成开始结果语法错误源程序.c/.cpp目标程序.obj可执行程序.exe编写编译连接运行连接错误运行错误1.3C语言程序的开发过程
1、源文件:用C语言编写的代码并以文件保存;2、目标文件:对源程序进行编译产生的二进制文件;
3、可执行文件:将所有目标文件连接后形成的文件,也是
二进制文件。解决C语言程序如何运行的问题。1.4编译环境-CodeBlocks集成的开发环境(IntegratedDevelopmentEnvirnment,简称IDE)。
目前使用的IDE有:MicrosoftVisualC、TurboC,C-Free、CodeBlocks、WinTc、BorlandC、C#、devc++等,虽然这些编译系统基本部分都是相同的,但还是有一些差异,使用时注意编译系统的特点和规定。教学中使用CodeBlocks,下载官网:,它是一个跨平台的开源的免费的集成开发环境,支持C/C++。解决C语言程序到哪运行的问题。1.4编译环境-VisualC++2015
VisualStudio2015适合安装在Windows10操作系统中,如果是Windows7操作系统或Windows8操作系统,建议安装VisualStudio2010或VisualStudio2013。课后思考:1.C语言程序长什么样?2.如何运行一个C语言程序?3.请用C语言编写一个程序完成下列字符
串的输出?
WelcometoJxust!4.你准备选用哪个编译器运行C语言程序?LanguageProgramming第1章C语言概述主讲:胡春安副教授1.5经典算法
远在公元前约三千年的古巴比伦人就知道和应用勾股定理。在中国西周的商高提出了“勾三股四弦五”的勾股定理的特例。最早提出并证明此定理的为公元前6世纪古希腊的数学家毕达哥拉斯,他用演绎法证明了勾股定理,因此勾股定理也称为毕达哥拉斯定理。
如何把勾股定理写到我们喜欢的程序中?1.勾股算法【例1-2】已知勾三股四,计算弦五的平方。1/*验证勾三股四弦五*/2#include<stdio.h>3intmain()4{
5inta,b,c;/*定义三个整型变量*/6a=3;/*直角边a边的长*/7b=4;/*直角边b边的长*/8c=a*a+b*b;/*计算直角三角形的斜边*/9printf("c^2=%d\n",c);/*输出斜边平方值*/10return0;11}【例1-3】使用勾股定理,求直角三角形的斜边。1#include<stdio.h>2#include<math.h>/*数学函数库信息*/3intmain()4{5doublea,b,c;/*表达三角形的三条边长*/6printf(“inputaandb:”)/*提示输入两直角边的值*/7scanf("%f,%f",&a,&b);/*调用scanf()函数输入a,b的值*/8c=sqrt(a*a+b*b);/*调用sqrt()函数计算平方根*/9printf(“c=%f\n”,c);/*输出三角形的斜边长*/10return0;11}优点:比[例1-2]程序处理数据更强,程序更完善!【例1-4】使用毕达哥拉斯定理,求任意直角三角形的斜边长度#include<stdio.h>#include<math.h>doublePythagoras(doublea,doubleb)/*定义一个求直角三角形斜边的长度函数*/{doublec;c=sqrt(a*a+b*b);returnc;}优点:模块化设计程序,程序更加灵活!intmain(){doublex,y,z;printf("inputxandy:");scanf("%lf,%lf",&x,&y);z=Pythagoras(x,y);/*调用Pythagoras函数*/printf("斜边的长度为%lf\n",z);return0;}本章获得的能力1.了解、掌握了C语言程序的基本组成。2.具备模仿写一个简单C语言程序的能力。第2章程序设计初步主讲:胡春安副教授导引:算法的作用解决如何从现实问题到程序。解决方案程序禅者与蝎子的故事恒河故事告诉我们:做事的方法,往往比事情本身更重要高斯的故事高斯求和公式=(首项+末项)x项数/2高斯是德国著名的大科学家,他最出名的故事就是在他10岁时,小学老师出了一道算术难题:计算1+2+3+……+100=?
问题:大约在1500年前,《孙子算经》中就记载了这个有趣的问题。书中是这样叙述的:“今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?”思路:解一元一次方程解:设兔有x只,则鸡有(35-x)只。4x+2(35-x)=94x=12鸡:35-12=23(只),兔:12(只)鸡兔同笼问题
/*雉兔同笼参考程序*/#include<stdio.h>int
main(){
intheads=35,foots=94;
//已知条件
intx; //设兔有x只,则鸡有(35-x)只。x=(foots-2*heads)/2;
printf("兔:%d只,鸡;%d只\n",
x,
heads-x);
return0;}雉兔同笼问题告诉了我们计算机如何解决问题问题->解决方案->编程算法广泛地说算法就是解决问题的方法和步骤。著名的计算机科学家尼古拉斯·沃斯曾提出:程序=数据结构+算法。凭借这句话获计算机图灵奖程序指对解决方案的准确而完整的描述,是解决问题的一系列指令。2.1算法的概念方法1:1+2+3+4+…100加99次方法2:(1+100)+(2+99)+…+(50+51)=101*50加50次,乘1次如:求从程序设计的角度过来看:算法(Algorithm)是指对解题方案的准确而完整的描述,是解决问题的一系列指令。对同一个问题,可有不同的解题方法和步骤。【例2-1】求s=1+2+3……100的和。
1.问题分析:(1)已知条件为:n=100;(2)希望输出的结果:s=1+2+3……100;(3)累加算法。笨笨的累加算法:S1:设s=0;S2:设i=1;S3:求s+i,和仍放回变量s中,即s=s+i;S4:i的值加1,即i=i+1;S5:若i≤100,返回S3,否则,算法结束,此时s的值就是1+2+3……100的和。S6:输出s。/*累加求和1+2=3+…+100*/1.#include<stdio.h>2.intmain()3.{4.
ints=0,i=1;5.while(i<=100)6.{7.s=s+i;8.i++;9.}10.printf("s=%d\n",s);11.return0;12.}算法程序【例2-2】求1×2×3×4×5步骤1:先求1×2,得到结果2如果要求1×2×…×1000,则要写999个步骤步骤4:将24再乘以5,得120步骤2:将2再乘以3,得到结果6步骤3:将6再乘以4,得24笨笨的累乘算法:基于人的思维:pi
S1:使p=1,i=2;2S5:输出p的值,即5!。S2:使p×i,乘积仍放在变量p中,即p=p×iS3:使i的值加1,即i=i+1。S4:如果i≤5,返回S2;否则,算法结束。6基于计算机思维:设两个变量p和i,
p
作被乘数,i作乘数。具体步骤:21364245120算法简练算法简练算法程序#include<stdio.h>intmain(){
return0;}inti=2,p=1;
do
{ p=p*i; i=i+1; }while
(i<=5); printf(“5!=%d\n",p);S1S2S3S4S5P称为累乘器i称为计数器………………………………………具有五个重要的特征:1、有穷性:一个算法必须保证执行有限步之后结束;2、确切性:算法的每一步骤必须有确切的定义;3、输入:一个算法有0个或多个输入。所谓0个输入是指算法本身设定了初始条件;4、输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;5、可行性:算法可以解决问题并且能在计算机上运行。2.1算法的概念算法与程序的关系在没有找到解决办法之前,不要试图去写程序。程序,是你告诉计算机的话。计算机按照“你告诉它的话去执行”。计算机决不会帮你“想出”解决问题的办法。解决方案程序
2.2
算法的描述
可以用不同的方法表示算法,常用的有:自然语言传统流程图N-S流程图1用自然语言表示算法一老外来华留学4年,主攻汉语。临毕业,参加中文晋级考试,题量超少,暗喜。再仔细一看,请写出下面两句话的区别在哪里?1、冬天:能穿多少穿多少;夏天:能穿多少穿多少。2、剩女产生的原因有两个,一是谁都看不上,二是谁都看不上。3、女孩给男朋友打电话:如果你到了,我还没到,你就等着吧;如果我到了,你还没到,你就等着吧。4、单身的原因:原来是喜欢一个人,现在是喜欢一个人。老外泪流满面,交白卷,回国了。容易出现“歧义性”用于解决简单问题
2
传统流程图表示算法
美国国家标准化协会ANSI(AmericanNationalStandardInstitute)规定了一些常用的流程图符号:起止框判断框处理框输入/输出框注释框流向线连接点程序设计的三种基本结构顺序结构选择结构ABpAB成立不成立传统流程图当型(While型)循环结构直到型(Until型)循环pA成立不成立pA成立不成立程序设计的三种基本结构传统流程图3N-S流程图表示(1)顺序结构(2)选择结构(3)循环结构特点:废除了流程线,结构紧凑只有一个入口、一个出口2.3程序设计方法(1)结构化程序设计在结构化程序设计中,总是按照“先粗后细、先抽象后具体”的办法,对所要描述的解决方案进行穷尽分解,直到分解为顺序、分支、循环三种结构。(2)模块化程序设计
每个模块完成单一功能,高内聚、低偶合。(3)自顶向下,逐步细化的设计
面临问题时,先从问题出发,由粗到细,逐步细化。2.4软件开发过程问题分析算法设计编码测试与调试【例2-1】求s=1+2+3……100的和。1.问题分析:(1)已知条件为:n=100;(2)希望输出的结果:s=1+2+3……100;(3)累加算法。2.4经典算笨笨的累加算法s=s+ii=i+1?流程图描述:传统流程图N-S流程图/*累加求和1+2=3+…+100*/1.#include<stdio.h>2.intmain()3.{4.
ints=0,i=1;5.
while(i<=100)6.{7.s=s+i;8.i++;9.}10.printf("s=%d\n",s);11.return0;12.}算法程序【例2-2】任意输入10个数,输出其中的最大数擂台算法1.问题分析
(1)已知条件:任意10个数;(2)希望输出的结果:10个数中的最大数;(3)采用的算法:擂台算法寻找最大数。擂台算法S1:第一个人先上擂台(先取一个
数),并开始计数;S2:另一参赛人员上台,计数+1;S3:与擂台上的人进行PK,获胜方
站在擂台上,失败者离开擂台;S4:所有参赛人员都PK了吗?没有,
转S2步;S5:最后留在擂台上的就是最厉害
的擂主。S6:算法结束。【例2-2】任意输入10个数,输出其中的最大数擂台算法1 /*例2-2:求10个数中的最大数*/2 #include<stdio.h>3 intmain()4 {5 inti,max,x;6 scanf("%d",&max);/*输入站到擂台max上的首个数*/7 for(i=1;i<10;i++)/*重复上台、PK动作*/8 {9 scanf("%d",&x); /*下一个参赛者x上台*/10 if(max<x)max=x; /*x与max的值进行PK*/ }12 printf("max=%d\n",max); /*输出最后留在擂台上的数*/13 return0;14 }【例2-3】将a,b,c三个数按大小顺序输出。1.问题分析(1)已知条件:输入任意三个无序的数a,b,c;(2)希望输出的结果:从大到小排好序的三个数a,b,c;(3)采用的算法:选择排序法。简单选择排序法2.选择排序算法的基本思想:每趟排序都选择一个最大元素放在未排序部分的最前面。选择排序法(从大到小)的步骤如下:8115811
<
1185
1185<<abc
若ab<则a,b两值交换若
ac<则a,c两值交换若
bc<则b,c两值交换/*参考程序*/#include<stdio.h>intmain(){inta,b,c,t;printf("任意输入a,b,c的值:\n"); /*在屏幕上输出双引号内的字符串*/scanf("%d%d%d",&a,&b,&c); /*从键盘输入三个数*/if(a<b){t=a;a=b;b=t;} /*如果a<b,两数进行交换,使得a>b*/if(a<c){t=a;a=c;c=t;} /*如果a<c,两数进行交换,使得a>c*/if(b<c){t=b;b=c;c=t;} /*如果b<c,两数进行交换,使得b>c*/printf("排序后的三个数:\n");printf("%d,%d,%d\n",a,b,c); /*将排序后的a,b,c三个数输出*/return0;}本章获得的能力1.了解、掌握了算法的基本概念及作用。2.了解了累加算法、累乘算法、擂台算法、选择排序法等常用算法。第3章
C语言编程基础第1讲关于常量与变量)32(95-f3.5a+5sinx-常数函数及自变量分数未知数隐含乘号运算符程序设计语言规则包括:常量、变量、函数、表达式、运算符的规定数学中默认的规则运算符问题导入3.1C语言的基本符号3.1.1C语言的字符集数字:0、1、2、3、4、5、6、7、8、9。英文字母:大、小写各26个(A~Z,a~z)。下划线字符:“_”。运算符:34个运算符号,如“+、-、*”等。关键字:具有特定含义的词,在任何时候都不得用作变量名、符号常量名、函数名、类型名等。如:#include/
if/int/float/char/while/for/do/等,共32个,见附录A。3.1.2标识符标识符是C语言里的一个重要概念。
程序中用来为符号常量、变量、函数、数组、类型、文件命名的有效字符序列称为标识符。如:area、a、b、c、scanf()、printf()、sqrt()、triangle_area()这些都是标识符。3.1.2标识符标识符的命名规则:1只能由字母、数字和下划线组成。2
第一个字符必须为字母或下划线3不能使用关键字。4区分大小写字符。如:下面是合法的标识符:Sum,sum和SUM是三个不同的标识符。area,Day,DATE,a1,int_a,_m;下面是不合法的标识符:Mr.Li,1_a,a>b,a$,int,a1#3.1.3常量C中的数据包括常量与变量;常数是指固定不变的数值。如圆周率π≈3.1415926535﹑真空光速c=2.99792458×108m/s等。常数是具有一定含义的名称,用于代替数字或字符串,其值从不可改变。计算机:常量是指在程序运行过程中其值不能改变的量。常量分为直接常量和符号常量。直接常量如:324,-45,1.23,‘A’;符号常量如:#definePI3.1415926535直接常量:整型常量、实型常量、字符常量和字符串常量。1.整型常量
十进制整数:1357,-432,0,123L,0L等;八进制整数:020。十六进制整数:0X20,0x20。2.实型常量小数形式:21.5,-7.9指数形式:2.3e-2,3e83.1.3常量3.字符常量用单撇号界定的一个字符。如′a′,′#′,′?′。以\开头的字符常量为转义字符,转义字符表见表3-3。字符数据是以ASCII码存储的。4.字符串常量用双撇号括起来的多个字符,如″abc″,″Hello!″,″a+b″。字符串最后具有一个′\0′作为结束标志。字符串常量″abc\n″包含几个字符?″Thankyou!\n″;5.符号常量用符号名代表一个常量。如圆周率:#define
PI3.14真空光速:#deifne
c2.99792458e8使用符号常量含义清楚,修改方便。5.符号常量
例:计算圆的面积s。#include<stdio.h>#definePI3.1415926535intmain(){ floats,r;scanf(″%d″,&r);s=PI*r*r;printf(″s=%f\n″,s);
return0;}3.1.4变量什么是变量回顾:变量是指没有固定的值,可以改变的数。用字母符号来表达变量,如y=x2+2*x+1。计算机:变量是指程序运行期间其值可以改变的量。变量有变量名,并在内存中占一定的存储单元,在该存储单元中存放变量的值。变量名区分大小写变量名的命名规则
遵循标识符的命名规则.如:inta1,A1行业约定:符号常量名一般用大写字符,变量名一般用小写字符。
3.1.4变量变量定义变量必须先定义,后使用;定义变量的一般形式是变量类型变量名1,变量名2,…;float
a,b,c,d,e;intx,y;可以在定义变量时指定它的初值。如floata=83.5,b,c=64.5,d=81.2,e;3.1.4变量变量初始化初始化值是常量,或有确定值的表达式。如floata=0,b=5.78*3.5,c=2*sin(2.0);如果变量未初始化,则初始值不确定。例如,inta;a的值可能:1.48544e-38;inta=3;相当于:int
a;
a=3;多个变量赋予同一初值,必须分别指定。floata=b=c=4.5;
//错误float
a=4.5,b=4.5,c=4.5;
//正确floata,b,c=4.5;
a=b=c;
//正确3.1.4变量
23
15
6a0x28ff140x28ff180x28ff1c0x28ff205数据类型10变量值152变量名属性bcd内存地址变量具有数据类型,变量名和变量值、变量地址四个属性。程序通过变量来存取存储单元中的数据。变量的实质是内存中的存储单元3.1.4变量变量的属性变量在内存中的情况inta=3,b=4,c=5;第2讲关于数据类型LanguageProgramming第3章
C语言编程基础3.2C语言的数据类型1、不同的数据类型分配的内存单元大小不同2、不同的数据类型在内存中的存储方式不同3、不同的数据类型取值范围不同4、不同的数据类型参与的运算规则不同C语言中的数据类型数据类型基本类型整型
字符型实型单精度实型float双精度实型
double枚举类型构造类型
数组类型结构体类型共用体类型指针类型空类型void有符号整型int无符号整型unsignedint重点掌握char问题导入为什么要分这么细?
数据类型
数据类型符占用字节数
数据范围基本整型
int2(或4)同短整型(或长整型)
短整型shortint2-32768-+32767
长整型
longint4-2147483648-+2147483647无符号整型unsignedint2(或4)同无符号短整型(或长整型)无符号短整型unsignedshort20-65535无符号长整型unsignedlong40-4294967295单精度实型float4
-10-10双精度实型double8
-10-10
字符型
char1
-128-+127基本数据类型符及含义如下表所示:-3838-3083083.2.1整型数据基本整型:
int短整型:shortint或short长整型:longint或long无符号整型:unsignedint无符号短整型:unsignedshortint
无符号长整型:unsignedlongint问题导入为什么要分这么细?类型名称类型说明符字节数位数取值范围整型int432-2147483648~2147483647短整型short[int]216-32768~32767长整型long[int]432-2147483648~2147483647无符号整型unsignedint4320~4294967295无符号短整型unsignedshort2160~65535无符号长整型unsignedlong4320~4294967295表3-1整型类型数据在不同编译系统下所占字节数1.整型变量定义
整型数据类型符变量名表如:
intm,n;
shorti,j;
longs;
unsignedintp,q;2.整型常量(1)整型常量的表达形式十进制整数:567、0、-89、123L,234l八进制数:以0开头,如0125,014;十六进制数:以0x开头,如0x2ab或0X2AB。一个整常量后面加一个字母L(或小写l),则明确指定该常量是longint型的(2)整型常量的类型整型常量的类型是由其本身隐含决定的。例如32767的类型是int,32769类型是long。【例3-1】在CodeBlocks环境下运行如下C程序。#include<stdio.h>intmain(){intx;unsignedy;longz;
x=4294967295;
y=4294967295;
z=4294967295;
printf("x=%d\n",x);
printf("y=%u\n",y);
printf("z=%ld\n",z);return0;}运行结果为:x=-1y=4294967295z=-1问题导入为什么是这个结果?关于整型数据在计算机内存中的存储形式关于原码、反码、补码的问题整型数据在计算机内存中采用补码存储一串二进制码的数究竟表示哪个数呢?关于:原码、反码、补码以2个字节存储整型数据1和-1为例介绍。1的原码:00000000000000011的反码:00000000000000011的补码:0000000000000001
-1的原码:1000000000000001-1的反码:1111111111111110-1的补码:1111111111111111规则:正数的的原码、反码、补码相同,而负数的反码是原码除符号位外各位取反,补码则是反码加1得到。相同反码=原码取反补码=反码+1计算机中存储整型数据是以补码的形式存储。3.整型数据在内存中的存储形式(2个字节)01111111111111111111111111111111符号位数据位3276765535有符号整型数的存储形式无符号整型数的存储形式理解关键:对计算机而言,它存储的是一串二进制代码,这串代码代表哪个数由你定义的数据类型来决定。1000000000000000-32768?正负-11111111111111111符号位printf("x=%d\n",x);
printf("y=%u\n",y);
printf("z=%ld\n",z);intx;unsignedy;longz;x=4294967295;y=4294967295;z=4294967295;11111111111111111111111111111111如果作有符号数处理,最高位为符号位;如果作无符号数处理,最高位为数据位;按%d或%ld表示按有符号的数输出,此32个1组成的数是-1;按%u表示按无符号数输出,y=4294967295.4294967295在内存中的存储形式执行下列程序段后,b的值是多少?inta=-1;unsignedintb;b=a;printf("%u",b);1111111111111111符号位课后实践:1111111111111111数据位??3.2.2实型数据(又叫浮点型数据)1.实型数据的分类类型说明符字节数有效数字数值范围单精度float46-710-38~1038双精度double815~1610-308~10308长双精度longdouble1618~1910-4932~1049322.实型常量十进制小数形式0.125、.125、-0.125、-125.0、1.25;指数形式格式:实数+e(或E)整数。例如:123.456的指数形式是1.23456e2、1.23456E2、0.0123456e4、.123456e3、12345.6e-2等。而e2、1.23e3.5、e、12345E等都是不合法形式。3.实型数据的存储形式科学计数法在规格化二进制浮点数的形式:(1001.0111010)2
=+1.001011101×23
符号位为正,指数是3,尾数是1.001011101。(-0.0001010011)2
=-1.010011×2-4
符号位为负,指数是-4,尾数是1.010011。每个尾数小数点前都是1,该位默认隐藏,省出1位。3.实型数据的存储形式:IEEE754标准存储:1位8位23位数符阶码尾数02231(-0.0001010011)2
=-1.010011×2-4单精度:符号位1指数位为-4+127=123(1111011)尾数1.010011隐藏最高位1之后为010011,因此存储码表示为:1
01111011
010011000000000000000003.实型数据的存储形式:IEEE754标准存储:1位11位52位数符阶码尾数063(-0.0001010011)2
=-1.010011×2-4双精度:指数位为-4+1023=1019(1111111011),表示为:1
01111111011
01001100000000000000000000000000000000000000000000004.实型数据的定义
实型数据类型符变量表如:floatx,y;
doublem,n;
longdoublep,q;误差问题:由于机器存储的限制,使用实型数据会产生一些误差,运算次数越多,积累的误差也就越大,所以要注意实型数据的有效位,合理定义实型数据,以减少误差。
3.2.3字符型数据1.字符常量定义:字符常量是用单撇号括起来的一个字符。举例:‘a’,‘2’,‘$’,'A'等都是字符常量。2与’2’是不是同一个数据?2.字符型数据在内存中的存储形式0011001000000000000000102的存储:‘2’的存储:字符在内存中只占用一个字节,以ASCII码值存储。3.字符变量
格式:char变量表
charc1,c2;/*定义c1,c2为字符变量*/c1=‘A’;c2=‘B’;/*给字符变量赋值*/01000001c101000010c2‘A’‘B’字符在内存中以ASCII码值存储。字符型数是否可以和整型数通用?。问题导入如:‘A’+5的运算是否可以呢?[例3-2]阅读程序。intmain(){charch1;intch2;ch1='A';ch2='B';printf("%d,%d\n",ch1,ch2);printf("%c,%c\n",ch1,ch2);ch1='a'+1;ch2='b'+5;printf("%c,%c\n",ch1,ch2);printf("%d,%d\n",ch1,ch2);return0;}运行结果:65,66A,Bb,g98,1034.字符串常量1)定义:字符串常量是括在一对双撇号内的字符序列。如:“Clanguage”,“a”,“$35.56”。如:字符串"HELLO"6个字节2)字符串在内存中的存储形式字符串中的字符依次存储在内存中一块连续的区域内,并把空字符‘\0’(ASCII值为0)自动地附加到字符串的尾部作为字符串的结束标志。HELLO\0串结束符字符常量和字符串常量区别在哪?
问题导入能将字符串赋给一个字符变量吗?存储字符串所需要的字节数如何计算?5.转义字符转义字符:是特殊形式的字符常量。
C语言约定用“\”开头的字符序列作为标记,这类字符统称为“转义字符”。接在“\”后的字符不再表示字面意思,而是另有其意。字符串:WT\137\t\abc\x41\n的长度?5.转义字符转义字符含义\0\a\b\t\n\v\f\r
\″\′\\\ddd\xhh空字符,表示字符串结束响铃,发出系统警告声音退格,将当前光标位置移到前一列水平制表符,使屏幕光标跳到下一制表位。换行符,使屏幕光标移到屏幕下一行开头重直制表(跳到下一个Home位置)换页,将当前光标移到下一页的开头回车,将当前光标移到本行的开头双引号字符单引号字符反斜杠字符1~3位八进制数表示的字符1~2位十六进制数表示的字符【例3-3】阅读程序,理解转义字符#include<stdio.h>intmain(){printf("a\tbc\tABC\bc\n");printf("xyz\n");printf("xyz\r\101\t\\\x41\\");return0;}运行结果:abcABcxyzA\A\#include<stdio.h>intmain(){printf("c\tlanguags\be\rC\n");printf("is\tusef\165\x6c");return0;}课后实践:3.2.4宏定义C语言中的宏定义有两种形式:不带参数的宏定义与带参数的宏定义1.不带参数的宏定义#define宏名
宏体宏展开方法:宏体替换宏名;1.不带参数的宏定义【例3-4】已知圆的半径,求圆的面积。#include<stdio.h>#definePI3.1415926
/*PI为宏名,宏体3.1415926*/intmain(){
floatr=12.5,area,length;
area=PI*r*r;
length=2*PI*r;
printf("area=%6.2f,length=%6.2f\n",area,length);
return0;}3.2.4宏定义【例3-4】已知圆的半径,求圆的面积。#include<stdio.h>intmain(){
floatr=12.5,area,length;
area=3.1415926*r*r;
length=2*3.1415926*r;
printf("area=%6.2f,length=%6.2f\n",area,length);
return0;}宏展开后的程序3.2.4宏定义2.带参数的宏定义#define宏名(形参表)
宏体宏展开方法:实参替换形参,宏体替换宏名。【例3-5】下列程序段运行后,求i的值。#defineMA(x,y)x*y
/*MA(x,y)定义成带参数的宏,宏体为x*y*/inti=5;i=MA(i,i+1)-7;小结1、字符集、标识符、关键字2、数据类型:整型数据、实型数据、字符型。3、数据在计算机里的存储形式4、常量:整型常量、实型常量、字符常量。5、变量的定义:内存中的某个存储单元,在程序中
通过变量访问数据。围绕数据第3讲关于运算第3章
C语言编程基础)32(95-f3.5a+5sinx-常数函数及自变量分数未知数隐含运算符
*数据类型与运算规则决定了表达式的结果数学中默认的规则运算符问题导入3.3运算符基本运算符:表示某种操作的符号。算术运算符:+-*/%++--赋值运算符:
=+=-=*=…关系运算符:>
<
==
>=
<=
!=逻辑运算符:&&
||!条件运算符:
?:逗号运算符:
,位运算符:<<>>^|高级运算符指针运算符:
*地址运算符:
&求字节数运算符:
sizeof强制类型转换运算符:
(类型)
或类型(
)成员运算符.指向成员的运算符->下标运算符[]3.3运算符问题导入今天是星期二,157天后是星期几?
基本算术运算符基本算术运算符:+
-*/
模运算符:
%
%两侧均应为整型数据,如7%4=3。说明:两个整数相除的结果为整数,舍去小数部分,如5/3=1,-5/3=-1。如果参加+,-,*,/运算的两个数中有一个数为float型数据,则运算的结果是double型。模运算符又叫取余运算,其结果的符号与被除数相同。如-9%4=-13.3.1算术运算与算术表达式算术表达式用算术运算符和括号将运算对象连接起来的符合语法规则的式子;例如:a*b/c-1.5+′a′优先级和结合性。优先级,如:
a-b*c结合方向,左结合性,如:a-b+c运算符的优先级别和结合性见附录B。3.3.1算术运算与算术表达式
混合运算不同类型数据之间进行运算,要先转换成同一类型,然后进行运算。10+′a′+1.5-8765.1234*′b′转换的规则按图所示。例如:inti;floatf;double
d;longe;10+′a′+i*f-d/e3.3.1算术运算与算术表达式赋值符号的作用是将一个数据赋给一个变量。
如int
r=3;doubles=3.14159*r*r;结合方向是右结合性。如:inta,b,c;a=b=c=4.5;3.3.2赋值运算符与赋值表达式赋值运算符=赋值过程中的类型转换赋值过程中右边表达式要转化为左边变量的数据类型。int
n=2.6;//舍弃其小数部分。floatf=9;inta=‘A’;short
inti=289;charc=i;//发生截断unsigned
shorta;short
intb=-1;a=b;。?3.3.2赋值运算符与赋值表达式复合的赋值运算符语法格式:aoperator=b;等价于a=aoperatorb;例如a+=3等价于a=a+3x*=y+8等价于x=x*(y+8)x%=3等价于x=x%3有10种复合运算符:+=,
-=,
*=,
/=,
%=,<<=,
>>=,
&=,
^=,
|=3.3.2赋值运算符与赋值表达式赋值表达式由赋值运算符将一个变量和一个表达式连接起来的式子。一般形式:<变量><赋值运算符><表达式>左侧的变量称为左值(leftvalue)。右侧的表达式称为右值(rightvalue)。例如:a=b=c=5
a=(b=4)+(c=6)a+=a-=a*a//?(a=3*5)=4*3//?对与错3.3.2赋值运算符与赋值表达式3.3.3逗号运算符与逗号表达式逗号运算符的一般形式为:表达式1,表达式2,…,表达式n优先级:最低;结合方向为:左结合性;例如,分析下列逗号表达式的值a=3*5,
a*4(a=3*5,a*4),
a+5x=(a=3,6*3)x=a=3,6*a自动类型转化,在表达式中不同类型的数据会自动地转换类型,以进行运算。强制类型转换,一般形式为:(类型名)(表达式)强制类型转换时,得到一个所需类型的中间变量,但原来变量的类型并未发生变化。例如:float
x;inty=(int)x;x原来的类型和值都不变。intx,y;doublea;a=(double)(x+y);
3.3.4强制类型转换运算符例:强制类型转换。#include<stdio.h>int
main(){
floatx;inti;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);
return0;}3.3.5自增和自减运算符前置递增,前置递减++i,例如,
i=3,
j=++i,
j=?,i=?--i,例如,
i=3,
j=--i,
j=?,i=?后置递增,后置递减i++例如,
i=3
,
j=i++,
j=?,i=?i--例如,
i=3
,
j=i--,
j=?,i=?请注意:自增(减)运算符只能用于变量,而不能用于常量或表达式。自增(减)运算符的结合方向是右结合性。3.3.6sizeof运算符sizeof运算符有以下两种格式:(1)用于求得表达式的值所占内存的字节数其格式:sizeof表达式(2)用于求某种数据类型所占内存的字节数其格式:sizeof(类型名)【例3-10】观察不同数据类型所占的字节数。#include<stdio.h>intmain(){printf("%d,%d,%d",sizeof(shortint),sizeof(int),sizeof(longint));printf("%d,%d,%d",sizeof(char),sizeof(float),sizeof(double));}3.3.7关系运算符和关系表达式1.关系运算符基本的关系运算符有以下6个:<(小于)<=(小于等于)>(大于)>=(大于等于)==(等于)!=(不等于)优先级:前四个高于后两个;结合方向:从左到右3.3.7关系运算符和关系表达式2.关系表达式关系表达式的值:逻辑真和逻辑假规定用1表示逻辑“真”,用0表示逻辑“假”。例:设a=5,b=3,c=2,d=2,则下列表达式的值是:a>b,a>b==c,a>=b+ca>b>c(a=b)!=(c=d),(c=65)=='A'101113.3.8逻辑运算符和逻辑表达式1.逻辑运算符C语言提供了三种逻辑运算符。!(逻辑非)&&(逻辑与)||(逻辑或)优先级由高到低依次为:!、&&、||。结合方向:从左到右。3.3.8逻辑运算符和逻辑表达式2.逻辑表达式a&&b a||b !a 真值表ABF000010100111ABF000011101111AF01103.3.8逻辑运算符和逻辑表达式3.逻辑值的判断编译系统在判断一个表达式是否为“真”时,以该表达式的值是否“非0”作依据。即如果表达式的值是非0就被认为是“真”,否则就被认为是“假”。例如:'b'&&'d'3.3.8逻辑运算符和逻辑表达式4.逻辑表达式求值的短路原则例如:a&&b
当a为假时,系统已经可以确定该表达式的值为0,因而不会判断b。a||b
当a为真时,系统已经可以确定该表达式的值为1,因而不会判断b。例如:设inta=3;求表达式a<1&&--a>1的运算结果和a的值。【例3-11】写出能被3整除又能被5整除的数的逻辑表达式。若用m表示该数,则逻辑表达式表示为:m%3==0&&m%5==0或m%15==0。【例3-12】判断某年份是否闰年。闰年的条件是:年份能被4整除,但不能被100整除;或能被4整除又能被400整除,则该年为闰年,否则为非闰年。若设year表示年份,则闰年的逻辑表达式为:(year%4==0&&year%100!=0)||(year%400==0)【例3-13】名次预测。有人在赛前预测A,B,C,D,E,F六名选手在比赛中会按顺序分获第一名到第六名,但是这一预测只猜对了三个人的名次。请写出这一预测情况的逻辑表达式。预测情况的逻辑表达式可以写成:((a==1)+(b==2)+(c==3)+(d==4)+(e==5)+(f==6))==3(a==1)分析:(b==2)(c==3)(d==4)(e==5)(f==6)几种运算符的优先级3.4C语言语句C语句可分为以下五类:表达式语句函数调用语句复合语句空语句控制语句a=2*b+3;printf("Thisisabook!");
{t=m;m=n;n=t;}
;
3.4C语言语句控制语句if()...else... (条件语句)switch (多分支选择语句)for()... (循环语句)while()... (循环语句)do...while()... (循环语句)continue (结束本次循环语句)break (结束循环或switch)goto (跳转语句)return
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高中物理4电磁波的发现及应用教案
- 我们走进十月的阳光教学设计小学音乐三年级下册人音版(主编:曹理)
- 九年级历史下册 第5课 德、意、日的法西斯化教案 岳麓版
- 2026下半年四川省广元朝天区考试招聘事业单位人员37人易考易错模拟试题(共500题)试卷后附参考答案
- 2026下半年四川南充市事业单位考试招聘595人易考易错模拟试题(共500题)试卷后附参考答案
- 2026下半年上海事业单位招考易考易错模拟试题(共500题)试卷后附参考答案
- 高中历史 第七单元 1861年俄国农奴制改革 第2课 农奴制改革的主要内容(3)教学教学设计 新人教版选修1
- 人教版道德与法治七年级下册:我们的情感世界教学设计
- 人美版高中必修-美术鉴赏-10《人类生活的真实再现―外国古代绘画撷英》教案
- 人教版四年级下册第六单元-小数的加法和减法【教习设计+单元每课教案】
- 《电力储能运行人员培训规范》
- 维生素D缺乏症课件
- 病毒对食品安全的影响
- 人力资源安全培训
- 《计算机组装与维护》教案课程
- 《立在地球边上放号》《峨日朵雪峰之侧》课件++2024-2025学年统编版高中语文必修上册
- YYT 0308-2015 医用透明质酸钠凝胶
- 团餐订餐合同范本
- 稳定型心绞痛的护理查房
- 强脉冲光脱毛的疗效观察
- 云南省维西县碧罗铜金多金属矿床地质特征和找矿前景分析
评论
0/150
提交评论