【精品】c语言程序设计(可编辑.ppt

上传人:1595****071 文档编号:76396961 上传时间:2023-03-10 格式:PPT 页数:172 大小:2MB
返回 下载 相关 举报
【精品】c语言程序设计(可编辑.ppt_第1页
第1页 / 共172页
【精品】c语言程序设计(可编辑.ppt_第2页
第2页 / 共172页
点击查看更多>>
资源描述

《【精品】c语言程序设计(可编辑.ppt》由会员分享,可在线阅读,更多相关《【精品】c语言程序设计(可编辑.ppt(172页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、C语言程序设计什么是程序 q程序一词来自生活,通常指完成某些事务的一种既定方式和过程q在日常生活中,可以将程序看成对一系列动作的执行过程的描述 2qVC+环境下开发应用程序的步骤建立项目-新建源文件-编码-编译-连接-运行q项目和源程序文件的关系一个项目对应一个程序(即生成一个可执行文件),它可以包含多个源文件或头文件等,但只能有一个main()函数。注:当前我们暂时只会用到一个项目只包含一个源程序文件开发环境的使用3程序编制要求初步q从主函数入手,要求先用注释的形式将算法的思路写出,再分别对算法的每一步用代码实现;q编码风格:特别注意代码行的缩进和空行。4变量q为什么要使用变量?编写程序时,

2、常常需要将数据存储在内存中,需要在程序中访问内存单元,但内存地址是不便于记忆并且让程序员直接管理内存非常复杂。因此让内存地址有一个直观易记的名字且便于访问,而引入了变量。q通常使用变量来存储数据。使用变量可以引用存储在内存中的数据,并随时根据需要显示数据或执行数据操纵。q变量具有三要素:名字、类型、值。5变量的正确使用q变量基本类型的确定(根据问题分析确定)q变量定义的位置一般放置于函数所有语句之前,规范化要求:不允许在函数的其它位置定义变量。q变量命名如无特别含义,建议对变量在程序中代表的含义进行注释8基本输入输出语句的使用qPrintf(“”,)和scanf(“”,)基本格式q格式字符和输

3、出值列表以及地址列表的关系(一一对应原则)q输入提示语句的使用错误用法:printf(“please input a:%d”,w);scanf(“%d”,&w);9printf 函数int visitor_count=150;printf(%d,visitor_count);printf将一些信息按照指定的格式送到标准输出(显示器)%d visitor_count将按指定的格式显示该变量的值转换转换字符串字符串说说 明明%d将参数按整数形式转换输出,对应参数应是int 类型%ld将参数按长整数形式转换输出,对应参数应是long 类型%c输出一个字符,对应参数应该是一个字符%s输出一个字符串,对

4、应参数应该是一个字符串%f将参数按带小数点数形式输出,对应参数应是double 类型,默认情况下精确到 6 位小数10转义序列转义转义序列序列名称名称描述描述a 警告产生一则警告。b 退格将光标回退一格。f 换页将光标移到下一页的第一格。n 换行将光标移到下一行的第一格。r 回车将光标移到当前行的第一格。t 水平制表 将光标移到下一个水平制表位置。v 垂直制表将光标移到下一个垂直制表位置。单引号产生一个单引号。双引号产生一个双引号。?问号产生一个问号。反斜线产生一条反斜线。0 空产生一个空字符。11基本运算符的使用q“/”运算符的特殊情况(两个操作数均为整型为作整除运算)q“%”运算符的要求(

5、两个操作必须为整型)q“+”和“-”运算符一般用于计数器,尽量减少在比较复杂的表达式或语句中使用12类型转换q自动类型转换(隐式转换)q原则:把表示范围小的类型的值转换到表示范围大的类型的值q short int long float double如果需从范围较大的类型值转换为范围较小的类型值,则用下面的强制类型转换。q强制类型转换(显式转换)q语法:(类型名)变量或数值 q例如:int a=5,b=3;float qu=(float)a/b;13字符输入输出函数的使用qgetchar()和putchar()函数的格式q输入缓冲区的正确理解 要求:在字符型数据输入前建议使用缓冲区清空函数ffl

6、ush(stdin)14getchar()和putchar()qgetchar()是从标准输入设备读入一个字符;putchar()是将字符输出到标准输出设备上。qgetchar()函数没有参数;putchar()有一个参数。qgetchar()执行时,虽然是读入一个字符,但并不是直接从键盘上输入一个字符就读入一个字符,而是等到输入完一行按回车后该行字符被送到输入缓冲区后,再从缓冲区取出一个字符,因此为了避免错误的发生,有时需在用此函数前,先清空缓冲区fflush(stdin);qch=getchar();相当于scanf(“%c”,&ch);qputchar(ch);相当于printf(“%c

7、”,ch);15字符型和整型的关系q字符型数据在内存中的表示形式(ASCII码)qASCII码是整数的子集,因此也可以作整数的一般运算q在一般情况下,可以理解为字符型和整型为等价类型,区别在于各自所占的内存单元数存在差异16q“=“判等运算符与“=”赋值运算符的区别 if(operator=-)/将条件换成operator=-表达式结果如何?result=num1-num2;printf(n结果为%d。n,result);else if(operator=+)result=num1+num2;printf(n结果为%d。n,result);else printf(运算符错误,无法计算!n);(

8、教材P197第二题)“=”的正确使用17逻辑运算符 运算运算运算符运算符表达式表达式逻辑“与”&operand1&operand2逻辑“或”|operand1|operand2逻辑“非”!operand1 q逻辑运算符用于连接一个或多个条件,判断这些条件是否成立q逻辑运算符的类型为:18逻辑运算符的正确使用if(a=b)&(a=c)/能否写成(a=b=c|a=c=b)?printf(n%d 为位于最大的数n,a);if(b=a)&(b=c)printf(n%d 为位于最大的数n,b);if(c=b)&(c=a)printf(n%d 为位于最大的数n,c);19条件结构 2-1 q条件结构就是需

9、要根据不同条件进行判断,然后执行不同的操作q简单 if 语句的一般形式为:if()如果条件为真,if 语句执行一个语句或一组语句;如果条件为假,则执行 if 语句后面的语句(如果有)。20条件结构 2-2 q if-else 语句的一般形式为:语句的一般形式为:if()else 如果条件为真,执行 if 后面的一个语句或一组语句;如果条件为假,则执行 else 后面的语句。21IF结构语法注意事项if(xy)/能否在此语句后加分号“;”/*交换x,y的值*/t=x;x=y;y=t;/括号能否省略?if(xz)/*交换x,z的值*/t=z;z=x;x=t;if(yz)/*交换z,y的值*/t=y

10、;y=z;z=t;22IF语句的执行流程 total_cost=cost1+cost2+cost3;discount=0;/此语句能否省略?作用是什么?if(ch=y)|(total_cost=100)discount=total_cost*0.1;if(ch=y)&(total_cost=100)discount=total_cost*0.2;pay=total_cost-discount;printf(n 购物总额=%1.2f 元n,total_cost);printf(n 折扣金额=%1.2f 元n,discount);printf(n 应付总额=%1.2f 元n,pay);23 int

11、 item;float tot_amt,discount,pay_amt;printf(n 请输入购买商品的件数:);scanf(%d,&item);printf(n 请输入购物总金额:);scanf(%f,&tot_amt);if(item=10&tot_amt=10000)discount=(float)(tot_amt*0.10);pay_amt=tot_amt-discount;?printf(n 可得到折扣额=%1.2f$.n,discount);printf(n 折扣后应付金额=%1.2f$.n,pay_amt);24sizeof 运算符 sizeof(int);float num

12、;sizeof(num);24char1int2short int2long4float4double8sizeof 运算符返回的大小q使用 sizeof 运算符可以获得数据类型占用内存空间的大小。其一般形式为:sizeof(type_name)qsizeof 运算符的结果以字节为单位显示注意:在32位计算机中,int类型的变量占4字节的内存大小,和long类型的大小一样,所以现在基本上可以直接使用int类型,而不需要使用long类型。25运算符优先级运算符运算符描述描述结结合性合性()圆括号自左向右!,+,-,sizeof逻辑非,递增,递减,求数据类型的大小自右向左*,/,%乘法,除法,取余

13、自左向右+,-加法,减法自左向右,=小于,小于等于,大于,大于等于自左向右=,!=等于,不等于自左向右&逻辑与自左向右|逻辑或自左向右=,+=,*=,/=,%=,-=赋值运算符,复合赋值运算符自右向左26运算符优先级小结q一般情况下,算术运算符关系运算符逻辑运算符q算术运算符中,自增自减运算符乘除余运算加减运算q关系运算符中,等于和不等于运算最低q逻辑运算符中,取反运算符与运算符或运算符q一切运算,()运算符优先级最高q一切运算,赋值运算符优先级最低27多重ifq要处理多重条件判断的情况,需要使用多重条件结构多重条件结构嵌套 ifswitch结构多重条件结构多重条件结构多重条件结构多重条件结构

14、28if(num5)dcount=0;else if(num=5)&(num=10)&(num=20)&(num5)dcount=0;else if(num=5)&(num=10)&(num 0)if(y 1)z=1;else/*这个 else 部分属于哪个 if?*/z=2;嵌套 if 结构C语言规定,每个 else 部分总属于前面最近的那个缺少对应的 else 部分的 if 语句。提倡使用大括号括起来以避免看起来有二义性。32计算表达式的值如果等于常量1 如果等于常量2 如果没有找到匹配的值 switch(表达式)case 常量 1:语句;break;case 常量 2:语句;break;

15、default:语句;33switch 结构 3-3q在使用switch结构时应注意以下几点:q在case后的各常量表达式的值不能相同,否则会出现错误;q在case后,允许有多个语句,可以不用括起来;q每个case语句后都必须有一个break语句,否则会出现错误;q各case和default子句的先后顺序可以变动,而不会影响程序执行结果;qdefault子句可以省略;34Switch语句的正确使用int a;printf(请输入今天星期几(1-7):);scanf(%d,&a);switch(a)case 1:printf(星期一:青菜n);break;case 2:常量表达式和值的类型应匹配

16、,如果将a改为字符型,此题应作怎样的修改?35 scanf(%d,&a);switch(a);/此处能否使用分号?case 1:printf(星期一:青菜n);break;case 2:36 printf(n 请输入员工级别:);scanf(%c,&grade);if(grade=A)amt=salary+(salary*0.45);printf(n 级别%c 的薪水是%6.2fn,grade,amt);else if(grade=B)amt=salary+(salary*0.40);printf(n 级别%c 的薪水是%6.2fn,grade,amt);else printf(n无效的等级n

17、);红色代码可否放在IF结构外执行?原因?37补充:字母大小写转换函数tolower()和toupper()如grade=A|grade=a等价于 tolower(grade)=a或toupper(grade)=A38 switch(month)/*先计算某月以前月份的总天数*/case 1:sum=0;break;default:sum=-1;break;红色代码在此段程序中的作用?(标志用以区分月份的正确与否)if(sum!=-1)sum=sum+day;/*再加上某天的天数*/elseprintf(data errorn);39if(year%400=0|(year%4=0&year%1

18、00!=0)&month2)/*判断是不是闰年*/此处应注意条件的写法,尤其是括号的正确使用/*如果是闰年且月份大于2,总天数应该加一天*/sum+;printf(这天是当年的第%d 天。n,sum);/这两条语句能否用一条语句实现?elseprintf(这天是当年的第%d 天。n,sum);40循环的必要性q为避免繁琐的代码重复,需提供一种机制来解决这种需要重复执行执令的情况,即循环。q循环允许将一组指令重复执行特定次数或直到某个条件为止,应避免死循环。q循环三要素:循环体(即重复执行的指令)、循环条件(即循环结束条件取反)、循环初始化(循环执行前的准备)41while 循环1 while(

19、表达式)循环体语句;while 循环的一般语法:while(index 100).index+;计算表达式的值,当值为真(非0)时,执行循环体语句,一旦条件为假,就停止执行循环体。如果条件在开始时就为假,那么不执行循环体语句直接退出循环。工作原理示例42while 循环 2循环条件循环条件每次循环执行的语句(即循环体)每次循环执行的语句(即循环体)循环前的语句(包括循环初始化)循环前的语句(包括循环初始化)假假真真返返回回循循环环条条件件判判定定循环之外的语句循环之外的语句43while 循环 3 while(循环条件)循环条件中使用的变量需要经过初始化44while 循环4while(ind

20、ex 100).index+;while 循环主体中的语句必须修改循环条件的值,否则会形成死循环while(1)真真45while 循环示例1-1要求输出一个从1-10分别乘以10所得的乘法表分析:分析:输出:1 10 102 10 203 10 304 10 405 10 506 10 607 10 708 10 809 10 9010 10 1001、重复进行的指令(循环体)、重复进行的指令(循环体)执行运算:整数值执行运算:整数值*10=乘积乘积输出:该乘法表达式输出:该乘法表达式2、重复的次数(循环条件及初始化)、重复的次数(循环条件及初始化)整数值为可变的值,因此需使用一变量整数值为

21、可变的值,因此需使用一变量来存储,其来存储,其初始值为初始值为1,并且取值变化,并且取值变化必须是从必须是从1到到10(变量值变量值=10);每次执行乘法以后该变量值应加一每次执行乘法以后该变量值应加一,当,当变量值为变量值为11时应停止重复指令时应停止重复指令46while 循环示例1-2#includevoid main()int num=1,result;while(num=10)result=num*10;printf(%d 10%d n,num,result);num+;内存内存numresult1null102输出:1 10 102 10 203 10 304 10 405 10

22、506 10 607 10 708 10 809 10 9010 10 1001110047while 循环示例2-1问题描述:问题描述:写一个程序,要求它从摄氏温度写一个程序,要求它从摄氏温度0 度到度到250 度,每隔度,每隔20 度度为一项,输出一个摄氏温度与华氏温度的对照表,同时要求对照表中为一项,输出一个摄氏温度与华氏温度的对照表,同时要求对照表中的条目不超过的条目不超过10条。条。1、重复进行的指令(循环体)、重复进行的指令(循环体)执行运算:华氏温度执行运算:华氏温度=(摄氏温度)(摄氏温度)*9/5+32输出:华氏温度和摄氏温度的对照信息,并计数输出:华氏温度和摄氏温度的对照信

23、息,并计数2、重复的次数(循环条件及初始化)、重复的次数(循环条件及初始化)摄氏温度为可变的值,因此需使用一变量来存储,其摄氏温度为可变的值,因此需使用一变量来存储,其初始值为初始值为0,并且取值变化必须是从,并且取值变化必须是从0到到250(摄氏温度摄氏温度=250););另需设置一变量来作为另需设置一变量来作为计数器计数器,以统计当前对照表中条目数目,以统计当前对照表中条目数目,其其初始值为初始值为0,并且取值不能超过,并且取值不能超过10(计数器计数器=10);每次执行指令以后每次执行指令以后摄氏温度应加摄氏温度应加20且计数器加且计数器加1,当变量值超过,当变量值超过250时或计数器超

24、过时或计数器超过10应停止重复指令应停止重复指令分析:分析:48#include void main()int c=0,count=0;double f;while(c=250&count number)printf(太大n);else if(guess number)printf(太小n);while(guess!=number);printf(您猜中了!答案为%dn,number);猜一个介于猜一个介于 1 与与 10 之间的数之间的数请输入您猜测的数:请输入您猜测的数:3太小太小请输入您猜测的数:请输入您猜测的数:5您猜中了您猜中了!答案为答案为 5输入数字 5 后,dowhile 循环

25、中的条件为假,输出结果消息后,程序终止。54do-while 循环小结qdo-while 循环先执行后判断qwhile 语句后必须有一个分号q其余注意事项和while 循环相似55嵌套 while 循环q 嵌套 while 循环的语法while(i=10).while(i=j).外循环内循环只有在内循环完全结束后,外循环才会进行下一趟。56问题描述:用“*”打印一个直角三角形图案。图案如下所示:*嵌套 while 循环示例 void main()int nstars=1,stars;while(nstars=10)stars=1;while(stars=nstars)printf(*);sta

26、rs+;printf(n);nstars+;内层循环控制每行打印*号的个数外层循环控制打印的行数输出:*57嵌套 do-while 循环q 嵌套 do-while 循环的语法do .do .while(.).while(.)外循环内循环只有在内循环完全结束后,外循环才会进行下一趟。58嵌套 do-while 循环示例 int x;char i,ans;ans=y;dox=0;printf(n请输入字符序列:请输入字符序列:);fflush(stdin);do i=getchar();x+;while(i!=n);printf(n输入的字符数为:输入的字符数为:%d,-x);printf(n是否

27、需要输入更多序列是否需要输入更多序列(Y/N)?);ans=getch();while(ans=Y|ans=y);输出:请输入字符序列:GOODMORNING输入的字符数为:11是否需要输入更多序列(Y/N)?N内存中的变量 x i ans 0 y检查条件判断是否按下回车键。如果否,循环继续执行后续语句;如果是,循环回到开始处。如按下 Y/y,则循环从开始处执行,否则循环停止59比较 while 和 do-while循环while(循环条件)循环体;do 循环体;while(循环条件);do-while 循环是先执行后判断,所以,即使开始条件为假,循环体也至少会被执行一次。while循环是先判

28、断后执行,所以,如果条件为假,则循环体一次也不会被执行。q 比较 while 和 do-while 循环的工作原理60通过示例比较int value,r_digit;value=0;do printf(n请输入一个数:);scanf(%d,&value);if(value=0)printf(该数必须为正数n);while(value=0);printf(n反转后的数为:);do r_digit=value%10;printf(%d,r_digit);value=value/10;while(value!=0);printf(n);int value,r_digit;value=0;while(

29、value=0)printf(n请输入一个数:);scanf(%d,&value);if(value=0)printf(该数必须为正数n);printf(n反转后的数为:);while(value!=0)r_digit=value%10;printf(%d,r_digit);value=value/10;printf(n);该程序用 do-while 循环将数字左右反转同样的程序用 while 循环将数字左右反转61for 循环1for(表达式1 ;表达式2 ;表达式3 )循环体语句;for 循环的一般语法:1、计算表达式1的值,通常为循环变量赋初值;2、计算表达式2的值,即判断循环条件是否为

30、真,若值为真则执行循环体一次,否则跳出循环;3、计算表达式3的值,这里通常写更新循环变量的赋值表达式,然后转回第2步重复执行;工作原理62for 循环2计算表达式计算表达式2执行循环体语句执行循环体语句计算表达式计算表达式1(即循环初始化)(即循环初始化)假假真真执行表达式执行表达式3for循环之外的语句循环之外的语句63for(表达式1 ;表达式2 ;表达式3 )语句;for 循环的一般语法:for 循环counter=0;i n u m =1;cnt=100;counter=10;inum 0c o u n t e r +;inum=inum+1;cnt-分号用于分隔 for 循环的三个表

31、达式123464for 循环示例#include void main()int number,count,factorial=1;printf(n 请输入任意一个正整数:);scanf(%d,&number);for(count=1;count=number;count+)factorial=factorial*count;printf(n%d的阶乘=%dn,number,factorial);请输入任意一个正整数:5内存内存numbercountfactorial51121206循环执行五次5的阶乘=12065break 语句qbreak语句可以改变程序的控制流qbreak语句用于do-wh

32、ile、while、for循环中时,可使程序终止循环而执行循环后面的语句 qbreak语句通常在循环中与条件语句一起使用。若条件值为真,将跳出循环,控制流转向循环后面的语句q如果已执行break语句,就不会执行循环体中位于 break 语句后的语句q在多层循环中,一个break语句只向外跳一层66break 语句示例分析:1、重复的操作:输入一个字符,判断此字符是否为空格,如是,则需退出循环(用break来实现),否则有效字符计数器(计数器初值为零)加1;2、循环条件:一旦输入字符为换行符则结束,即循环要件为输入字符不等于换行符。问题描述:统计从键盘输入的若干个字符中有效字符的个数,以换行符作

33、为输入结束。有效字符是指第一个空格符前面的字符,若输入字符中没有空格符,则有效字符为除了换行符之外的所有字符。67#includevoid main()int count=0,ch;printf(n 请输入一行字符:);while(ch=getchar()!=n)if(ch=)break;count+;printf(n 共有%d 个有效字符。n,count);break 语句示例内存内存chcountH0_ 请输入一行字符:Hello world 共有 5 个 有效字符1循环执行 5 次568continue 语句qcontinue 语句只能用在循环里qcontinue 语句的作用是跳过循环体

34、中剩余的语句而执行下一次循环q对于while和do-while循环,continue 语句执行之后的动作是条件判断;对于for循环,随后的动作是变量更新 69continue 语句示例分析:1、重复的操作:对每一个整数,首先判定其个位是否为3,如为3,则跳过本次循环,继续下一个整数的判定(用continue来实现);否则将该数累加至累加器(累加器初值为零);2、循环条件:整数的初始值为1,取值范围1-100,循环条件为(整数值=100)问题描述:求整数1100的累加值,但要求跳过所有个位为3的数。70#includevoid main()int i,sum=0;for(i=1;i=100;i+

35、)if(i%10=3)continue;sum+=i;printf(sum=%d n,sum);continue 语句示例内存内存isumnull0131循环执行到 i=13 78输出:sum=45701循环执行到 i=101 101457071嵌套循环示例1void main()int i,j,k;for(i=1;i=4;i+)for(j=1;j=4-i;j+)printf();for(k=1;k=2*i-1;k+)printf(*);printf(n);for(i=1;i=3;i+)for(j=1;j=i;j+)printf();for(k=1;k=7-2*i;k+)printf(*);p

36、rintf(n);输出:*控制打印的行数控制每行打印的空格数控制每行打印的*号数控制打印的行数控制每行打印的空格数控制每行打印的*号数72问题描述:打印输出100至200之间的全部素数。分析:素数是指只能被1和它本身整除的数。算法比较简单,先将这个数被2除,如果能整除,且该数又不等于2,则该数不是素数。如果该数不能被2整除,再看则是否能被3整除。如果被3整除,并且该数不等于3,则该数不是素数,否则再判断是否被4整除,依此类推,该数只要是能被小于本身的某个数整除时,就不是素数。嵌套循环示例2void main()int i,j,n;n=0;for(i=100;i=200;i+)j=2;while

37、(i%j!=0)j+;if(i=j)printf(%4d,i);n+;if(n%8=0)printf(n);printf(n);输出:从100到200之间所有的素数为:101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199控制每行输出8个素数如果第一个能被整除的数等于该数本身,则说明该数为素数从2到i之间寻找第一个能被整除的数73嵌套循环示例3void main()int i,num;char answer;do printf(请输入一个数:);scanf(%d,&num);prin

38、tf(n);for(i=1;i=10;i+)printf(=);printf(n 该数是%d,num);printf(nn 您是否还要输入其他的数(y/n)?);fflush(stdin);answer=getchar();while(answer!=n);输出:请输入一个数:58该数是 58您是否还要输入其他的数(y/n)?y请输入一个数:64该数是 64您是否还要输入其他的数(y/n)?nPress any key to continue74循环三要素的理解q循环体 即重复执行的指令q循环条件 即重复指令执行的条件,也可理解为循环结束条件取反q循环初始化 循环执行前的准备 不管采用是三种循

39、环结构中的哪一种,凡代码中会出现重复操作(或需采用循环结构)在设计算法时都需要分别确定此三要素75循环算法的设计(推荐)q第一步:确定重复的操作(即循环体)q第二步:确定重复执行的次数(目的是确定此循环次数是否一定)。如果次数一定,可初步确定为计数型循环,即需设置一个循环控制变量,并将其初始化为1,用来控制循环(循环条件即为:循环控制变量=循环执行次数),此时可考虑用for循环;如果循环次数不能确定,则需认真分析重复执行的操作,并找出重复执行操作在什么条件下结束(即循环的出口或结束条件),再将其取反即为循环条件。q第三步:确定初始化(即进入循环前需做的准备,一般为变量(可能不只是循环控制变量)

40、赋初值。q第四步:算法求精76双重循环设计q自内向外(自底向上)一般用在外层循环条件很难一时发现或内层循环功能相对独立的时候。可从内层循环入手,通过对内层循环功能(即为外层循环重复的操作)的分析来找出外层循环执行或结束的条件(典型实例:分解质因数)q自外向内(自顶向下)一般用于内层循环控制受外层制约,主要表现为内层循环执行的次数受外层循环控制变量的影响时 此时可从整体到局部,逐步细化。(典型实例:图案输出)77循环的分类q一般分为穷举法和迭代法。q穷举法(对问题所有可能状态一一测试,直到找出全部解或全部可能状态都已测试)穷举法的循环控制有两种方法:计数法与标志法q迭代法(不断用新值取代变量的旧

41、值,或由旧值递推出变量的新值的过程。78计数法int i,j,k;char ch=A;for(i=1;i=1;j-)/注意写法的区别for(j=1;j=7-i;j+)printf();for(k=1;k=2*I-1;k+)/注意内层循环次数和外层循环控制变量的关系printf(%c,ch);printf(n);/输出每行后的换行符ch+;79迭代法 迭代法需注意下列因素迭代法需注意下列因素:初值初值;迭代公式迭代公式;迭代次数迭代次数 num1=1;num2=1;/此为迭代变量初值 for(count=3;count=10;count+)/迭代次数为8次 num3=num1+num2;prin

42、tf(%d,num);num1=num2;num2=num3;/以上为迭代公式80迭代法举例人口增长问题:按年2%的增长整数,现有12亿人,10年后将有多少人?设现有人口为sum,则第一年后人口为sum*(1+2%)第二年至第十年均依次再执行此公式。迭代初值sum=12;迭代公式sum=sum*(1+2%)迭代次数10次81标志法 我们可考虑将数组中元素的查找算法改用此方法来实现。此时需注意标志变量初值,标志变量结束条件(即什么时候更改标志变量的值)found=0;/标志变量赋初值for(i=0;i10&!found;i+)/将标志变量引入循环条件 if(ai=search)found=1;I

43、f(!found)printf(“not found!”);else 82总结q三种结构的区别:for循环更多的使用在计数型循环中;它可以和while当型循环互换(它们的算法流程非常相似);do-while直到型循环,至少执行一次。q充分认识和重视循环三要素,提高自己的分析问题的能力。q循环的设计有多种方法,控制结构有多种形式。应该说没有一个问题有唯一的方法或只能采用唯一的结构;具体问题具体分析,我们需要在练习过程中不断地吸取经验才能灵活地设计程序。83数组的定义和初始化q定义 类型标识符 数组名常量表达式常量表达式用以确定数组的元素个数(或长度),不能是变量 错误的方法:int n=5,nu

44、mn;q数组元素值的确定 1、数组定义时初始化 int num=1,2,3,4,5 2、数组单个元素值的确定 num2=表达式;scanf(“%d”,&num2);3、对数组不能整体输入或赋值,通过循环来实现 for(i=0;i10;i+)/特别注意数组元素的下标是从零开始 scanf(“%d”,&numi);/或numi=i;一维数组用一重循环,则二维数组需用双重循环。84杨辉三角的输出1解题思路:第一种方法:先将每一行两侧元素值确定为1,再确定其余元素,最后将元素输出。for(i=0;i10;i+)ai0=1;aii=1;for(i=2;i10;i+)/只需从第二行开始即可for(j=1;

45、ji;j+)/应从第二列开始aij=ai-1j-1+ai-1j;for(i=0;i10;i+)for(j=0;j=i;j+)printf(%5d,aij);printf(n);85杨辉三角的输出2第二种方法:依次确定每一行元素,再将元素输出。for(i=0;i10;i+)for(j=0;j=i;j+)if(j=0|j=i)/找准条件,第1列和第i列 aij=0;elseaij=ai-1j-1+ai-1j;for(i=0;i10;i+)for(j=0;j=i;j+)printf(%5d,aij);printf(n);?考虑是否可以在确定值的同时完成值的输出?86数组应用1分析:采用擂台法。设置两

46、个擂台(分别比较最大值和最小值)先将数组中首个元素放在两个擂台上,再从数组第二个元素开始依次与擂台上的元素比较,较大的数的较小的数分别留在擂台上,直至数组中元素全部比较完为止。擂台上的数即为最后的结果。问题描述:求一组数中的最大值和最小值。87数组应用1void main()int num5,max,min,i;printf(请输入5个数:n);for(i=0;i5;i+)scanf(%d,&numi);max=num0;min=num0;for(i=1;i5;i+)if(maxnumi)min=numi;printf(n最大值为:%d,max);printf(n最小值为:%dn,min);读

47、入5个值保存在数组中求最大值和最小值88数组应用2分析:输入待查找元素;依次将数组中每个元素与待查找元素比较,如果相等,则结束循环(采用break),否则继续比较。此时,循环的出口(即结束)有两种情况,分别为查找成功和不成功,怎样区分这两个出口?(可根据循环变量的值来区分)问题描述:输入10个数,保存在一个数组中,在数组中查找某个数,给出是否找到的信息。如果找到了,要求输出该数在数组中所处的位置;如果找不到,输出“没有找到!”。89数组应用2#define N 10for(i=0;iN;i+)scanf(%d,&numi);printf(n 请输入要查找的数:);scanf(%d,&searc

48、h);for(i=0;iN;i+)if(numi=search)break;if(iN)printf(n 在数组的第%d 个位置找到了数字%d!n,i+1,search);else printf(n 没有找到!n);读入10个值保存在数组中在数组中查找,一旦找到,通过break语句跳出循环90数组应用3分析:冒泡?(可以打比方为往水塘里扔石头)在石头下沉的过程中气泡往上浮比较N个数,需扔几次石头(N-1次)每次扔石头(第I次)的过程中,需进行几次比较(N-I次),且每次比较均为逐层比较问题描述:编写C程序实现冒泡排序算法,按照降序排列一组数。91数组应用3#define N 5int grad

49、eN,temp;for(i=0;iN;i+)scanf(%d,&gradei);for(i=1;iN;i+)/排序的趟数为排序的趟数为N-1,计数型循环计数型循环 for(j=0;jN-i;j+)/循环次数循环次数(元素比较次数元素比较次数)为为N-i,计数型循环计数型循环 if(gradej gradej+1)temp=gradej+1;gradej+1=gradej;gradej=temp;读入5个值保存在数组中162599023162590992316901623259092数组应用3补充:在以上排序过程中,一旦某一趟排序过程中没有产生过元素交换,则证明数组元素已经有序,以后的排序可以不

50、用再进行了。怎样实现代码?93问题描述:如果一个数组中保存的元素是有序的(由小到大),向这个数组中插入一个数,使得插入后的数组元素依然保持有序。数组应用4分析:1、在有序的序列中查找元素,以确定该元素应插入的位置,并记下此位置I 2、将数组中下标I之后的元素均后移一个位置(注意:此处从最后一个元素开始后移)3、将待插入元素放在位置I中94#define N 5int numN+1=23,45,60,67,88,in;printf(n 请输入一个要插入的数:);scanf(%d,&in);for(i=0;iin)break;for(j=N;ji;j-)numj=numj-1;numi=in;pr

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁