《C语言程序设计》全套教学课件_第1页
《C语言程序设计》全套教学课件_第2页
《C语言程序设计》全套教学课件_第3页
《C语言程序设计》全套教学课件_第4页
《C语言程序设计》全套教学课件_第5页
已阅读5页,还剩375页未读 继续免费阅读

下载本文档

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

文档简介

第一章C语言概述第1章-C语言概述第2章-C语言程序初体验第3章-选择结构第4章-循环结构第5章-数组第6章-函数第7章-结构体第8章-指针第9章-进阶内容第10章-文件全套可编辑PPT课件理解程序设计语言的来由掌握程序设计语言的概念和分类C语言程序的结构和特点、C语言中的注释了解使用C语言编程解决实际问题的一般步骤本章目标全套可编辑PPT课件1.1什么是程序设计语言?计算机的工作原理计算机内部的命令和数据均是用0、1串表示!计算机只能识别0、1串,即它的语言是0、1串!并且,它只能做非常简单的操作,比如二进制加法.全套可编辑PPT课件1.1什么是程序设计语言?人与计算机的交流鸿沟帮我计算3加2.1000110000+基本操作人语机语对牛弹琴得用一种人、机双方都能听到懂的语言进行沟通,这种语言就是程序设计语言全套可编辑PPT课件1.1什么是程序设计语言?机器语言的诞生让计算机完成两个数相加的任务,程序可能是:011000110000011001100101110011000000110000011011难学、难记、难写、难改、难维护!!moval,num1addal,num2movnum3,al全套可编辑PPT课件1.1什么是程序设计语言?高级程序设计语言的产生编译程序c=a+b这种接近自然语言和数学语言的语言,叫做高级程序设计语言。核心概念:(高级)程序设计语言是人们让计算机做事情的语言!先后出现几千种高级语言,广泛使用的100多种,其中最常用的有:C、C++、Java、PHP等等+1.2为什么是C语言?1.2为什么是C语言?C语言C语言C语言是古老(1973)而长青的编程语言,常年占据各类排行榜前2名,有前(钱)途;在系统软件、嵌入式开发领域占据无可代替的位置;它的语法是很多其他编程语言的基础,容易过渡到任何一种语言(特别是C++、Java、C#等);是数据结构、操作系统、编译原理、JAVA等后续课程前进的基石。1.2为什么是C语言?选C语言作为第一门高级程序设计语言的原因:操作系统嵌入式系统驱动程序图形引擎、游戏引擎图像处理声音效果……1.2为什么是C语言?C语言一般用在:1.3揭开C语言面纱【例1‑1】制作一个电子条幅,在屏幕上输出社会主义核心价值观内容。要在屏幕上显示的内容:富强、民主、文明、和谐、自由、平等、公正、法治、爱国、敬业、诚信、友善。#include<stdio.h>//编译预处理命令,包含头文件intmain(){//主函数开始printf(“富强、民主、文明、和谐、自由、平等、公正、法治、爱国、敬业、诚信、友善\n”);//输出内容return0;//函数返回值}//主函数结束1.3揭开C语言面纱【例1‑2】用C语言编程实现牛奶价格计算问题。输入牛奶的单价和数量,计算牛奶的价格,考虑到除了牛奶之外,奶奶还可能销售其他食品,因为不同食品价格计算方法相同,为了更好地重用价格计算模块,价格计算部分用函数实现。#include<stdio.h>//编译预处理命令,包含头文件intmultiply(intm,intn);//自定义乘法函数multiply()的声明intmain(){//主函数intunitPrice,count,totalPrice;//变量定义,分别表示单价、数量和总价printf(“请输入牛奶单价:”);//输出牛奶价格输入提示信息scanf(“%d”,&unitPrice);//输入语句,输入牛奶单价printf(“请输入牛奶数量:”);//输出牛奶数量输入提示信息scanf(“%d”,&count);//输入语句,输入牛奶数量totalPrice=multiply(unitPrice,count);//调用函数multiply计算牛奶总价printf(“牛奶总价为:%d”,totalPrice);//输出结果return0;}/*以下为自定义multiply()函数,实现计算两个数的乘积。*/intmultiply(intm,intn){inttotal;total=m*n;//两个整数进行乘积运算returntotal;//返回两个数的和值}必须有且只能有一个主函数main(),可在任意位置,整个程序的入口;C语言程序由一个或多个函数组成,函数是C程序的基本单位;计算机所做的操作都是由C语言程序语句完成,用“;”作为语句终止符。C语言本身没有输入、输出语句,输入操作和输出操作分别由库函数scanf和printf完成。注释性、说明信息通常以//或者/**/形式出现,其中//形式的注释称为单行注释,/**/形式的注释称为多行注释或者块注释。1.3揭开C语言面纱C语言程序初印象1.4C语言运行步骤简要介绍实际操作演示编写程序编译运行程序代码二进制代码程序设计语言是人们让计算机做事情的语言。学好C语言很有必要。讲解了几个简单C程序,得到第一印象:由函数构成,函数由首部和函数体组成,main函数为入口,…。第2章C语言程序初体验C语言的标识符、变量、常量;C语言的数据类型和数据类型转换;C语言的表达式、赋值运算、算术运算、自增自减运算;C语言的常用函数;C语言顺序结构程序的编写方法和执行过程。本章目标2.1.1

计算梯形面积2.1来个简单题——计算梯形面积2.1.2 标识符和关键字标识符命名规范:标识符的构成:字母(A~Z,a~z)、数字(0~9)和下划线(_),第一个字符必须是字母或下划线。区分大小写。标识符的长度:受不同编译器和操作系统的限制。标识符命名建议:见名知意。不能使用关键字作为标识符名字。关键字关键字被赋予了特定含义的标识符,称为关键字。例如,float,int。共32个关键字不合法标识符2.1.3基本数据类型

4种基本数据类型:整型:int,如3,8,5,-210,占用4个字节,表示数据范围为-32768~32768。单精度浮点型:float,如3.6,8.8,5.2,-1.7,占用4个字节,有效数位6~7位,数值范围为-3.4e-38~3.4e+38。双精度浮点型:double,占用8个字节,有效数位15~16位,数值范围为-1.7e-308~1.7e+308。字符型:char,如’c’、‘A’,占用1个字节。ASCII码字符集请见附录A。数据类型限定符4个数据类型限定符short,long,signed,unsigned。4个限定符的作用:(1)short、long:限定数据的长度。被short修饰后,该类型占用的空间要比原来的基本类型更小;long的作用与short正好相反,它会占用更大的内存空间。(2)signed、unsigned:限定数据的符号。用unsigned限定的数称为无符号数;signed为有符号数,包括了负整数。默认情况下,int是有符号数。sizeof运算符作用:获取数据长度格式:sizeof(type)返回值:返回type类型所占的存储字节个数。2.1.4C语言语句C语言语句分为五类:(1)表达式语句格式:

表达式;功能:执行表达式所代表的动作,完成相应的操作。例如:y=a+3;/*赋值语句:计算a+3的值并将计算结果赋给y*/a+3;/*a+3加法语句,计算结果没有赋值给变量,并无实际意义*/++j;/*前缀自增语句:j的值增1*/(2)函数调用语句格式:

函数名(实际参数表);功能:将程序流程转入到函数体中执行,并进行实际参数和形式参数的传值(地址),执行函数结束后,将特定的函数值返回到主调函数。例如:printf("你好,中国!");/*调用基本输出库函数printf(),在屏幕输出:你好,中国!*/(3)控制语句分为三类:分支语句:if语句、switch语句,第三章详细介绍。循环语句:dowhile语句、while语句和for语句。第四章详细介绍。流程控制语句:break语句、goto语句、continue语句和return语句。具体用法将分在本书第三章、第四章、第六章详细介绍。(4)复合语句将彼此相关的操作放在一起,使用花括号“{}”括起来。例如:{inta,b=2,c;a=b+1;c=a+3;printf(“%d”,c);}变量a,b,c在{}中定义,并使用printf()函数输出。(5)空语句只有分号“;”构成的语句称为空语句。空语句是什么也不执行的语句。例如:for(i=1;i<100;i++){;}或作为无条件转移的标号,例如:gotolabel1;…label1:

;2.1.5变量和赋值基本概念在程序运行过程中其值可以改变的量称为变量。变量声明(1)单变量声明数据类型

变量名;例如,floattra_area;//声明变量tra_area,用其表示梯形面积(2)多变量声明数据类型变量名1,变量名2,......,变量名n;例如,inttop,bottom,height;/*一条语句声明三个变量*/变量赋值(1)简单赋值变量名=表达式;例如,top=3;//给梯形上底长度赋值bottom=8;//给梯形下底长度赋值height=5;//给梯形高赋值(2)连续赋值变量名1=变量名2=......=变量名n=表达式;例如,top=bottom=height=5;变量的初始化数据类型变量名=表达式;例如,变量top、bottom和height可以用以下语句进行变量初始化:inttop=3,bottom=5,height=8;2.1.6算术运算算术运算符主要包括:加(+)、减(-)、乘(*)、除(/)、求模(%)。算术运算符的优先级(1)当表达式中包含多个运算符时,需要区分运算符之间的优先级。(2)算术运算符号的优先级与一般的算术运算相同,相对优先级如下:最高优先级:乘(*)、除(/)、求模(%)最低优先级:加(+)、减(-)2.1.7格式化输出函数格式化输出函数:printf()默认情况下,printf()将程序运行结果输出到屏幕上。在程序中使用printf()函数,必须要包含头文件stdio.h。printf()函数原型为:intprintf(constchar*format,argument1,argument2,...);printf()函数常见用法:(1)输出字符串(2)输出单个变量printf("变量格式控制符",变量名);(3)输出多个变量printf("变量格式控制符1变量格式控制符2,...",变量1,变量2,...);(4)变量与提示信息混合输出【例2‑6】某学生社团定期到对口帮扶的农民工子弟小学进行学习辅导,社团负责人在辅导小学生的过程中发现学生在进行算术运算的时候经常出错,因此决定组织社团成员编写一个验算程序帮助学生进行算术运算结果验算,为了测试该方法是否可行,先假定两个数分别是20和6,编写程序计算这两个数的和、差、积、商、取余的结果。程序运行结果:numA

=

20,

numB

=

620

+6

=

2620

-

6

=

1420

*

6

=

12020

/6

=3.33333320

%

6

=22.2.1程序解析【例2‑7】学校校园里要铺设多个圆环形草坪,要求用C语言编程计算每个草坪的面积,用键盘输入圆环的内外半径,要求:结果保留两位小数。2.2加点小难度——计算圆环的面积2.2.2常量的使用(1)常量的定义及分类定义:常量即值不可以被程序改变的量。例如:例2-7中用到的圆周率3.1415926。分类:数值常量、字符常量和字符串常量。常量限定符:const。数值常量以一个数值的形式出现,既可以是整数,也可以小数。例如,语句tra_area=(top+bottom)*height/2中的数值2,语句annular_area=3.1415926*R*R-3.1415926*r*r;中的3.1415926。整数常量整数可以使用十进制、八进制、十六进制来表示。90/*用十进制表示数值90*/0x5a/*用十六进制表示十进制数90*/0132/*用八进制表示十进制数90*/注意:前缀中的“0”是阿拉伯数字0,不是字母o。实数常量实数有两种基本表示方法:(1)采用十进制数形式书写小数例如,0.24.24//小数0.24,省略了整数部分5.245.//小数5.0,省略了小数部分的(2)科学表示法例如,0.24E3//表示0.24×103,即240.00.24E-2//表示0.24×10-2,即0.0024-5.24E4//表示-5.24×104,即-52400.05e2//表示-5.0×102,即500.0(3)字符常量单引号(’)括起来的单个字符。转义字符是以反斜线“\”开头,“\”的含义是将其后的字符转换为特定的含义,故称”转义”字符。常用的转义字符见下表:(4)字符串常量用双引号(“”)括起来的0个或多个字符。例如,“Thankyouverymuch”是由多个字符构成的字符串常量。“”包含0个字符,表示一个空串。“a”是只包含一个字符的字符串。(5)常量的符号表示方法使用预处理指令#define进行宏定义。例如,为圆周率定义一个常量符号PI,宏定义方法如下:#definePI3.1415926当对程序进行编译时,预处理器会将宏替换为其所代表的数值。例如计算圆的面积,以下语句:annular_area=PI*R*R-PI*r*r;将变为:annular_area=3.1415926*R*R-3.1415926*r*r;【例2‑8】将例2-7求圆环面积中的常量3.1415926用符号常量表示:【例2‑9】某粮仓建设了一批圆锥形的粮仓,已知圆锥形粮仓高和圆口半径,为了计算这些粮仓能放多少粮食,需要编程计算圆锥形粮仓的体积。【例2‑10】在屏幕上输出:热烈欢迎新同学!2.2.3数据类型转换自动数据类型转换(1)赋值运算中的自动类型转换

当赋值号“=”两边的数据类型不同时,则在赋值操作前编译器会把赋值号右边表达式的类型转换为左边变量的类型。例如,(2)混合运算中的类型自动转换编译器将参与运算的所有数据先转换为同一种类型,然后再进行计算。例如:数据类型的自动转换规则:强制数据类型转换格式:(数据类型名)表达式例如,(int)a+b;//先将a强制转化为int型,然后再和b相加(int)(a+b);//先执行加法,然后将加法结果转换为int型(float)100;//将数值100(默认为int类型)转换为float类型(float)a;//将变量a转换为float类型【例2‑11】某社团组织给希望小学捐款活动,编程计算平均捐款数。【例2‑12】某社团组织给希望小学捐款活动,编程计算平均捐款数,并用两种不同精度输出捐款总数。2.2.4格式化输入函数格式化输入函数scanf():默认情况下,scanf()接受从键盘输入的数据。必须要包含头文件stdio.h。scanf()函数原型:intscanf(char*format[,argument,...]);函数scanf()用法(1)输入单个变量scanf("格式控制符",&变量);

说明:&是地址运算符,表示变量的内存地址,不能省略。【例2‑13】在准备新生入学迎新时,需要随时更新并输出已经报到的学生人数,请编写程序从键盘输入已经报到的人数,并在屏幕上输出报到人数,给出完整代码。例2-13代码执行流程及内存和屏幕变化模拟图(2)输入多个变量scanf(“变量格式控制符1

变量格式控制符2...",&变量1,&变量2,...);说明:格式控制符与变量的位置和个数要一一对应。【例2‑14】某社团组织给希望小学捐款活动,编程计算平均捐款数,要求:从键盘输入总捐款数和捐款人数,并用浮点型存储并输出捐款总数。2.3.1自增和自减运算符(1)自增、自减运算分类自增运算:++,变量加1。自增运算:--,变量减1。(2)使用形式前缀形式:运算符在变量前面。例如:对变量a的前缀自增、自减运算分别是++a和--a。后缀形式:运算符在变量后面。例如:对变量a的后缀自增、自减运算分别是a++和a--。2.3来点与数学不一样的前缀、后缀形式区别如果独立使用自增、自减运算时,前缀和后缀的形式效果等价。例如,语句++a和a++的效果都等价于语句a=a+1。如果自增、自减运算不是独立使用,而是作为表达式的一部分时,区别在于变量值的自增1或自减1运算发生的时间不同。【例2‑15】独立使用自增、自减运算的实例。例:表达式中的前缀自增、自减运算例:表达式中的后缀自增、自减运算先参与表达式的运算,而后再自增、自减运算:2.3.2复合赋值运算符使用复合赋值运算符的表达式称之为复合赋值表达式,其基本格式如下:

变量运算符=表达式它等价于:

变量=变量运算符表达式【例2‑16】加减乘除复合赋值运算符。2.3.3逗号运算符与逗号表达式逗号运算符:用逗号把多个表达式联接起来,构成一个新的表达式,这里的逗号被称为逗号运算符。逗号表达式:由逗号运算符将两个以上的表达式连接而成的表达式。格式:

表达式1,表达式2,…,表达式n功能:

依次计算表达式1的值,表达式2的值,…,表达式n的值,最后将表达式n的值作为整个表达式的值。例子:2.4.1库函数的类别及函数调用常用库函数的类别(1)标准输入/输出函数:包含在头文件<stdio.h>中。(2)字符类型判断和转换:定义了判定字符类型和转换的函数,包含在头文件<ctype.h>中。(3)字符串处理函数:定义了对字符数组进行操作的函数,包含在头文件<string.h>中。(4)时间与日期函数:定义了操作日期和时间的函数,包含在头文件<time.h>。(5)数学函数:定义常用数学函数,如三角函数、反三角函数、指数、对数函数等,包含在头文件<math.h>中。(6)标准库函数:定义通用工具函数,如求绝对值、生成随机数、内存空间的分配和释放等,包含在头文件<stdlib>中。2.4常用函数助编程库函数的使用include语句的格式:#include头文件名功能:将指定头文件嵌入源文件中,使得编译程序可以到头文件中找头文件中包含的函数定义。2.4.2数学函数的使用常用库函数(1)三角函数格式:sin(参数),cos(参数),tan(参数)功能:返回参数所指定的角的三角函数值。说明:参数是双精度类型、用弧度表示的角。如果给定的是角度值,需要先将其转换为弧度。例如,计算输出70°角的正弦函数值。用格式输出函数调用语句:printf("70°角的正弦函数值为:%lE",sin(70*3.14159265/180));也可以用下面的一组语句:intangle=70;doubleradian;radian=angle*3.1415926/180;printf("%d°角的正弦函数值为:%lE",angle,sin(radian));

运行结果为:70°角的正弦函数值为:9.396926E-01(2)指数函数格式:exp(参数)功能:返回以自然常数e为底,以参数值为幂的指数函数值。说明:参数和返回值均为double类型。例:下面的代码计算并输出e3。doublex=3;doubleexpX;expX=exp(x);printf("e^%lf=%lf",x,expX);

运行结果为:e^3.000000=20.085537

(5)浮点数的绝对值函数格式:fabs(参数)功能:返回参数的绝对值。说明:参数和返回值均为浮点型,不可为整数。例:下面的代码计算并输出-5.8的绝对值。floatx=-5.8;floatfabsX;fabsX=fabs(x);printf("Absolutevalueof%f=%f",x,fabsX);输出结果为:Absolutevalueof-5.800000=5.800000(6)幂函数格式:pow(参数1,参数2)功能:返回参数1的参数2次幂。说明:两个参数以及返回值均为浮点型。例:下面的代码计算并输出xy。2.4.3标准函数的使用(1)整型数的绝对值函数格式:函数名(参数)功能:返回参数的绝对值。说明:1)函数名为abs时,计算int类型整数的绝对值;函数名为labs时,计算longint类型整数的绝对值。2)参数和返回值均为整型数,不可为浮点数。3)两类函数需要包含的头文件不同:整型数绝对值函数在通用工具包中,而浮点型数绝对值函数在数学函数包中,。例:下面的代码计算并输出-180的绝对值。(2)伪随机数函数格式:rand()功能:返回一个从0到最大随机数的任意一个整数。例:下面的代码产生并输出0-100(不包括100)之间的整数。运行结果:randomdatais:83(3)伪随机数的种子函数格式:srand(seed)功能:参数seed是rand()的种子,用来初始化rand()的起始值。例:下面的代码产生并输出0-100(不包括100)之间的整数,要求每次执行产生不同的随机数。运行结果:randomdatais:742.5.1案例问题描述

2.5顺序结构案例项目—钢结构构件受力计算2.5.2案例分析(1)程序中的变量和常量定义分析(2)程序中的常用函数分析(3)程序中的公式计算顺序分析(4)程序中的输入输出语句设计(5)程序中表达式语句分析2.5.3案例代码编写运行结果:请输入构件弹性模量E和构件轴力N(用逗号分隔):2,3请输入构件两端的弯矩m1和m2(用逗号分隔):4请输入构件剪变模量G和长度L(用逗号分隔):5,6钢结构构件受力为:w=0.54C的基本数据类型:int,float,double,charC语言的语句结构和类别:表达式语句、控制语句、函数调用语句、复合语句、空语句C语言中常见的算术运算:+、-、*、/,%数据类型转换的类别和方法:自动转换、强制转换自增自减运算、赋值运算、逗号运算:++,--,=,,格式化输出函数、格式化输入函数:printf(),scanf()数学函数、标准函数等常用函数的使用:#include,调用第3章选择结构知识目标:掌握if、if-else、if-elseif-else、switch等分支结构,掌握关系表达式和逻辑表达式,以及条件表达式。能力目标:具备使用if和switch分支结构来解决现实生活中常见的选择问题。素养目标:培养学生解决复杂问题的工程思维能力,通过C语言编程实例培养学生追求卓越的精神和用所学知识服务社会的意识。本章目标例1:假设学校这样规定:学生百分制的平均分超过90分,可认定为成绩优秀。用C语言编写一个小程序,根据平均分评判某个学生成绩是否优秀。3.1一起来评优#include<stdio.h>intmain(){intscore;printf(“请输入平均分:”);scanf("%d",&score);if(score>90)printf("您的成绩为优秀\n");return0;}

单分支if语句的一般格式为:if(表达式){语句组}单分支选择结构(1)单分支if语句的格式说明:(1)表达式可以是任意表达式,用来判断条件是否满足,表达式的值为0,表示条件不满足,表达式的值非0,表示条件满足;(2)语句组可以是任意合法的C语言语句,如果是单条语句,可以省略大括号。(2)单分支if语句的执行流程单分支选择结构关系运算是对两个操作数进行比较的运算,C语言提供了6种关系运算符:<:表示“小于”,等价于数学中的<;<=:表示“小于等于”,等价于数学中的≤;>:表示大于,等价于数学中的>;>=:表示“大于等于”,等价于数学中的≥;==:表示“等于”,等价于数学中的=;!=:表示“不等于”,等价于数学中的≠。1)关系运算符(3)关系运算关系运算符及其优先次序<

(小于)关系运算符1<= (小于等于)2> (大于)3>= (大于等于)4== (等于)5!= (不等于)6前4种关系运算符的优先级别相同,后2种也相同。前4种高于后2种。关系运算符的优先级低于算术运算符。关系运算符的优先级高于赋值运算符。算术运算符赋值运算符高优先级低c>a+b等效于c>(a+b)(关系运算符的优先级低于算术运算符)a>b==c等效于(a>b)==c(大于运算符>的优先级高于相等运算符==)a==b<c等效于a==(b<c)(小于运算符<的优先级高于相等运算符==)a=b>c等效于a=(b>c)(关系运算符的优先级高于赋值运算符)由关系运算符构成的表达式称为关系表达式。例如,下列的表达式都是合法的关系表达式:a+b<c*d‘a’+1<=bi++==j需要注意的是,关系表达式的值只能为“真”或“假”,其中“真”用“1”表示,而“假”用“0”表示。例如:2>1的值为“真”,即该表达式的值为1。b=2;c=1;求a=b<=c的值,由于b<=c的值为“假”,即为a=0。字符以它对应ASCII码值参与运算。例如:’a’>’b’(ASCII码97>98)表达式值为“假”。2)关系表达式例2:若学生平均分超过90分则输出成绩为优秀;否则,提醒学生要努力达到优秀。3.2一起来评优#include<stdio.h>intmain(){intscore;printf(“请输入平均分:”);scanf("%d",&score);if(score>=90) printf("成绩为优秀\n");else printf("成绩没有达到优秀,仍需继续努力!\n");return0;}

双分支结构if-else语句3.2一起来评优(1)双分支结构if-else语句的格式if(条件表达式){

语句块1}else{

语句块2}

双分支结构if-else语句3.2一起来评优(2)双分支结构if-else语句的执行流程

【例3‑3】百分制转五分制,学生考试成绩达到90分及以上输出“你的成绩为A级!”,成绩≥80分并且<90分输出“你的成绩为B级!”,成绩≥70分并且<80分输出“你的成绩为C级!”,成绩≥60分并且<70分输出“你的成绩为D级!”,对于<60分的,输出“你的成绩为E级!”。你能编写这样一个百分制转五分制的程序吗?3.3成绩等级评一评

#include<stdio.h>intmain(){ intscore;printf("请输入你的成绩:"); scanf("%d",&score); if(score>=90)

printf("你的成绩为A级!\n"); elseif(score>=80)

printf("你的成绩为B级!\n"); elseif(score>=70)

printf("你的成绩为C级!\n");

elseif(score>=60)

printf("你的成绩为D级!\n");else

printf("你的成绩为E级!\n");return0;}多分支结构if-elseif-else语句(1)多分支结构if-elseif-else语句的格式if(表达式1){语句块1}elseif(表达式2){语句块2}elseif(表达式3){语句块3}……

elseif(表达式n-1){语句块n-1}else{语句块n}多分支结构if-else语句(2)多分支结构if-elseif-else语句的执行流程

多分支结构if-elseif-else语句(1)多分支结构if-elseif-else语句的格式if(表达式1){语句块1}elseif(表达式2){语句块2}elseif(表达式3){语句块3}……

elseif(表达式n-1){语句块n-1}else{语句块n}(1)嵌套的if语句格式if语句的嵌套

(2)嵌套的if语句分类if语句的嵌套内层if语句*/

if(表达式)语句1[else语句2]“表达式”可以是关系表达式、逻辑表达式,甚至是数值表达式方括号内的部分(即else子句)为可选的,既可以有,也可以没有语句1和语句2可以是一个简单的语句,也可以是一个复合语句,还可以是另一个if语句if(表达式)语句1形式1 没有else子句部分if(表达式)

语句1else

语句2形式2 有else子句部分

形式3 在else部分又嵌套了多层的if语句选择结构的嵌套if()

if()语句1else语句2elseif()语句3else语句4内嵌if内嵌if注意if与else的配对关系。else总是与它上面的最近的未配对的if配对。如果if与else的数目不一样,为实现程序设计者的思想,可以加花括号来确定配对关系。if() if() 语句1else if() 语句2else 语句3编程序者把else写在与第1个if(外层if)同一列上,意图是使else与第1个if对应,但实际上else是与第2个if配对,因为它们相距最近。if(){ if() 语句1 }else

语句2内嵌if例3.4使用嵌套if语句求解一元二次方程ax2+bx+c=0的根。if语句的嵌套#include<stdio.h>#include<math.h>intmain(){/*delta判别式,RealPart实部,

ImagPart虚部*/floata,b,c,delta,x1,x2,m,n,

RealPart,ImagPart;printf("请输入一元二次方程系数:a,b,c\n");scanf("%f,%f,%f",&a,&b,&c);delta=b*b-4*a*c;m=-b/(2*a);if(delta>=0)/*外层if语句*/if(delta>0){/*两个不等的实根,内层if语句*/

n=sqrt(delta)/(2*a); x1=m+n;x2=m-n;printf("x1=%6.3fx2=%6.3f\n",x1,x2);}else/*两个相等的实根*/printf("x1=x2=%6.3f\n",m);else{/*两个不相等的虚根*/RealPart=m;ImagPart=sqrt(-delta)/(2*a);printf("x1=%6.3f+%6.3fi\n",RealPart,

ImagPart);printf("x2=%6.3f-%6.3fi\n",

RealPart,ImagPart);}return0;}例3‑5判断某一年是否为闰年。#include<stdio.h>intmain(){intyear;scanf("%d",&year);if((year%4==0&&year%100!=0)||year%400==0)printf("%d年是闰年\n",year);elseprintf("%d年不是闰年\n",year);return0;}3.4今年究竟多少天?逻辑运算符及其优先次序运算符含义举例说明!逻辑非(NOT)!a如果a为假,则!a为真;如果a为真,则!a为假&&逻辑与(AND)a&&b如果a和b都为真,则结果为真,否则为假||逻辑或(OR)a||b如果a和b有一个以上为真,则结果为真,二者都为假时,结果为假逻辑运算符及其优先次序“&&”和“‖”是双目运算符,要求有两个运算对象(操作数);“!”是单目运算符,只要有一个运算对象优先次序:!(非)→&&(与)→‖(或),即“!”为三者中最高的;逻辑运算符中的“&&”和“‖”低于关系运算符,“!”高于算术运算符逻辑运算结果不是0就是1,不可能是其他数值。而在逻辑表达式中作为参加逻辑运算的运算对象可以是0(“假”)或任何非0的数值(按“真”对待)逻辑运算符及其优先次序ab!a!ba&&ba||b真(非0)真(非0)假(0)假(0)真(1)真(1)真(非0)假(0)假(0)真(1)假(0)真(1)假(0)真(非0)真(1)假(0)假(0)真(1)假(0)假(0)真(1)真(1)假(0)假(0)【例3‑6】分析逻辑运算的结果#include<stdio.h>intmain(){ inta=0,b=10,c=-6; intresult_1=a&&b,result_2=c||0; printf("%d,%d\n",result_1,!c); printf("%d,%d\n",9&&0,result_2); printf("%d,%d\n",b||100,0&&0); return0;}【例3‑7】分析逻辑运算的结果#include<stdio.h>intmain(){ charc='a'; inti=3,j=4,k=5; floatx=2e+5,y=0.3; printf("%d,%d\n",!x*!y,!!!x); printf("%d,%d\n",x||i&&j-3,i<j&&x<y); printf("%d,%d\n",i==5&&c&&(j=8),x+y||i+j+k);

return0;}【例3‑8】键盘输入任意一个字符,判断该字符的类型:数字字符、大写英文字符、小写英文字符、其它字符。使用if–elseif-else语句实现。#include<stdio.h>intmain(){charc;printf("Inputacharacter:");c=getchar();if(c>='0'&&c<='9') printf("Thisisadigit\n");elseif(c>='A'&&c<='Z')

printf("Thisisauppercaseletter\n");elseif(c>='a'&&c<='z') printf("Thisisalowercaseletter\n");else printf("Thisisanothercharacter\n");return0;}【例3‑9】从键盘输入四则运算表达式,输出对应的结果。按如下样式输入(注意操作数与运算符之间没有空格),其中运算符为:+、-、*、/。#include"stdio.h"intmain(){floatx,y,z;charc;printf("请输入要计算的式子:");scanf("%f%c%f",&x,&c,&y);switch(c){case'+':z=x+y;printf("%f%c%f=%f",x,c,y,z);break;case'-':z=x-y;printf("%f%c%f=%f",x,c,y,z);break;case'*':z=x*y;printf("%f%c%f=%f",x,c,y,z);break;case'/':z=x/y;printf("%f%c%f=%f",x,c,y,z);break;

3.5辑编个简易计算器default:printf("运算符错误!\n");}return0;}(1)switch语句的格式switch(表达式){case常量表达式1:语句1case常量表达式2:语句2;......case常量表达式m:语句m;case常量表达式m+1:语句m+1;......case常量表达式n;语句n;

default:语句n+1;

}3.5switch多分支选择结构(2)switch语句的执行过程1)首先计算switch后的“表达式”的值。2)然后,程序从第一个case开始,顺序地将switch后“表达式”的值与各个case后面的“常量表达式”比较,若相等,程序则从该case进入,执行后面的所有语句,若m与“常量表达式m”相同,则流程转入“case常量表达式m”支路,执行冒号后面的所有语句,也就是从“语句m”一直执行到“语句n+1”,而不管后面的case是否匹配成功。也就是说,如果switch后“表达式”的值等于m,程序从“语句m”一直执行到“语句n+1”。3)如果直到最后一个case也没有找到与switch后“表达式”相等的值,那么就执行default后的“语句n+1”。switch语句的执行过程用switch语句实现多分支选择结构

(1)括号内的“表达式”,其值的类型应为整数类型(包括字符型)。(2)花括号内是一个复合语句,内包含多个以关键字case开头的语句行和最多一个以default开头的行。case后面跟一个常量(或常量表达式),它们和default都是起标号作用,用来标志一个位置。执行switch语句时,先计算switch后面的“表达式”的值,然后将它与各case标号比较,如果与某一个case标号中的常量相同,流程就转到此case标号后面的语句。如果没有与switch表达式相匹配的case常量,流程转去执行default标号后面的语句。(3)可以没有default标号,此时如果没有与switch表达式相匹配的case常量,则不执行任何语句。(4)各个case标号出现次序不影响执行结果。(5)每一个case常量必须互不相同;否则就会出现互相矛盾的现象。(6)case标号只起标记的作用。在执行switch语句时,根据switch表达式的值找到匹配的入口标号,在执行完一个case标号后面的语句后,就从此标号开始执行下去,不再进行判断。因此,一般情况下,在执行一个case子句后,应当用break语句使流程跳出switch结构。最后一个case子句(今为default子句)中可不加break语句。(7)在case子句中虽然包含了一个以上执行语句,但可以不必用花括号括起来,会自动顺序执行本case标号后面所有的语句。当然加上花括号也可以。(8)多个case标号可以共用一组执行语句。【例3‑10】当输入数字1,打印出“星期一”,输入数字2,打印出“星期二”,以此类推,输入数字7,打印出“星期日”。请你用switch多分支结构帮辅导员编写一个程序实现这个功能。#include<stdio.h>intmain(){intiNum;printf("请输入1-7的数字:");scanf("%d",&iNum);switch(iNum){ case1:printf("星期一\n");break; case2:printf("星期二\n");break; case3:printf("星期三\n");break;

return0;}case4:printf("星期四\n");break;case5:printf("星期五\n");break;case6:printf("星期六\n");break;case7:printf("星期日\n");break;default:printf("输入错误!\n");break;}(1)switch语句的格式switch(表达式1) { case常量1:语句1 case常量2:switch(表达式2){case常量1:语句1case常量2:语句2……case常量m:语句mdefault:语句m+1} ……3.5switch结构的嵌套case常量n:语句n default:语句n+1 }首先计算外层switch后面括号中表达式1的值,依次与外层各个case的常量1…n比较,假定表达式1的值与case常量2相同,就转入执行case常量2后面内嵌的switch语句,内层switch执行结束后,再继续执行外层switch语句中剩下的语句。(2)switch嵌套结构的执行过程【例3‑11】使用条件运算符将百分制转换为五分制。#include<stdio.h>intmain(){intscore;chargrade;printf("请输入考试成绩\n");scanf("%d",&score);grade=score>=90?'A':score>=80?'B':score>=70?'C':score>=60?'P':'F';printf("成绩级别为:%c\n",grade);return0;}

3.6再来评一评等级3.6.2条件运算符和条件表达式表达式1?表达式2:表达式3条件运算符由两个符号(?和:)组成,必须一起使用。要求有3个操作对象,称为三目(元)运算符,它是C语言中唯一的一个三目运算符。条件运算符的执行顺序:先求解表达式1,若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值。若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值。if(a>b) max=a;else max=b;max=(a>b)?a:b;表达式1条件表达式取表达式2的值条件表达式取表达式3的值真(非0)a>b?(max=a):(max=b);//表达式2和表达式3是赋值表达式或假(0)(2)条件表达式嵌套使用(2)条件表达式可以进行嵌套,多级嵌套采用“自右向左”结合。例如例3-11第7行的条件表达式”grade=score>=90?'A':score>=80?'B':score>=70?'C':score>=60?'P':'F';”由于“=”运算符的优先级小于条件运算符,

上式等价于:grade=(score>=90?'A':score>=80?'B':score>=70?'C':score>=60?'P':'F');按照条件运算符自右向左结合,该式计算顺序等价于:grade=(score>=90?'A':(score>=80?'B':(score>=70?'C':(score>=60?'P':'F'))));为提高销售业务人员的积极性,公司常常制定相应的激励措施,将业务人员的收入与其销售额挂钩,一般把收入分为基本工资和销售提成两部分,而提成部分又根据销售额设置不同的提成比例,以进一步激励业务人员多销售产品。比如,某公司就依据了上述的思想,设计了该公司销售提成方案:当销售额小于10万元,提成金额为销售额的5%;当销售额大于等于10万元而小于20万元,提成金额为销售额的8%;当销售额大于等于20万元而小于40万元,提成金额为销售额的10%;当销售额大于等于40万元,提成金额为销售额的12%。该公司的财务每个月需要根据销售业务人员的销售额计算他们的提成,由于业务人员较多,提成金额计算工作量很大,你能用本章所学的知识为该公司的财务部门编写一个C语言程序计算提成金额吗?分别用if结构和switch结构实现提成金额计算程序,输入为业务人员的销售额,输出为该人员的提成金额。3.7案例项目——用if和switch结构实现销售提成计算(1)用if结构实现#include<stdio.h>intmain(){float

fSale,

fCommission,

fRate;printf("请输入业务员本月的销售额(万元):");scanf("%f",

&fSale);if(fSale

<

10)fRate

=

0.05;else

if(fSale

<

20)fRate

=

0.08;else

if(fSale

<

40)fRate

=

0.1;elsefRate

=

0.12;fCommission

=

fSale

*

fRate;printf("该业务员本月的提成金额为:

%f万元\n",

fCommission);return0;}(2)用switch结构实现提成比例与销售额关系(2)用switch结构实现#include<stdio.h>intmain(){float

fSale,

fCommission,

fRate;printf("请输入业务员本月的销

售额(万元):");scanf("%f",

&fSale);int

iC

=

(int)fSale

/

10;switch(iC){case

0:fRate

=

0.05;break;case

1:

fRate

=

0.08;break;

case

2:

case

3:

fRate

=

0.1;break;default:

fRate

=

0.12;

break;}fCommission

=

fSale

*

fRate;printf("该业务员本月的提成金额为:

%f万元\n",

fCommission);return

0;}单分支结构、双分支和多分支结构关系运算符和关系表达式switch结构及其嵌套条件表达式第4章循环结构掌握while、do-while和for三种循环结构掌握break与continue在循环结构中的用法掌握循环嵌套的用法具备使用三种循环结构来解决常见的重复操作问题的能力本章目标例子1:向国旗敬个礼4.1理解循环结构程序代码:#include"stdio.h"intmain(){

printf("1.向国旗敬礼,礼毕\n");

printf("2.向国旗敬礼,礼毕\n");

printf("3.向国旗敬礼,礼毕\n");

printf("4.向国旗敬礼,礼毕\n");

printf("5.向国旗敬礼,礼毕\n");

return0;}

思考:这个程序写的好不好?如果有50个同学参加升旗仪式,需要显示每一个向国旗敬礼的同学,如何编写代码?例子2:向国旗敬个礼4.1理解循环结构程序代码:#include"stdio.h"main(){ inti; i=1; while(i<=5){ printf("%d.向国旗敬礼,礼毕\n",i); i++; }}

思考:采用循环结构设计程序,如何控制重复执行的次数?4.1理解循环结构什么是“循环”?简单而言:循环就是不断反复地执行同一段程序。

(1)循环变量:第一次循环条件判断之前初始化,设定循环操作的起点。(2)循环条件:用来判断是否进入循环体执行重复的操作,随着循环的进行,循环条件通常逐渐趋于不成立。(3)循环体:需要重复执行的语句块,通常包含循环变量改变的语句,使得循环逐步趋于结束。4.1理解循环结构循环结构的要素4.2while循环while语句语句的格式:while(表达式)

循环体语句说明:(1)表达式可以是任意类型,一般为关系表达式或逻辑表达式,其值为循环条件。如果表达式的值为0表示条件不满足,否则表示条件满足。(2)循环体可以是任何单个语句,也可以是一组语句,当是一组语句时,需要用大括号将语句组扩起来。4.2while循环while执行过程执行过程:说明:(1)当表达式的值为真(非0)时,执行其中的内嵌语句(循环体),(2)回过头来再判断表达式的值,如此重复;(3)当表达式为假(0)时结束循环。4.2while循环例4.4:用while循环求“1+2+3+…100”的和。程序代码:#include<stdio.h>main(){ inti=1,sum=0; while(i<=100){ sum=sum+i; i++; } printf("%d",sum);}运行结果:5050分析:累加求和的问题

sum=1+2+3+…+100sum=0sum=sum+1sum=sum+2sum=sum+3……sum=sum+i和的新值和的当前值求和项当前值4.2while循环注意:(1)循环体有可能一次也不执行。(2)循环前,必须给循环控制变量赋初值。(3)若循环体包含一条以上的语句,应以复合语句形式出现。(4)循环体中,必须有改变循环控制变量值的语句(使循环趋向结束的语句)。

(5)无限循环:while(1)循环体;(6)循环体为空如:

while((c=getchar())!='A');从键盘输入字符直到输入A为止

等价于:c=getchar();while(c!='A')c=getchar();4.3do-while循环do-while语句语句的格式:说明(与while相同):(1)表达式可以是任意类型,一般为关系表达式或逻辑表达式,其值为循环条件。如果表达式的值为0表示条件不满足,否则表示条件满足。(2)循环体可以是任何单个语句,也可以是一组语句,当是一组语句时,需要用大括号将语句组扩起来。do

循环体语句while(表达式);4.3do-while循环do-while执行过程执行过程:说明:(1)

执行循环体,当表达式的值为真(非0)时;(2)再次执行循环体,如此重复;(3)当表达式为假(0)时结束循环。4.3do-while循环例4.7:用do-while循环求“1+2+3+…100”的和。程序代码:#include"stdio.h"main(){ inti=1,sum=0; do{ sum=sum+i; }while(i<=100); printf("%d",sum);}运行结果:5050#include<stdio.h>main(){ inti=1,sum=0; while(i<=100){ sum=sum+i; i++; } printf("%d",sum);}while循环:先做后判先判后做4.3do-while循环注意:(1)do~while循环的特点:先执行循环体,后判断表达式,实现“直到”型循环,所以循环体至少会执行一次。(2)循环体中要有使循环趋于结束的语句;do~while循环最后的分号“;”不可少,否则将出现语法错误4.4for循环for语句语句的格式:for(表达式1;表达式2;表达式3)

循环体语句;for(循环变量赋初值;循环条件;循环变量增值)循环体语句;表达式运用4.4for循环for语句说明:(1)循环体语句可以是任意语句;(2)三个表达式可以是任意类型;(3)表达式1用于给某些变量赋初值,多数情况下,在此处给循环控制变量赋初值;(4)表达式2用来说明循环终止条件,多数情况下,是根据循环控制变量的值确定循环是否结束;(5)表达式3用来改变某些变量的值,多数情况下,使循环控制变量的值增加或减少,使循环控制变量的值向着使循环终止的方向改变。4.4for循环for执行过程执行过程:说明:(1)计算表达式1的值,然后转(2);(2)计算表达式2的值,若其值为非0,转(3);否则转(5);(3)执行循环体,转(4);(4)计算表达式3,转(2);(5)退出循环,执行循环体下面的语句。4.4for循环例4.10:用for循环求“1+2+3+…100”的和。程序代码:#include<stdio.h>main(){ inti,sum=0; for(i=1;i<=100;i++)/*循环要素*/ sum=sum+i; printf("%d",sum);}运行结果:5050表达式1为变量赋初值表达式2说明循环终止条件表达式3改变变量的值4.4for循环注意:for循环结构的变化(1)

表达式1省略时,应在for前给循环变量赋初值。如:k=1;

for(;k<=3;k++)s=s+k;(2)

表达式2省略时,不判断循环条件,将成为“死循环”,需要在

循环体中引入break语句以退出循环;(3)表达式3省略时,循环体内应有使循环条件改变的语句。

如:for(k=1;k<=3;)

{s=s+k;

k++;}

4.4for循环注意:for循环结构的变化(4)

同时省略表达式1和表达式3,只有表达式2,此时相当于while

语句。如

k=1;while(k<=100){s=s+k;k++;}(5)表达式2一般是关系表达式或逻辑表达式,但也可以是数值表达

式或字符表达式,只要其值不等于0就执行循环体。

如:for(k=1;k-4;k++)s=s+k;

仅当k的值等于4时终止循环。k-4是数值表达式。k=1;for(

;k<=100;){s=s+k;k++;}4.5循环结构间的比较和总结while(表达式)

循环体语句do

循环体语句while

温馨提示

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

评论

0/150

提交评论