C语言上机报告第2章.ppt_第1页
C语言上机报告第2章.ppt_第2页
C语言上机报告第2章.ppt_第3页
C语言上机报告第2章.ppt_第4页
C语言上机报告第2章.ppt_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

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

文档简介

1、C 语言程序设计基础篇,第 2 章 简单程序设计之一,2020年8月7日,运算符和表达式 顺序结构程序设计 选择结构程序设计 简单循环结构程序设计,内容概述,2020年8月7日,教学目标,掌握常量与变量的定义和使用方法; 学会三种结构的简单程序设计; 从整体上把握和了解C程序的基本结构,对C语言程序开发设计有初步的感性认识。,2020年8月7日,C语言程序的控制结构,顺序结构 选择结构 循环结构,2020年8月7日,2.1 顺序结构程序设计,顺序结构程序设计就是根据问题要求设计的程序,其执行过程是按程序书写的顺序,从上到下,逐条语句顺序地执行,没有跳转,一直到最后一条语句,程序才算执行完毕,退

2、出程序。,2020年8月7日,基本的算术运算符,2020年8月7日,算术表达式和运算符的优先级与结合性,表达式是由常量、变量、函数和运算符组合起来的式子。 如: a + b (a * 2) / c (x + r) * 8 - (a + b) / 7,2020年8月7日,运算符的优先级和结合性,优先级 (从高到低) ( ) * / % + (加) (减) 结合方向 + (加) (减) * / %:从左向右 若在运算量两侧的运算符有相同的优先级,则按它们的结合方向顺序处理。 例: a b / c 1 + a d e;,2020年8月7日,两点说明,两个整数相除,结果也为整数 直接舍去商的小数部分,

3、而不会“四舍五入” 如果需要得到精确的运算结果,可以把其中一个操作数转换为浮点数。 举例:5/3(=1)、5.0/3(=1.66666) 模运算符的两个操作数都必须是整数 举例:5%3(=2),2020年8月7日,【例2.1】由键盘输入两个整数给变量a和b,输出a和b的和差积商及余数。,定义变量: int a,b; int sum, difference,product, quotient, remainder; 算法: sum=a+b; difference=a-b; product=a*b; quotient=a/b; remainder=a%b;,2020年8月7日,#include s

4、tdio.h void main() int a,b,sum, difference,product, quotient, remainder; printf(请输入a和b的值:); scanf(%d%d, ,2020年8月7日,问题分4个步骤来处理: (1)输入两个整数给变量a和b; (2)输出a和b的值; (3)交换a和b的值; (4)输出a和b的值。,【例2.2】由键盘输入两个整数给变量a和b,然后输出a和b。在交换a和b的值后,再输出a和b,验证两个变量中的数值是否正确地进行了交换。,2020年8月7日,#include void main() int a,b,t; printf(En

5、ter a and b:n); scanf(%d %d, /* 输出a和b的值 */ ,2020年8月7日,2.2.1关系运算符和关系表达式,关系运算:比较运算,比较两个操作数,看是否满足给定的关系。 如: a3 为一比较运算, 若a=5,a3 成立,结果为“真”; 否则,若a=1,a3 不成立,结果为假。 在C语言中,用非零值表示真,零表示假。 表达式: a3 称为关系表达式。,2.2 选择结构程序设计,2020年8月7日,C语言提供了六种关系运算符,: 大于, 53, 35 =:大于等于,5 =3, 3 =5 =:等于, 5=3 !=:不等于, 5!=3,2020年8月7日,关系运算符的优

6、先次序,关系运算符优先级低于算术运算符。 ca+b c (a+b) a+b=2*c (a+b) = (2*c),2020年8月7日,关系表达式,关系表达式: 用关系运算符将两个表达式连接起来的式子。 如: ab a+bb+c 关系表达式的值为1或0 1表示结果为真,也就是关系成立。 0表示结果为假,也就是关系不成立。,2020年8月7日,例 关系运算符,#include int main() int a, b, c; a = 5; b = 3; c = 4; printf(ab: %dn, ab); printf(a+bb+c : %dn, a+bb+c); printf(ab)(bb)(bc

7、); return(0); ,运行结果为:ab: 1 a+bb+c : 1 (ab)(bc) : 0,2020年8月7日,!:逻辑非,一元运算符,运算规则:取反,真 假,假 真, b=1; c=2; 执行 d=a+之后,a,b,c,d的值各是什么?,运算结果: d=0,a=1,b=1,c=2,2020年8月7日,(2)a | b | c,求解方法:只要a为真(非0),就不必判断b和c;只有a 为假,才判断b;a和b都为假,才判断c。,例如: 若 a=0; b=1; c=2; 执行 d=a+|b+|- -c; 后a,b,c,d的值各是什么?,运算结果: d=1,a=1,b=2,c=2,2020年

8、8月7日,设a=5、b=3、c=2、d=1、x=1、y=1,求表达式(x=ab) printf(Input two numbers: ); scanf(%d%d, ,运行结果为:Input two numbers: 5 12 max=12,2020年8月7日,第二种形式为: if-else,if(表达式) 语句1; else 语句2;,其语义是: 如果表达式的值为真,则执行语句1,否则执行语句2 。 其执行过程可表示为下图。,2020年8月7日,【例】用if-else语句改写例2.3,#include int main() int a, b; printf(Input two numbers:

9、 ); scanf(%d%d, ,运行结果为:Input two numbers: 5 12 max=12,2020年8月7日,复杂条件下的if条件结构,【例2.4】从键盘输入一个年份,判断是否闰年。,什么是闰年?,复合条件可表示为: (year%4=0) printf(请输入年份:); scanf(%d, ,2020年8月7日,第三种形式为: if-else-if,前两种形式的if语句一般都用于两个分支的情况。当有多个分支选择时,可采用if-else-if语句。 其语义是:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。 如果所有的表达式均为

10、假,则执行语句n。然后继续执行后续程序。,if(表达式1) 语句1; else if(表达式2) 语句2; else if(表达式3) 语句3; else if(表达式m) 语句m; else 语句n;,一般形式为:,2020年8月7日,2020年8月7日,【例2.4】个人年收入低于5万元,可免个人所得税;年收入在5万10万元之间,超过5万元的部分交5%的个人所得税;年收入在10万元以上则交总收入的7%的个人所得税。请编写一个程序,根据个人年收入计算个人所得税(精确到元)。,个人年收入和个人所得税分别用整型变量x、y保存。根据题意,个人所得税与个人年收入的关系可用一个分段函数表示:,2020年

11、8月7日,#includestdio.h void main() int x,y; printf(请输入个人年收入:); scanf(%d, ,2020年8月7日,【例2.6】编写程序,对学生成绩进行等级评定。将成绩分为几个等级:059分为不及格,6069分为及格,7079分为中等,8089分为良好,90100分为优秀。要求输入一个成绩,输出其对应的等级。,将成绩分成几个区间判断,因每个分数段之间没有交叉,可以用多分支的if-else if形式的语句来进行多次比较,确定其对应的等级。,2020年8月7日,#includestdio.h void main() int score, grade;

12、 printf(请输入成绩:); scanf(%d, ,2020年8月7日,在使用if语句中还应注意以下问题,在三种形式的if语句中,在if关键字之后均为表达式。该表达式通常是逻辑表达式或关系表达式,但也可以是其它表达式,如赋值表达式等,甚至也可以是一个变量。,例如: if (a=5) 语句; if (b) 语句; 都是允许的。只要表达式的值为非0,即为“真”。,2020年8月7日,在if语句的三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用括起来组成一个复合语句。但要注意的是在之后不能再加分号。,if (xy) x = x+5; y = y+

13、10; else x = 10; y = 5; ,例如:,在if语句中,条件判断表达式必须用括号括起来,在语句之后必须加分号。,例如:if (b) 语句;,2020年8月7日,当if语句中的执行语句又是if语句时,则构成了if 语句嵌套的情形。 其一般形式可表示如下: if(表达式) if语句; 或者为 if(表达式) if语句; else if语句; 在嵌套内的if语句可能又是if-else型的,这将会出现多个if和多个else重叠的情况,这时要特别注意if和else的配对问题。,2020年8月7日,例如: if(表达式1) if(表达式2) 语句1; else 语句2; 其中的else究竟

14、是与哪一个if配对呢?,应该理解为: if(表达式1) if(表达式2) 语句1; else 语句2; 还是应理解为: if(表达式1) if(表达式2) 语句1; else 语句2;,为了避免这种二义性,语言规定,else 总是与它前面最近的if配对,因此对上述例子应按前一种情况理解。,2020年8月7日,if-else-if解决多分支问题 -程序冗长而且可读性差 解决办法: -switch开关语句,2.2.4 switch多分支结构,2020年8月7日,1、switch语句形式:,switch (表达式) case 常量1: 语句1; case 常量2: 语句2; case 常量3: 语句

15、3; . case 常量n: 语句n; default : 语句n+1; ,根据表达式的不同值,选择不同的程序分支,又称开关语句。,数值型 或 字符型,常量表达式的值必须互不相同,否则执行时将出现矛盾,即同一个开关值,将对应多种执行方案。,2020年8月7日,2、语句执行流程:,指语句的最后一条是否为break,简单语句或复合语句,case语句出 现的次序并 不影响执行 结果。,2020年8月7日,void main() int n; printf(请输入成绩:); scanf(%d, ,出错啦!?,【例2.7】改写例2.6,用switch语句实现对学生成绩进行等级评定。,2020年8月7日,

16、在“switch”语句中,“case 常量表达式”只相当于一个语句标号,表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个switch 语句,因此会继续执行所有后面语句的情况。 为此,语言提供了一种break语句,其功能是可以跳出它所在的switch语句。,2020年8月7日,将上面的例2.7修改如下:,void main() int n; printf(请输入成绩:); scanf(%d, ,2020年8月7日,使用switch语句时还应注意以下几点,switch后面圆括号内表达式的值和case语句中常量表达式的值,都必须是整型的、枚举型的或字符型的,不允许是浮

17、点型的。在case后的各常量表达式的值不能相同。 每个case子句既可以是一条语句,也可以是多条语句。当是多条语句时,不需要用花括号括起来。 各个case子句和default子句的先后顺序可以变动,而不会影响程序执行结果。 default子句可以省略不用。 多个case的后面可以共用一组执行语句 。如例2.7中等级为优秀的判断程序可改为:,2020年8月7日,switch(int)(n/10) case 10: case 9: printf(成绩%d的等级为优秀n); break; ,2020年8月7日,2.3 简单循环结构程序设计,问题 计算1+2+100的值,即 int i, sum; i

18、 = 1; sum = 0; sum = sum+i; i=i+1; sum = sum+i; i=i+1; : sum = sum+i; i=i+1;,如何避免出现这种情况?,重复100次同样的语句,程序显得很笨拙。,2.3.1 为什么使用循环结构,2020年8月7日,前面的例子是一种循环执行的情况,也就是: 在给定条件(i100)成立时,反复执行某程序段(sum=sum+i; i=i+1),直到条件不成立为止。 给定的条件称为循环条件,反复执行的程序段称为循环体。 这种结构被称为循环结构,它是程序中一种很重要的结构。,2020年8月7日,语言提供了多种循环语句,可以组成各种不同形式的循环结

19、构。 用goto语句和if语句构成循环;(不介绍,不推荐使用) 用while语句; 用do-while语句; 用for语句。,2020年8月7日,2.3.2 while语句和do-while语句,格式: while (表达式) 语句; 其中表达式是循环条件,语句为循环体。 功能: 当表达式的值为非0时,执行while语句中的循环体。结构流程图如图所示。 用while语句来实现“当型”循环结构。,1. while语句,2020年8月7日,用while语句求,用N-S图表示算法,如右图所示:,2020年8月7日,#include int main() int i, sum; i=1; sum=0;

20、 while (i=100) sum = sum+i; i+; printf(sum=%dn, sum); return(0); ,2020年8月7日,使用while语句应注意以下几点:,while语句中的表达式一般是关系表达或逻辑表达式,只要表达式的值为真(非0)即可继续循环。 循环体如果包含一个以上语句,应该用花括弧括起来,以复合语句的形式出现,否则while语句范围只到while后面第一个分号处。,2020年8月7日,2. do-while语句,格式: do 语句 while(表达式); 功能:先执行语句,后判断表达式的值。它的执行过程是:先执行一次指定的语句,然后判断表达式的值,当表达

21、式的值为非零(”真“)时,返回重新执行该语句,如此反复,直到表达式的值等于0为此止,此时循环结束。,do-while循环语句,用来实现“直到型”循环结构。,2020年8月7日,#include int main() int i, sum; i=1; sum=0; do sum = sum + i; i+; while (i = 100); printf(Sum=%dn, sum); return(0); ,用do-while语句求,2020年8月7日,【例2.7】while和do-while循环比较用while和do-while两种语句分别编程序求i+(i+1)+(i+2)+10,其中,i由键

22、盘输入。,#include void main() int sum=0,i; scanf(%d, ,#include int main() int sum=0,i; scanf(%d, ,试分析:当分别输入5和15时,两个程序段分别输出什么?,2020年8月7日,【例2.8】编程求n!=1*2*3*n,循环控制变量i超过n即结束,也就是当(i=n)即循环。,从以下几个方面分析:,i=1 ; (循环控制变量赋初值1,表示从1开始累乘) t=1 ; (存放累乘积的辅助变量赋初值1),循环什么条件下开始,每次循环都做了什么工作,t=t*i; (做累乘) i+; (等价于i=i+1),循环什么条件下结

23、束,i(循环控制变量),t(存放累乘积),定义变量:,循环什么条件下开始,i(循环控制变量),t(存放累乘积),定义变量:,i=1 ; (循环控制变量赋初值1,表示从1开始累乘) t=1 ; (存放累乘积的辅助变量赋初值1),循环什么条件下开始,i(循环控制变量),t(存放累乘积),定义变量:,每次循环都做了什么工作,i=1 ; (循环控制变量赋初值1,表示从1开始累乘) t=1 ; (存放累乘积的辅助变量赋初值1),循环什么条件下开始,i(循环控制变量),t(存放累乘积),定义变量:,t=t*i; (做累乘) i+; (等价于i=i+1),每次循环都做了什么工作,i=1 ; (循环控制变量赋

24、初值1,表示从1开始累乘) t=1 ; (存放累乘积的辅助变量赋初值1),循环什么条件下开始,i(循环控制变量),t(存放累乘积),定义变量:,循环什么条件下结束,t=t*i; (做累乘) i+; (等价于i=i+1),每次循环都做了什么工作,i=1 ; (循环控制变量赋初值1,表示从1开始累乘) t=1 ; (存放累乘积的辅助变量赋初值1),循环什么条件下开始,i(循环控制变量),t(存放累乘积),定义变量:,循环控制变量i超过n即结束,也就是当(i=n)即循环。,循环什么条件下结束,t=t*i; (做累乘) i+; (等价于i=i+1),每次循环都做了什么工作,i=1 ; (循环控制变量赋

25、初值1,表示从1开始累乘) t=1 ; (存放累乘积的辅助变量赋初值1),循环什么条件下开始,i(循环控制变量),t(存放累乘积),定义变量:,循环控制变量i超过n即结束,也就是当(i=n)即循环。,循环什么条件下结束,t=t*i; (做累乘) i+; (等价于i=i+1),每次循环都做了什么工作,i=1 ; (循环控制变量赋初值1,表示从1开始累乘) t=1 ; (存放累乘积的辅助变量赋初值1),循环什么条件下开始,i(循环控制变量),t(存放累乘积),定义变量:,2020年8月7日,#include stdio.h void main() int t=1,i=1,n; printf(Inp

26、ut a number:); scanf(%d, ,2020年8月7日,【例2.9】编写一个程序,其功能为:从键盘输入若干个整数,直到输入0为止,统计其中正数和负数的个数。(本别用while和do-while实现),输入的整数a为0,循环什么条件下结束,scanf(%d,每次循环都做了什么工作,m=0; n=0 ; (正、负数从0开始计数 ),循环什么条件下开始,m,n(正、负数的个数 ),a(存放输入的整数),定义变量:,2020年8月7日,#include stdio.h void main() int a,m=0,n=0; printf(“请输入若干个整数:n); scanf(%d, ,

27、1. while循环实现,2020年8月7日,#include stdio.h void main() int a,m=0,n=0; printf(“请输入若干个整数:n); do scanf(%d, ,2. do-while循环实现,2020年8月7日,2.3.3 for语句,在C语言中,for语句使用最为灵活,它完全可以取代 while 语句。它的一般形式为: for (表达式1;表达式2;表达式3) 语句 它的执行过程如下: 先求解表达式1。 求解表达式2,若其值为真(非0),则执行for语句中指定的内嵌语句,然后执行下面第步;若其值为假(0),则结束循环。 求解表达式3。 再次计算表达

28、式2 的值,开始再次循环,直到计算表达式2的值为0,中止循环,执行for语句下面的一个语句。,2020年8月7日,2020年8月7日,#include void main() int i, sum=0; for(i=1;i=100;i+) sum=sum+i; printf(sum=%dn,sum); ,#include void main() int i; double s=1; for(i=1;i=10;i+) s=s*i; printf(s=%fn,s); ,求sum=1+2+3+100,求s=1*2*3*10,2020年8月7日,【例2.10】求1!+2!+3!+10!,#includ

29、e stdio.h void main() double sum=0,t=1; int i; for(i=1;i=10;i+) t=t*i; /* t=i! */ sum=sum+t; printf(1!+2!+10!=%.0fn,sum); /* 格式符%.0f表示小数点后0位输出浮点数 */ ,2020年8月7日,【例2.11】从键盘输入某学生期末考试的5门课成绩,并计算平均分。,#include stdio.h void main() float score; /* 每门课成绩 */ float sum=0 ,avg; /* 总成绩和平均成绩 */ int i; printf(“请输入学

30、生5门课成绩:”); /*提示 */ for(i=0;i5;i+) scanf(%f, ,2020年8月7日,2.3.4 几种循环的比较,三种循环(while、do-while、for)可以互相替换。 循环条件:while、do-while在whie后面指定; for循环在“表达式2”中指定。 循环初始条件:while、do-while在循环前指定;for循环在“表达式1”中指定。 判断循环条件的时机:while、for循环先判循环条件,后执行;do-while循环先执行,后判断循环条件。,2020年8月7日,课堂练习1:编程求分段函数的值: x (x1) y= 2x-1 (1x10) 3x-

温馨提示

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

最新文档

评论

0/150

提交评论