提交 449b8cf5 编写于 作者: W wizardforcel

2019-08-15 21:49:43

上级 c17571ab
......@@ -2,11 +2,11 @@
> 原文: [https://beginnersbook.com/2014/01/c-while-loop/](https://beginnersbook.com/2014/01/c-while-loop/)
循环用于重复执行语句块,直到给定条件返回 false。在上一个教程中,我们学习了 [for loop](https://beginnersbook.com/2014/01/c-for-loop/) 。在本指南中,我们将学习 while 循环。
循环用于重复执行语句块,直到给定条件返回`false`。在上一个教程中,我们学习了[`for`循环](https://beginnersbook.com/2014/01/c-for-loop/) 。在本指南中,我们将学习`while`循环。
## C - `while`循环
while 循环的语法:
`while`循环的语法:
```c
while (condition test)
......@@ -44,10 +44,10 @@ int main()
```
**步骤 1:**变量计数初始化为值 1,然后测试该条件。
**step2:**如果条件返回 true,则执行 while 循环体内的语句,否则控制退出循环。
**step3:**使用++运算符递增计数值,然后再次测试循环条件。
**step 2:**如果条件返回`true`,则执行`while`循环体内的语句,否则控制退出循环。
**step 3:**使用`++`运算符递增计数值,然后再次测试循环条件。
**猜测这个 while 循环的输出**
**猜测这个`while`循环的输出**
```c
#include <stdio.h>
......@@ -61,7 +61,7 @@ int main()
}
```
该程序是**无限循环**的一个例子。由于变量 var 的值相同(此变量上没有使用++或 - 运算符,因此在循环体内)条件 var&lt; = 2 将永远为真,循环永远不会终止。
该程序是**无限循环**的一个例子。由于变量`var`的值相同(此变量上没有使用`++``--`运算符,因此在循环体内)条件`var <= 2`将永远为真,循环永远不会终止。
### 无限`while`循环的例子
......@@ -81,7 +81,7 @@ int main()
}
```
**无限循环:** var 将始终具有值&gt; = 5,因此循环永远不会结束。
**无限循环:** `var`将始终具有值`>= 5`,因此循环永远不会结束。
**例 2:**
......@@ -99,29 +99,29 @@ int main()
}
```
**无限循环:由于 - 运算符,** var 值将继续减小,因此它总是&lt;= 10
**无限循环:由于 `--`运算符,**`var`值将继续减小,因此它总是`<= 10`
## 在`while`循环中使用逻辑运算符
就像关系运算符(&lt;&gt;&gt; =,&lt; =,!=,==)一样,我们也可以在 while 循环中使用逻辑运算符。以下方案有效:
就像关系运算符(`< > <= >= == !=`)一样,我们也可以在`while`循环中使用逻辑运算符。以下方案有效:
```c
while(num1<=10 && num2<=10)
```
- 使用 AND(&amp;&amp;)运算符,这意味着两个条件都应该为真。
- 使用 AND(`&&`)运算符,这意味着两个条件都应该为真。
```c
while(num1<=10||num2<=10)
```
- OR(||)运算符,此循环将运行,直到两个条件都返回 false
- OR(`||`)运算符,此循环将运行,直到两个条件都返回`false`
```c
while(num1!=num2 &&num1 <=num2)
```
- 这里我们使用两个逻辑运算符 NOT(!)和 AND(&amp;&amp;)。
- 这里我们使用两个逻辑运算符 NOT(`!`)和 AND(`&&`)。
```c
while(num1!=10 ||num2>=num1)
......@@ -129,7 +129,7 @@ while(num1!=10 ||num2>=num1)
### 使用逻辑运算符的`while`循环示例
在这个例子中,我们使用 while 循环中的逻辑运算符测试多个条件。
在这个例子中,我们使用`while`循环中的逻辑运算符测试多个条件。
```c
#include <stdio.h>
......
......@@ -2,11 +2,11 @@
> 原文: [https://beginnersbook.com/2014/01/c-dowhile-loop/](https://beginnersbook.com/2014/01/c-dowhile-loop/)
在上一个教程中,我们在 C 中学习 [while 循环。 do while 循环类似于 while 循环,但有一个例外,它在检查条件之前执行 do-body 体内的语句。另一方面,在 while 循环中,首先检查条件,然后执行 while 循环中的语句。所以你可以说如果条件在第一个位置是假的那么 do while 会运行一次,但是 while 循环根本不会运行。](https://beginnersbook.com/2014/01/c-while-loop/)
在上一个教程中,我们在 C 中学习[`while`循环](https://beginnersbook.com/2014/01/c-while-loop/)`do while`循环类似于`while`循环,但有一个例外,它在检查条件之前执行`do`体内的语句。另一方面,在`while`循环中,首先检查条件,然后执行`while`循环中的语句。所以你可以说如果条件在第一个位置是假的那么`do while`会运行一次,但是`while`循环根本不会运行。
## C - `do..while`循环
do-while 循环的语法
`do-while`循环的语法
```c
do
......@@ -49,7 +49,7 @@ Value of variable j is: 3
## C 中的`while` vs `do..while`循环
**使用 while 循环:**
**使用`while`循环:**
```c
#include <stdio.h>
......@@ -70,7 +70,7 @@ int main()
Out of loop
```
**使用 do-while 循环**的相同示例
**使用`do-while`循环**的相同示例
```c
#include <stdio.h>
......@@ -92,4 +92,4 @@ while vs do-while
Out of loop
```
**说明:**正如我在本指南开头所提到的,do-while 至少运行一次,即使条件为 false 因为条件被评估,执行循环体之后也是如此。
\ No newline at end of file
**说明:**正如我在本指南开头所提到的,`do-while`至少运行一次,即使条件为`false`因为条件被求值,执行循环体之后也是如此。
\ No newline at end of file
......@@ -2,18 +2,19 @@
> 原文: [https://beginnersbook.com/2014/01/c-break-statement/](https://beginnersbook.com/2014/01/c-break-statement/)
break 语句用于循环内部和 [switch case](https://beginnersbook.com/2014/01/switch-case-statements-in-c/)
`break`语句用于循环内部和[`switch case`](https://beginnersbook.com/2014/01/switch-case-statements-in-c/)
## C - `break`语句
它用于立即退出循环。当在循环内遇到 break 语句时,控制流直接退出循环并且循环终止。它与 [if 语句](https://beginnersbook.com/2014/01/c-if-statement/)一起使用,只要在循环内使用。
2.这也可用于`switch-case`控制结构。每当在`switch-case`中遇到它时,控制器都会从`switch-case`中出来(参见下面的例子)。
它用于立即退出循环。当在循环内遇到`break`语句时,控制流直接退出循环并且循环终止。它与[`if`语句](https://beginnersbook.com/2014/01/c-if-statement/)一起使用,只要在循环内使用。
这也可用于`switch-case`控制结构。每当在`switch-case`中遇到它时,控制器都会从`switch-case`中出来(参见下面的例子)。
### `break`语句的流程图
![C break statement](img/8e0a061ca0f4b94b5e93522729aa4787.jpg)
法:
法:
```c
break;
......@@ -112,7 +113,7 @@ Enter value of num:2
You have entered value 2
```
您总是希望在 switch case 块中使用 break 语句,否则一旦执行了 case 块,其余的后续 case 块就会执行。例如,如果我们不在每个 case 块之后使用 break 语句,那么这个程序的输出将是:
您总是希望在`switch case`块中使用`break`语句,否则一旦执行了`case`块,其余的后续 case 块就会执行。例如,如果我们不在每个`case`块之后使用`break`语句,那么这个程序的输出将是:
```c
Enter value of num:2
......
......@@ -2,11 +2,11 @@
> 原文: [https://beginnersbook.com/2014/01/c-continue-statement/](https://beginnersbook.com/2014/01/c-continue-statement/)
**继续语句**用于[循环](https://beginnersbook.com/2014/01/c-loops-examples/)。当在循环内遇到 continue 语句时,控制流跳转到循环的开头以进行下一次迭代,跳过当前迭代循环体内语句的执行。
**`continue`语句**用于[循环](https://beginnersbook.com/2014/01/c-loops-examples/)。当在循环内遇到 `continue`语句时,控制流跳转到循环的开头以进行下一次迭代,跳过当前迭代循环体内语句的执行。
## C - `continue`语句
法:
法:
```c
continue;
......@@ -49,11 +49,11 @@ int main()
0 1 2 3 5 6 7 8
```
输出中缺少值 4,为什么?当变量 j 的值为 4 时,程序遇到一个 continue 语句,它使控制流在 for 循环的开头跳转以进行下一次迭代,跳过当前迭代的语句(这就是 printf 在 j 时没有执行的原因)等于 4)。
输出中缺少值 4,为什么?当变量`j`的值为 4 时,程序遇到一个`continue`语句,它使控制流在`for`循环的开头跳转以进行下一次迭代,跳过当前迭代的语句(这就是`printf``j`等于 4时没有执行的原因)。
### 示例:在`while`循环中使用`continue`
在这个例子中,我们在 while 循环中使用`continue`。当使用 while 或 do-while 循环时,需要在`continue`上方放置一个递增或递减语句,以便在下一次迭代时更改计数器值。例如,如果我们不在“if”的正文中放置反陈述,那么 counter 的值将无限期地保持为 7。
在这个例子中,我们在`while`循环中使用`continue`。当使用`while``do-while`循环时,需要在`continue`上方放置一个递增或递减语句,以便在下一次迭代时更改计数器值。例如,如果我们不在`if`的正文中放置反陈述,那么`counter`的值将无限期地保持为 7。
```c
#include <stdio.h>
......@@ -81,7 +81,7 @@ Output:
10 9 8 6 5 4 3 2 1 0
```
当计数器值为 7 时,将跳过 print 语句。
当计数器值为 7 时,将跳过`print`语句。
### `do-While`循环继续的另一个例子
......
......@@ -2,12 +2,12 @@
> 原文: [https://beginnersbook.com/2014/01/c-goto-statement/](https://beginnersbook.com/2014/01/c-goto-statement/)
很少使用 goto 语句,因为它会使程序混乱,可读性和复杂性降低。而且,当使用它时,程序的控制将不容易跟踪,因此它使测试和调试变得困难。
很少使用`goto`语句,因为它会使程序混乱,可读性和复杂性降低。而且,当使用它时,程序的控制将不容易跟踪,因此它使测试和调试变得困难。
## C - `goto`语句
当在 C 程序中遇到 goto 语句时,控制流直接跳转到 goto
**C 语言中 goto 语句的语法中提到的标签**
当在 C 程序中遇到`goto`语句时,控制流直接跳转到`goto`
**C 语言中`goto`语句的语法中提到的标签**
```c
goto label_name;
......@@ -48,4 +48,4 @@ int main()
15
```
**说明:**在这个例子中,我们有一个标签`addition`,当 i 的值(内部循环)等于 5 时,我们使用 goto 跳转到这个标签。这就是总和显示直到 5 的数字之和的原因,即使循环设置为从 0 到 10 运行。
\ No newline at end of file
**说明:**在这个例子中,我们有一个标签`addition`,当`i`的值(内部循环)等于 5 时,我们使用`goto`跳转到这个标签。这就是`sum`显示直到 5 的数字之和的原因,即使循环设置为从 0 到 10 运行。
\ No newline at end of file
......@@ -2,11 +2,11 @@
> 原文: [https://beginnersbook.com/2014/01/c-arrays-example/](https://beginnersbook.com/2014/01/c-arrays-example/)
数组是相同数据类型的组(或集合)。例如,int 数组包含 int 类型的元素,而 float 数组包含 float 类型的元素。
数组是相同数据类型的组(或集合)。例如,`int`数组包含`int`类型的元素,而`float`数组包含`float`类型的元素。
## 为什么我们需要在 C 编程中使用数组?
考虑一种情况,您需要找出用户输入的 100 个整数的平均值。在 C 中,您有两种方法可以执行此操作:1)使用 int 数据类型定义 100 个变量,然后执行 100 次 scanf()操作以将输入的值存储在变量中,然后最后计算它们的平均值。 2)使用单个整数数组来存储所有值,循环数组以将所有输入的值存储在数组中,然后计算平均值。
考虑一种情况,您需要找出用户输入的 100 个整数的平均值。在 C 中,您有两种方法可以执行此操作:1)使用`int`数据类型定义 100 个变量,然后执行 100 次`scanf()`操作以将输入的值存储在变量中,然后最后计算它们的平均值。 2)使用单个整数数组来存储所有值,循环数组以将所有输入的值存储在数组中,然后计算平均值。
**根据你的哪种解决方案更好?** 显然是第二种解决方案,将相同的数据类型存储在一个变量中以及稍后使用数组索引访问它们很方便(我们将在本教程后面讨论)。
### 如何在 C 中声明数组
......@@ -20,9 +20,9 @@ char ch[10];  /* An array of characters for 10 elements */
### 如何在 C 中访问数组的元素
您可以使用**数组下标**(或索引)来访问存储在数组中的任何元素。下标从 0 开始,这意味着`arr[0]`代表数组 arr 中的第一个元素。
您可以使用**数组下标**(或索引)来访问存储在数组中的任何元素。下标从 0 开始,这意味着`arr[0]`代表数组`arr`中的第一个元素。
通常,`arr[n-1]`可用于访问数组的第 n 个元素。其中 n 是任何整数。
通常,`arr[n-1]`可用于访问数组的第`n`个元素。其中`n`是任何整数。
**例如:**
......@@ -82,7 +82,7 @@ Average of entered number is: 20
#### 将数据输入数组
这里我们**将数组**从 0 迭代到 3,因为数组的大小是 4.在循环内部,我们向用户显示一条消息以输入值。使用 scanf 函数将所有输入值存储在相应的数组元素中。
这里我们**将数组**从 0 迭代到 3,因为数组的大小是 4.在循环内部,我们向用户显示一条消息以输入值。使用`scanf`函数将所有输入值存储在相应的数组元素中。
```c
for (x=0; x<4;x++)
......@@ -94,7 +94,7 @@ for (x=0; x<4;x++)
#### 从数组中读出数据
假设,如果我们想要显示数组的元素,那么我们就可以在 C 中使用 [for 循环。](https://beginnersbook.com/2014/01/c-for-loop/)
假设,如果我们想要显示数组的元素,那么我们就可以在 C 中使用[`for`循环](https://beginnersbook.com/2014/01/c-for-loop/)
```c
for (x=0; x<4;x++)
......@@ -106,7 +106,7 @@ for (x=0; x<4;x++)
### 各种初始化数组的方法
在上面的例子中,我们刚刚声明了数组,然后我们用 user 输入的值初始化它。但是,您也可以在声明期间初始化数组,如下所示:
在上面的例子中,我们刚刚声明了数组,然后我们用用户输入的值初始化它。但是,您也可以在声明期间初始化数组,如下所示:
```c
int arr[5] = {1, 2, 3, 4 ,5};
......@@ -129,4 +129,4 @@ int arr[] = {1, 2, 3, 4, 5};
[**将数组传递给函数**](https://beginnersbook.com/2014/01/c-passing-array-to-function-example/) - 通常我们在调用函数时传递值和变量,同样我们也可以将数组传递给函数。您可以将数组的元素以及整个数组(通过仅指定数组名称,它用作指针)传递给函数。
[**指向数组的指针**](https://beginnersbook.com/2014/01/c-pointer-to-array-example/) - 可以使用 C 中的[指针访问和操作数组元素。使用指针可以轻松处理数组。只需将数组的基址分配给指针变量,就可以访问数组的所有元素。](https://beginnersbook.com/2014/01/c-pointers/)
\ No newline at end of file
[**指向数组的指针**](https://beginnersbook.com/2014/01/c-pointer-to-array-example/) - 可以使用 C 中的[指针访问和操作数组元素。使用指针可以轻松处理数组。只需将数组的基址分配给指针变量,就可以访问数组的所有元素](https://beginnersbook.com/2014/01/c-pointers/)
\ No newline at end of file
......@@ -2,7 +2,7 @@
> 原文: [https://beginnersbook.com/2014/01/2d-arrays-in-c-example/](https://beginnersbook.com/2014/01/2d-arrays-in-c-example/)
数组数组称为 2D 数组。 [C 编程](https://beginnersbook.com/2014/01/c-tutorial-for-beginners-with-examples/)中的二维(2D)数组也称为矩阵。矩阵可以表示为行和列的表。在我们讨论更多关于两个 Dimensional 数组之前,让我们来看看下面的 C 程序。
数组数组称为 2D 数组。[C 编程](https://beginnersbook.com/2014/01/c-tutorial-for-beginners-with-examples/)中的二维(2D)数组也称为矩阵。矩阵可以表示为行和列的表。在我们讨论更多关于二维数组之前,让我们来看看下面的 C 程序。
## 简单的二维(2D)数组示例
......@@ -87,10 +87,10 @@ int abc[2][] = {1, 2, 3 ,4 }
## 如何将用户输入数据存储到 2D 数组中
我们可以使用这个公式计算二维数组可以有多少元素:
数组 arr [n1] [n2]可以有 n1 * n2 个元素。我们在下面的示例中具有的数组具有尺寸 5 和 4.这些尺寸称为下标。所以这个数组的**第一个下标**值为 5,**第二个下标**值为 4\.
因此数组 abc [5] [4]可以有 5 * 4 = 20 个元素。
数组`arr[n1][n2]`可以有`n1 * n2`个元素。我们在下面的示例中具有的数组具有尺寸 5 和 4.这些尺寸称为下标。所以这个数组的**第一个下标**值为 5,**第二个下标**值为 4。
因此数组`abc[5][4]`可以有`5 * 4 = 20`个元素。
为了存储用户输入的元素,我们使用两个 for 循环,其中一个是嵌套循环。外循环从 0 到(第一个下标-1),内部 for 循环从 0 到(第二个下标-1)。这样,用户输入元素的顺序将是 abc [0] [0],abc [0] [1],abc [0] [2] ......等等。
为了存储用户输入的元素,我们使用两个`for`循环,其中一个是嵌套循环。外循环从 0 到(第一个下标减一),内部`for`循环从 0 到(第二个下标减一)。这样,用户输入元素的顺序将是`abc[0][0]``abc[0][1]``abc[0][2]`......等等。
```c
#include<stdio.h>
......@@ -156,6 +156,6 @@ Output:
1600101376 1600101392 1600101408 1600101424 1600101440
```
实际地址表示应为十六进制,我们使用%p 而不是%d,如注释中所述。这只是为了表明元素存储在连续的内存位置。您可以将输出与上图相关联,以查看这些地址之间的差异实际上是该行元素消耗的字节数。
实际地址表示应为十六进制,我们使用`%p`而不是`%d`,如注释中所述。这只是为了表明元素存储在连续的内存位置。您可以将输出与上图相关联,以查看这些地址之间的差异实际上是该行元素消耗的字节数。
输出中显示的地址属于每行`abc[0][0]``abc[1][0]``abc[2][0]``abc[3][0]``abc[4][0]`的第一个元素。
\ No newline at end of file
......@@ -43,7 +43,7 @@ val[6]: value is 77 and address is 1423453256
![Pointer-to-array](img/a1e69ea934a5994aef225afc2fb15d9b.jpg)
在上面的例子中,我使用&amp; val [i]来获取数组的第 i 个元素的地址。我们也可以使用指针变量而不是使用&符号(&amp;来获取地址。
在上面的例子中,我使用`&val[i]`来获取数组的第`i`个元素的地址。我们也可以使用指针变量而不是使用`&`符号来获取地址。
## 示例 - C 中的数组和指针示例
......@@ -103,7 +103,7 @@ p = var;
val==&val[0];
```
3)在循环中,对指针变量执行递增操作(p ++)以获取下一个位置(下一个元素的位置),此算法对于所有类型的数组都是相同的(对于所有数据类型 double,char,int 等)即使每种数据类型消耗的字节不同。
3)在循环中,对指针变量执行递增操作(`p++`)以获取下一个位置(下一个元素的位置),此算法对于所有类型的数组都是相同的(对于所有数据类型`double``char``int`等)即使每种数据类型消耗的字节不同。
**指针逻辑**
你必须已经理解了上面代码中的逻辑,所以现在是时候玩几个指针算术和表达式了。
......@@ -134,4 +134,4 @@ int main( )
```
我们在这个程序中不需要 p ++语句。
\ No newline at end of file
我们在这个程序中不需要`p++`语句。
\ No newline at end of file
......@@ -93,7 +93,7 @@ int main()
### C 字符串函数 - `strlen`
法:
法:
```c
size_t strlen(const char *str)
......
......@@ -5,7 +5,7 @@
在本指南中,我们将在 [C 编程](https://beginnersbook.com/2014/01/c-tutorial-for-beginners-with-examples/)中学习运算符优先级和关联性。
**C**
**中的运算符优先级运算符优先级**确定当表达式具有多个运算符时,首先计算哪个运算符。例如,100-2 * 30 将产生 40,因为它被评估为 100 - (2 * 30)而不是(100-2)* 30。原因是乘法*的优先级高于减法( - )。
**中的运算符优先级运算符优先级**确定当表达式具有多个运算符时,首先计算哪个运算符。例如,100-2 * 30 将产生 40,因为它被求值为 100 - (2 * 30)而不是(100-2)* 30。原因是乘法*的优先级高于减法( - )。
**C**
中的相关性当表达式中存在两个或多个具有相同优先级的运算符时,使用相关性。例如,乘法和除法算术运算符具有相同的优先级,假设我们有一个表达式 5 * 2/10,这个表达式将被计算为(5 * 2)/ 10,因为这些运算符的关联性是从左到右。类似地,20/2 * 5 将被计算为(20 * 2)/ 5。
......
......@@ -6,7 +6,7 @@
## C - `switch-case`语句
法:
法:
```c
switch (variable or an integer expression)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册