首页 > 代码库 > 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);