C语言程序设计_zju——记录2

1 判断

1.1 分段函数,级联的if-else if

1.2 分段函数,不写成级联的if-else if

2 循环

如果没有循环

2.1 for、do-while、while使用场景

 1 #include <stdio.h>
 2 
 3 int main()
 4 {
 5     int x;
 6     int ret = 0;
 7 
 8     scanf("%d", &x);
 9     int t = x;
10     while ( x > 1 ) {
11         x /= 2;
12         ret ++;
13     }
14     printf("log2 of %d is %d.", t, ret);
15 
16     return 0;
17 }
log2x.c

2.2 算平均数

   

 1 #include <stdio.h>
 2 
 3 int main()
 4 {
 5     int sum = 0;
 6     int count = 0;
 7     int number;
 8 
 9     scanf("%d", &number);
10     while ( number != -1 ) {
11         sum += number;
12         count ++;
13         scanf("%d", &number);
14     }
15 
16     double dsum = sum;
17     printf("The average is %f.
", dsum / count);
18 
19     return 0;
20 }

2.3 猜数字游戏

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <time.h>
 4 
 5 int main()
 6 {
 7     srand(time(0));
 8     int a = rand();
 9     
10     printf("%d
", a%100);
11 
12     return 0;
13 }
rand.c

  

 

 1 #include <stdio.h>
 2 
 3 int main()
 4 {
 5     int number = rand()%100+1;
 6     int count = 0;
 7     int a = 0;
 8     printf("我已经想好了一个1到100之间的数。");
 9     do {
10         printf("请猜这个1到100之间数:");
11         scanf("%d", &a);
12         if ( a > number ) {
13             printf("你猜的数大了。");
14         } else if ( a < number ) {
15             printf("你猜的数小了。");
16         }
17         count ++;
18     } while (a != number);
19     printf("太好了,你用了%d次就猜到了答案。
", count);
20 
21     return 0;
22 }

2.4 整数逆序

  

2.4.1 整数逆序去除零

 

  

2.4.2 整数逆序不去零

 

 1 #include <stdio.h>
 2 
 3 int main()
 4 {
 5     int x;
 6     scanf("%d", &x);
 7     int digit;
 8     int ret = 0;
 9 
10     while ( x> 0 ) {
11         digit = x%10;
12         printf("%d", digit);
13         ret = ret*10 + digit;
14         // printf("x=%d,digit=%d,ret=%d
", x, digit, ret);
15         x /= 10;
16     }
17     // printf("%d", ret);
18     
19     return 0;
20 }

2.5 整数分解

输入:

1200

输出:

0 0 1 2

#include <stdio.h>

int main()
{
    int x;
    scanf("%d", &x);

    int mask = 1;
    int t = x;
    while ( t>9 ) {
        t /= 10;
        mask *=10;
    } 
    printf("x=%d, mask=%d
", x, mask);
    do {
        int d = x / mask;
        printf("%d", d);
        if ( mask > 9 ) {
            printf(" ");
        }
        x %= mask;
        mask /= 10;
    } while ( mask > 0 );
    printf("
");

    return 0;
}
separate.c

2.6 求最大公约数

2.6.1 枚举法

 1 #include <stdio.h>
 2 
 3 int main()
 4 {
 5     int a,b;
 6     int min;
 7     
 8     scanf("%d %d", &a, &b);
 9     if ( a<b ) {
10         min = a;
11     } else {
12         min = b;
13     }
14     int ret = 0;
15     int i;
16     for ( i = 1; i < min; i++ ) {
17         if ( a%i == 0 ) {
18             if ( b%i == 0 ) {
19                 ret = i;
20             }
21         }
22     }
23     printf("%d和%d的最大公约数是%d.
", a, b, ret);
24     
25     return 0;
26 }
gcd_iterate.c

2.6.2 辗转相除法

 1 #include <stdio.h>
 2 
 3 int main()
 4 {
 5     int a,b;
 6     int t;
 7     
 8     scanf("%d %d", &a, &b);
 9     int origa = a;
10     int origb = b;
11     while ( b != 0 ) {
12         t = a%b;
13         a = b;
14         b = t;
15     }
16     printf("%d和%d的最大公约数是%d.
", origa, origb, a);
17     
18     return 0;
19 }
gcd.c

2.7 分式求和

#include <stdio.h>

int main()
{
    int n;
    int i;
    double ret=0.0;

    scanf("%d", &n);
    for ( i=1; i<=n; i++ ) {
        ret += 1.0/i;
    }
    printf("%f
", ret);

    return 0;
}
sumup.c
#include <stdio.h>

int main()
{
    int n;
    int i;
    double ret=0.0;
    int sign = 1;

    scanf("%d", &n);
    for ( i=1; i<=n; i++ ) {
        ret += 1.0*sign/i;
        sign = -sign;
    }
    printf("%f
", ret);

    return 0;
}
sumupdn.c

 sum+=1.0/i; 除号两边,1.0是浮点数,整形的i也会变成浮点数。

3 break,continue

1
 
以下代码段的输出是:
int sum = 0;
for ( int i=0; i<10; i++ ) {
    if ( i%2 ) continue;
    sum += i;
}
printf("%d ", sum);
 
正确答案:20
2
 
以下代码段的输出是:
int sum = 0;
for ( int i=0; i<10; i++ ) {
    if ( i%2 ) break;
    sum += i;
}
printf("%d ", sum);
 
正确答案:0

参考资料

程序设计入门——C语言_浙江大学_中国大学MOOC(慕课) http://www.icourse163.org/course/ZJU-199001

 
原文地址:https://www.cnblogs.com/gleamer/p/c2.html