C语言教学习题课.ppt

上传人:小飞机 文档编号:6503861 上传时间:2023-11-07 格式:PPT 页数:92 大小:279.49KB
返回 下载 相关 举报
C语言教学习题课.ppt_第1页
第1页 / 共92页
C语言教学习题课.ppt_第2页
第2页 / 共92页
C语言教学习题课.ppt_第3页
第3页 / 共92页
C语言教学习题课.ppt_第4页
第4页 / 共92页
C语言教学习题课.ppt_第5页
第5页 / 共92页
点击查看更多>>
资源描述

《C语言教学习题课.ppt》由会员分享,可在线阅读,更多相关《C语言教学习题课.ppt(92页珍藏版)》请在三一办公上搜索。

1、C语言教学习题课1 学习目的:对于很多专业的学生来讲,c语言是门很重要基础语言,也是我们专业基础课。它是现今应用最为广泛的几种语言之一。在实际编程中,它有其他语言无法比拟的优势。在学习的同时,其主要是培养自己的优良的编程风格,掌握几种基本的编程方法和基本算法。同时开拓自己的思维方式。,控制流程语句 1、教学要求:.熟练掌握if语句的三种形式。.掌握switch语句的一般形式,并能把复杂的分支结构化成switch语句。.熟练掌握while循环语句和dowhile循环的使用。.熟悉for 循环的使用.了解各循环的不同点。.学会使用goto语句和if 语句构成循环。,2、教学内容 控制流程语句 C语

2、言提供了丰富、灵活的控制流程语句,主要有:条件语句、循环语句和开关语句。.ifelse条件语句、dowhile,while 和for循环语句。.下面将对这些语句作详细介绍。,一.算法概论 就一个具体的应用而言,总是要求它能解决特定的问题,达到预定的目的。换句话说,就是要保证程序的“正确性”和“可行性”。因此,在设计程序前,根据实际问题的特点和需求,再考虑计算机的工作特性,确定解决某个问题所需的方法和步骤是至关重要且是不可缺少的。这一步骤称为“算法设计”。,1.算法的概念 广义地讲:算法是解决某个问题或处理某件事的方法和步骤。狭义地讲:专指计算机解决某个问题的方法和步骤。即一个算法就是一个有穷规

3、则的集合,其中的规则规定了一个 解决某一特定类型问题的运算系列。计算机算法分为两类:数值计算算法和非数值计算算法。数值计算算法如微分方程的数值解等;非数值计算算法如排序和查找等。非数值计算算法已经成为一门专门的学科:“计算方法”。,计算机算法分为两类:数值计算算法和非数值计算算法。数值计算算法如微分方程的数值解等;非数值计算算法如排序和查找等。非数值计算算法已经成为一门专门的学科:“计算方法”。,2.算法举例 例1:求两个自然数的最大公约数的欧几里德算法。S1:输入两个自然数M、N;S2:求M除以N的余数R;S3:使M=N,即用N代换M;S4:使N=R,即用R代换N;S5:若R不等于零,则重复

4、执行S2、S3、S4(循环),否 则转S6;S6:输出M,M即为M和N的最大公约数。这是一个数值计算算法。,例2:在N个字符串数据集合中,查找有无特定的字符串S。(模式匹配)S1:输入N个字符串和要查找的字符串S;S2:使I=1,I用于计数;S3:从N个字符串数据集合读一个字符串X;S4:若X=S,输出“找到S”的信息,算法结束,否则转S5 S5:使I=I+1,计数器计数;S6:若I N,则重复S3、S4、S5(循环),否则转S7;S7:输出“找不到S”的信息,算法结束。这是一个非数值计算算法(顺序查找算法)的,,3.算法的特征(1)确定性 即算法本身无二义性;(2)可行性(3)有穷性 即算法

5、必须是在有限步骤里完成。(4)输入性(5)输出性 一个算法必须有一个或多个输出。,4.算法的描述 算法可以采用多种方式来表示:自然语言(如英语、汉语等)、用图形或符号类描述等。用于描述算法的图形使用较多的是流程框图,简称流程图。它是使用规定的图形符号来描述算法的。流程图使用的符号如下:,输入/输出,处理,判断,起点和终点,特定过程,流程线,连接点,下图分别是前面介绍的两个算法的流程图:,开始,输入M、N,求R=M%N,M=N,N=R,输出M、N,R 0,结束,是,开始,输入N、S,输入M、N,X=S,结束,是,I=1,读入X,I=I+1,IN,输出找到S,是,5.基本算法结构 根据结构化程序设

6、计的要求,有三种基本算法结构:(1)顺序结构(2)分支结构(3)循环结构(当型循环和直到型循环),三种基本结构的共同特点:(1)单入单出;(2)结构中的每个部分都有可能被执行;(3)在给出合理的 e 条件后,结构内不存在死循环。,A,B,顺序结构,e,A,B,真,假,分支结构,e,A,True,False,e,A,False,True,当型循环,直到型循环,循环结构,6.算法的实现 算法的实现是指使用某种计算机程序设计语言把算法描述出来。具体地说,也就是使用某一种程序设计语言所提供的语言成分,根据语言的特点,并利用语言提供的各种工具和手段,遵循规定的语法规则去实现算法(编码)。c就是一种实现算

7、法的程序设计语言。并且它完全支持结构化程序设计开发方法,并提供相应的语言成分做支持。(如提供三种基本算法结构的语言成分等。),二、赋值语句 1.赋值语句是程序中最简单、最常用的语句。赋值语句的一般形式是:Var=例如:x=123 s=“Hello World”这里的“=”号不是数学上的等号,它只是把右边表达式的值送给左边的变量,没有相等的含义。赋值时左边和右边一般数据类型应一致。,例1:分析下面程序:#include”stdio.h”main()int a,b=4;a=b+;printf(“%d,%dn”,+a,b-);,分析:main()a,b=4;a=b+;printf(“%d,%d,%d

8、n”,+a,b-,b);如果加一句:printf(“%d,%d”,a,b);结果如何?再加一句:printf(“%d,%d,%dn”,+a,b-,-b)请大家上机验证。,2.数据的输入/输出:主要是由格式输入/出函数printf()和scanf()与字符数据的输入/出函数putchar()和getchar()。用户在程序中直接使用。例2:#include”stdio.h”main()int c;char a;c=65;a=A;putchar(c);putchar(a);,例3:输入单个字符#include”stdio.h”main()char c;c=getchar();putchar(c);

9、,例4:用*号输出字母C的图案。1.程序分析:可先用*号在纸上写出字母C,再分行输出。2.程序源代码:#include stdio.hmain()printf(Hello C-world!n);printf(*n);printf(*n);printf(*n);printf(*n);,讨论:分析程序:#include”stdio.h”main()printf(“%dn”,25);printf(“%xn”,25);printf(“%on”,25);printf(“%fn”,(float)25);,三.条件语句 象其它语言一样 C语言也提供条件语句。在 C语言中条件语句的一般形式为:if(表达式)语

10、句1;else 语句2;上述结构表示:如果表达式的值为非0(TURE)即真,则执行语句1,执行完语句1从语句2后开始继续向下执行;如果表达式的值为0(FALSE)即假,则跳过语句1而执行语句2。所谓表达式是指关系表达式和逻辑表达式的结合式,关于表达式前面已作过介绍,这里不再重复。,注意:1.条件执行语句中“else 语句2;”部分是选择项,可以缺省,此时条件语句变成:if(表达式)语句1;表示。若表达式的值为非0,则执行语句1,否则跳过语句1继续执行。注:这是if语句的一种形式,2.如果语句1或语句2有多于一条语句要执行时,必须使用“”和“”把这些语句包括在其中,此时条件语句形式为:if(表达

11、式)语句体1;else 语句体2;,1.if-else 结构语句 形式:If e A组语句 Else B组语句 分支结构有多种变形。如不对称分支和多分支结构。,表达式,语句,语句,真,假,分支结构,例1:分析:#include”stdio.h”main()int a;printf(“输入一个整数:n”);scanf(“%d”,注意:表达式if(a)等价于if(a!=0),表达式,语句,真,假,If(表达式)语句 执行过程:如果表达式的值为真时,则执行后面的语句,否则不执行该语句。直接执行if下面的语句。,不对称分支结构,实现,例2:求较大数的平方值。#include“stdio.h”main(

12、)int a,b,s;printf(“input a,b:”);scanf(“%d,%d”,分析程序执行过程。,例3:分析 main()int x;printf(“请输入一个数:”);scanf(“%d”,printf(“输入的是负数“);作业:编程计算a+|b|的值。,3.阶梯式if-else-if结构。阶梯式结构的一般形式为:if(表达式1)语句1;else if(表达式2)语句2;else if(表达式3)语句3;.else 语句n;,这种结构是从上到下逐个对条件进行判断,一旦发现条件满点足就执行与它有关的语句,并跳过其它剩余阶梯;若没有一个条件满足,则执行最后一个else语句n。最后这

13、个else常起着“缺省条件”的作用。同样,如果每一个条件中有多于一条语句要执行时,必须使用“”和“”把这些语句包括在其中。,e1,e2,e3,A1,A2,A3,True,False,True,False,True,False,多分支结构,if e1 A1 组语句 else If e2 A2 组语句 Else if e3 A3 组语句 实现,例4:完成下列程序代码:要求输入成绩,给出相应的等级。#include”stdio.h”main()float x;char y;printf(“请输入学生成绩:”);scanf(“%f”,x);If x=90 y=A;Elseif x=80,例5:输入三个

14、整数x,y,z,请把这三个数由小到大输出。1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果xy则将x与y的值进行交换,然后再用x与z进行比较,如果xz则将x与z的值进行交换,这样能使x最小。2.程序源代码:,main()int x,y,z,t;scanf(%d%d%d,#include”stdio.h”main()int x,y,z,t;scanf(%d%d%d,思考题:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大

15、?1.程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。,2.程序源代码:age(n)int n;int c;if(n=1)c=10;else c=age(n-1)+2;return(c);main()printf(%d,age(5);,例6:输出特殊图案,请在c环境中运行,看一看!1.程序分析:字符共有2562.程序源代码:#include stdio.hmain()char a=176,b=219;printf(%c%c%c%c%cn,b,a,a,a,b);printf(%c%c%c%c%cn,a,b,

16、a,b,a);printf(%c%c%c%c%cn,a,a,b,a,a);printf(%c%c%c%c%cn,a,b,a,b,a);printf(%c%c%c%c%cn,b,a,a,a,b);,4.开关语句 在编写程序时,经常会碰到按不同情况分转的多路问题,这时可用嵌套if-else-fi语句来实现,但if-else-if语句使用不方便,并且容易出错。对这种情况,C语言提供了一个开关语句。,开关语句格式为:switch(变量)case 常量1:语句1或空;case 常量2:语句2或空;.case 常量n;语句n或空;default:语句n+1或空;,执行switch开关语句时,将变量逐个与c

17、ase后的常量进行比较,若与其中一个相等,则执行该常量下的语句,若不与任何一个常量相等,则执行default 后面的语句。,注意:1.switch中变量可以是数值,也可以是字符。2.可以省略一些case和default。3.每个case或default后的语句可以是语句体,但不需要使用“”和“”括起来。下例的switch中变量为整数型。,例7:main()int test;for(test=0;test=10;test+)switch(test)/*变量为整型数的开关语句*/case 1:printf(%dn,test);break;/*退出开关语句*/case 2:printf(%dn,te

18、st);,break;case 3:printf(%dn,test);break;default:puts(Error);break;下例的switch中变量为字符型,例8:#include main()char c;c=getchar();while(c=27)/*循环直到按Esc键结束*/c=getchar();/*从键盘不回显接收一个字符*/switch(c)case A:/*接收的字符为A*/putchar(c);break;/*退出开关语句*/case B:putchar(c);break;default:/*接收的字符非A和B*/printf(Error);break;,例9:输入

19、17的整数,将其转换成对应的星期几?#include”stdio.h”main()int x;printf(“请输入17的整数:”);scanf(“%d”,关于?运算符,例如:#include”stdio.h”main()int a,b,c;a=4;b=5;if(c=+a-b?12:13)+a=12;else+a=13;printf(“%d,%d”,a,c);,例10:利用条件运算符的嵌套来完成此题:学习成绩=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。1.程序分析:(ab)?a:b这是条件运算符的基本例子。2.程序源代码:,main()int score;char

20、 grade;printf(please input a scoren);scanf(%d,四、循环结构与循环结构语句 循环也是程序的基本算法结构。所谓循环,就是重复执行某些操作。循环结构主要包括:当型结构和直到型结构。并且每种结构又有两种不同的执行方式(先判断再执行和先执行再判断)。C语言提供三种基本的循环语句:for语句、while语句和do-while语句。,循环体语句,e,True,False,形式1,While(表达式)语句 执行过程:计算表达式的值,当值为真时,执行循环体语句。其特点是:先判断,后执行。注:循环体可能一次都不执行。,循环结构语句:(三种形式),循环体语句,e,Tru

21、e,False,形式2,Do语句 While(表达式)执行过程:先执行循环体语句一次,再判断表达式的值。注:循环体至少要执行一次。,例1:指出程序执行后,结果是什么?main()int x;x=1;while(x20)x=x*3;printf(“x=%d”,x);,例2:输入一个n的值求n!.main()int s,i,n;i=1;s=1;scanf(“%d”,分析程序执行过程.,例3:分析下面程序运行情况,并解决了什么问题?1 main()int a,b,x;printf(“input a,b=?”);scanf(“%d,%d“,例4:输出几个“we study C语言!”?main()in

22、t i=0;while(i5)printf(“%dn”,i+);printf(“we study C语言!”);,例5:求1100之间偶数之和。下面程序是否可行?#include”stdio.h”main()int x,sum;x=0;sum=0;while(x=100);x=x+2;sum=sum+x;printf(“2+4+6+100=%d”,sum);,例6:#include main()char c;c=0;/*初始化c*/while(c!=X0D)/*回车结束循环*/c=getche();/*带回显的从键盘接收字符*/上例中,while循环是以检查c是否为回车符开始,因其事先被初始化

23、为空,所以条件为真,进入循环等待键盘输入字符;一旦输入回车,则c=X0D,条件为假,循环便告结束。与for循环一样,while循环总是在循环的头部检验条件,这就意味着循环可能什么也不执行就退出。,注意:1.在while循环体内也允许空语句。例如:while(c=getche()!=X0D);这个循环直到键入回车为止。2.可以有多层循环嵌套。3.语句可以是语句体,此时必须用“”和“”括起来。,例7:求199之间奇数之和。可行否?main()int x,sum;x=-1;sum=0;do+x;+x;sum=sum+x;while(x99);printf(“1+3+5+99=%d”,sum);,例8

24、:#include”stdio.h”main()int a,b,x;do scanf(“%d,%d”,注:与前面例3有何不同?While循环与dowhile循环分别在什么情况下使用?(作业),例9:下例程序功能是什么?(作业)#includestdio.h#includeconio.h main()int i=0;char c;while(1)c=0;/*变量赋初值*/while(c!=13,if(c=27)break;/*判断若按Esc键则退出循环*/i+;printf(The No.is%dn,i);printf(The end);,2.for循环 它的一般形式为:for(;)语句;初始化

25、总是一个赋值语句,它用来给循环控制变量赋初值;条件表达式是一个关系表达式,它决定什么时候退出循环;增量定义循环控制变量每循环一次后按什么方式变化。这三个部分之间用;分开。,计算表达式1,表达式2?,计算表达式3,循环体,false,true,例如:for(i=1;i10时,结束循环。,例10:main()int p,s;for(p=1;p5;p+)s=p*10;printf(“p=%d,s=%dn”,p,s);printf(“p=%d,s=%d”,p,s);分析这个程序运行情况,注意最后一行输出的p与s的值。,注意:1.for循环中语句可以为语句体,但要用“”和“”将参加循环的语句括起来。2.

26、for循环中的“初始化”、“条件表达式”和“增量”都是选择项,即可以缺省,但“;”不能缺省。省略了初始化,表示不对循环控制变量赋初值。省略了条件表达式,则不做其它处理时便成为死循环。省略了增量,则不对循环控制变量进行操作,这时可在语句体中加入修改循环控制变量的语句。,3.for循环可以有多层嵌套。例11:main()int i,j,k;printf(i j kn);for(i=0;i2;i+)for(j=0;j2;j+)for(k=0;k2;k+)printf(%d%d%dn,i,j,k);,输出结果为:i j k 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1

27、 0 1 1 1,例12:分析下列程序代码:main()int i,s;for(i=0;i 50;i+)i=i+3;s=s+i;if(i10)printf(“s=%d”,s);对这题进一步分析:,#includestdio.hmain()int i,n,s;s=0;for(i=0;i50;i+)i=i+3;s=s+i;if(i10)printf(s=%d,s);printf(“s=%d”,s);,例13:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?程序源代码:,main()float sn=100.0,hn=sn/2;

28、int n;for(n=2;n=10;n+)sn=sn+2*hn;/*第n次落地时共经过的米数*/hn=hn/2;/*第n次反跳高度*/printf(the total of road is%fn,sn);printf(the tenth is%f metern,hn);,例14:输出9*9口诀。1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。2.程序源代码:#include stdio.hmain()int I,j,result;printf(n);for(i=1;i10;i+)for(j=1;j10;j+),result=i*j;printf(%d*%d=%-3d,i,j,re

29、sult);/*-3d表示左对齐,占3位*/printf(n);/*每一行后换行*/,3、循环嵌套 循环嵌套:即大循环中套小循环。无论是Do-Loop循环,还是 For-Next循环,都可以进行循环嵌套。注意:小循环一定要完整地包含在大循环内,不得相互交叉。示例:For i=e1 To e2 Step e3 For j=d1 to d2 Step d3.Next j Next i,思考题:Press any key to change color,do you want to try it.Please hurry up!1.程序分析:2.程序源代码:#include void main(vo

30、id)int color;for(color=0;color 8;color+)textbackground(color);置文本的背景颜色*/cprintf(This is color%drn,color);cprintf(Press any key to continuern);getch();/*输入字符看不见*/,例15:分析下列程序代码:main()int a=1,j;while(a6)if(a%2=1)for(j=1;j=a;j-)printf(“*”);printf(“n”);a=a+1;为什么会出现这样结果?请问如何修改?,#includestdio.hmain()int a=

31、1,j;while(a6)if(a%2=1)for(j=1;j=a;j+)printf(*);printf(n);a=a+1;,4多重循环例15:#include”stdio.h”main()int i,j,k;for(i=1;i=3;i+)for(j=1;j=i;j+)for(k=j;k=3;k+)a=a+1;printf(“a=%d”,a);,例14:main()int test;for(test=0;test=10;test+)switch(test)/*变量为整型数的开关语句*/case 1:printf(“%dn”,test);break;/*退出开关语句*/case 2:print

32、f(%dn,test);break;case 3:printf(%dn,test);break;default:puts(Error);break;,关于 break、continue和goto语句 1.break语句 break语句通常用在循环语句和开关语句中。当break用于开关语句switch中时,可使程序跳出switch而执行switch以后的语句;如果没有break语句,则将成为一个死循环而无法退出。break在switch 中的用法已在前面介绍开关语句时的例子中碰到,这里不再举例。当break语句用于do-while、for、while循环语句中时,可使程序终止循环而执行循环后面的

33、语句,通常break语句总是与if语句联在一起。即满足条件时便跳出循环。,例如:main()int i=0;char c;while(1)/*设置循环*/c=0;/*变量赋初值*/while(c!=13,注意:1.break语句对if-else的条件语句不起作用。2.在多层循环中,一个break语句只向外跳一层。2.continue 语句 continue语句的作用是跳过循环本中剩余的语句而强行执行下一次循环。continue语句只用在for、while、do-while等循环体中,常与if条件语句一起使用,用来加速循环。,例如:main()char c;while(c!=0X0D)/*不是回

34、车符则循环*/c=getch();if(c=0X1B)continue;/*若按Esc键不输出便进行下次循环*/printf(%cn,c);,例如:分析:main()int n,i;i=1;for(n=100;n=150;n+)if(n%3=0)continue;if(i%10=0)printf(“%dn”,n);else printf(“%d,”,n);i+;,3.goto 语句 goto语句是一种无条件转移语句,与BASIC中的goto语句相似。goto 语句的使用格式为:goto 标号;其中标号是Turbo C2.0中一个有效的标识符,这个标识符加上一个:一起出现在函数内某处,执行goto语句后,程序将跳转到该标号处并执行其后的语句。另外标号必须与goto语句同处于一个函数中,但可以不在一个循环层中。通常goto语句与if条件语句连用,当满足某一条件时,程序跳到标号处运行。goto语句通常不用,主要因为它将使程序层次不清,且不易读,但在多层嵌套退出时,用goto语句则比较合理。,上例用goto语句时变为:main()int i=0;char c;while(1)c=0;while(c!=13)c=getch();if(c=27)goto quit;printf(%cn,c);i+;printf(The No.is%dn,i);quit:printf(The end);,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号