第四章程序流程控制语句(编辑修改稿)内容摘要:

case 4: case 6: case 9: case 11: /* 处理 “ 小 ” 月 */ days=30。 break。 case 2: /* 处理 “ 平 ” 月 */ if ( year%4==0 amp。 amp。 year%100!=0 || year%400==0 ) days=29。 /* 如果是闰年 */ else days=28。 /* 不是闰年 */ break。 default: /* 月份错误 */ printf(Input error!\n)。 days=0。 } if (days!=0) printf(”%d,%d is %ddays\n,year,month,days)。 } 省略 case子句之后的语句 第 33 页 167。 442 选择语句 switch语句  省略 break语句 例如:某程序段中, error是进行出错处理的函数。 flag=1。 /* error marker */ switch (i) { case 1: case 2: case 3: flag=0。 /* no error */ break。 case 4: flag=1。 /* error 1 */ case 5: error(flag)。 /* error process */ break。 default: flag=2。 /* other error */ } /* 假定函数 error是出错处理函数 */ 当 i=1, 2, 3 时: flag=0; 退出。 当 i=5 时: flag = 1; 调用 erorr(flag); 退出。 当 i=4 时: flag = 1; 调用 error(flag); 退出。 第 34 页 167。 442 选择语句 switch语句  例 : 请编写一个程序计算表达式: data1 op data2的值。 main ( ) { float data1, data2。 char op。 /* 定义操作数、操作符变量 */ printf(Enter your expression:)。 scanf (”%f%c%f”, amp。 data1, amp。 op, amp。 data2)。 /* 输入表达式 */ switch ( op ) /* 根据操作符分别进行处理 */ { case ’+’ : /* 处理加法 */ printf(%.2f+%.2f=%.2f\n, data1, data2, data1+data2)。 break。 case ’’ : /* 处理减法 */ printf (%.2f%.2f=%.2f\n, data1, data2, data1data2)。 break。 case ’*’ : /* 处理乘法 */ printf (%.2f*%.2f=%.2f\n, data1, data2, data1*data2)。 break。 case ’/’ : /* 处理除法 */ if ( data2==0 ) /* 若除数为0 */ printf (Division by zero.\n)。 else printf (%.2f/%.2f=%.2f\n, data1, data2, data1/data2)。 break。 default: /* 输入其它运算符 */ printf (Unknown operater.\n)。 } } 例 C3_4202 第 35 页 167。 45 循环语句  提出问题 提问: 从键盘上输入 10个整数并求和,怎么编程。 回答: 在程序中写入 10个 scanf( )语句。 提问: 从键盘上输入 500个整数并求和,怎么编程。 回答: 这个,嗯 ……??? 不会让我写 500个 ...... 老师: 让我们换一个角度来看待这些问题, 以上问题的实质是:将 scanf函数重复执行 N遍。 学生: 对。 好象是这么回事 ...... 老师: 我们可以引出一个概念“ 循环 ”,简单而言: 循环 就是不断 反复地执行同一段程序。 学生: 这就是我们今天要学的新东西。 第 36 页 167。 45 循环语句 循环 反复执行同一段程序,直到满足一定的条件后才停止执行该段程序。 C语言中控制循环的语句: ◆ while ◆ for ◆ dowhile 第 37 页 167。 451 while语句  while语句格式 while ( 表达式 ) 语句 ; 说明:语句 部分可以是 简单语句 ,也可 以是复合语句。  while语句的执行流程 表达式 ? 执行 语句 成立 不成立 执行 while循环之后的语句 循环控制条件 循环体 第 38 页 167。 451 while语句 实例  例 从键盘输入 10个整数,求这 10个整数的和。 include main ( ) { int count,num,total。 /* count:计数器, num:输入的整数 */ count=0。 total=0。 /* total:存放累加和 */ while ( count10 ) /* 循环控制条件 */ { count ++。 /* 循环体 */ printf (Enter the No.%d=, count)。 scanf (%d, amp。 num)。 total += num。 /* 计算累加和 */ } printf(Total=%d\n, total)。 } 例 C3_5101 第 39 页 167。 451 while语句 实例  例: 分析程序的运行结果 include main ( ) { int n=0。 while ( n3 ) printf (”n is %d\n”,n)。 n++。 printf(”That\’s all this program does.\n”)。 } 结果: 程序将不停的打印“ n is 0”, 直至终止程序  无法正常终止的程序,称为“ 死循环 ”。 结论: while语句 循环体 中,一定要有能够 对循环控制条件产生影响的语句。 避免出现“ 死循环 ”现象。 例 C3_51011 { } 第 40 页 167。 451 while语句 实例  例 1: 分析下列程序段 index=1。 while ( index 5 ) printf(”Good morning!\n”)。 分析: 程序段将无限制打印字符串。 因为循环中 没有 任何语句可以改变循环控制变量 index的初值 1。 第 41 页 167。 451 while语句 实例  例 2: 分析下列程序段 index=1。 while( index 5 ) printf(”Good morning!\n”)。 分析: 仍有问题,程序改变了 index,但方向错了。 在 index达到系统能够处理的最大负数时,将会产生下溢而终止程序。 结论: 循环体中必须有能够使循环 正常停止 的条件。 第 42 页 167。 451 while语句 实例  例 : 从键盘中读入一系列字符,直到输入字母 a时才停止。 分析: 由于不知道要输入的字符数量,只知停止条件是输入字母 a, 则只能将循环控制条件设为 ch!=39。 a39。 include main( ) { char ch=39。 39。 while ( ch!=39。 a39。 ) putchar( ch = getch( ) ); } 例 C3_5103 改写: include main( ) { char ch。 while ( (ch = getch( )) !=39。 a39。 ) ; } 例 C3_51031 循环体为空语句 第 43 页 167。 451 while语句 实例  例 : 对输入的行和字符进行计数。 分析: \n作为 行结束 标记的, DOS中有 [CTRL+Z]作为文件结束 标记 define EOF 1 include main ( ) { int c,nl=0,nc=0。 while ( ( c = getchar( ) ) != EOF ) { ++ nc。 if ( c == 39。 \n39。 ) ++ nl。 } printf(chars=%d, lines=%d\n, nc, nl)。 } 例 C3_5104 定义文件结束标记 nl行计数器 nc字符计数器 进行字符计数 如果找到 \n, 则行计数 第 44 页 167。 451 while语句 实例  例 3: 求 1到 100的之和。 main ( ) { int total=0, i=1。 while ( i = 100 ) { total = total + i。 i ++。 } printf(”Total=%d\n, total)。 } 例 C3_51041 变形 1: while ( i = 100 ) total += i++。 == total+=i。 ++i 变形 2: int i=0。 while ( ++i = 100 ) == ++i。 判断 i=100 total += i。 变形 3: int i=0。 while ( i++ 100 ) == 判断 i100; i++ total += i。 变形 4: int i=0。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。