C语言拓展第五期:循环(二)
C语言循环篇(二)
写在前面:
鸡兔同笼问题
#include<stdio.h>
int main(){
int chicken_nums = 0;
int rabbit_nums = 0;
for(chicken_nums = 0; chicken_nums <= 59; chicken_nums++){ // 第一个chicken_nums可以不写,因为已经在外部初始化了
rabbit_nums = 59 - chicken_nums;
if(2 * chicken_nums + 4 * rabbit_nums == 172){ // 一定注意在C语言(或其他绝大多数语言)中“=”是赋值符号,而“==”才是判断是否相等的符号
printf("鸡的数量为%d,兔子的数量为%d",chicken_nums, rabbit_nums);
break;
}
if(chicken_nums == 59)
printf("该问题无解");
}
return 0;
}
循环开始,初始化chicken_nums = 0,判断是否继续执行的条件为:chicken_nums <= 59,执行完毕后将自加1
|
|-定义rabit_nums的值,保证其与chicken_nums相加为59
|
|-if语句:如果假定的鸡兔数量的脚的总数符合题目要求,则打印答案并跳出循环
|
|-if语句:如果此时chicken_nums的值已经为59(即已经遍历了所有答案但都不对),则此问题无解
for(;;){ // 这里也可以是while或do-while
...
break;
...
}
for(;;){
for(;;){
break;
}
}
#include <stdio.h>
int main(){
for(int i = 0; i <= 10; i++){
if(i == 5)
continue;
printf("%d\n", i);
}
return 0;
}
#include <stdio.h>
int main(){
int x = 0;
int y = 0;
int z = 0;
while(1){
y = 0;
while(1){
z = 0;
while(1){
if(2 * x + 3 * y + z == 6 && x - y + 2 * z == 2 && x + 2 * y - z == 2){
printf("x=%d, y=%d, z=%d", x, y, z);
return 1;
}
if(z == 20)
break;
z++;
}
if(y == 20)
break;
y++;
}
if(x == 20)
break;
x++;
}
printf("该问题无解");
return 0;}
while(1)表示该循环会一直执行下去,包括for也是,判断循环执行的条件只要为真,循环就会执行,而在C语言中0也可以表示假,1(或其他整数)也可以表示真。
// 第一层循环:
while(1):
y = 0; // 保证每次当x自增时,y重新从0开始
......
if(x === 20) // 若x到达上限则跳出当前循环,也可以在定义循环时写while(x <= 20)
break;
x++;
// 第二层循环和第一层几乎一样:
while(1):
z = 0; // 保证每次当x自增时,z重新从0开始
......
if(y === 20) // 若x到达上限则跳出当前循环,也可以在定义循环时写while(y <= 20)
break;
y++;
// 第三层循环则在此基础上稍加了一个判断条件:
while(1){
if(2 * x + 3 * y + z == 6 && x - y + 2 * z == 2 && x + 2 * y - z == 2){ // 如果找到答案,则打印并且跳出main函数
printf("x=%d, y=%d, z=%d", x, y, z);
return 1;
}
if(z == 20)
break;
z++;
// 第1次循环:
x=0,y=0,z=0
// 第2次循环:
x=0,y=0,z=1
// 第3次循环:
x=0,y=0,z=2
......
// 第21次循环:
x=0,y=0,z=20
// 第22次循环:
x=0,y=1,z=0
// 第23次循环:
x=0,y=1,z=0
......
// 第441次循环:
x=0,y=20,z=20
// 第442次循环:
x=1,y=0,z=0
......
// 第463次循环:
x=1,y=1,z=0
// 第464次循环:
x=1,y=1,z=1
判断条件成功,打印结果并退出
1 < 2 && 2 < 3 // 返回真,因为两边都为真
1 > 2 && 2 < 3 // 返回假,因为两边不全为真
1 > 2 && 2 > 3 // 返回假,因为两边不全为真
C语言规定程序的入口必须为main函数,也就是一个程序中有且只能有一个main函数存在,这也就是我们所有的例子都写在main函数中的原因。