6. C语言 判断与循环

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

选择语句
    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个名额。

商业合作加微信,项目接包与外包。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值