[教育学]C++教学基础第二章.ppt_第1页
[教育学]C++教学基础第二章.ppt_第2页
[教育学]C++教学基础第二章.ppt_第3页
[教育学]C++教学基础第二章.ppt_第4页
[教育学]C++教学基础第二章.ppt_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

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

文档简介

,第二章 C+简单程序设计,本章内容, 程序的三种基本结构 C+语句 选择结构 循环结构 跳转语句,计算,顺序结构,结束,开始,输入,输出,分段函数,选择结构(分支结构),循环结构,思考: 对110000内的所有偶数求和。,1)判断一个数是否是偶数,奇数绕过不计算 (?结构) 2)求10000内的偶数 (?结构),程序基本结构,顺序结构:顺序执行 分支结构:按条件选择性执行 循环结构:按条件循环,结构化程序设计一般都是由这三种结构进行简单衔接、复合、嵌套等方法组成的。 结构化程序只有一个入口和出口,C+语句,说明语句 (如:函数原型声明) 表达式语句 (m+=5;) 复合语句 ( a=b+c; f=a+d; ) 控制语句 (选择,循环,转移) 函数调用语句 (strcpy(s1,s2) 流对象调用语句 (coutaendl;),选择结构,选择结构的语句: if 语句 形式1:if(表达式)语句体 形式2: if(表达式)语句体1else语句体2 形式3: if (表达式1) 语句体1 else if (表达式2) 语句体2 else if (表达式3) 语句体3 else语句体n+1 switch语句,#include void main( ) int a; couta; if(a0) a*=a; cout”a=”aendl; ,#include void main( ) int a; couta; if(a0) a*=a; /Tab键 或空格缩进 cout”a=”aendl; ,例1:一个数,若为正数则原样输出;若为负数求平方后输出。 ( 演示),请输入一个整数:12 a=12,第1次执行程序:,第2次执行程序:,请输入一个整数:-5 a=25,形式:,if(表达式) 语句体,if 语句形式1:if 语句,#include /求方程实根 #include void main() double a, b, c, x1, x2,d ,t; coutabc; d=b*b-4*a*c; t=sqrt(d); x1=(-b+t)/(2*a); x2=(-b-t)/(2*a); cout“x1=“x1“, x2=”x2endl; ,问题:如何考虑方程无实根的情况?,#include #include void main() double a, b, c, x1, x2, d, t; coutabc; d=b*b-4*a*c; if(d=0) t=sqrt(d); x1=(-b+t)/(2*a); x2=(-b-t)/(2*a); cout“x1=“x1; cout“, x2=”x2endl; ,if(表达式) 语句体,形式:,注意: 所谓“语句体”应该是一个复合语句。 所谓“复合语句”是指若干语句用大括号括在一起,从形式上视为一句。 当复合语句中只有一句时,可以省略大括号。,if(表达式) 语句体1 else 语句体2,if 语句形式2:if-else语句,语句体1、语句体2同样应该是复合语句。,#include #include void main() double a, b, c, x1, x2, d, t; coutabc; d=b*b-4*a*c; if(d0) cout“没有实数根“; else t=sqrt(d); x1=(-b+t)/(2*a); x2=(-b-t)/(2*a); cout“x1=“x1“, x2=”x2endl; ,#include #include void main() double a, b, c, x1, x2, d, t; coutabc; d=b*b-4*a*c; if(d=0) t=sqrt(d); x1=(-b+t)/(2*a); x2=(-b-t)/(2*a); cout“x1=“x1“, x2=”x2endl; else cout“没有实数根“; ,if 语句可以“嵌套”,#include #include void main() double a, b, c, x1, x2,d, t; coutabc; d=b*b-4*a*c; if(d0) cout“没有实数根“; else if(d=0) x1=-b/(2*a); cout“唯一实根x=”x1endl; else t=sqrt(d); x1=(-b+t)/(2*a); x2=(-b-t)/(2*a); cout“实根x1=”x1“, 实根x2=”x2endl; ,if (a=0) if(b=0) couta/bendl; else couta*bendl;,嵌套时else总是与离它最近的且尚未匹配的if相匹配。,使用“嵌套”时要注意的问题,假如a=5, b=5,输出? 假如a=-5, b=5,输出?,if (a=0) if(b=0) couta/bendl; else couta*bendl;,if (a=0) if(b=0) couta/bendl; else couta*bendl;,输出1 无输出,if (a=0) if(b=0) couta/bendl; else couta*bendl;,输出-25,if (表达式1) 语句体1 else if (表达式2) 语句体2 else if (表达式3) 语句体3 else if (表达式n) 语句体n else 语句体n+1 ,if 语句形式3:if-else if 语句,#include #include void main() double a, b, c, x1, x2, d, t; coutabc; d=b*b-4*a*c; if(d0) cout“没有实数根“; else if(d=0) x1=-b/(2*a); cout“x1=”x1endl; else t=sqrt(d); x1=(-b+t)/(2*a); x2=(-b-t)/(2*a); cout“x1=”x1; cout“, x2=”x2endl; ,#include #include void main() double a, b, c, x1, x2,d, t; coutabc; d=b*b-4*a*c; if(d=0) x1=-b/(2*a); cout 0) t=sqrt(d); x1=(-b+t)/(2*a); x2=(-b-t)/(2*a); cout“x1=”x1; cout“, x2=”x2endl; 最后一项else可以没有。,例3:,输入一个成绩,给出该成绩 的等级: 成绩90 输出优; 80成绩90输出良; 70成绩60输出中; 60成绩70输出及格; 成绩60输出不及格 。,#include void main( ) float score; coutscore; if(score100) cout=90) cout=80) cout=70) cout=60) cout“及格n“; else cout“不及格n“; ,关于if 结构的总结,if 选择的是执行还是“绕开”的问题,语句体可能不会被执行;if-else 选择的执行语句体1还是语句体2的问题,两者之中必有一个会被执行;if-else if 结构则是在n个分支中作出选择。 if-else if 结构中提供了一个else分支,为所有条件都不满足时的“归宿”。也可以没有else分支,当所有条件都不满足时,什么都不执行,直接绕过。 else if 不能单独使用,只能是if-else if 结构中的一个部分。当if-else if 不需要else if 时,即褪化为if-else结构;当连else也不需要的时候,就褪化为if 语句。,关于if 结构的注意事项与常见错误,1、问题 if语句中的复合语句,一定用括起来,否 则只与最近的结合。,#include void main() int x; cinx; if (x%2 = =0) x+; coutx; ,#include void main() int x; cinx; if (x%2 = =0) x+; coutxendl; ,2、if(表达式)中的表达式可以是任意形式,任意类型,只要结果是0或非0值,即条件成立或不成立。,关于if 结构的注意事项与常见错误,if(5) if(a) if(!x) if(m= x) if(m= =x) if(m0) if(ab?a:b) if(m10&m20) if(a+,b+,a+b),#include void main() int x; cinx; if (x) cout“嘻嘻嘻”; else cout“哈哈哈”; /假如运行时输入10会怎样? /输入0呢?,#include void main() int x; cinx; if (x=0) cout“嘻嘻嘻”; else cout“哈哈哈”; /假如运行时输入10会怎样? /输入0呢?,#include void main() int x; cinx; if (x=7) cout“嘻嘻嘻”; else cout“哈哈哈”; /假如运行时输入7会怎样? /输入8呢?,if(x)的意思等价于if(x!=0) 注意x=7和x= =7的区别!,常用的if语句,/判断奇偶或者整除 if (x%2 ! =0) . if (x%2 = =0) .,/判断正负 if (x=0) ,/判断区间 if (00&x100) .,/判断闰年 if ( year%4=0&year%100!=0 | year%400=0) .,/判断整型数是否0值 if ( x= =0) .,常用的if语句,/判断字母大小写 char ch; cinch; if (ch=97&ch=0x61&ch=a&ch=65&ch=A&ch=Z) ,switch语句:多个分支,case,case,case,defalut,switch语句的基本形式,switch(表达式) case 常量值1: 语句体1break; case 常量值2: 语句体2break; case 常量值n: 语句体nbreak; default : 语句体n+1 break; ,说 明:,其中的表达式可以是任何整型、字符型表达式。 每个“常量值i”必须是常量, 并且每个常量值都不能相同。 case和default的次序可以任意,不影响分支选择,但影响结果,分析程序运行结果 。,#include void main() int x,a,b,c,d; a=b=c=d=0; cinx; switch(x) case 1: a+; break; case 2 : b+; break; case 3 : c+; break; default : d=1; coutabcdendl; ,输入1结果为:1000 输入2结果为:0100 输入5结果为:0001,执行程序:,#include void main() int x,a,b,c,d; a=b=c=d=0; cinx; switch(x) default : d=1; break; case 2 : b+; break; case 3 : c+; break; case 1: a+; break; coutabcdendl; ,注意: 语句体不是复合语句; 顺序无关;,break语句的作用,#include void main() int x,a,b,c,d; a=b=c=d=0; cinx; switch (x) case 1 : a+; case 2 : b+; case 3 : c+; break; default : d=1; break; coutabcdendl; ,输入1结果为:1110 输入2结果为:0110 输入5结果为:0001,执行程序:,#include void main() int x,a,b,c,d; a=b=c=d=0; cinx; switch (x) case 1 : case 2 : cout“小于3”; break; case 3 : cout“等于3”; ,注意: 可以没有default,所有case都不符合时,直接跳过switch结构。,注意: 表达式和选择项必为整数; 选择项可为整数常数或常数表达式,但值不能重复; 选择项不能为变量表达式;,#include void main() int a,b,c,d; double x; a=b=c=d=0; cinx; switch(x) case 1: a+; break; case 2.5 : b+; break; case 3 : c+; break; default : d=1; coutabcdendl; ,#include void main() int a,b,c,d; int x; a=b=c=d=0; cinx; switch(x) case 1+2: a+; break; case 3*5 : b+; break; case 3 : c+; break; default : d=1; coutabcdendl; ,#include void main() int x, a,b,c,d; a=b=c=d=0; cinx; switch(x) case x0 : c+; break; coutabcdendl; ,/例2.3,考虑用switch语句改写 #include void main( ) float score; coutscore; if(score100) cout=90) cout=80) cout=70) cout=60) cout“及格n“; else cout“不及格n“; ,#include void main( ) float score; coutscore; switch(int(score/10) case 10: case 9: cout“优n“; break; case 8: cout“良n“; break; case 7: cout“中n“; break; case 6: cout“及格n“; break; default: cout“不及格n“; ,2.4 循环结构,程序中有时需要反复地执行某些操作,这种结构的程序称为循环结构。 在屏幕上输出“天津大学” cout“天津大学n” 在屏幕上输出“天津大学”100遍,for(int i=0; i100; i+) cout“天津大学n”,循环语句,在编写循环结构的程序时,要考虑的问题: 有一个控制循环的循环变量或称计数器,它有初始值。它在循环执行过程中不断地被修改。 确定一个条件。当该条件成立(为真)时循环被执行;否则循环结束。 C+提供了3种实现循环的语句: while语句 dowhile语句 for语句,while语句,while(表达式) 循环体,形式:,while语句属于当型循环,即当条件成立时执行循环。 while语句是先判断,再执行,如果第一次判断时表 达式的值就不成立,则循环体一次也不执行。 注意循环体用复合语句。,说明:,执行流程:,while循环应用的典型场合,#include void main() double x=1000; int i=0; double r=0.0225; while(x=100000) x*=1+r; i+; couti“年“endl; ,假设在银行存款1000元,年息为2.25,多少年后,变为10万元?,结果:,207年,例6:求自然数100的累加和。,# include void main() int i(0), sum(0); while(i101) sum+=i; i+; /循环体 cout“sum=“sumendl; ,#include void main() int i(0),sum(0); while(i+100) sum+=i; /循环体 coutsumendl; i+: 099 sum: 1100,#include void main() int i(1),sum(0); while(i+100) sum+=i; /循环体 coutsumendl; i+: 199 sum: 2100,#include void main() int i(0),sum(0); while(+i100) sum+=i; /循环体 coutsumendl; +i: 199 sum: 199,do-while语句,do 循环体 while(表达式);,形式:,说明:,do while语句属于直到型循环,直至表达式的值为0时 结束循环。 do while语句先执行循环体,然后再判断条件。直到型 循环的循环体至少执行一次。,执行流程:,改写银行存款程序 (do-while),#include void main() double x=1000; int i=0; double r=0.0225; while(x=100000) x*=1+r; i+; couti“年“endl; ,#include void main() double x=1000; int i=0; double r=0.0225; do x*=1+r; i+; while(x=100000); couti“年“endl; ,改写程序:求10个方程的根。,#include #include void main() double a, b, c, x1, x2, d, t; coutabc; d=b*b-4*a*c; if(d0) cout“没有实数根“; else if(d=0) x1=-b/(2*a); cout“x1=”x1endl; else t=sqrt(d); x1=(-b+t)/(2*a); x2=(-b-t)/(2*a); cout“x1=”x1; cout“, x2=”x2endl; ,#include #include void main() double a, b, c, x1, x2, d, t,count=0; while(countabc; d=b*b-4*a*c; if(d0) cout“没有实数根“; else if(d=0) x1=-b/(2*a); cout“x1=”x1endl; else t=sqrt(d); x1=(-b+t)/(2*a); x2=(-b-t)/(2*a); cout“x1=”x1; cout“, x2=”x2endl; count+; /end while ,例7:,输出 26个英文大写字母。,#include void main() char ch; ch=A; do coutch; ch+; /字符的ASCII代码值加1 while(ch=Z); ,#include void main() char ch; ch=A; while(ch=Z) coutch; ch+; /字符的ASCII码值加1 ,while和do while的区别,例:输入字符,直到遇到#为止。,#include void main() char ch; cinch; while(ch!=#) coutch; coutendl; ,#include void main() char ch; do cinch; coutch; /至少会输出一个 while(ch!=#); coutendl; ,循环的数学用途,例:求解n!,#include void main() int n, i = 0; cin n; int nres = 1; while(+i = n) nres *= i; cout n “!=“ nres endl; ,例15: 求的近似值。,#include void main() int n; double e,u; n=1; e=u=1.0; do u/=n; e+=u; n+; while(u 1.0e-7); cout“n=“n“ “; cout“e=“eendl; ,#include void main() int n; double e,u; n=1; e=u=1.0; while(u 1.0e-7) u/=n; e+=u; n+; cout“n=“n“ “; cout“e=“eendl; ,n12 2.71828,P50,6求,直到最后一项绝对值小于10-6,#include void main() double pai=0, t=1, u; int n=1; /u初始值无关 do u=1.0/n; pai+=u*t; t = -t; n+=2; while(u1.0e-6); pai*=4; cout“=“paiendl; ,#include void main() double pai=0, t=1, u=1; int n=1; /注意u的初始值 while(u1.0e-6) u=1.0/n; pai+=u*t; t = -t; n+=2; pai*=4; cout“=“paiendl; ,for 语句,e1、e2、e3为表达式。 e1:赋值表达式,用于为循环中的变量赋初始值; e2:关系或逻辑表达式,作为继续循环的条件; e3:增、减量表达式,用于修改循环条件中的变量; e1、 e2、 e3之间用“;”号分隔; for语句中的1、 e2、 e3均可省略,但“;”不能省略; for语句中循环体可以是复合语句。,形式:,for(e1 ;e2 ;e3) 循环体,说明:,for(i=0;i10;i+) ,for语句的执行流程,for(e1;e2;e3) 循环体,int i,sum=0; for(i=1;i10;i+) sum=sum+i;,例题8:,输出1到10各数的平方值。,#include void main() int i; for(i=1; i=10; i+) couti“ “i*iendl; ,1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 9 81 10 100,输出结果:,#include void main() int i=1; for( ; i=10; i+) couti“ “i*iendl; ,#include void main() int i; for(i=1; i=10;) couti“ “i*iendl; /死循环,#include void main() int i; for(i=1; i=10;) couti“ “i*iendl; i+; ,#include void main() int i; for(i=1; ; i+) if(i10) break; couti“ “i*iendl; ,#include void main() int i=1; for( ; ; ) if(i10) break; couti“ “i*iendl; i+; ,输出1到100,每行5个,#include void main() for( int i=1;i=100;i+ ) couti“ ”; /4个空格 ,#include void main() for( int i=1;i=100;i+ ) couti“ ”; /4个空格 if(i%5=0)coutendl; ,#include #include void main() for( int i=1;i=100;i+ ) coutsetw(4) i; if(i%5=0)coutendl; ,#include void main() for( int i=1;i=100;i+ ) cout i t; if(i%5=0)coutendl; ,P52例14: 输出大写26个英文字母,每行打印6个字母。,#include #include void main( ) char letter; cout“ 大 写 英 文 字 母 表n“; for (letter=A; letter=Z; letter+) coutsetw(5)letter; ,#include #include void main( ) char letter; cout“ 大 写 英 文 字 母 表n“; for (letter=A; letter=Z; letter+) coutsetw(5)letter; if (letter-A+1)%6=0)coutendl; ,#include #include void main( ) char letter; int count(0); cout“ 大 写 英 文 字 母 表n“; for (letter=A; letter=Z; letter+) coutsetw(5)letter; count+; if (count%6=0) coutendl; ,#include #include void main( ) char letter; int count(1); cout“ 大 写 英 文 字 母 表n“; for (letter=A; letter=Z; letter+, count+) coutsetw(5)letter; if (count%6=0) coutendl; ,# include void main() int i, sum; sum=0; for(i=1; i=100; i+) sum+=i; cout“sum=“sumendl; ,求自然数100的累加和。,程序执行结果:,sum5050,# include void main() int i, sum; for(i=1; i=100; i+) sum=0; sum+=i; cout“sum=“sumendl; /错误,# include void main() int i, sum; for(sum=0, i=1; i=100; sum+=i, i+) ; /空循环体 cout“sum=“sumendl; ,讨论:如何求100!,# include void main() int i; double sum=0; for(i=1; i=100; i+) sum+=1.0/i; cout“sum=“sumendl; ,求,# include void main() int i; int t=1; double sum=0, u; for(i=1; i=100; i+) u=1.0/i*t; sum+=u; t=-t; cout“sum=“sumendl; ,求,# include void main() int i; int t=1; double sum=0; for(i=1; i=100; i+) sum+=1.0/i*t; t=-t; cout“sum=“sumendl; ,/求pi #include void main() double pai=0, t=1, u=1; int i=1; for(i=1;u1.0e-6;i+=2) u=1.0/i; pai+=u*t; t=-t; pai*=4; out“=“paiendl; ,/求pi #include void main() double pai=0, t=1, u=1; int i=1; while(u1.0e-6) u=1.0/i; pai+=u*t; t=-t; i+=2; pai*=4; out“=“paiendl; ,多重循环(循环的嵌套),多重循环是在一个循环语句的循环体内又包含另一个循环语句。 上述三种循环语句既可以自身嵌套,也可以互相嵌套。 嵌套时要注意必须将一个完整的循环结构整体放在另一个循环体内。,二重循环,. for( ) while( ) . .,三重循环,. for( ) . for( ) . for( ) . . .,讨论:,多重循环执行过程!,for(i=1;i10;i+) ,for(i=1;i10;i+) for(j=1; j10;j+) ,for(i=1;i10;i+) for(j=1; j10;j+) s=i*j;,错误理解: i=1, j=1, s=1 i=2, j=2, s=4 i=3, j=3, s=9 i=9, j=9, s=81,正确流程: i=1, j=1, s=11=1 j=2, s=12=2 j=9, s=19=9 i=2, j=1, s=21=2 j=2, s=22=4 j=9, s=29=18 ,for(i=1;i10;i+) for(j=1; j10;j+) s=i*j; cout“s=”s;,for(i=1;i10;i+) for(j=1; j10;j+) s=i*j; cout“s=”s; ,for(i=1;i10;i+) for(j=1; j10;j+) s=i*j; cout“s=”s; coutendl;,for(i=1;i10;i+) for(j=1; j10;j+) s=i*j; cout“s=”s; coutendl; ,例:,分析以下程序运行结果。,#include #include void main() int i,j; for(i=1; i10; i+) for(j = 1; j = (10-i); j +) coutsetw (4) i*j; coutendl; ,1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 3 6 9 12 15 18 21 4 8 12 16 20 24 5 10 15 20 25 6 12 18 24 7 14 21 8 16 9,i循环共进行了9轮, 每一轮i循环内 j循环了10-i次 对每一轮j循环,i是一个常数。,#include #include void main() int i,j; for(i=1; i10; i+) j = 0; while (+j=10-i) coutsetw (4) i*j; coutendl; ,第1:实现下三角形式输出 第2:实现1*8=8形式的输出,#include #include void main() int i,j; for(i=1; i10; i+) for(j = 1; j = i; j +) coutsetw (4) i*j; coutendl; ,couti*j=setw (2) i*j“ “;,2.5 跳转语句,跳转语句是辅助性语句,不单独使用,一般与选择语句或循环语句结合起来使用,起到控制程序结构的作用。 跳转语句包括: break语句 continue语句 goto语句,break语句,break;,形式:,用于switch语句 用于循环语句,用途:,当在循环体执行过程中遇到break语句时,终止循环的执行,中途退出循环,转去执行循环体后面的语句。,功能:,例:,判断输入的某正整数是否为素数。,#include void main() int m; do coutm; while(m=0); /重新输入 for (int i=2; im; i+) If (m%i=0) break; if ( i=m) coutm“是一个素数n“; else coutm“不是一个素数n“; ,输入一个正整数:431 431是一个素数,第1次执行程序:,第2次执行程序:,输入一个正整数:69 69不是一个素数,#include void main() int m; do coutm; while(m=0); /重新输入 for (int i=2; im; i+) if (m%i=0) break; if ( i=m) coutm“是一个素数n“; else coutm“不是一个素数n“; ,注意:在多重循环时,break只是退出本层 循环。,例: 分析以下switch语句执行后的输出结果。,#include void main() int a=1,b=2,c=0,d=0; switch (a) case 1: switch(b) case 1: c+; break; case 2: d+; break; case 2: c+; d+; break; cout“c=“cendl; cout“d=“dendl; ,程序执行结果:, ,#include void main() int a=1,b=2,c=0,d=0; switch (a) case 1: switch(b) case 1: c+; break; case 2: d+; break; break; case 2: c+; d+; break; cout“c=“cendl; cout“d=“dendl; , 0 1,continue语句,continue;,形式:,中断本次循环体的执行,立即执行下一次循环。,用途:,只用于循环语句中。,功能:,例题11:,将100以内能被3整除的数输出,每行输出10个数。,#include void main() int k=0; for(int i=1; i100; i+) if ( i%3 !=0) continue; couti“ “; if(+k%10=0) coutendl; /控制每行输出10个数 coutendl; ,#include void main() for(int i=1; i=9; i+) coutiendl; ,1 2 3 4 5 6 7 8 9,#include void main() for(int i=1; i=9; i+) if(i=5)break; cout

温馨提示

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

评论

0/150

提交评论