5 2S12100 main int i sum0 i1 whilei100

  • Slides: 50
Download presentation

[例5. 2]求S=1+2+…+100的和。 main() { int i, sum=0; i=1; while(i<=100) { sum=sum+i; i++; } printf("SUM=%dn",

[例5. 2]求S=1+2+…+100的和。 main() { int i, sum=0; i=1; while(i<=100) { sum=sum+i; i++; } printf("SUM=%dn", sum); } 1/11/2022 SUM=5050 《C语言程序设计》-第五章 12

main() { 运行输入: 【 例 5. 3 】 求两个正整数的最大公因子。 int m, n, r; please

main() { 运行输入: 【 例 5. 3 】 求两个正整数的最大公因子。 int m, n, r; please type in two positive integers 采用Euclid(欧几里德)算法来求最大公因子, printf("please 49 21 type in two positive integersn"); 其算法是: scanf("%d%d", &m, &n); 运行结果: (1)输入两个正整数m和n。 while(n) Their greatest common divisor is 7 (2)用m除以n,余数为r,如果r等于0,则n是 { 再次运行输入: 最大公因子,算法结束,否则(3)。 r=m%n; please type in two positive integers (3)把n赋给m,把r赋给n, 转(2)。 m=n; 50 100 例如: 有m=49,n=21,用m除以n,余数为 7。 n=r; 再次运行结果: 由于7≠ 0,将n赋给m,r赋给n,这时m=21,n=7, } Their greatest common divisor is 50 再次用m除以n,21除以 7,余数为 0,此时的n值 7就 printf("Their greatest common divisor is %dn", m); 是 49和21的最大公因子。 } 1/11/2022 《C语言程序设计》-第五章 13

[例5. 4]求S=1+2+…+100的和。 main() { int i, sum=0; i=1; do { sum=sum+i; i++; }while(i<=100); printf("SUM=%dn",

[例5. 4]求S=1+2+…+100的和。 main() { int i, sum=0; i=1; do { sum=sum+i; i++; }while(i<=100); printf("SUM=%dn", sum); } 1/11/2022 SUM=5050 《C语言程序设计》-第五章 15

[例5. 5]将一个整数的各位数字颠倒后输出。 算法:提取最后一位数字,用取模 10的余数求得。 main() { int i, r; printf("Input an integern"); scanf("%d", &i);

[例5. 5]将一个整数的各位数字颠倒后输出。 算法:提取最后一位数字,用取模 10的余数求得。 main() { int i, r; printf("Input an integern"); scanf("%d", &i); do{ r=i%10; printf("%d", r); i=i/10; }while((i/=10)!=0); }while(i!=0); printf("n"); } Input an integer 1234 4321 1/11/2022 《C语言程序设计》-第五章 16

[例5. 6]求S=1+2+…+100的和。 main() { int i, sum=0; for(i=1; i<=100; i++) sum=sum+i; printf(“SUM=%dn”, sum); SUM=5050

[例5. 6]求S=1+2+…+100的和。 main() { int i, sum=0; for(i=1; i<=100; i++) sum=sum+i; printf(“SUM=%dn”, sum); SUM=5050 } 1/11/2022 《C语言程序设计》-第五章 22

[例5. 7]输入 10个字符,输出最大的ASCII值。 #include "stdio. h" #define NUM 10 main() { int i, c,

[例5. 7]输入 10个字符,输出最大的ASCII值。 #include "stdio. h" #define NUM 10 main() { int i, c, max; max=0; for(i=1; i<=NUM; i++) if((c=getchar())>max) max=c; printf("The largest ASCII value is %dn", max); } 12 AB 9 xab The largest ASCII value is 120 1/11/2022 《C语言程序设计》-第五章 23

[例5. 8]求菲波那契数列的前20个数。 main() { int i, a, b, c; a=0; b=1; printf("%10 d", a,

[例5. 8]求菲波那契数列的前20个数。 main() { int i, a, b, c; a=0; b=1; printf("%10 d", a, b); for(i=3; i<=20; i++) { c=a+b; printf("%10 d", c); 0 1 1 if(i%5==0) 5 8 13 55 89 144 printf("n"); 610 987 1597 a=b; b=c; } printf("n"); 1/11/2022 《C语言程序设计》-第五章 } 2 21 233 2584 3 34 377 4181 24

例题: 求s=1!+2!+3!+4!. . . +n! • • • main() { int i, j, n;

例题: 求s=1!+2!+3!+4!. . . +n! • • • main() { int i, j, n; long s=0, p; Scanf(“%d”, &n); for(i=1; i<=n; i++) {p=1; for(j=1; j<=i; j++) p=p*j; s=s+p; } printf(“s=%ld”, s); } 1/11/2022 p=1; for(i=1; i<n; i++) {p=p*i; S=s+p; } 5 S=153 《C语言程序设计》-第五章 30

[例5. 11] break语句结束循环。 main() { int i; for(i=1; i<=100; i++) { printf("%d ", i);

[例5. 11] break语句结束循环。 main() { int i; for(i=1; i<=100; i++) { printf("%d ", i); if(i>9) break; } printf("n"); } 1/11/2022 1 2 3 4 5 6 7 8 9 10 《C语言程序设计》-第五章 33

[例5. 12]求调和级数中第多少项的值大于10。 调和级数的第n项形式为: 1+1/2+1/3+…+1/n #define LIMIT 10 main() { int n; float sum; sum=0.

[例5. 12]求调和级数中第多少项的值大于10。 调和级数的第n项形式为: 1+1/2+1/3+…+1/n #define LIMIT 10 main() { int n; float sum; sum=0. 0; n=12367 n=1; for(; ; ){ sum=sum+1. 0/n; if(sum>LIMIT) break; n++; } printf("n=%dn", n); } 1/11/2022 《C语言程序设计》-第五章 34

[例5. 13]求输入的正数之和。 main() { int i, n, sum=0; for(i=1; i<10; i++) { scanf("%d", &n);

[例5. 13]求输入的正数之和。 main() { int i, n, sum=0; for(i=1; i<10; i++) { scanf("%d", &n); if(n<0) continue; sum=sum+n; } printf("SUM=%dn", sum); } 1/11/2022 SUM=55 《C语言程序设计》-第五章 36

[例5. 15] 求100~200间的全部素数。 main() { int m, i, n=0; 算法:m不能被 2~(m-1)之间任一整数 for(m=101; m<=200; m=m+2)

[例5. 15] 求100~200间的全部素数。 main() { int m, i, n=0; 算法:m不能被 2~(m-1)之间任一整数 for(m=101; m<=200; m=m+2) 数除,则m为素数。 { if(n%10==0) printf("n"); for(i=2; i<m; i++) /* for(i=2; i<=m/2; i++) 或for(i=2; i<=sqrt(m); i++) */ if(m%i==0) break; if(i>=m) {printf("%d ", m); n=n+1; } } printf("nprime number=%dn", n); 101 103 107 109 113 127 } 151 157 163 167 199 prime number=21 1/11/2022 173 179 131 181 《C语言程序设计》-第五章 137 191 139 193 149 197 40

练习题 一. 选择题 [5. 1] 以下程序段的输出结果是 A) 9 B) 1 C) 11 D) 10

练习题 一. 选择题 [5. 1] 以下程序段的输出结果是 A) 9 B) 1 C) 11 D) 10 int k, j, s; for ( k=2; k<6; k++, k++) 第 1次: s=1+2+3+4+5=15 { s=1; for (j=k; j<6; j++) s+=j; 第 2次: s=1+4+5=10 } printf(“%dn”, s); [5. 2] 以下程序段的输出结果是 i=1 j=3, 7, 11, 15, 19 m=5 A)12 B)15 C)20 D)25 i=5 j=3, 7, 11, 15, 19 m=10 int i, j, m=0; i=9 j=3, 7, 11, 15, 19 m=15 for (i=1; i<=15; i+=4) i=13 j=3, 7, 11, 15, 19 m=20 for (j=3; j<=19; j+=4)m++; 1/11/2022 《C语言程序设计》-第五章 46 i=17(>15)退出 printf(“%dn”, m);