C3_循环结构

// command +R 运行

// command +移动键 选择

// alt +shift+移动键 一次选一个单词

int main(int argc, const char * argv[]) {

//    //初始化循环变量;

//    int i = 1;

//    //开始循环,循环条件为100以内.

//    while (i <101) {

//        //如果满足条件,执行括号内的语句,否则,跳出语句;

//        //需要进行判断,如果是7的倍数打印.

//        if (i % 7 == 0) {

//            printf("%d\n",i);

//        }

//        //需要注意,循环增量务必保证可以执行到,

//        printf("%d\n",i);

//        i++;

//        //语句进行到这里,下面应该执行的是返回到条件表达式而不是直接退出循环

//    }

    

 //    int i = 0;

//    while (i < 101) {

//        if (i % 10 == 7) {

//        printf("%d\n", i);

//        }

//        // *******不要忘记循环增量.

//        i++;

//    }

    

//    int i = 1;

//    while (i < 101) {

//        if (i / 10 == 7) {

//            printf("%d\n", i);

//        }

//        i++;

//    }

    

//    int i = 0;

//    while (i < 101) {

//        // 多个中间条件用&&

//        if (i % 10 != 7 && i / 10 != 7 && i % 7 != 0) {

//            printf("%d\n",i);

//        }

    //        // 注意循环增量

    //        i++;

    //    }

    

//    // 测试随机数,返回一个unsigned int 类型的随机数,

//    //    unsigned int r = arc4random();

//    //     // 无符号整形需要用%u作为转义字符;

//    //    printf("%u\n",r);

//    //    // 如果想要指定范围内的的随机数

//    //    // arc4random()% (最大值 - 最小值 + 1) + 最小值;

//    int i = 0;

//    // 0开始可以很直观的看出循环次数,并且数组也是从0开始的.

//    while (i < 10) {

//        // 修要注意不要把arc4random写在循环外.

//        int r = arc4random() % (30 - 10 + 1) + 10;

//        printf(" %d",r);

//        i++;

//    }

//    // 最后加个换行,让控制台看着更整齐;

//    printf("\n");

    

//    //练习

//    int i = 0, n = 0, a = 0, max = 0;

//    scanf("%d",&n);

//    while (i < n) {

//        a = arc4random() %(30 - 10 + 1) + 10;

//        //  将最大值与新值比较,如果最大值小于新值,则替换最大值.

//        max = max > a ? max : a;

//        // 需要注意,不要再循环内输出最大值,要在循环后打印

//        printf("%d ",a);

//        i++;

//    }

//    printf("\n");

//    printf("%d\n",max);

    

    

//    int i = 0;

//    while (i < 100) {

//        printf("%d ",i);

//        i++;

//        // break的作用,跳出本层循环,

//        if (5 == i) {

//            break;

//        }

//    }

//    

//    int i = 0;

//    while (i < 100) {

//        printf("%d ",i);

//        i++;

//        // continue的作用,跳出本次循环,加速循环.

//        if (5 == i) {

//            continue;

//        }

//    }


//    //  Esc 键打开提示.

//    // 1.循环变量初始化 2.循环条件--->(条件满足才执行) 3.语句 4.循环增量--->2.3.4--->2.3.4-->2-->退出;

//    for (int i = 1; i < 101; i++) {

//        if (i % 7 == 0) {

//            printf("%d\t ",i);

//        }

//    }

//    printf("\n");

    

    

    

    

//    // 创建一个3次的循环

//    for (int i = 0; i < 3; i++) {

//        printf("外层循环第%d次开始\n",i);

//        // 循环打印1 2 3

//        for (int j = 1; j < 4; j++) {

//            printf("内层循环第%d次开始\n",j);

//            printf("%d ", j);

//        }

//        printf("内层循环结束\n");

//        printf("\n");

//        printf("外层循环第%d次结束\n",i);

//    }

    

//    //  打印乘法口诀;

//    for (int i = 1; i < 10; i++) {

//        printf("\n");

//        for (int j = 1; j <= i; j++) {

//            printf("%d * %d = %2d �� ",j , i, j * i );

//        }

//        printf("\n");

//    }

    

        

    return 0;

}

    

//    1. (**)随机产生20[10 , 100]的正整数,输出这些数以及他们中的最大数

//    int max = 0;//保存最大数

//    for (int i = 0; i < 20; i++) {

//        int num = arc4random() % (100-10+1) + 10;

//        max = max > num ? max : num;

//        printf("%d ",num);

//    }

//    printf("max = %d",max);

    

//    2. (**)编程将所有水仙花数打印出来,并打印其总个数。水仙花数是一个 各个位立方之和等于该整数的三位数。

    //3位数,各个位,立方之和 = 3位数

    

//    int count = 0;

//    for (int i = 100; i < 1000; i++) {

//        int a = i / 100;//百位 123/100 = 1

//        int b = i % 100 /10;//十位 123 % 100 /10

//        int c = i % 10;//个位 123 % 10

//        if (a * a *a + b * b * b + c * c * c == i) {

//            count++;

//            printf("%d ",i);

//        }

//    }

//    printf("\n%d",count);


    //    3. (**)已知abc+cba = 1333,其中a,b,c均为一位数,编程求出满足条件的a,b,c所有组合

    //a 1~9   c 1~9 b 0~9

//    for (int a = 1; a < 10; a++) {

//        for (int b = 0; b < 10; b++) {

//            for (int c = 1; c < 10; c++) {

//                if(a * 100 + b * 10 + c + c * 100 + b * 10 + a == 1333)

//                {

//                    printf("%d %d %d\n",a,b,c);

//                }

//            }

//        }

//    }

    

    

    

    //4. (***)输入两个数,求最大公约数和最小公倍数。(用两种方法:辗转相除法和普通方法)

//    int m = 0,n = 0;

//    scanf("%d%d",&m,&n);

    //公约数  对于两个数 8 12  124

    //最大公约数,公约数里最大的数

    //if(m % i == 0 && n % i == 0)  i就是公约数

//    int min = m < n ? m : n;

//    int gcd = 0;

//    for (int i = min; i >= 1; i--) {

//        if (m % i == 0 && n % i == 0) {

//            gcd = i;

//            break;

//        }

//    }

//    printf("%d %d",gcd,m * n /gcd);


    //辗转相除法

//    int m = 0,n = 0;

//    scanf("%d%d",&m,&n);

//    int a = m,b = n;

//    //8 12

//    //8 % 12    8

//    //12 % 8    4

//    //8 % 4     0

//    

//    //12 8

//    //12 % 8    4

//    //8 % 4     0

//    while (m % n != 0) {

//        int temp = m % n;

//        m = n;

//        n = temp;

//    }

//    printf("%d  %d\n",n,a * b / n);

    

    

//

//    5. (***)一个球从100m高度自由落下,每次落地后反跳回原来高度的一半,再落下,再反弹。求它在第10次落地时,共经过多少米?第10次反弹多高

    //次数   落下   反弹

    //1     100    100/2

    //2     100/2  100/2/2

    //3     100/2/2 100/2/2/2

    //...

    //10     100/2/2/../2(9)  100/2/2.../2(10)

    

//    float totalDistance = 0;

//    float down = 100,up = 100/2;

//    for (int i = 1;i < 11; i++){

//        totalDistance += down + up;

//        down = down / 2;

//        up = up / 2;

//    }

//    totalDistance -= up * 2;

//    printf("%.2f  up = %.2f",totalDistance,up*2);

    

    

//    6. (****)输入n,分别用*输出边长为n的实心菱形和空心菱形。

//    例如:n = 3时,输出:

//     *

//    ***

//   *****

//    ***

//     *

//

    //上三角

    //行数   空格数   星号数  换行

    //1     2       1       1

    //2     1       3       1

    //3     0       5       1

    //空格与行数的关系是: 空格 = n(边长) - 行数

    //星号与行数的关系是: 星号 = 行数*2 - 1

    //换行始终是一个

    int n = 0;

    printf("请输入一个边长,我们将为你打印n边菱形:");

    scanf("%d",&n);

    for (int i = 1; i <= n; i++) {

        //打印空格

        for (int j = 0; j < n - i; j++) {

            printf(" ");

        }

        //打印星号

        for (int k = 0; k < 2 * i - 1; k++) {

            printf("*");

        }

        //打印换行

        printf("\n");

    }

    //下三角

    //行数   空格数   星号数  换行

    //1     1       3       1

    //2     2       1       1

    //空格与行数的关系是: 空格 = 行数

    //星号与行数的关系是: 星号 = (n - 行数)*2 - 1

    //换行始终是一个

    for (int i = 1; i < n; i++) {

        //打印空格

        for (int j = 0; j < i; j++) {

            printf(" ");

        }

        //打印星号

        for (int k = 0; k < (n - i) * 2 - 1; k++) {

            printf("*");

        }

        //打印换行

        printf("\n");

    }


//     *

//    * *

//   *   *

//    * *

//     *


    printf("\n");

    

    //上三角

    //行数   空格数   星号数 空格数 星号数 换行

    //1     2       1       0     0     1

    //2     1       1       1     1     1

    //3     0       1       3     1     1

    //前面空格与行数的关系是: 空格 = n(边长) - 行数

    //星号与行数的关系是: 星号 = 1

    //中间空格与行数的关系是: 空格 = (行数-1) * 2 -1

    //后面星号 行数为1的时候,0,行数不为1的时候1

    //换行始终是一个

    for (int i = 1; i <= n; i++) {

        //打印前面空格

        for (int j = 0; j < n - i; j++) {

            printf(" ");

        }

        //打印前面星号

        printf("*");

        //打印中间空格

        for (int k = 0; k < (i - 1)*2 -1; k++) {

            printf(" ");

        }

        //打印后面星号

        if (i != 1) {

            printf("*");

        }

        //打印换行

        printf("\n");

    }

    //下三角

    //行数   空格数 星号数  空格数 换行

    //1     1       1      3    1

    //2     2       1      1    1

    //3     3       1      0    1

    //空格与行数的关系是: 空格 = 行数

    //星号与行数的关系是: 星号 = 1

    //空格与行数的关系是: 空格 = (n - 行数 - 1)*2 - 1

    //星号与行数的关系是: 如果行数等于n-1,*0,否则是1

    //换行始终是一个

    for (int i = 1; i < n; i++) {

        //打印前面空格

        for (int j = 0; j < i; j++) {

            printf(" ");

        }

        //打印星号

        printf("*");

        //打印中间空格

        for (int k = 0; k < (n-1-i)*2 -1; k++) {

            printf(" ");

        }

        //打印后面星号

        if (i != n-1) {

            printf("*");

        }

        //打印换行

        printf("\n");

    }

    

//    7.(****)反复校验用户输入的生日,包括年、月、日。直到年、月、日都合法。

    

    

    int year = 0,month = 0,day = 0;

    

    while (YES) {

        printf("请输入生日(包含年月日):");

        scanf("%d%d%d",&year,&month,&day);

        

        int daysForFeb = 28;

        if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {

            daysForFeb = 29;

        }

        

        switch (month) {

            case 1:

            case 3:

            case 5:

            case 7:

            case 8:

            case 10:

            case 12:

                if (day >= 1 && day <= 31) {

                    printf("%d-%d-%d是一个合法的生日\n",year,month,day);

                }else{

                    printf("%d-%d-%d不是一个合法的生日,请重新输入生日\n",year,month,day);

                    continue;

                }

                break;

            case 2:

                if (day >= 1 && day <= daysForFeb) {

                    printf("%d-%d-%d是一个合法的生日\n",year,month,day);

                }else{

                    printf("%d-%d-%d不是一个合法的生日,请重新输入生日\n",year,month,day);

                    continue;

                }

                break;

            case 4:

            case 6:

            case 9:

            case 11:

                if (day >= 1 && day <= 30) {

                    printf("%d-%d-%d是一个合法的生日\n",year,month,day);

                }else{

                    printf("%d-%d-%d不是一个合法的生日,请重新输入生日\n",year,month,day);

                    continue;

                }

                break;

            default:

                printf("%d-%d-%d不是一个合法的生日,请重新输入生日\n",year,month,day);

                continue;

                break;

        }


        break;

    }

    

//    int year = 0, month = 0, day = 0;

//    while (true) {

//        printf("请输入你的生日:");

//        scanf("%d%d%d",&year,&month,&day);

//        //假设1940~2013年合法

//        int dayInFeb = 28;

//        if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))

//        {

//            dayInFeb = 29;

//        }

//        switch (month) {

//            case 1:

//            case 3:

//            case 5:

//            case 7:

//            case 8:

//            case 10:

//            case 12:

//                if (day >=1 && day <= 31) {

//                    printf("日期合法\n");

//                    break;

//                }else {

//                    printf("日期不合法\n");

//                    continue;

//                }

//                break;

//            case 4:

//            case 6:

//            case 9:

//            case 11:

//                if (day >=1 && day <= 30) {

//                    printf("日期合法\n");

//                    break;

//                }else {

//                    printf("日期不合法\n");

//                    continue;

//                }

//                break;

//            case 2:

//                if (day >= 1 && day <= dayInFeb) {

//                    printf("日期合法\n");

//                    break;

//                }else {

//                    printf("日期不合法\n");

//                    continue;

//                }

//

//            default:

//            {

//                printf("日期不合法\n");

//                continue;

//            }

//                break;

//        }

//        break;

//    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值