c04计算机C语言复习课件_第1页
c04计算机C语言复习课件_第2页
c04计算机C语言复习课件_第3页
c04计算机C语言复习课件_第4页
c04计算机C语言复习课件_第5页
已阅读5页,还剩102页未读 继续免费阅读

下载本文档

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

文档简介

第4章语句及程序流程控制

C

语言程序设计1本章主要掌握内容:C语言的语句类型数据输出数据输入顺序结构程序设计分支结构循环结构2自学掌握内容1.C语言的语句?控制语句、函数调用语句、表达式语句、空语句、复合语句#include<stdio.h>main(){inta=2,b=4,c=5;a+=b++;c*=a*b;printf("a=%d,b=%d,c=%d\n",a,b,c); {intc=10; a=++b+c;b=b+a;c=a=b;printf("a=%d,b=%d,c=%d\n",a,b,c); } printf("a=%d,b=%d,c=%d\n",a,b,c);}3自学掌握内容2.顺序结构程序的一般算法描述?变量定义、变量赋值、加工处理、输出结果假设输入1234.567#include<stdio.h>#include<math.h>main(){doublea,b;printf("Inputreala\n");scanf("%lf",&a);b=(a*100+0.5)/100;printf("b=%.2f\n",b);}43.输入输出函数?putchar()、getchar();printf()、scanf()字符数据输入输出#include<stdio.h>main(){charc1,c2,c3;c1=getchar();c2=c1+3;c3=c1-3;putchar(c1);putchar(c2);putchar(c3);}假设输入大写字母G,那么输出结果:54.printf函数中用到格式%8.2f的含义是:A.输出一个float型数据,小数局部占2位,整数局部至少占8位B.输出一个float型数据,小数局部占2位,整数局部至少占4位C.输出一个double型数据,小数局部占2位,整数局部至少占8位D.输出一个double型数据,小数局部占2位,整数局部至少占5位65.要使下面程序的输出语句在屏幕上显示1,2,34,那么从键盘输入的数据格式应为以下备选答案中的。#include<stdio.h>main(){chara,b;intc;scanf("%c%c%d",&a,&b,&c);printf("%c,%c,%d\n",a,b,c);}A〕1234 B〕1,2,34C〕’1’,’2’,34 D〕123474.1C语言概述C语言的语句分为:控制语句函数调用语句表达式语句空语句复合语句81)控制语句1.选择分支控制语句

if()…else…

switch(){…} 2.循环控制语句

for()…

while()…do…while()3.其他控制语句

break、continue、gotoreturn92)函数调用语句

与表达式语句相似,在函数调用表达式后面加分号就构成了函数调用语句。例如:#include<stdio.h>main(){charc1;scanf(“%c”,c1);}假设运行上述程序时,输入:a↙那么变量c1得到了输入字符a10表达式后面加一个分号,构成表达式语句x=3;y=y+5;x=a-b&&c||d;printf("x=%d,y=%d\n",x,y);sort(a,10);3).表达式语句赋值语句函数调用语句注意:①分号是语句必不可少的一局部②单独的一个分号“;”构成一个空语句例如:;〔空语句,是最简单的C语句〕114).空语句 在C语言中,称仅由一个分号组成的语句为“空语句”,即:

; 编译程序在遇到空语句时,不会为其产生任何相应的指令代码。这就是说,空语句不执行任何操作。因此,空语句只是C语言语法上的一个概念,它起到一个语句的作用,仅此而已。12复合语句用一对花括号“{}”括起来的假设干条语句花括号中可以是说明语句、表达式语句、控制语句,也可以是复合语句例如:⑴if(a>b){max=a;min=b;}⑵for(n=1;n<10;n++){p=n+p;if(p>=100){printf(“%d\n”,p);break; }} 13复合语句〔续〕复合语句中如果有说明性语句,应该写在可执行语句的前面例如:

main(){inta,b,c;a=b=c=100;{floatc=10.23;printf("%f\n",c);}printf("%d%d%d\n",a,b,c);}要特别注意:花括号的配对花括号的位置C语言学习的难点之一144.2顺序结构程序设计顺序结构程序的一般算法描述变量定义变量赋值运算处理输出结果可用:变量初始化赋值语句输入函数调用语句注意各个语句的顺序15课堂练习1.设银行定期存款的年利率rate为2.25%,并存款期为1年,存款本金为capital元,试编程计算1年后的本利之和deposit。要求定期存款的年利率rate是常量〔0.0225〕、存款本金capital均由键盘输入。16#defineRATE0.0225#include<stdio.h>main(){floatcapital,deposit=0;scanf("%f",&capital);deposit=capital

*(1+0.0225);printf("deposit=%f\n",deposit);}172.输入一个5位的正整数,要求以相反的顺序输出该数。例如输入12345,输出位54321。#include<stdio.h>main(){inti,a1,a2,a3,a4,a5;scanf("%d",&i);a1=i/10000;a2=(i-a1*10000)/1000;a3=(i-a1*10000-a2*1000)/100;a4=(i-a1*10000-a2*1000-a3*100)/10;a5=i%10;printf("a5=%d,a4=%d,a3=%d,a2=%d,a1=%d\n",a5,a4,a3,a2,a1);}184.2.3数据输入输出的概念及在C语言中的实现

数据输入输出指计算机获取数据与展示数据C语言使用输入输出函数其实是为了我们编程的方便和简洁,它们是一种固定的形式,相当于一个模板,利用模板就可以灵活的实现人们对数据的处理的要求。

19字符输入输出函数输出函数调用的一般形式putchar(ch)功能:在标准输出设备〔即显示器屏幕〕上输出一个字符。例如:putchar('b');putchar('\n');putchar('\101');putchar(ch);20函数调用的一般形式getchar()功能:从标准输入设备〔即键盘〕上交互输入一个字符。例如:getchar();c=getchar();printf("%c\n",getchar());21【例】getchar函数的应用。

#include"stdio.h"main(){charch;ch=getchar();printf("%c%d\n",ch,ch);printf("%c%d\n\n",ch-32,ch-32);}程序运行时输入:m

并按回车键后输出结果是:m109M7722说明putchar与getchar是C语言的标准库函数,使用时必须加编译预处理命令:#include"stdio.h"

#include<stdio.h>【例】利用putchar函数输出字符。#include"stdio.h"

main(){charc1,c2;c1='a';c2='b';putchar(c1);putchar(c2);putchar('\n');putchar(c1-32);putchar(c2-32);putchar('\n');}也可改为c1=97;c2=98;

输出结果:abAB23格式输入与输出printf()函数printf(格式控制,参数2,…,参数n)

功能:按格式控制所指定的格式,在标准输出设备上输出参数2、…、参数n的值。用双引号括起的字符串,用于指定输出数据的类型、格式、个数包括:普通字符和格式说明符照原样输出

printf("c=%d+%d=%d\n",a,b,a+b);格式说明符:指定输出3个十进制整型数,分别为变量a、b、a+b的值24输出格式说明符整型数据

%d以有符号十进制形式输出整型数%o以无符号八进制形式输出整型数%x以无符号十六进制形式输出整型数%u以无符号十进制形式输出整型数实型数据

%f以小数形式输出实型数%e以指数形式输出实型数%g按数值宽度最小的形式输出实型数字符型数据

%c输出一个字符%s输出字符串其他

%%输出字符%本身在%和格式符之间可以使用附加说明符25附加格式说明符l输出长整型数(只可与d、o、x、u结合用)m指定数据输出的宽度(即域宽).n对实型数据,指定输出n位小数;对字符串,指定左端截取n个字符输出+使输出的数值数据无论正负都带符号输出-使数据在输出域内按左对齐方式输出整数位数+小数位数+小数点自动对n位后小数四舍五入

例如:%ld——输出十进制长整型数%m.nf——右对齐,m位域宽,n位小数或n个字符%-m.nf——左对齐26例:整型数据的输出main(){inta=11,b=22;intm=-1;longn=123456789;printf("%d%d\n",a,b);printf("a=%d,b=%d\n",a,b);printf("m:%d,%o,%x,%u\n",m,m,m,m);printf("n=%d\n",n);printf("n=%ld\n",n);}TC程序输出:1122a=11,b=22m:-1,177777,ffff,65535n=-13035n=12345678927进位记数制1.基数〔P37〕进位计数制是指用一组特定的数字符号,按照一定的进位规那么来表示数目的计数方法。进位计数制中所使用的不同根本符号的个数。二进制的基数:2.位权〔P37〕每一个数位上数符所具有的权,它是一个乘方值。二进制的位权:2i228理解:当前时间为9点,假设调到4点,可顺时拨7格,即7+9=16;也可反时针拨5格,9-5=4,两方法.时钟为12进制,模为12,当数大于12时,就有进位,把进位去掉,16-12=4,-5是原值,+7就是-5的互补值.如何将减法运算转换为加法运算?3126912457810119-5=49+7=16=(4)1229

2.3.2数值数据的表示4.原码、反码和补码〔P46〕01011111Y=-48

[X]原[X]反[X]补X=+95

101100101100110110110011[Y]原[Y]反[Y]补010111110101111130练习:将以下十进制数转换为原码、反码、补码假定计算机为16位运算15127-1-25431例:实型数据的输出main(){floatx=1234.56,y=1.23456789;doublez=1234567.123456789;printf("x=%f,y=%f\n",x,y);printf("z=%f\n",z);printf("z=%e\n",z);printf("z=%g\n",z);printf("z=%18.8f\n",z);printf("x=%10.3f\n",x);printf("x=%-10.3f\n",x);printf("x=%4.3f\n\n",x);}TC程序输出:x=1234.560059,y=1.234568z=1234567.123457z=1.23457e+06z=1234570z=1234567.12345679x=1234.560x=1234.560x=1234.56032例:字符型数据的输出main(){intm=97;charch='B';printf("m:%d%c\n",m,m);printf("ch:%d%c\n",ch,ch);printf("%s\n","student");printf("%10s\n","student");printf("%-10s\n","student");printf("%10.3s\n","student");printf("%.3s\n\n","student");}程序输出:m:97ach:66Bstudentstudentstudentstustu33scanf()函数函数调用的一般形式scanf(格式控制,地址参数2…,地址参数n);功能:按格式控制指定的格式,从标准输入设备(即键盘)交互输入数据,并依次存放到对应地址参数指定的变量中(即将输入值赋给变量)。

普通字符和格式说明符scanf("a=%d,b=%d",&a,&b);格式说明符:指定输入2个十进制整型数赋给变量a和b34输入格式说明符整型数据

%d输入十进制整型数%u输入无符号的十进制整型数%o输入八进制整型数%x输入十六进制整型数实型数据

%f输入小数形式的单精度实型数%e输入指数形式的单精度实型数字符型数据

%c输入单个字符%s输入一个字符串在%和格式符之间可以使用附加说明符35附加格式说明符l与d、o、x、u结合输入长整型数与f结合输入double型数m指定数据输入的宽度(即域宽)*忽略读入的数据(即不将读入数据赋给相应变量)例如:%ld、%lo——输入十进制、八进制长整型数%lf、%le——输入双精度实型数%mf——输入m位数〔域宽〕%*d——忽略输入的一个整型数36例如:scanf("%d%d%d",&a,&b,&c);输入3个整型十进制数,以空白符〔空格、tab键或回车键〕分隔scanf("%d,%o,%f",&a,&b,&x);输入3个数,以“,”分隔scanf("a=%d,b=%d",&a,&b);输入的形式是:a=32,b=28〔普通字符要照原样输入〕37scanf("%c%c%c",&ch1,&ch2,&ch3);要输入:abc

不能输入:a

b

c

注意数值型数据与char型数据的混合输入格式符之间假设无普通字符,那么:输入的数值型数据用空白符分隔输入的char型数据不必分隔例如:scanf("%d%d",&m,&n);scanf("%c",&ch);错误输入:32

28

a

正确输入:32

28a

38【例】三条边a、b、c,求三角形面积。计算三角形面积的海伦公式:其中:设定义:整型变量a、b、c实型变量s、area39程序如下:#include"math.h"main(){inta,b,c;floats,area;scanf("%d,%d,%d",&a,&b,&c);s=1.0/2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c));printf("area=%8.3f\n",area);}程序运行情况如下:3,4,5

area=6.000

实际上还需要判断a、b、c是否能构成三角形,即应该进行选择判断处理404.3.1关系运算符C的关系运算符数学中的关系符含义>

>大于>=≥大于或等于<

<小于<=≤小于或等于==

=等于!=≠不等于注意:关系运算符中的相等用“==”表示不要与赋值号“=”混淆!4.3选择结构程序设计41关系运算的运算规那么1.关系运算符的优先顺序为>、>=、<、<=

相同,==、!=相同,前组优先于后组。2.关系表达式成立,那么结果为1,即为真值;否那么为0,即为假值。举例:18>5

9>1848>18>81>8010423.关系运算的操作数可为算术表达式。4.关系运算符的优先级低于算术运算符的优先级。举例:2*5<10-710<305.外表看起来合法的关系表达式,在逻辑上并不一定是正确的。举例:当a=3;b=2;c=1时a>b>c?3>2>11>10434.3.2逻辑运算符逻辑运算符&& 逻辑与(并且)|| 逻辑或(或者)! 逻辑非44二进制数的逻辑运算

逻辑非运算逻辑非的真值表 AF=A0110逻辑与运算逻辑与的真值表 ABF=A×B00001010011145二进制数的逻辑运算

逻辑或运算逻辑或的真值表 ABF=A+B00001110111146逻辑运算的运算规那么逻辑运算符的优先顺序为:

!&&||按顺序递减。算术、关系、逻辑运算符的优先顺序为:算术运算关系运算逻辑运算举例:a+b>c*d&&L1&&!L247C语言没有提供“逻辑型”或“布尔型”等数据类型。只要合法,任何类型表达式都可作为判断条件,可作逻辑量使用,表达式值为非0,即为真值,0为假!举例:当a=3时a+1为真值;a-3为假值。逻辑运算的运算规那么48逻辑表达式举例判断某一年year是否是闰年。能被4整除,但不能被100整除;或能被400整除;year%4==0&&year%100!=0或year%400==0(year%4==0&&year%100!=0)||(year%400==0)494.3.3条件运算算式格式E1?E2:E3〔属三目运算符〕算式框图E1为真?E2E3yesno举例A=(x>y)?x:y又:〔++I%8)?‘’:'\n'50运算符按照优先级大小由上向下排列,在同一行的运算符具有相同优先级。第二行是所有的一元运算符。运算符解释结合方式()[]->.括号(函数等),数组,两种结构成员访问由左向右!~++--+-

*&(类型)sizeof否定,按位否定,增量,减量,正负号,间接,取地址,类型转换,求大小由右向左*/%乘,除,取模由左向右+-加,减由左向右<<=>=>小于,小于等于,大于等于,大于由左向右==!=等于,不等于由左向右&&逻辑与由左向右||逻辑或由左向右?:条件由右向左=+=-=*=/=

各种赋值由右向左,逗号(顺序)由左向右514.3.4单项选择择结构的框图结构yesno语句A条件成立否yesno条件语句A入口出口52双选择结构的框图结构yesno程序段A程序段B条件成立否入口出口yesno条件语句A语句B53if-else择条件语句选择结构的一种最常用形式: if(表达式)

语句1;

else

语句2;

语句3;执行过程:当括号内表达式成立时,即表达式的值是非0时,执行语句1,然后语句3;

当表达式不成立时,值等于0时,执行语句2,然后语句3,上面else局部也可以没有。54 if(表达式)

语句1;

语句3;执行过程:当括号内表达式成立时〔表达式的值是非0〕,执行语句1,然后执行语句3;

当表达式不成立时〔等于0〕,直接执行语句3。if条件语句55if-else多项选择条件语句if的一种扩展形式格式:

if(表达式1)

语句1;

elseif(表达式2)

语句2;

elseif(表达式3)

语句3;

…………

else

语句4;

语句5;功能

当表达式1为真值时,执行语句1;否则,当表达式2为真值时,执行语句2,否则…其中else部分可以没有。56补足程序段--1例:输入两个整数,按从小到大的顺序输出它们。t=a;a=b;b=t;#include<stdio.h>main(){inta,b,t;scanf("%d,%d",&a,&b);if(a>b){ }printf("%d,%d",a,b);}57a=a+b;b=a-b;a=a-b;条件语句举例--1#include<stdio.h>main(){inta,b;scanf("%d,%d",&a,&b);if(a>b){ }printf("%d,%d",a,b);}58条件语句举例--1a>b?b:a,a>b?a:b#include<stdio.h>main(){inta,b;scanf("%d,%d",&a,&b);printf("%d,%d", );}59条件语句举例--2例:输入三个整数,按从小到大的顺序输出它们。#include<stdio.h>main(){inta,b,c,t;scanf("%d,%d,%d",&a,&b,&c);if(a>b){ }if(a>c){ }if(b>c){ }printf("%d,%d,%d",a,b,c);}t=a;a=b;b=t;t=a;a=c;c=t;t=b;b=c;c=t;60有一函数:-1(x<0)y=0(x=0)1(x>0)编一程序,输入一个x值,输出y值。#include<stdio.h>main(){intx,y;scanf("%d",&x);if(x<0)y=-1;elseif(x=0)y=0;//elsey=1;printf("x=%d,y=%d",x,y);}条件语句举例--3#include<stdio.h>main(){intx,y;scanf("%d",&x);if(x>=0) /*条件语句嵌套*/if(x==0)y=0;/*注意:内、外重条件语句*/elsey=1;/*if-else配对使用原那么:*/elsey=-1;/*else总是与距离它最近的且没有*/ /*配对的if相结合,与缩进格式无关!*/printf("x=%d,y=%d",x,y);}61开关语句--switch功能格式开关语句就像多路开关一样,程序可根据一个表达式可能产生的不同结果值,选择其中一个——独立分支结构,或几个分支的语句——非独立分支结构去执行。switch(表达式){case常量1:语句系列1case常量2:语句系列2……case常量m:语句系列mdefault:语句系列m+1}说明⑴switch后括号内表达式的值只能是整形、字符型或枚举类型,每个常量的类型和表达式的类型应相同,每个语句序列可以是零个或假设干个语句。case3:case4:printf(“%d”,d1);break;default:⑵执行时,先求表达式的值,然后自上而下依次测试每一个常量,假设与常量I相匹配,那么从其后的语句序列i开始执行每个语句序列,假设没有常量与之匹配,那么执行default后面的语句序列——非独立分支结构。假设只执行语句系列I,那么在语句系列I后加break语句——独立分支结构。switch(表达式){case常量1:语句系列1;break;case常量2:语句系列2;break;……case常量m:语句系列m;break;default:语句系列m+1;}⑶由于每个case语句后的常量只起语句标号的作用,所以它们的值必须互不相同,否那么会出现互相矛盾的现象(C语言系统不允许,编译出错)。case1:case1:case3:⑷独立分支时每个case语句和default语句的出现的前后次序发生改变时,不影响运行结果,但在一般情况下,常量出现频率较高的放在前面。

case1:case1:default:case2:case2:case3:

case3:

deault:举例有了if语句,为什么还要switch语句?62开关语句举例独立分支开关语句举例非独立分支开关语句举例63独立分支开关语句举例

X0≤X<102X+110≤X<20Y=4120≤X<3071-X30≤X<400X<0或X≥40#include<stdio.h>main(){intxscanf("%d",&x);switch( ){case0:printf("y=%d\n",x);break;case1:printf("y=%d\n",2*x+1);break;case2:printf("y=20\n");break;case3:printf("y=%d\n",71-x);break;default:printf("y=0\n");}}x/1064非独立分支开关语句举例设有语句:inta=1,b=0;那么执行下面语句后输出为()switch(a){case1: switch(b): { case0:printf(“**0**”);break; case1:printf(“**1**”);break; }case2:printf(“**2**”);break;}A.**0**B.**0****2**C.**0****1****2**D.错误B.**0****2**B65例switch(score){case5:printf(“Verygood!”);case4:printf(“Good!”);case3:printf(“Pass!”);case2:printf(“Fail!”);default:printf(“dataerror!”);}运行结果:score为5时,输出:

Verygood!Good!Pass!Fail!dataerror!66

辅助控制语句break语句功能:在switch语句和循环语句中,终止并跳出开关体或循环体。说明:break只能终止并跳出最近一层的结构break不能用于循环语句和switch语句之外的任何其它语句之中。67例voidmain(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;}printf(“\na=%d,b=%d”,a,b);}运行结果:a=2,b=168intx,a,b;那么以下选项中错误的if语句是〔〕

A)if(a=b)x++;B)if(a=<b)x++;C)if(a-b)x++;D)if(x)x++;B)if(a=<b)x++;inti=10;那么执行以下程序后,i的正确值是〔〕Switch(i){case9:i+=1;case10:i+=1;case11:i+=1;case12:i+=1;}A)10B)11C)12D)13A)10B)11C)12D)1369以下程序在运行时,输入变量a的值为1,变量b的值为2,选择运行结果。#include<stdio.h>main(){inta,b,t=0;scanf("%d%d",&a,&b);if(a=2)t=a,a=b,b=t;printf("%d,%d\n",a,b);}2,02,22,11,22,02,22,11,270课堂练习1。设faH为其父身高,moh为其母身高,身高预测公式为:男性成人时身高=(faH+moH)*0.54(cm)女性成人时身高=(faH*0.923+moH)/2(cm)此外,如果喜爱体育锻炼,那么可增加身高2%,如果有良好的卫生饮食习惯,那么可增加身高1.5%。编程从键盘输入预测者的性别、父身高faH,母身高moH、是否喜爱体育锻炼sports,是否有良好的饮食习惯diet,利用给定公式和身高预测方法对你的身高进行预测。71#include<stdio.h>main(){floatfah,moh,h;charsex,sport,diet;printf("\n请输入性别代码,m-男,f-女");sex=getchar();getchar();printf("是否爱好体育y-是n-否");sport=getchar();getchar();printf("\n是否有良好生活习惯y-是n-否");diet=getchar();printf("\n请输入父亲身高fah=,母亲身高moh=");scanf("%f,%f",&fah,&moh);printf("sex=%c,sport=%c,custom=%c\n",sex,sport,custom);if(sex=='M'||sex=='m')h=(fah+moh)*0.54;elseh=(fah*0.923+moh)/2;if(sport=='Y'||sport=='y')h=h+h*0.02;if(diet=='Y'||diet=='y')h=h+h*0.015;printf("本人的预测身高=%fcm\n",h);}722.编程设计一个简单的计算器程序,要求根据用户从键盘输入如下形式的表达式:操作数1运算符op操作数2

然后,计算并输出表达式的值指定的运算符为加〔+〕减〔-〕乘〔*〕除〔/〕73main(){ intdata1,data2;/*定义两个操作符*/ charop;/*定义运算符*/ printf("Pleaseentertheexpression:"); scanf("%d%c%d",&data1,&op,&data2);/*输入运算表达式*/ switch(op) { case'+':/*处理加法*/ printf("%d+%d=%d\n",data1,data2,data1+data2); break; case'-':/*处理减法*/ printf("%d-%d=%d\n",data1,data2,data1-data2); break; case'*':/*处理乘法*/ printf("%d*%d=%d\n",data1,data2,data1*data2); break; case'/':/*处理除法*/

if(data2==0) printf("Divisionbyzero!\n"); else printf("%d/%d=%d\n",data1,data2,data1/data2); break; default:printf("Unknownoperator!\n");}}744.4循环结构while语句do~while语句for语句用goto

和if构成循环循环结构的嵌套break和continue语句的使用75循环语句定义在给定条件成立时,重复执行某个程序段的语句称为循环语句,重复执行的程序段称为循环体。循环体循环体可以是单个C语句、空语句或复合语句。当循环体中是空语句〔只有一个分号〕时,表示在循环体中什么也不做。循环结构while语句do--while语句for语句76While程序举例用while语句编程求#include<stdio.h>main(){intsum,i;i=1;sum=0;/*循环初始化*/while(i<=100){sum=sum+i;}printf("%d",sum);}sum=0,i=1当i小于等于100sum=sum+ii=i+1输出总和sumi++;

/*修改循环变量*/77do~while语句程序举例用do~while语句编程求#include<stdio.h>main(){intsum,i;do{sum+=i;i++; /*修改循环变量*/}while(i<=100);printf("%d",sum);}i=1;sum=0;/*循环变量赋初值*/78for语句程序举例用for语句编程求#include<stdio.h>main(){intsum,i;sum=0;for()sum=sum+i;printf("%d",sum);}i=1;i<=100;i++79永远不会退出的循环为死循环for(;;){}while(1){}do{}while(1)一般情况下,要竭力防止死循环绝大多数程序不需要死循环。如果出现,往往都是bug时间过长的循环会造成“假死”效果,也要考虑解决死循环80for语句程序举例求Fibonacci数列:1,1,2,3,5,8,……的前20项。即第一、二项都是1,第三项以后的每一项都是前两项的和。81#include<stdio.h>main(){longintf1,f2;inti;f1=1;f2=1;for(i=1;i<=10;i++){printf("%12ld%12ld",f1,f2);if(i%2==0)printf("\n");f1=f1+f2;f2=f1+f2;}}82课堂举例

单重循环问题应用*公式计算水仙花数83程序举例--1打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数字本身。例如:153=13+53+3384水仙花数程序实例#include<stdio.h>main(){intl1,l2,l3,l4;for(l4=100;l4<=999;l4++){l1=l4%10; /*个位*/l2=(l4%100)/10; /*十位*/l3=l4/100; /*百位*/if(l4==l1*l1*l1+l2*l2*l2+l3*l3*l3)printf("Daffodil'snumberis%d\n",l4);}}85稳固练习:打印出所有的“玖瑰花数”,所谓“玖瑰花数”是指一个四位数,其各位数字4方和等于该数字本身。例如:1634=14+64+34+4486#include<stdio.h>main(){intl1,l2,l3,l4,l5;for(l5=1000;l5<=9999;l5++){l1=l5%10; /*个位*/l2=(l5%100)/10; /*十位*/l3=(l5%1000)/100; /*百位*/l4=l5/1000; /*千位*/if(l5==l1*l1*l1*l1+l2*l2*l2*l2+l3*l3*l3*l3+l4*l4*l4*l4)printf(“Rose'snumberis%d\n",l5);}}87程序举例--2用—≈1-—+—-—+……公式求π的近似值,直到最后一项的绝对值小于10-6为止。

π111

4357通项公式:Sign*—其中n=1,3,5,……Sign=1或-1

1

n88程序举例--2#include<stdio.h>#includemain(){intSign=1;floatn=1.0,t=1.0,pi=0.;while(fabs(t)>=1e-6){

}pi=pi*4;printf("pi=%10.6f\n",pi);}

pi=pi+t;n=n+2;Sign=-Sign;t=Sign/n;<math.h>89嵌套循环及其应用举例定义在一个循环的循环体中又包含了另一个循环,该结构称为嵌套循环。注明举例*九·九表百钱买百鸡*杨辉三角形*水仙花90九·九表----191九·九表框图和程序----1开始forI=1to9forJ=1to9输出I*J输出表头结束#include<stdio.h>main(){inti,j;for(i=1;i<=9;i++)printf("%4d",i);printf("\n");for(i=1;i<=9;i++)printf("----");printf("\n");for(i=1;i<=9;i++){for(j=1;j<=9;j++)printf("%4d",i*j);printf("\n");}}开始forI=1to9forJ=1to9输出I*J输出表头结束92九·九表----293水仙花数解法2----框图开始forl1=1to9forl2=0to9forl3=0to9输出l4l4=?l5l4=l1*100+l2*10+l3l5=l1*l1*l1+l2*l2*l2+l3*l3*l3结束yesno94水仙花数解法1----程序#include<stdio.h>main(){intl1,l2,l3,l4;for(l1=1;l1<=9;l1++) /*百位*/for(l2=0;l2<=9;l2++)/*十位*/for(l3=0;l3<=9;l3++){/*个位*/

l4=l1*100+l2*10+l3;if(l4==l1*l1*l1+l2*l2*l2+l3*l3*l3)printf("Daffodil’snumberis%d\n",l4);}}嵌套缩进格式95玖瑰花数解法2----程序#include<stdio.h>main(){intl1,l2,l3,l4,l5;for(l1=1;l1<=9;l1++) /*千位*/for(l2=0;l2<=9;l2++)/*百位*/for(l3=0;l3<=9;l3++){/*十位*/ for(l4=0;l4<=9;l4++){/*个位*/ l5=l1*1000+l2*100+l3*10+l4;if(l5==l1*l1*l1*l1+l2*l2*l2*l2+l3*l3*l3*l3+l4*l4*l4*l4)printf("Daffodil’snumberis%d\n",l5);}}}96杨辉三角形----框图111121133114641151010511615201561……开始输入输出的行数nfori=0tonforj=0toi输出输出回车换行开始开始输入输出的行数nfori=0tonforj=0toi输出输出回车换行开始97杨辉三角形----程序#include<stdio.h>main(){intn,i,j,k,i1,j1,k1;printf(〞输入输出的行数:〞);scanf(〞%d〞,&n);for(i=0;i<n;i++){for(j=0;j<=i;j++){i1=j1=k1=1;for(k=1;k<=i;k++)i1*=k;for(k=1;k<=j;k++)j1*=k;for(k=1;k<=i-j;k++)k1*=k;printf(〞%7d〞,i1/(j1*k1));}printf(〞\n〞);}}98百钱买百鸡鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?99百钱买百鸡----1#include<stdio.h>main(){intx,y,z,m,n;for(x=0;x<=100;x++)for(y=0;y<=100;y++)for(z=0;z<=100;z++){m=x+y+z;n=5*x+3*y+z/3;if(m==100&&n==100)printf(〞%5d,%5d,%5d\n〞,x,y,z);}}100百钱买百鸡----2#include<stdio.h>main(){ x,y,z,m,n;for(x=0;x<=100;x++)for(y=0;y<=100;y++)for(z=0;z<=100;z++){m=x+y+z;n=5*x+3*y+z/3;if(m==100&&n==100)printf(〞%5.0f,%5.0f,%5.0f\n〞,x,y,z);}}float101百钱买百鸡----3#include<stdio.h>main(){floatx,y,z,m,n;for(x=0;x<=20;x++)for(y=0;y<=33;y++)for(z=0;z<=99;z++){m=x+y+z;n=5*x+3*y+z/3;if(m==100&&n==100)printf(〞%5.0f,%5.0f,%5.0f\n〞,x,y,z);}02575418788118112484102转移控制语句定义语句能够改变程序流向的语句。Break,continue语句return语句goto语句103goto语句功能将控制执行权转移到指定的语句标号处。格式goto语句标号;语句标号用标识符表示转移语句的入口目的地址。不能用整数作语句标号。举例gotoasd;……asd:x=……loop:if(x>=0){ n++; sum+=x;scanf(“%f”,&x);gotoloop;}用goto语句构成循环104break语句和continue语句功能在循环语句中,遇break语句跳出循环;在开关语句中,遇break语句跳出开关语句;遇continue语句结束本次循环,进行下一次循环。格式

break;

continue;说明一般情况下,break语句和continue语句与条件语句(if)在循环体中使用。循环结构是指用while语句、do-while语句或for语句构成的循环,对于if和goto语句构成的循环,那么不起作用。在嵌套循环的情况下,break语句和continue语句只对包含它们的最内层的循环语句起作用。105break和continue语句举例求3~

100素数求100~200间能被3整除的数*求任意为素数*公式计算106Break语句程序举例2求3~100的所有质数(素数)。#include<stdio.h>main(){inti,j;for(i=3;i<=100;i++){for(j=2;j<i-1;j++)if(i%j==0)________;if(i==j)printf(〞%8d〞,i);}}break双重循环嵌套,break结束内重循环!107#include<stdio.h>main(){intflag=1,j=0,i,m;/*变量定义并赋初值*/scanf(“%d”,&m);/*&变量地址,格式控制字符串不应*/for(i=2;i<=m-1;i++)/*包括提示信息及“\n”等转移字符*/{if(m%i!=0)________________;flag=0;printf("%5d%c",i,(++j%8)?′′:′\n′);}if(flag)/*if(flag!=0)即表达式成立*/printf("Nodivisor%disaprimenumber.\n",m);}Continue语句举例求一个是否为素数。1→flag,2→i,0→j0→flag,输出i值TF开始i<=m-1i整除m?输出素数信息结束T输入任意数mflag=1?FTFi+1→i

continue108Continue语句举例--2#include<stdio.h>main(){intn;for(n=100;n<=200;n++;){if(n%3!=0)__________;printf("%5d",n);}}求100~200之间能被3整除的数。continuecontinue语句结束本次循环,进行下一次循环109**********************************************110换行每行的起始位置每行的多少列图形图形多少行111#include<stdio.h>main(){inti,j,k;for(i=1;i<=3;i++){for(k=1;k<=i;k++)putchar(‘‘);for(j=1;j<=5;j++)putchar(‘*‘);putchar(‘\n’);}}112#include<stdio.h>main(){inti,j,k;for(i=1;i<=3;i++){for(k=1;k<=30-i;k++)putchar(‘‘);for(j=1;j<=5;j++)putchar(‘*‘);putchar(‘\n’);}}113#include<stdio.h>main(){inti,j,k;for(i=1;i<=3;i++){for(k=1;k<=30-i;k++)putchar(‘‘);for(j=1;j<=2*i-1;j++)putchar(‘*‘);putchar(‘\n’);}}114用for语句编写程序输出以下图形。*************115#include<stdio.h>main(){ inti=1,j=1,row; for(row=1;row<=5;row++) { for(i=1;i<20-j;i++)putchar(''); for(i=1;i<=2*j-1;i++)putchar('*'); putchar('\n'); if(row<3)j++; elsej--; }}116#include<stdio.h>voidmain(){inti,j,k;for(i=0;i<=3;i++){for(j=0;j<=40-i;j++)printf("");for(k=0;k<=2*i;k++)printf("*");printf("\n");}

for(i=0;i<=2;i++){for(j=0;j<=38+i;j++)printf("");for(k=0;k<=4-(2*i-1);k++)printf("*");printf("\n");}}

例:输出如以下图形。*************************117#include<math.h>#include<stdio.h>main(){intb,n,i=1,j,k;printf("Pleaseinputlinenumbern");scanf("%d",&n);b=n/2+1;for(i=1;i<=n;i++){for(k=1;k<=(20-(b-fabs(b-i)));k++)putchar('');for(j=1;j<=2*(b-fabs(b-i))-1;j++)putchar('*'); printf("\n"); }}118稳固练习:1.求20+21+22+...+263之和2.从键盘两个整数,求其最大公约数和最小公倍数。3.从键盘输入一个正整数,将该数前后倒置后输出。4.从键盘输入一行字符,假设为小写字母,那么转化为大写字母;假设为大写字母,那么转化为小写字母;否那么转化为ASCII码表中的下一个字符。119求20+21+22+...+263之和。解法1:#include<math.h>

main()

{floats;

inti;

s=0;

for(i=0;i<=63;i++)

s=s+pow(2,i);

/*2的i次幂*/

printf("s=%f\n",s);}120

#include<stdio.h>main()

{intI,s=0,t=1;

for(i=0;i<=63;i++)

{s=s+t;

t=t*2;

}

printf("s=%u\n",s);

}解法2:%d有正负〔负数用补码表示〕%u正整数121从键盘输入两个整数,求其最大公约数和最小公倍数。解法1:辗转相除法。

⑴以其中一个数作被除数,另一个数作除数,相除求余数。

⑵假设余数不为0,那么以上一次的除数作为新的被除数,以上一次的余数作为新的除数,继续求余数。

⑶直至余数为0时,对应的除数就是最大公约数。122#include<stdio.h>main()

{intm,n,r,g,h,p;

scanf("%d%d",&m,&n);

p=m*n;

while((r=m%n)!=0)

/*余数不为0时循环*/

{m=n;

/*以上一次的除数作为新的被除数*/

n=r;

/*以上一次的余数作为新的除数*/

}

g=n;

/*余数为0时的除数即最大公约数*/

h=p/g;

/*两数之积除以最大公约数就是最小公倍数*/

printf("g=%d,h=%d\n",g,h);

}123解法2:辗转相除法。#include<stdio.h>main()

{intm,n,r,g,h,p;

scanf("%d%d",&m,&n);p=m*n;

while(1)

/*循环条件总为真*/

{r=m%n;

if(r==0)

break;

/*余数为0时终止循环*/

m=n;

/*以上一次的除数作为新的被除数*/

n=r;

}/*以上一次的余数作为新的除数*/

g=n;

/*余数为0时的除数即最大公约数*/

h=p/g;

/*最小公倍数*/

printf("g=%d,h=%d\n",g,h);}124解法3:#include<stdio.h>main(){intm,n,g,h,i;

scanf("%d%d",&m,&n);

for(g=m;g>=1;g--)

{if((m%g==0)&&(n%g==0))

/*此时g是最大公约数*/

break;}

for(i=1;i<=n;i++)

{h=i*m;

/*h是m的倍数*/

if(h%n==0)

/*此时h是最小公倍数*/

break;}

printf("g=%d,h=%d\n",g,h);}125从键盘输入一个正整数,将该数前后倒置后输出〔用循环完成〕。解法1:

#include

温馨提示

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

评论

0/150

提交评论