for语句的语法格式为:
for(表达式1;表达式2;表达式3)
for语句有循环初始和循环控制功能,语句形式为:
for语句的说明:
for语句的应用格式:
for (循环初始; 循环条件; 循环控制) { 循环体; }
如:求1 + 2 + 3 + … + 100
for (int n = 1, sum = 0; n <= 100; n++) sum = sum + n;
等同于
int n = 1, sum = 0; while (n <= 100) { sum = sum + n; n = n + 1; }
省略表达式1
int n = 1, sum = 0; for ( ; n <= 100; n++) sum = sum + n;
省略表达式3
for (int n = 1, sum = 0; n <= 100; ) sum = sum + n; n++;
表达式1和表达式3都省略
int n = 1, sum = 0; for ( ; n <= 100; ) sum = sum + n; n++;
假设我们要输出一个二维数组,并且加上控制条件,仅输出行、列值不相等的数组元素,那么你判断一下下面的程序对吗?(类似功能,并不输出一个二维数组,重点在循环控制上)
/**C和C++一样,这里以C++为例*/ int main () { int n; cin >> n; for (int i = 0; i < n; i++) { for (int j = 0; (j < n) && (j != i); j++) { cout << "执行:"; cout << ‘[‘ << i << ‘]‘ << ‘[‘ << j << ‘]‘; } cout << endl; } return 0; }
以输入3为例 3 执行[1][0] 执行[2][0]执行[2][1] ---------------程序结束
那么仅输出行、列值相等数组元素呢?
int main () { int n; cin >> n; for (int i = 0; i < n; i++) { for (int j = 0; (j < n) && (j == i); j++) { cout << "执行:"; cout << ‘[‘ << i << ‘]‘ << ‘[‘ << j << ‘]‘; } cout << endl; } return 0; }
以输入3为例 3 执行[0][0] ---------------程序结束
并没有达到我们预期的功能,在第一种情况下,在行、列值相等时就跳过了第二个for循环的后续执行;在第二种情况下,在行、列值不相等时就跳过了第二个乃至第一个for循环的后续执行。如果我们的代码中出现了这种条件判断语句,那是相等严重的,并且还不易察觉这里出问题了。
第一种情况
int main () { int n; cin >> n; int i = 0; while (i < n) { int j = 0; while (j < n && j != i) { cout << "执行[" << i << ‘]‘ << ‘[‘ << j << ‘]‘; j++; } cout << endl; i++; } return 0; }
当行、列值相等时,循环体执行不到并且 j 的值也不在增加,这样结果就输出了
3 执行[1][0] 执行[2][0]执行[2][1] ---------------程序结束
第二种情况
int main () { int n; cin >> n; int i = 0; while (i < n) { int j = 0; while (j < n && j == i) { cout << "执行[" << i << ‘]‘ << ‘[‘ << j << ‘]‘; j++; } cout << endl; i++; } return 0; }
当行、列值不相等时,循环体执行不到并且 j 的值也不在增加,这样结果就输出了
3 执行[0][0] ---------------程序结束
如果想在条件判断中使用两个循环控制变量,那么可以把判断条件提到循环体内,比如第一种情况:
for (int i = 0; i < n; i++) { for (int j = 0; (j < n); j++) { if (i == j) { cout << "执行:"; cout << ‘[‘ << i << ‘]‘ << ‘[‘ << j << ‘]‘; } } cout << endl; }
这样即可实现预期功能。
C/C++两个for循环中循环变量在条件判断式中千万不要乱用
原文:https://www.cnblogs.com/MK-XIAOYU/p/12707033.html