选择语句
if 语句
if...else if...else 语句
switch 语句
循环语句
while 循环
for 循环
do...while 循环
循环控制语句
break 语句
continue 语句
goto 语句
retuen 语句
无限循环
6.1 选择语句
6.1.1 if 语句
#include <stdio.h>
/*-----------------------------------------------------------------------*/
/*
* @brief
* 关于 main 的功能描述:
* 互换a,b的值.
* @param[in] void
*
* @return return 0
*
* @implements 低层需求标识号 XXXX
*/
int main()
{
float a, b, t;
printf("a,b的初始值:\t");
scanf("%f,%f", &a, &b);
if (a > b)
{
t = a;
a = b;
b = t;
}
printf("a=%5.2f\tb=%5.2f\n", a, b);
return 0;
}
/*-----------------------------------------------------------------------*/
Visual Studio 运行结果:

6.1.2 if...else if...else 语句
#include <stdio.h>
/*-----------------------------------------------------------------------*/
/*
* @brief
* 关于 main 的功能描述:
* 由输入number的值确定cost对应的数值.
* @param[in] void
*
* @return return 0
*
* @implements 低层需求标识号 XXXX
*/
int main()
{
int number;
float cost;
printf("number的初始值:\t");
scanf("%d", &number);
if (number > 500) cost = 0.15;
else if (number > 300) cost = 0.10;
else if (number > 100) cost = 0.07;
else cost = 0.10;
printf("cost=%5.2f\n", cost);
return 0;
}
/*-----------------------------------------------------------------------*/
Visual Studio 运行结果:

条件运算符 ? : 可以用来替代 if...else 语句。
6.1.3 switch 语句
#include <stdio.h>
/*-----------------------------------------------------------------------*/
/*
* @brief
* 关于 main 的功能描述:
* 学生成绩按照考试等级输出百分制分数段.
* @param[in] void
*
* @return return 0
*
* @implements 低层需求标识号 XXXX
*/
int main()
{
char grade;
printf("等级:");
scanf("%c", &grade);
switch (grade)
{
case 'A':printf("100~85\n"); break;
case 'B':printf("84~70\n"); break;
case 'C':printf("69~60\n"); break;
case 'D':printf("<60\n"); break;
default:printf("Enter data error!\n");
}
return 0;
}
/*-----------------------------------------------------------------------*/
Visual Studio 运行结果:


(1)switch 语句中的 expression 必须是一个整型或枚举类型,或者是一个 class 类型;
(2)不是每一个 case 都需要包含 break。如果 case 语句不包含 break,控制流将会 继续 后续的 case,直到遇到 break 为止;
(3)一个 switch 语句可以有一个可选的 default case,出现在 switch 的结尾。default case 可用于在上面所有 case 都不为真时执行一个任务。default case 中的 break 语句不是必需的;
(4)C 语言把 任何非零和非空的值假定为 true,把零或 null 假定为 false。
6.2 循环语句
6.2.1 while 循环
#include <stdio.h>
/*-----------------------------------------------------------------------*/
/*
* @brief
* 关于 main 的功能描述:
* 使用while(),将1到100求和.
* @param[in] void
*
* @return return 0
*
* @implements 低层需求标识号 XXXX
*/
int main()
{
int i = 1, sum = 0;
while (i <= 100)
{
sum += i;
i++;
}
printf("sum=%d\n", sum);
return 0;
}
/*-----------------------------------------------------------------------*/
Visual Studio 运行结果:

当给定条件为真时,重复语句或语句组。它会在执行循环主体之前测试条件。
while(condition)
{
statement(s);
}
statement(s) 可以是一个单独的语句,也可以是几个语句组成的代码块。condition 可以是任意的表达式,当为任意非零值时都为 true。当条件为 true 时执行循环。
当条件为 false 时,程序流将继续执行紧接着循环的下一条语句。
6.2.2 for 循环
#include <stdio.h>
/*-----------------------------------------------------------------------*/
/*
* @brief
* 关于 main 的功能描述:
* 使用for(),将1到100求和.
* @param[in] void
*
* @return return 0
*
* @implements 低层需求标识号 XXXX
*/
int main()
{
int i, sum = 0;
for (i = 1; i <= 100; i++)
{
sum += i;
}
printf("sum=%d\n", sum);
return 0;
}
/*-----------------------------------------------------------------------*/
Visual Studio 运行结果:

多次执行一个语句序列,简化管理循环变量的代码。
for ( init; condition; increment )
{
statement(s);
}
init 会首先被执行,且只会执行一次。
这一步允许声明并初始化任何循环控制变量。
可以不在这里写任何语句,只要有一个分号出现即可。
接下来,会判断 condition。如果为真,则执行循环主体。
如果为假,则不执行循环主体,且控制流会跳转到紧接着 for 循环的下一条语句。
在执行完 for 循环主体后,控制流会跳回上面的 increment 语句。
该语句允许更新循环控制变量。该语句可以留空,只要在条件后有一个分号出现即可。
条件再次被判断。如果为真,则执行循环,这个过程会不断重复(循环主体,然后增加步值,再然后重新判断条件)。
在条件变为假时,for 循环终止。
6.2.3 do...while 循环
#include <stdio.h>
/*-----------------------------------------------------------------------*/
/*
* @brief
* 关于 main 的功能描述:
* 使用do...while(),将1到100求和.
* @param[in] void
*
* @return return 0
*
* @implements 低层需求标识号 XXXX
*/
int main()
{
int i = 1, sum = 0;
do
{
sum += i;
i++;
} while (i <= 100);
printf("sum=%d\n", sum);
return 0;
}
/*-----------------------------------------------------------------------*/
Visual Studio 运行结果:

除了它是在循环主体结尾测试条件外,其他与 while 语句类似。
不像 for 和 while 循环,它们是在循环头部测试循环条件。
在 C 语言中,do...while 循环是在循环的尾部检查它的条件。
do...while 循环与 while 循环类似,但是 do...while 循环会确保至少执行一次循环。
do
{
statement(s);
}while( condition );
条件表达式出现在循环的尾部,所以循环中的 statement(s) 会在条件被测试之前至少执行一次。
如果条件为真,控制流会跳转回上面的 do,然后重新执行循环中的 statement(s)。
这个过程会不断重复,直到给定条件变为假为止。
6.3 循环控制语句
6.3.1 break 语句
终止 loop 或 switch 语句,程序流将继续执行紧接着 loop 或 switch 的下一条语句。
#include <stdio.h>
/*-----------------------------------------------------------------------*/
/* 宏定义 */
#define Sum 100
/*-----------------------------------------------------------------------*/
/*
* @brief
* 关于 main 的功能描述:
* 单位组织捐款,当总数达到100时结束,
* 统计捐款人数和平均捐款数.
* @param[in] void
*
* @return return 0
*
* @implements 低层需求标识号 XXXX
*/
int main()
{
int i;
float amount, aver, total;
for (i = 1, total = 0; i < 100; i++)
{
printf("Please enter amount:");
scanf("%f", &amount);
total += amount;
if (total >= Sum)
break;
}
aver = total / i;
printf("num=%d\naver=%10.2f\n", i, aver);
return 0;
}
/*-----------------------------------------------------------------------*/
Visual Studio 运行结果:

6.3.2 continue 语句
引起循环跳过主体的剩余部分,立即重新开始测试条件。
#include <stdio.h>
/*-----------------------------------------------------------------------*/
/*
* @brief
* 关于 main 的功能描述:
* 输出100~200的不能被3整除的数.
* @param[in] void
*
* @return return 0
*
* @implements 低层需求标识号 XXXX
*/
int main()
{
int i, k = 0;
for (i = 100; i <= 200; i++)
{
if (i % 3 == 0)
continue;
printf("%d\t", i);
k++;
if (k % 5 == 0)
printf("\n");
}
printf("\n");
return 0;
}
/*-----------------------------------------------------------------------*/
Visual Studio 运行结果:

continue和break的使用区别:continue只是结束本次循环,而break是结束整个循环过程,不在判断执行循环的条件是否成立。
6.3.3 goto 语句
将控制转移到被标记的语句。但是不建议在程序中使用 goto 语句。
C 语言中的 goto 语句允许把控制无条件转移到同一函数内的被标记的语句。
注意:在任何编程语言中,都不建议使用 goto 语句。因为它使得程序的控制流难以跟踪,使程序难以理解和难以修改。任何使用 goto 语句的程序可以改写成不需要使用 goto 语句的写法。
#include <stdio.h>
/*-----------------------------------------------------------------------*/
/*
* @brief
* 关于 main 的功能描述:
* 输出10~19的数,且不输出15.
* @param[in] void
*
* @return return 0
*
* @implements 低层需求标识号 XXXX
*/
int main()
{
int a = 10;
LOOP:do
{
if (a == 15)
{
a = a + 1;
goto LOOP; //跳过迭代
}
printf("a 的值: %d\n", a);
a++;
} while (a < 20);
return 0;
}
/*-----------------------------------------------------------------------*/
Visual Studio 运行结果:

6.3.4 retuen语句
#include <stdio.h>
/*-----------------------------------------------------------------------*/
/*
* @brief
* 关于 main 的功能描述:
* 输出a[20]的每个值,当值等于15时结束.
* @param[in] void
*
* @return return 0
*
* @implements 低层需求标识号 XXXX
*/
int main()
{
int i = 0;
int a[20] = {0};
a[0] = 12; a[1] = 6; a[3] = 8;
a[10] = 7; a[11] = 15; a[13] = 18;
for (i = 0; i < 20; i++)
{
if (a[i] == 15)
{
return 1;
}
printf("a[%d]==%d\n", i, a[i]);
}
return 0;
}
/*-----------------------------------------------------------------------*/
Visual Studio 运行结果:

6.4 无限循环
无限循环 调用功能函数,常用在嵌入式应用的主函数开发。
for (;;) {}
while (1){}
Ctrl + C 键终止一个无限循环。
非常感谢您的支持!创作不易,转发备注出处!
自用展示内容,不定期更新维护内容,让我们把 C开发 变得更专业。
十年开发基本功,常年开班收徒(一年学徒制度),每年10个名额。
商业合作加微信,项目接包与外包。

C语言选择与循环语句详解
1482

被折叠的 条评论
为什么被折叠?



