首页 > 代码库 > C语言零基础项目驱动式学习第三天

C语言零基础项目驱动式学习第三天

 一 while循环
二do   while循环
三 for循环
for循环的执行顺序用如下表达式:
for(expression1;expression2;expression3)
        循环变量初值; 循环条件; 循环变量增量
 {   
            expression4;
 }
      执行的顺序应该是:
1)第一次循环,即初始化循环。
      首先执行表达式expression1(一般为初始化语句);再执行expression2(一般为条件判断语句),判断expression1是否符合expression2的条件;如果符合,则执行expression4,否则,停止执行;最后执行expression3。

2)第N(N>=2)次循环
      首先执行expression2,判断在expression3是否符合在expression2要求;如果符合,则继续执行在expression4,否则,停止执行。最后执行在expression3。如此往复,直至expression3不满足在expression2条件是为止。

总结:
      总的来说,执行的顺序是一致的。先条件判断(expression2),再函数体执行(expression4),最后for执行(expression3)。往复......区别在于,条件判断的对象。第一次判断时,对象为初始化语句(expression1),后续的判断对象为执行后的结果(expression3)。

 //1、随机产生20个[10 , 100]的正整数,输出这些数以及他们中的最大数,最小数

//    int max = 0, min = 100;

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

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

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

//        if (max < a) {

//            max = a;

//        }

//        if (min > a) {

//            min = a;

//        }

//    }

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

//    printf("\nmin = %d ", min);

 

    

    

    //2、编程将0-1000所有“水仙花数”打印出来,并打印其总个数。 “水仙花数”是一个 各个位立方之和等于该整数的三位数。

    //水仙花数是一个三位数.个位units,十位tens,百位hundreds‘ digit,

 

//    int count = 0;

//    for (int i = 100; i >= 100 && i <= 999; i++) {

//        int units = i % 100 % 10;

//        int tens = i % 100 / 10;

//        int hundred = i / 100;

//        int num = units * units * units + tens * tens * tens + hundred * hundred * hundred;

//        if (num == i) {

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

//            count++;

//        }

//    }

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

    

    

//    int count = 0;

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

//        for (int j = 0; j <= 9; j++) {

//            for (int k = 0; k <= 9; k++) {

//                if (pow(i, 3) + pow(j, 3) + pow(k, 3) == 100 * i + 10 * j + k) {

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

//                    count++;

//                }

//            }

//        }

//    }

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

    

    

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

//    for (int i = 100; i >= 100 && i <= 999; i++) {

//        int units = i % 100 % 10;

//        int tens = i % 100 / 10;

//        int hundred = i / 100;

//        int num = units * 100 + tens * 10 + hundred;

//        if (num + i == 1333) {

//            printf("%d + %d = 1333\n", num, i);

//        }

//    }

    

    

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

//        for (int j = 0; j <= 9; j++) {

//            for (int k = 0; k <= 9; k++) {

//                if (i * 100 + j * 10 + k + k * 100 + j * 10 + i == 1333) {

//                    printf("%d%d%d + %d%d%d = 1333\n", i, j, k, k, j, i);

//                }

//            }

//        }

//    }

 

    

    

    

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

    

//    double height = 100.0;

//    double length = 0.0;

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

//        height /= 2;

//        length += 2 * height;

//        printf("第%02d次落地时,共经过 %g 米,反弹高度为 %g 米\n", i, length + 100, height);

//    }

    //以上为错误代码.

//    double height = 50.0;

//    double length = 100.0;

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

//        length += 2 * height;

//        height /= 2;

//        printf("第%02d次落地时,共经过 %g 米,反弹高度为 %g 米\n", i - 1, length, height);

//    }

 

    

    

    

    //5、输入两个数,求最大公约数和最小公倍数。

//    printf("Please input two integers:\n");

//    int numOne = 0, numTwo = 0;

//    scanf("%d %d", &numOne, &numTwo);

//    int min = numOne > numTwo ? numTwo : numOne;

//    printf("the smaller number is %d\n", min);

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

//        if (numOne % i == 0 && numTwo % i == 0) {

//            printf("The greatest common divisor of two integers is %d.\n", i);

//            printf("This is the least common multiple of two integer %d.", numOne * numTwo / i);

//            break;

//        }

//    }

 

    

    

    

    //用辗转相除法

//    printf("Please input two integers:\n");

//    int numOne = 0, numTwo = 0;

//    int max = 0, min = 0;

//    scanf("%d %d", &numOne, &numTwo);

//    if (numOne > numTwo) {

//        int temp = 0;

//        temp = numTwo;

//        numTwo = numOne;

//        numOne = temp;

//    }//把较小的值存在numOne中.

//    max = numTwo;

//    min = numOne;

//    int qiuYu = 1;

//    while (qiuYu != 0) {

//        qiuYu = numTwo % numOne;

//        numTwo = numOne;

//        numOne = qiuYu;

//    }

//    printf("The greatest common divisor of two integers is %d.\n", numTwo);

//    printf("This is the least common multiple of two integer %d.", max * min / numTwo);