if ifelse ifelse ifelse switch 2 sum 0

  • Slides: 44
Download presentation

回顾分支结构 if � if/else if/…/else if/else � switch � 2

回顾分支结构 if � if/else if/…/else if/else � switch � 2

sum = 0; denominator = 1; flag = 1; item = 1. 0; item的初值有多重要?

sum = 0; denominator = 1; flag = 1; item = 1. 0; item的初值有多重要? while( fabs(item) > 0. 0001 ) { item = flag * 1. 0/denominator; sum = sum + item; /* 准备下一项 */ flag = -flag; denominator = denominator + 2; } printf( "pi = %. 4 fn", sum * 4 ); 10

统计学生成绩 scanf("%lf", &grade); while( grade >=0 ) { sum = sum + grade; num

统计学生成绩 scanf("%lf", &grade); while( grade >=0 ) { sum = sum + grade; num ++; if( grade < 60 ) failed ++; /* 准备下个数据 */ scanf("%lf", &grade); } if( num != 0 ) printf("Grade average is %fn", sum/num); printf("Number of failures is %dn", failed); 12

计算整数的位数 count = 0; do { number = number / 10; count ++; }

计算整数的位数 count = 0; do { number = number / 10; count ++; } while ( number!=0 ); 改为下面的while循环如何? count = 1; while (( abs(number)>9 number!=0 ) ) { count ++; number = number / 10; } printf("it contains %d digitals. n", count); 16

循环体中break和continue语句 [例4 -4, P 70]素数的判定问 题:除了1和自身,不能被 别的数整除 int i, m; scanf("%d", &m); for( i

循环体中break和continue语句 [例4 -4, P 70]素数的判定问 题:除了1和自身,不能被 别的数整除 int i, m; scanf("%d", &m); for( i = 2; i<=m/2; i++ ) if( m%i==0 ) break; if( i>m/2 && m!=1 ) printf("Yesn"); else printf("No!n"); 17

[例4 -8,P 78] n个成绩的最高分 int n, i, grade, max; printf("Enter n: "); scanf ("%d",

[例4 -8,P 78] n个成绩的最高分 int n, i, grade, max; printf("Enter n: "); scanf ("%d", &n); printf("Enter %d marks: ", n); scanf ("%d", &mark); max = mark; /* 剩余成绩循环处理 */ /* 次数未知,适合while语句 */ 27

[例4 -8,P 78] n个成绩的最高分 for( i = 1; i < n; i++ ) {

[例4 -8,P 78] n个成绩的最高分 for( i = 1; i < n; i++ ) { scanf ("%d", &mark); if( max < mark ) max = mark; } printf("Max = %dn", max); 28

[P 79] 如果一批成绩以负数结尾 求最高分 while( mark>=0 ) { if( max < mark ) max

[P 79] 如果一批成绩以负数结尾 求最高分 while( mark>=0 ) { if( max < mark ) max = mark; scanf ("%d", &mark); } printf("Max = %dn", max); 30

#include<stdio. h> #include<math. h> int count, m, n, i; count = 0; for( m

#include<stdio. h> #include<math. h> int count, m, n, i; count = 0; for( m = 2; m<100; m++ ) { n = sqrt(m); for( i=2; i<=n; i++ ) if( m%i==0 ) break; if( i<=n ) continue; printf("%6 d", m); count ++; if( count%10==0 ) printf("n"); 36 }

[例4 -12,P 82]穷举算法(搬砖) for( men=0; men<=45; men++ ) for( women=0; women<=45; women++ ) 合计执行

[例4 -12,P 82]穷举算法(搬砖) for( men=0; men<=45; men++ ) for( women=0; women<=45; women++ ) 合计执行 for( child=0; child<=45; child++ ) 多少次循 if( men+women+child==45 && 环操作? men*3+women*2+child*0. 5==45 ) 45*45*45 { printf("men=%d, women=%d, child=%dn", men, women, child); } 40

改进[1] for( men=0; men<=45; men++ ) 合计执行 for( women=0; women<=45; women++ ) 多少次循 {

改进[1] for( men=0; men<=45; men++ ) 合计执行 for( women=0; women<=45; women++ ) 多少次循 { 环操作? child = 45 -men-women; 45*45 if( child>=0 && men*3+women*2+child*0. 5==45 ) { printf("men=%d, women=%d, child=%dn", men, women, child); } 41 }

改进[2] 编写循环程序时 注意代码的执行效率 for( men=0; men<=15; men++ ) 合计执行 for( women=0; women<=22; women++ )

改进[2] 编写循环程序时 注意代码的执行效率 for( men=0; men<=15; men++ ) 合计执行 for( women=0; women<=22; women++ ) 多少次循 { 环操作? child = 45 -men-women; 15*22 if( men*3+women*2+child*0. 5==45 ) { printf("men=%d, women=%d, child=%dn", men, women, child); } } 42

作业 � 课本的习题 3和习题 4 http: //www. cad. zju. edu. cn/home/xgliu/C 2016 /homework-3 -4.

作业 � 课本的习题 3和习题 4 http: //www. cad. zju. edu. cn/home/xgliu/C 2016 /homework-3 -4. doc 10月25日提交 44