1、switch语句,处理多分支选择问题,3种情况:1、在switch语句的每个语句段中都使用break语句switch(表达式) case 常量表达式1:语句段1 break; case 常量表达式2:语句段2 break; . case 常量表达式n:语句段n break; default : 语句段n+1 break;,分段计价问题:,switch (choice) case 1: price=2.0; break; case 2: price=2.5; break; case 3: price=3.0; break; case 4: price=3.5; break; default: p
2、rice=0.0; break;,if (choice=1) price=2.0;else if (choice=2) price=2.5;else if (choice=3) price=3.0;else if (choice=4) price=3.5;else price=0;,用else-if表示:,2、在switch中不使用break,switch (表达式) case 常量表达式1:语句段1 case 常量表达式2:语句段2 . case 常量表达式n:语句段n default : 语句段n+1,switch (choice) case 1: price=2.0; case 2: p
3、rice=2.5; case 3: price=3.0; case 4: price=3.5; default: price=0.0;,price=?,3、在switch的某些语句段中使用break,例 输入10个字符,分别统计出其中空格或回车、数字和其他字符的个数。,分析: 设统计变量 blank , digital , other 情况 一: , n blank+; 情况二: 0,1,2,3,4,5,6,7,8,9 digital+; 其它: other +;,int main(void) /begin of main() int blank, digit, i, other; char
4、ch; blank = digit = other = 0; printf(Enter 10 characters: ); for (i = 1; i = 10; i+) /通常用i,j,k作循环控制变量 /begin of for,ch = getchar(); switch (ch) case : case n: blank +; break; case 0 : case 1 : case 2 : case 3 : case 4 :case 5 : case 6 : case 7 : case 8 : case 9 : digit +; break; default: other +; ,
5、 /end of for printf(blank=%d, digit=%d, other=%dn, blank, digit, other); return 0; / end of main(),Enter 10 characters: Reold 123?blank=1, digit=3, other=6,分析: 行的控制i: 18; 列的控制: 1) *的个数与当前行的关系: j=2*i-1; 2)*前面的空格k与行的关系: 开始时,第一行有7个空格, 每多一行,少一个空格,k=8-i。,例:打印金字塔图形。,15列,8行,for (i=1;i9;i+) for (k=1;k=8-i;k
6、+) 输出空格; for (j=1;j=(2*i-1);j+) 输出*; ,*,void main() int i=1,j,k; for (i=1;i9;i+) /8层金字塔 for (k=1;k=8-i;k+) printf( ); /输出空格 for (j=1;j=2*i-1;j+) printf(* ); /输出* printf(n ); ,for (i=1;i=3;i+) for (j=1;j=4;j+) for (k=1;k=5;k+) ,理解三重循环,第一层:求和, i循环 x1+x2+xi+xn,第二层:求积,j循环 y1*y2*y3*yi,第三层:求阶乘,k循环 1*2*3*j
7、,思考:求1! + 1!*2! + + 1!*2!*100!,sum=0for (i=1;i=n;i+) itemj=1; for (j=1;j=i;j+) itemk=1; for (k=1;k1e-5,更新x, 即x=x1, 循环执行 2) 3),否则执行4); 4)输出x。,习题讲解,C程序设计 第六讲 数组,#include math.hvoid main()doube a,x1,x2;scanf(%lf,快速代码整理方法:选中目标,再按Alt+F8,C程序设计 第六讲 数组,练习6.13 用二分法求下面方程在(-10,10)之间的根。2x3-4x2+3x-6=0,解题分析:首先要求理
8、解什么叫二分法?,习题讲解,x,f(x),x,x=(x1+x2)/2,C程序设计 第六讲 数组,解题步骤:1, 已知 -10x1, 10x2 ,x1,x2有根,2,二分法:x=(x1+x2)/2, 将求解域分为两个,x1,x和x,x23,关键点:寻找根在x1,x还是在x,x2区间? 如果f(x)*f(x1)0 说明x1,x f()的值符号相同,即不 过0, 无根,并且x,x2 有根; 如果f(x)*f(x1)0说明 x1,x 有根;4,调整x1,x2反复运算,直到fabs(f(x)0) x1=x; else x2=x; while (fabs(y)1.0E-6);,printf(The roo
9、t is %5.2fn,x);,float x,y,x1,x2,y1;,课堂练习1, 打印乘法九九表; 课堂练习2, 古典算术问题:搬砖头。某地需要搬运砖块,已知男人一人搬3块,女人一人搬2块,小孩两人搬一块。问用45人正好搬45块砖,有多少种搬法?,要求:清晰写出思路或 关键程序段。,for (men = 0; men = 45; men+) for (women = 0; women = 45; women+) for (child = 0; child = 45; child+) if (men+women+child=45) ,for (men = 0; men = 15; men+)
10、for (women = 0; women = 22; women+) child = 45 women men; if (men * 3 + women * 2 + child * 0.5 = 45) printf(men=%4dwomen=%4dchild=%4dn,men, women, child);,方法一:,方法二:,目的:熟练掌握 for 、 while 、 do-while语句的使用和 break,continue的使用。内容: 基本:Page 129: 6.5, 6.7, 6.8, 6.14提高: 1, 要将一张 100 元的大钞票,换成等值的 10元、 5 元、 2 元、1 元一张的小钞票。要求每次换成 40 张小钞票,每种至少一种。编程输出所有可能的换法。 2, 阶段总结报告: 归纳所学的内容,总结习题完成情况 ,讲述学习中遇到的难点及今后的教与学中应注意的问题。要求:与第三次上机相同.,第三次 上机实验,