收藏 分享(赏)

C语言教学习题课1.ppt

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

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

2、程语句 C语言提供了丰富、灵活的控制流程语句, 主要有:条件语句、循环语句和开关语句。.ifelse条件语句、dowhile, while 和for循环语句。.下面将对这些语句作详细介绍。,一.算法概论就一个具体的应用而言,总是要求它能解决特定的问题,达到预定的目的。换句话说,就是要保证程序的 “正确性”和“可行性”。因此,在设计程序前,根据实际问题的特点和需求,再考虑计算机的工作特性,确定解决某个问题所需的方法和步骤是至关重要且是不可缺少的。这一步骤称为 “算法设计”。,计算机算法分为两类:数值计算算法和非数值计算算法。数值计算算法如微分方程的数值解等;非数值计算算法如排序和查找等。非数值计

3、算算法已经成为一门专门的学科:“计算方法”。,2.算法举例例1:求两个自然数的最大公约数的欧几里德算法。S1:输入两个自然数M、N;S2:求M除以N的余数R;S3:使M=N,即用N代换M;S4:使N=R, 即用R代换N;S5:若R不等于零,则重复执行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”的信息,算法结束,否则转S5S5:使I=

4、I+1,计数器计数;S6:若I N,则重复S3、S4、S5(循环),否则转S7;S7:输出“找不到S” 的信息,算法结束。这是一个非数值计算算法(顺序查找算法)的,,3.算法的特征 (1)确定性即算法本身无二义性; (2)可行性 (3)有穷性即算法必须是在有限步骤里完成。 (4)输入性 (5)输出性一个算法必须有一个或多个输出。,4.算法的描述算法可以采用多种方式来表示:自然语言(如英语、汉语等)、用图形或符号类描述等。用于描述算法的图形使用较多的是流程框图,简称流程图。它是使用规定的图形符号来描述算法的。流程图使用的符号如下:,输入/输出,处理,判断,起点和终点,特定过程,流程线,连接点,下

5、图分别是前面介绍的两个算法的流程图:,开始,输入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.基本算法结构 根据结构化程序设计的要求,有三种基本算法结构:(1)顺序结构(2)分支结构(3)循环结构(当型循环和直到型循环),三种基本结构的共同特点:(1)单入单出;(2)结构中的每个部分都有可能被执行;(3)在给出合理的 e 条件后,结构内不存在死循环。,A,B,顺序结构,e,A,B,真,假,分支结构,e,A,True,False,e,A,False,True,当型循环,

6、直到型循环,循环结构,6.算法的实现 算法的实现是指使用某种计算机程序设计语言把算法描述出来。 具体地说,也就是使用某一种程序设计语言所提供的语言成分,根据语言的特点,并利用语言提供的各种工具和手段,遵循规定的语法规则去实现算法(编码)。 c就是一种实现算法的程序设计语言。并且它完全支持结构化程序设计开发方法,并提供相应的语言成分做支持。(如提供三种基本算法结构的语言成分等。),二、 赋值语句1. 赋值语句是程序中最简单、最常用的语句。赋值语句的一般形式是:Var = 例如:x = 123s = “Hello World”这里的“ = ”号不是数学上的等号,它只是把右边表达式的值送给左边的变量

7、,没有相等的含义。赋值时左边和右边一般数据类型应一致。,例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,%dn”,+a,b-,b); 如果加一句:printf(“%d,%d”,a,b);结果如何? 再加一句:printf(“%d,%d,%dn”,+a,b-,-b) 请大家上机验证。,2.数据的输入/输出:主要是由格式输入/出函数printf( )和scanf( )与字符数据的输入/出函数putchar( )和ge

8、tchar( )。用户在程序中直接使用。 例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 ); ,例4:用*号输出字母C的图案。 1.程序分析:可先用*号在纸上写出字母C,再分行输出。 2.程序源代码: #include “stdio.h“ main() printf(“Hello C-world!n“); printf(“ *n“); printf(“ *n“);

9、 printf(“ * n“); printf(“ *n“); ,讨论:分析程序:#include”stdio.h” main( )printf(“%dn”,25);printf(“%xn”,25);printf(“%on”,25);printf(“%fn”,(float)25);,三. 条件语句 象其它语言一样 C语言也提供条件语句。在 C语言中条件语句的一般形式为: if(表达式) 语句1; else 语句2; 上述结构表示: 如果表达式的值为非0(TURE)即真, 则执行语句1, 执行完语句1从语句2后开始继续向下执行; 如果表达式的值为0(FALSE)即假, 则跳过语句1而执行语句2。

10、所谓表达式是指关系表达式和逻辑表达式的结合式, 关于表达式前面已作过介绍, 这里不再重复。,注意: 1. 条件执行语句中“else 语句2;”部分是选择项, 可以缺省, 此时条件语句变成: if(表达式) 语句1; 表示。若表达式的值为非0,则执行语句1 , 否则跳过语句1继续执行。 注:这是if语句的一种形式,2. 如果语句1或语句2有多于一条语句要执行时, 必须使用“”和“” 把这些语句包括在其中, 此时条件语句形式为: if(表达式) 语句体1; else 语句体2; ,1. if-else 结构语句形式: If e A组语句 Else B组语句 分支结构有多种变形。 如不对称分支和多分

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

12、( ) 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。最后这个else常起着“缺省条件”的作用。同样, 如果每一个条件中有多于一条语句要执行时, 必须使

13、用“”和“”把这些语句包括在其中。,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:输入三个整数x,y,z,请把这三个数由小到大输出。 1.程序分析:我们想办法把最小的数放到x上

14、,先将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岁。请问第五个人多大? 1.程序分析:利用递归的方法,递归分为回推和递推两个

15、阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(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.程序分析:字符共有256 2.程序源代码: #include “stdio.h“ main() char a=176,b=219; printf(“%c%c%c%c%cn“,b,a,a,a,b); printf(“%c%c%c%c%cn“,a,b,a

16、,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

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

18、intf(“%dn“, test); break; /*退出开关语句*/ case 2: printf(“%dn“, test);,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); br

19、eak; /*退出开关语句*/ case B: putchar(c); break; default: /*接收的字符非A和B*/ printf(“Error“); break; ,例9:输入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:利用条件运算符的嵌套来完成此

20、题:学习成绩=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。 1.程序分析:(ab)?a:b这是条件运算符的基本例子。 2.程序源代码:,main() int score;char grade;printf(“please input a scoren“);scanf(“%d“, ,四、循环结构与循环结构语句循环也是程序的基本算法结构。所谓循环,就是重复执行某些操作。循环结构主要包括:当型结构和直到型结构。并且每种结构又有两种不同的执行方式(先判断再执行和先执行再判断)。C语言提供三种基本的循环语句: for语句、while语句和do-while语句。,循环体语句,e

21、,True,False,形式1,While (表达式) 语句执行过程:计算表达式的值,当值为真时,执行循环体语句。其特点是:先判断,后执行。注:循环体可能一次都不执行。,循环结构语句 :(三种形式),循环体语句,e,True,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( “

22、%d” ,分析程序执行过程.,例3: 分析下面程序运行情况,并解决了什么问题?1 main( ) int a, b , x ;printf( “input a, b=?”);scanf( “%d, %d “ , ,例4: 输出几个“we study C语言!”?main( ) int 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

23、=sum+x;printf(“2+4+6+100=%d” ,sum);,例6: #include main() char c; c=0; /*初始化c*/ while(c!=X0D) /*回车结束循环*/ c=getche(); /*带回显的从键盘接收字符*/ 上例中, while循环是以检查c是否为回车符开始, 因其事先被初始化为空, 所以条件为真, 进入循环等待键盘输入字符; 一旦输入回车, 则c=X0D, 条件为假, 循环便告结束。 与for循环一样, while循环总是在循环的头部检验条件, 这就意味着循环可能什么也不执行就退出。,注意: 1. 在while循环体内也允许空语句。 例如

24、: 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: #include”stdio.h”main( ) int a,b,x;do scanf(“%d,%d”, 注:与前面例3有何不同?While循环与dowhile循环分别在什么情况下使用?(作业),例9 : 下

25、例程序功能是什么?(作业) #include“stdio.h“#include“conio.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(; ; ) 语句; 初始化总是一个赋值语句, 它用来给循环控制变量赋初值; 条件表达式是一个关系表达式, 它决定什么时候退出循环; 增量定义循环控制变量每循环一次后按什么方式

26、变化。这三个部分之间用“;“分开。,计算表达式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. for循环中的“初始化”、“条件表达式”和“增量”都是选择项, 即可以缺省, 但“;”不能缺省。省略了初始化,

27、表示不对循环控制变量赋初值。 省略了条件表达式, 则不做其它处理时便成为死循环。省略了增量, 则不对循环控制变量进行操作, 这时可在语句体中加入修改循环控制变量的语句。,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 0 1 1 1,例12:分析下列程序代码

28、:main( ) int i , s;for( i=0; i 50;i+) i=i+3;s=s+i;if ( i10) printf(“s=%d”,s); 对这题进一步分析:,#include“stdio.h“ main( ) 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/

29、2; 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.h“ main() int I , j , result;printf(“n“);for (i=1;i10;i+) for(j=1;j10;j+), resu

30、lt=i*j; printf(“%d*%d=%-3d“,i,j,result);/*-3d表示左对齐,占3位*/ printf(“n“); /*每一行后换行*/ ,3、循环嵌套 循环嵌套:即大循环中套小循环。无论是Do-Loop循环,还是 For-Next循环,都可以进行循环嵌套。 注意:小循环一定要完整地包含在大循环内,不得相互交叉。 示例: For i=e1 To e2 Step e3For j=d1 to d2 Step d3Next jNext i,思考题:Press any key to change color, do you want to try it. Please hurr

31、y up! 1.程序分析: 2.程序源代码: #include void main(void) 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-)pri

32、ntf( “*”);printf(“n”);a=a+1; 为什么会出现这样结果?请问如何修改?,#include“stdio.h“ main( ) int a=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(tes

33、t=0; test=10; test+) switch(test) /*变量为整型数的开关语句*/ case 1: printf(“%dn”, test); break; /*退出开关语句*/ case 2: printf(“%dn“, test); break; case 3: printf(“%dn“, test); break; default: puts(“Error“); break; ,关于 break、continue和goto语句 1. break语句 break语句通常用在循环语句和开关语句中。当break用于开关语句switch中时, 可使程序跳出switch而执行swit

34、ch以后的语句; 如果没有break语句, 则将成为一个死循环而无法退出。break在switch 中的用法已在前面介绍开关语句时的例子中碰到, 这里不再举例。 当break语句用于do-while、for、while循环语句中时, 可使程序终止循环而执行循环后面的语句, 通常break语句总是与if语句联在一起。 即满足条件时便跳出循环。,例如: main() int i=0; char c; while(1) /*设置循环*/ c=0; /*变量赋初值*/ while(c!=13 ,注意: 1. break语句对if-else的条件语句不起作用。 2. 在多层循环中, 一个break语句只

35、向外跳一层。 2. continue 语句 continue语句的作用是跳过循环本中剩余的语句而强行执行下一次循环。 continue语句只用在for、while、do-while等循环体中, 常与if条件语句一起使用, 用来加速循环。,例如: main() char c; while(c!=0X0D) /*不是回车符则循环*/ 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)conti

36、nue;if(i%10=0)printf(“%dn”,n);elseprintf(“%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“); ,

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报