算法语言与数据结构第3章PPT课件_第1页
算法语言与数据结构第3章PPT课件_第2页
算法语言与数据结构第3章PPT课件_第3页
算法语言与数据结构第3章PPT课件_第4页
算法语言与数据结构第3章PPT课件_第5页
已阅读5页,还剩134页未读 继续免费阅读

下载本文档

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

文档简介

1、第 3 章 逻辑思维与计算机解题第1页/共139页算法及算法工具结构化程序设计思想将实际问题抽象为逻辑关系枚举法解题思路关系与关系表达式程序的循环结构与分支结构第2页/共139页第3页/共139页第4页/共139页 3.1 程序设计中的科学思维方法程序设计中的科学思维方法 3.2 关系运算符和关系表达式关系运算符和关系表达式2 3.3 使用关系表达式解决一些问题使用关系表达式解决一些问题3 3.4 枚举法的思路枚举法的思路4目录 3.5 循环语句循环语句5 3.6 分支语句分支语句6 3.8 逻辑判断与解题逻辑判断与解题8 3.7 输入输出语句输入输出语句7第5页/共139页3.1 程序设计中

2、的科学思维方法 算法程序设计=数据结构+算法+程序设计方法学 数据结构:数据对象及其相互关系和构造方法。数据结构与算法密不可分,一个良好的数据结构,将使算法简单化;只有明确了问题的算法,才能有较好的设计数据结构,因此两者是相辅相承的 对同一个问题的求解,允许有不同的算法和数据结构,依不同算法编写的操作代码,执行效率不一样。 算法(algorithm):是对特定问题求解步骤的一种描述。算法特征: 1有穷性 2确定性 3输入 4输出 5有效性 算法要求: 1正确性 2可读性 3健壮性 4效率 算法表示: 1. 自然语言 2. 专用工具 3. 伪代码 4. 计算机语言 算法设计常用方法 1. 枚举法

3、 2. 迭代法 3. 递归法 4. 递推法 5. 分治法 6. 回溯法 7. 模拟人工 第6页/共139页算法表示工具 算法表示 专用工具流程图表示 流程图符号:3.1 程序设计中的科学思维方法第7页/共139页三种基本控制结构AB顺序结构选择结构循环结构PBAPA3.1 程序设计中的科学思维方法第8页/共139页1.2 程序设计中的科学思维方法 流程图符号表示的算法实例:3.1 程序设计中的科学思维方法第9页/共139页1.2 程序设计中的科学思维方法 例 3.1 算法 伪代码表示的算法实例:问题: 求12+22+502输出sum开始 输入n的值 置sum初值为0 置i初值为1 当in,执行

4、下面操作: sum = i*i+sum i = i+1 打印sum的值 结束3.1 程序设计中的科学思维方法第10页/共139页1.2 程序设计中的科学思维方法 例 3.2 算法 计算机语言表示的算法实例:问题: 求12+22+5023.1 程序设计中的科学思维方法第11页/共139页1.结构化程序设计基本思想 自顶向下 逐步细化 模块化 2.结构化程序设计的过程 建立数学模型 选定算法,用适当工具描述算法 编程 测试及调试 (1)建立数学模型 规定了数据间准确的关系,如:数学公式、一张关系图、一张二维数据表 (2)选定算法,用适当工具描述算法3.1 程序设计中的科学思维方法第12页/共139

5、页(3).用自顶向下逐步细化构造算法【例1-5】 某同学进行一次物理实验,测量得到30个数据,求这30个数据的平均值。一级算法:1. Initialize variables2. Input , sum and count the data3. Calculate and print the average1.1 Set total to 01.2 Set counter to 12.1 While counter=30 Input the next data Add the data to total Add 1 to counter3.1 Set average to tatal/303.

6、2 Print the average3.1 程序设计中的科学思维方法 第13页/共139页4.用自顶向下逐步细化构造算法【例1-2】 有30名同学选修了程序设计这门课程,请编写程序统计参加考试学生中及格和不及格的人数。 一级算法: 1.Initialize variables 2.Input the 30 grades and count the failures 3.Print the exam results 1.1 Set failures to 01.2 Set passes to 01.3 Set counter to 1 While counter=302.1 Input the

7、 next grade2.2 If the grade=大于等于大于等于 大于大于 =等于等于 =小于等于小于等于 小于小于 !=不等于不等于3.2 关系运算符和关系表达式第17页/共139页/ */ * 程 序: 3_0.c */ * 功 能: 为讲解关系运算而编 */ * 编制人: wuwh */ * 时 间: 2001年6月27日 */ *#include void main( )printf(“ 3 2 的逻辑值是 %d , 1 为真 n“, 3 2 ) ; printf(“ 3 =2 的逻辑值是 %d , 1 为真 n“, 3 = 2 ) ; printf(“ 3 = 2 的逻辑值是

8、 %d , 0 为假n“, 3 = 2 ) ; printf(“ 3 2 的逻辑值是 %d , 0 为假n“, 3 2 ) ;printf(“ 3 = 2 的逻辑值是 %d , 0 为假n“, 3 2 的逻辑值是 1, 1为真3 = 2 的逻辑值是 1, 1为真3 = 2 的逻辑值是 0, 0为假3 2 的逻辑值是 0, 0为假3 = 2 的逻辑值是 0, 0为假3 != 2 的逻辑值是 1, 1为真3.2 关系运算符和关系表达式第19页/共139页关系表达式的一般格式 关系运算符 例如:变量 1 为 b,变量 2 为 c,关系运算符为 。关系表达式为b c在程序中系统要测试由关系表达式所表示

9、的关系是否成立,成立为真,不成立为假。关系表达式是有值的,这个值非 0 即 1,是布尔值。关系表达式成立,其值为 1 。关系表达式不成立,其值为 0 。上述性质在编写程序时用到,因此很重要。3.2 关系运算符和关系表达式第20页/共139页 结合任务3.1,可以将四个人说的四句话写成关系表达式。 在声明变量时,我们让thisman表示要寻找的做了好事的人,定义它是字符变量。 char thisman=; / 定义字符变量并将其初始化为空 接着让 “ = ” 的含义为“是”, 让 “ != ” 的含义为“不是”。3.3 使用关系表达式解决一些问题第21页/共139页3.3 使用关系表达式解决一些

10、问题第22页/共139页thisman 65地址地址xxxx3.3 使用关系表达式解决一些问题第23页/共139页/ */ * 程 序: 3_1.c */ * 功 能: 验证A和65是否相等 */ * 编制人: wuwh */ * 时 间: 2001年6月27日 */ *#include / 预编译命令void main( )/ 主函数/ 主函数开始char thisman;/ 声明字符变量thisman,thisman = A;/ thisman赋值为A/ 输出关系表达式“65=A”的值printf( 65=A 关系表达式的值为“,65=A) ;/ 主函数结束3.3 使用关系表达式解决一些问

11、题第24页/共139页 结合任务3.1分析,A、B、C、D四个人,只有一位是做好事者。令做好事者为1,未做好事者为0,可以有如下4中状态(情况)3.4 枚举法的思路第25页/共139页3.4 枚举法的思路第26页/共139页(1)假定让thisman=A代入四句话中3.4 枚举法的思路第27页/共139页(2)假定让thisman=B代入四句话中3.4 枚举法的思路第28页/共139页(3)假定让thisman=C代入四句话中3.4 枚举法的思路第29页/共139页 综上所述一个人一个人去试,就是枚举。从编写程序看,实现枚举最好用循环结构。 这部分的程序写出如下:for (k=1; k=4;

12、k=k+1) / 计数型循环,循环的控制变量为k / 循环体开始thisman=64+k; / 产生被试者,依次为A,B,C,D / 赋值给thismansum = (thisman!=A)/ 测试A的话是否为真 +(thisman=C) / 测试B的话是否为真 +(thisman=D) / 测试C的话是否为真 +(thisman!=D); / 测试D的话是否为真 / 循环体结束3.5 循环语句第30页/共139页3.5 循环语句第31页/共139页 测试表达式测试表达式 2 2 求解表达式求解表达式 1 1 执行循环体语句执行循环体语句 求解表达式求解表达式 3 3 执行执行forfor的下

13、一条语句的下一条语句 假假 真真 循环控制变量置初值循环控制变量置初值 测试是否测试是否未未到终值到终值 让循环控制变量增值让循环控制变量增值 3.5 循环语句第32页/共139页3.5 循环语句第33页/共139页/ */ * 程 序: 3_2.c(计数循环示例) */ * 功 能: 求自然数1100之和 */ * 编制人: wuwh */ * 时 间: 2001年9月10日 */ *#include / 预编译命令void main( )/ 主函数/ 主函数开始int i=0, sum=0;/ 声明i,sum为整型变量并初始化为0for (i=1; i=100; i=i+1)/ for 循

14、环/ 循环体开始sum = sum+i;/ 累加求和/ 循环体结束 printf(“自然数1100之和为 %d“, sum);/ 输出累加结果/ 主函数结束3.5 循环语句第34页/共139页3.5 循环语句第35页/共139页/*/* 程序名:3_3.c(循环语句示例) */* 作 者:wuwh */* 编制时间:2002年9月20日 */* 主要功能:计算10 的阶乘 */*#include / 预编译命令void main() / 主函数 / 主函数开始int i = 0, j = 0, k = 0; / 声明 i,j,k 为整型变量,并初始化为0long sum = 1; / 声明 s

15、um 为长整型变量,并初始化为1for (i = 10; i = 1; i = i-1) / 用 for 循环作累乘运算printf( i=%d“, i) ; / 显示isum = sum * i; / 每一步乘积printf( tsum=%d“, sum); / 显示每一步乘积for ( j = 1; j = 5500; j = j+1) / 用 for 循环延迟时间for (k = 1; k = 1; i = i-1) cout i= i ; sum = sum * i; cout tsum= sum endl; 3.5 循环语句第37页/共139页/*/* 程序名:3_3.c(循环语句示

16、例) */* 作 者:wuwh */* 编制时间:2002年9月20日 */* 主要功能:计算10 的阶乘 */*#include / 预编译命令void main() / 主函数 / 主函数开始int i = 0, j = 0, k = 0; / 声明 i,j,k 为整型变量,并初始化为0long sum = 1; / 声明 sum 为长整型变量,并初始化为1for (i = 10; i = 1; i = i-1) / 用 for 循环作累乘运算printf( i=%d“, i ); / 显示isum = sum * i; / 每一步乘积printf( tsum=%d ,sum); / 显示

17、每一步乘积for ( j = 1; j = 5500; j = j+1) / 用 for 循环延迟时间for (k = 1; k = 10000; k = k+1);/用 for 循环延迟时间 printf( 10!=%d , sum );/ 显示运算结果 /主函数结束3.5 循环语句第38页/共139页#include void main() int i = 0, j = 0, k = 0; long sum = 1; for (i = 10; i = 1; i = i-1)printf( i=%d , i ); sum = sum * i; printf(tsum=%d , sum); f

18、or ( j = 1; j = 5500; j = j+1)for (k = 1; k = 10000; k = k+1); printf(10!=%d , sum); 3.5 循环语句第39页/共139页3.5 循环语句第40页/共139页3.5 循环语句第41页/共139页 初初始始时时 sum=1 10 9 8 7 6 5 4 3 2 1 Sum * 10 Sum * 9 Sum * 8 Sum*1 Sum Sum 3.5 循环语句第42页/共139页3.5 循环语句第43页/共139页实际上循环有好几种方式,如:Goto和if构成的循环do-while构成的循环while构成的循环fo

19、r构成的循环对于以上的循环,我们将通过具体的例子来阐明。3.5 循环语环语句第44页/共139页句式为 goto 标号标号必须是字母,数字,下划线组成,第一个字母不能是数字。1012nnmain()main()方法之一 int i,sum1,j,sum2,k,sum3;int i,sum1,j,sum2,k,sum3;printf(Please input the value of i,j and knn);printf(Please input the value of i,j and knn);scanf(%d,%d,%d,&i,&j,&k);scanf(%d,%d

20、,%d,&i,&j,&k);printf(i=%d,j=%d,k=%dnn,i,j,k);printf(i=%d,j=%d,k=%dnn,i,j,k);sum1=0;sum1=0;loop : if(i=10)loop : if(i=10) sum1=sum1+i sum1=sum1+i* *i; i+; goto loop;i; i+; goto loop; printf(method 1-sum1=%dnn,sum1); printf(method 1-sum1=%dnn,sum1);3.5 循环语句第45页/共139页while 语句 形式while (表达式)

21、语句 可以是复合语句 其中必须含有改变条件表达式值的语句 执行顺序先判断表达式的值,非 0 再执行语句 实现“当型”循环3.5 循环语句第46页/共139页流程特点:先判断,后执行(1)循环如果包含一个以上的语句要用 括起来,见例2-3.c(2)循环体内应该有使循环体结束的语句,否则进入死循环。express语句0非03.5 循环语句第47页/共139页1012nnmain()main()方法之二 int j,sum2;int j,sum2;sum2=0;sum2=0;while(j=10) /while(j=10) /* * without ; after while() without ;

22、 after while() * */ / sum2=sum2+j sum2=sum2+j* *j;j; j+; j+; printf(method 2-sum2=%dnn,sum2);3.5 循环语句第48页/共139页do-while 语句 一般形式do 语句 可以是复合语句while (表达式) 其中必须含有改变条件表达式值的语句 执行顺序先执行语句,后判断条件。 while 语句与 do-while 语句的比较 类似于直到型循环,但不同3.5 循环语句第49页/共139页Dowhile 是先执行,后判断gotoif及while均是先判断后执行main()main()方法之三 int k

23、,sum3;int k,sum3;sum3=0;sum3=0;dodo sum3=sum3+k sum3=sum3+k* *k;k; k+; k+; while(k=10); while(k=10); printf(sum3=%d,sum3);printf(sum3=%d,sum3); Dowhile的while后面有“;” while( )后面则没有从本例中可以看出while和dowhile的区别dowhile是先执行循环体语句,后判断表达式1012nn3.5 循环语句第50页/共139页循环的嵌套与其它语言一样,c语言的循环也可以有多重嵌套,大家在应用过程中可以根据实际情况选用3.5 循环

24、语句第51页/共139页EXAMPLE 例2-4.c 把20以内能被5整除的数打印出来 (用两种方法)3.5 循环语句第52页/共139页main()main() int sum1=0,sum2=0; int sum1=0,sum2=0;/ /* * - while - - while - * */ / while(sum1=20)while(sum1=20) sum1=sum1+1; sum1=sum1+1; while(sum1%5=0) while(sum1%5=0) printf(while()- sum1=%dn,sum1); printf(while()- sum1=%dn,sum

25、1); sum1+; sum1+; for(sum2=1;sum2=20;sum2+)for(sum2=1;sum2=20;sum2+) while(sum2%5=0) while(sum2%5=0) printf(for printf(for* * * *while()- sum2=%dn,sum2);while()- sum2=%dn,sum2); sum2+; sum2+; 3.5 循环语句第53页/共139页break 和 continue 语句 break语句使程序从循环体和switch语句内跳出,继续执行逻辑上的下一条语句。不能用在别处。如:2-5.c求解ax2+bx+c=y co

26、ntinue 语句结束本次循环,接着进行是否执行下一次循环的判断。3.5 循环语句第54页/共139页EXAMPLE第55页/共139页main() /main() /* * y=a y=a* *x2+bx2+b* *x+c x+c * */ / int a,b,c,x,y; int a,b,c,x,y; a=5;b=10;c=15; a=5;b=10;c=15; for(x=1;x=10;x+)for(x=1;x250&y250&y350) break; printf(break-x=%d, y=%dn,x,y); printf(break-x=%d, y=%dn,x,y);

27、 for(x=1;x=10;x+)for(x=1;x250&y250&y350) continue; printf(continue-x=%d, y=%dn,x,y); printf(continue-x=%d, y=%dn,x,y); Continue结束本次循环,即满足条件时,就跳过下面的语句,进入下一个循环;Break结束的是整个循环第56页/共139页for (i=1; i0 y=0 y=-1 y=1 x= =0 3.6 分支语句第62页/共139页/*/* 程 序 名:3_4.c(分支程序示例) */* 作 者:wuwh */* 编制时间:2001年8月 */* 主要

28、功能:实现符号函数 */*#include / 预编译命令void main()/ 主函数 / 主函数开始int x=0,y=0;/ 声明x,y为整型变量,并初始化为0printf( 请输入x ); / 提示信息scanf(“%d”,&x) x;/ 从键盘输入整数送至x中if (x0)/ 如果x0,将1赋给yy=1;elseif (x=0)/ 如果x=0,将0赋给yy=0;elsey=-1; / 否则(x0 y=0 y=-1 y=1 x= =0 提示提示和和输入整数输入整数 x 输出输出 y 3.6 分支语句第64页/共139页有了上述了解之后,我们来看解有了上述了解之后,我们来看解“

29、谁做的好事谁做的好事”的程序框图的程序框图fo r (k = 1 ; k = 4 ; k = k + 1 ) 假假 真真 g != 1 su m = = 3 被被 试试 者者 th ism a n = 6 4 + k ; su m = (被被 试试 者者th ism a n != A )+ (被被 试试 者者th ism a n = = C )+ (被被 试试 者者th ism a n = = D )+ (被被 试试 者者th ism a n != D ); 假假 真真 输输 出出 该该 被被 试试 者者 ; 有有 解解 标标 志志g g = = 1 1 ; ; 输输 出出 无无 解解 信信

30、息息 ; 3.6 分支语句第65页/共139页现在我们来分析现在我们来分析“谁做的好事谁做的好事”的的NS流程图。它是由流程图。它是由两大块组成的,如图两大块组成的,如图3.8循环体循环体for(k=1; k=4; k+)语句语句1;1;第一块第一块循环结构循环结构第二块第二块分支结构分支结构3.6 分支语句第66页/共139页3.6 分支语句第67页/共139页我们讲这一段是希望你掌握我们讲这一段是希望你掌握NS图,这对今后的学习会有好处。按照程图,这对今后的学习会有好处。按照程序框图很容易写出程序(如下页所示)序框图很容易写出程序(如下页所示)thisman = 64+k;sum=( th

31、isman!=A )+ ( thisman=C )+ ( thisman=D )+ ( thisman!=D );sum = 3真真假假输出该被测试者;输出该被测试者;有解标志置有解标志置1 1;3.6 分支语句第68页/共139页/ */ * 程 序 名:3_5.c */ * 作 者:wuwh */ * 编制时间:2001年8月 */ * 主要功能:谁做的好事 */ *#include / 预编译命令void main() / 主函数 / 主函数开始int k=0,sum=0,g=0; / 声明变量为整数类型,且均初始化为0char thisman= ;for(k=1;k=4;k=k+1)

32、/ k既是循环控制变量,也表示第k个人 / for 循环体开始thisman = 64+k;sum=( thisman!=A ) + ( thisman=C ) + ( thisman=D ) + ( thisman!=D );if (sum=3) / 如果4句话有3句话为真,则输出该人/ 输出做好事者printf( 做好事者为%c“, char(64+k);g=1; / 有解标志置1 / for 循环体结束if (g!=1) / 则输出无解信息printf( Cant found! ); / 主函数结束3.6 分支语句第69页/共139页#include void main() int k

33、=0, sum =0 , g =0; char thisman = ;for ( k = 1; k = 4 ; k = k+1 ) thisman = 64 + k;sum = ( thisman != A ) +( thisman=D ) + ( thisman=C ) + ( thisman !=D );if ( sum=3 ) printf( 做好事者为%c , char(64+k);g=1; if (g!=1)printf( Cant found! );3.6 分支语句第70页/共139页/ */ * 程 序 名:3_6.c */ * 作 者:wuwh */ * 编制时间:2001年8

34、月 */ * 主要功能:谁做的好事 */ *#include / 预编译命令void main()/ 主函数 / 主函数开始int k=0,sum=0,g=0;/ 声明变量为整数类型,且均初始化为0for(k=1;k=4;k=k+1)/ 循环从k为1到4,sum=0;/ 循环体内的初始化if (k!=1) sum=sum+1;/ 如A的话为真,则让sum加1;if (k=3) sum=sum+1;/ 如B的话为真,则让sum加1;if (k=4) sum=sum+1;/ 如C的话为真,则让sum加1;if (k!=4) sum=sum+1;/ 如D的话为真,则让sum加1;if (sum=3)

35、/ 若有三句话为真,则做下列两件事cout This man is char(64+k) endl;/ 输出做好事者g=1;/ 让有解标志置1if (g!=1)/ 则输出无解信息 cout Cant found! endl;/ 主函数结束3.6 分支语句第71页/共139页for ( k = 1; k = 4; k = k+1 )sum=0;if ( k != 1 ) sum = sum+1; / 如A的话为真, 则让sum加1;if ( k =3 ) sum = sum+1; / 如B的话为真,则让sum加1;if ( k =4 ) sum = sum+1; / 如C的话为真,则让sum加1

36、;if ( k != 4 ) sum = sum+1; / 如D的话为真,则让sum加1; . . . 3.6 分支语句第72页/共139页/ */ * 程 序 名:3_7.cpp */ * 作 者:wuwh */ * 编制时间:2001年8月 */ * 主要功能:谁做的好事 */ *#include / 预编译命令void main() / 主函数 / 主函数开始int k=0,g=0; / 声明变量为整数类型,且均初始化为0for(k=1;k=4;k=k+1) / k既是循环控制变量,也表示第k个人 / for 循环体开始if (k!=1)+(k=3)+(k=4)+(k!=4)=3) /

37、如果4句话有3句话为真,则输出该人/ 输出做好事者cout 做好事者为 char(64+k) endl;g=1; / 有解标志置1 / for 循环体结束if (g!=1) / 则输出无解信息 cout Cant found! endl; / 主函数结束3.6 分支语句第73页/共139页for ( k = 1; k = 4 ; k = k+1 )if (k!=1)+(k=3)+(k=4)+(k!=4)=3) cout 做好事者为 char(64+k) endl; g=1; 3.6 分支语句第74页/共139页 for( k= 1; k= 4; k= k+ 1 ) if ( ( ( k !=

38、1) + ( k = 3) + ( k = 4 ) + ( k != 4 ) ) = 3 ) cout “做好事者为” char( 64+ k )b)?a:b,先运行(ab)的条件运算条件运算符的优先级比关系运算符及算术运算符低, 因此,(ab)的括号可以不要条件运算符的结合方向为“ 自右向左”, 如:ab?a:cd?c:d 等价于 ab?a:(cd?c:d) 若a=5,b=15,c=25,d=35,那么整个表达式的值为35条件表达式不能替代一般的if语句三个表达式的类型可以不一样,但最终类型为表达式2和表达式3中的较高者, 如x? a : b 3.6 分支语句第78页/共139页五、swit

39、ch 语句Switch语句是多分支选择语句,不象if,只有两个分支可供选择,在分类运算中,经常用到 一般形式switch (表达式) 可以是整型、字符型、枚举型 case 常量表达式 1:语句1 case 常量表达式 2:语句2 每个常量表达式的值不能相 case 常量表达式 n:语句n 同,次序不影响执行结果 default : 语句n+1 可以是多个语句,但不必用 执行顺序以case中的常量表达式值为入口标号,由此开始顺序执行。因此,每个case分支最后应该加break语句。3.6 分支语句第79页/共139页使用switch语句应注意的问题 case分支可包含多个语句,且不用 表达式、判

40、断值都是int型或char型 若干分支执行内容相同可共用一组语句第80页/共139页EXAMPLE 例2-2.c 计算工资水平下的税率,注意用数值型和字符型 表达式,不过多个case也可以执同一组语句。第81页/共139页main()main() char a;char a;int b,c;int b,c;printf(1-Please input the salary leveln);printf(1-Please input the salary leveln);printf(Between 1 to 4, which is char typen);printf(Between 1 to

41、4, which is char typen);scanf(%c,&a);scanf(%c,&a);switch (a)switch (a) case 1 : printf(tax=100%n); break; case 1 : printf(tax=100%n); break; case 2 : printf(tax=50%n); break; case 2 : printf(tax=50%n); break; case 3 : printf(tax=30%n); break; case 3 : printf(tax=30%n); break; case 4 : printf

42、(tax=8%n); break; case 4 : printf(tax=8%n); break; default : printf(tax=0%n); break; default : printf(tax=0%n); break; printf(n2-Please input the salary leveln);printf(n2-Please input the salary leveln);printf(Between 1 to 4, which is int typen);printf(Between 1 to 4, which is int typen);3.6 分支语句第82

43、页/共139页scanf(%d,&b);scanf(%d,&b);switch (b)switch (b) case 1 : printf(tax=100%n); break; case 1 : printf(tax=100%n); break; case 2 : printf(tax=50%n); break; case 2 : printf(tax=50%n); break; case 3 : printf(tax=30%n); break; case 3 : printf(tax=30%n); break; case 4 : printf(tax=8%n); break;

44、 case 4 : printf(tax=8%n); break; default : printf(tax=0%n); break; default : printf(tax=0%n); break; printf(nPlease input the salary leveln);printf(nPlease input the salary leveln);printf(between 1 to 4, which is int typen);3.6 分支语句第83页/共139页scanf(%d,&c);scanf(%d,&c);switch (c)switch (c) ca

45、se 1 : case 1 : case 2 : case 2 : case 3 : printf(tax=30%n); break; case 3 : printf(tax=30%n); break; case 4 : printf(tax=8%n); break; case 4 : printf(tax=8%n); break; default : printf(tax=0%n); break; default : printf(tax=0%n); break; / /* * multi-case 13, share with the case 3 multi-case 13, share

46、 with the case 3 * */ / 3.6 分支语句第84页/共139页 输入输出是往往程序最基本的功能,也是程序中最重要的组成部分。C语言中的输入/输出都是由库函数完成的,因此都是函数语句。3.7 输入输出语句第85页/共139页函数printf函数的最简单形式 最简单形式中输出项序列可以省略。此时成为如下格式: printf(输出提示信息字符串) 转义字符的使用 转义字符用来完成某种特定的控制功能。例如:n使程序执行时换行。 3.7 输入输出语句第86页/共139页printf函数调用的一般形式 printf函数是一个标准库函数,在使用时它可以带两个参数:输出格式控制及输出项序

47、列。printf函数调用的一般形式为: printf(格式控制字符串,输出项序列) 其中格式控制字符串必须用引号()括起来,用于指定输出格式。注意不能使用汉字操作系统中的全角引号(“”)。格式控制串可由格式字符串和非格式字符串两种组成。格式字符串是以%开头的字符串,在%后面跟有各种格式字符,以说明输出数据的类型、形式、长度、小数位数等。非格式字符串输出原样,通常用于显示提示信息。输出项序列中包括各个输出项。注意格式字符串和各输出项在数量和类型上必须一一对应。 3.7 输入输出语句第87页/共139页格式字符串 格式说明符的作用是规定输出的形式。它用一个字母来表示。其完整形式为: % 标志0输出

48、最小宽度 .精度 长度类型 其中方括号中的项为可选项。%为格式控制字符串的引导字符,是不可缺少的。 1 类型 类型字符用以表示输出数据的类型。 )3.7 输入输出语句第88页/共139页 2 标志 常用的标志字符是-和+。其作用是指定输出的数据左对齐或右对齐。具体说: - 结果左对齐,右边填空格 + 结果右对齐,左边填空格 【例5-13】(见课本) 3 指定输出宽度 使用以下格式来指定输出宽度: m.n 若输出的结果是实数,则m指定该数的总位数(包括小数点),n指定该数的小数位数。若实际位数多于定义的宽度,则按实际位数输出,若实际位数少于定义的宽度则补以空格或0。 3.7 输入输出语句第89页

49、/共139页 4 长度 可以在字符d,o,x,u前面加字母l(不是数字1,而是字母L的小写)或h,来指定不同的输出精度。对于整数而言,h表示按短整型量输出,l表示按长整型量输出。对于实数而言,l表示按double形式输出。 5 选项0 此选项指定对空位置是否以数字0填充。默认的情况下,为省略0,此时对空白位置用空格填充。 3.7 输入输出语句第90页/共139页函数 scanf函数称为格式输入函数,其作用是按指定的格式用键盘把数据输入到变量。scanf函数的一般形式 scanf函数是一个标准库函数。但是,与printf函数相同,允许在使用scanf函数之前不必包含stdio.h文件。scanf

50、函数的一般形式为: scanf(“格式控制字符串”,输入项序列);3.7 输入输出语句第91页/共139页scanf函数的格式说明符 格式控制字符串的作用与printf函数相同,但不能用来显示非格式字符串,也就是不能显示提示字符串。输入项序列必须使用地址, 地址由地址运算符“&”和变量名组成。如&a,&b分别表示变量a和变量b的地址。也就是说,直接给变量的地址中存入数值。 在scanf语句的格式串中一般没有间隔符,因此应每输入一个数据就按一下或空格。使用scanf函数的注意事项 不能在scanf函数实现精度控制。 scanf中只能使用变量地址,不能使用变量名; 可以使用

51、空格以及逗号(,)等作为间隔符号,则此时输入数据时也要使用间隔符号3.7 输入输出语句第92页/共139页getch与getchar函数 getch与getchar函数的功能是从键盘上输入一个字符,其返回值是一个整数,这个整数就是输入字符的ASCII码值。函数不需要参数,其一般形式为: getchar(); getch(); 其使用方法有以下两种。其一,把函数得到的字符代码值赋给一个字符或整型变量;其二,把函数得到的字符代码值直接作为表达式的一部分,不赋给变量。 3.7 输入输出语句其它输入输出函数第93页/共139页 使用getchar函数还应注意几个问题:l getch与getchar函数

52、只能接受单个字符,输入数字也按字符处理。输入多个字符时,则只接收第一个字符;l 使用函数前必须在程序开头使用以下语句: #include l g e tch 与 g e tch a r的 区 别 在 于 : g e tc h 函 数 立 即 接 收 用 户 的 输 入 , 而getchar函数则在用户按了后才接收输入; 3.7 输入输出语句第94页/共139页gets函数 本函数用来从键盘接收一个字符串。与scanf函数不同,gets函数接收的字符串中可以有空格。本函数在屏幕显示用户输入的信息。gets函数的格式为: 字符串变量名=gets() putch与putchar函数 此两函数均可在屏

53、幕上显示一个字符,其格式为: putch(字符) 或者 putch(变量) putchar(字符) 或者 putchar(变量) 这里所说的一个字符也可以是一个转义符号。注意格式中只能使用英文单引号。 3.7 输入输出语句第95页/共139页puts函数 本函数用来输出一个字符串。puts函数可以使用以下两个格式: puts(字符串); puts(字符串变量名); 这里所说的一个字符也可以是一个转义符号。注意格式中只能使用英文双引号。 3.7 输入输出语句第96页/共139页某地刑侦大队对涉及六个嫌疑人的一桩疑案进行分析: A、B 至少有一人作案; A、E、F 三人中至少有两人参与作案; A、

54、D 不可能是同案犯; B、C 或同时作案,或与本案无关; C、D 中有且仅有一人作案; 如果 D 没有参与作案,则 E 也不可能参与作案。试编一程序,将作案人找出来。3.8 逻辑判断与解题思路第97页/共139页1、逻辑与,运算符为 & B A A&B 3.8 逻辑判断与解题思路第98页/共139页1 1 表示真,表示真,0 0 表示假,表示假,这是逻辑变量的取值,非真即假这是逻辑变量的取值,非真即假3.8 逻辑判断与解题思路第99页/共139页2、逻辑或,运算符为| B A A|B 3.8 逻辑判断与解题思路第100页/共139页1 1 表示真,表示真,0 0 表示假表示假3

55、.8 逻辑判断与解题思路第101页/共139页3、逻辑非,运算符为 !两队比赛篮球,变量 A 表示 A 队到场,!A 表示 A 队不到场,变量 B 表示 B 队到场,!B 表示 B 队不到场。这场球赛能够赛成,得两队都到场。假定 “能赛成” 用逻辑变量 C 表示,则C = A & B3.8 逻辑判断与解题思路第102页/共139页3.8 逻辑判断与解题思路第103页/共139页思路:思路:3.8 逻辑判断与解题思路第104页/共139页CC1:A和B至少有一人作案令 A 变量表示 A 作案,B 变量表示 B 作案3.8 逻辑判断与解题思路第105页/共139页CC2:A和D不可能是同案

56、犯可以分析为: A 如果是案犯,D一定不是案犯,写成A & ( !D ) D 如果是案犯,A一定不是案犯,写成 D &( !A ) A 和 D 都不是案犯,写成 (!A) & (!D)这三者之间是或的关系,因此有CC2 = !( A & D )3.8 逻辑判断与解题思路第106页/共139页CC2 = !( A & D )3.8 逻辑判断与解题思路第107页/共139页CC3:A、E、F 中至少有两人涉嫌作案分析有三种可能 第一种,A 和 E 作案,(A & E) 第二种,A 和 F 作案,(A & F) 第三种,E 和 F 作案,(E

57、& F)这三种可能性是 或 的关系,因此有CC3 = (A & E)|(A & F)|(E & F)我们写出 CC3 的真值表。3.8 逻辑判断与解题思路第108页/共139页3.8 逻辑判断与解题思路第109页/共139页CC4:B和C或同时作案,或都与本案无关 第一种情况:同时作案(B & C) 第二种情况:都与本案无关(!B & !C)两者为或的关系,因此有 CC4 = (B & C) | (!B & !C)3.8 逻辑判断与解题思路第110页/共139页CC5:C、D中有且仅有一人作案CC5=(C & !D) |

58、(D & !C)3.8 逻辑判断与解题思路第111页/共139页CC6:如果D没有参与作案,则E也不可能参与作案。分析这一条比较麻烦一些,可以列出真值表再归纳3.8 逻辑判断与解题思路第112页/共139页() ()()()DEDEDEDEDEDEDED EEE DDDECC6=D | !E以上是案情分析,已经化成了计算机可解的逻辑表达式以上是案情分析,已经化成了计算机可解的逻辑表达式DDEE3.8 逻辑判断与解题思路第113页/共139页 6个人每个人都有作案或不作案两种可能,因此有 种组合,从这些组合中挑出符合6条分析的作案者。 定义 6 个整数变量,分别表示 6 个人A,B,C,

59、D,E,F。枚举每个人的可能性让让 0 表示不是罪犯;表示不是罪犯;让让 1 表示就是罪犯。表示就是罪犯。623.8 逻辑判断与解题思路第114页/共139页3.8 逻辑判断与解题思路第115页/共139页 写一个从000000到111111的程序for( A=0;A=1;A=A+1) for( B=0;B=1;B=B+1) for( C=0;C=1;C=C+1) for( D=0;D=1;D=D+1) for( E=0;E=1;E=E+1) for( F=0;F=1;F=F+1) coutABCDEF endl; 3.8 逻辑判断与解题思路第116页/共139页 for( F=0;F=1;F

60、=F+1) coutABCDEF endl; 循环体3.8 逻辑判断与解题思路第117页/共139页 for( E=0;E=1;E=E+1) for( F=0;F=1;F=F+1) coutABCDEF endl; 循环体3.8 逻辑判断与解题思路第118页/共139页 for( D=0;D=1;D=D+1) for( E=0;E=1;E=E+1) for( F=0;F=1;F=F+1) coutABCDEF endl; 循环体3.7 逻辑判断与解题思路第119页/共139页 for( A=0;A=1;A=A+1) for( B=0;B=1;B=B+1) 循 for( C=0;C=1;C=C+1) 环 for( D=0;D=1;D=D+1) 体 for( E=0;E=1;E=E+1) for( F=0;F=1;F=F+1) coutABCDEF endl; 3.7 逻辑判断与解题思路第120页/共139页 输输 出出 C C 1 + C C 2 + C C 3 + C C 4 + C C 5 + C C 6 = = 6 假假 真真 C C 1 = A |B ; C C 2 = !(A & & D ); C C 3 = (A & & E )|(A & & F )

温馨提示

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

评论

0/150

提交评论