【C语言入门教程】3.3 条件控制语句

在程序的 3 种基本结构中,第二种是选择结构,选择结构是根据程序运行时获得的条件,决定程序执行情况。条件控制语句可用来实现这种结构,C 语言提供了 if 语句和 switch 语句两种条件控制语句,if 语句用于二选一的情况,而 switch 语句用于多选一的情况。

 

3.3.1 if 语句

if 语句通过表达式的值判读是否执行与其关联的代码,当表达式结果为 0 时,不执行关联的代码,当表达式结果为非 0 时,则执行关联的代码。使用 if 语句的格式为:

if (表达式) { 语句 }

如下例所示:

int a, b;									// 声明两个整型变量
printf("请输入数值,格式为:a,b\n");			// 提示数据输入的格式
scanf("%d,%d", &a, &b);						// 输入两个数值,存入变量 a 和 b 中
if (a > b)									// 判读变量 a 是否大于 b
{
	printf("数值 a 大于数值 b");				// 当变量 a 大于变量 b 时,执行此输出语句
}

if (a <= b)									// 判读变量 a 是否不大于 b
{
	printf("数值 a 不大于数值 b");
}

该代码的作用是比较输入的两个变量的大小,其中使用了两组 if 语句实现,将问题分解为两种不同的条件。在这种情况下,可加入 else 语句简化代码,else 的作用是在前面的 if 条件表达式为 非0 的情况下,执行其后一组关联的代码。如下例所示:

if (a > b)
{
	printf("数值 a 大于数值 b");
}
else
{
	printf("数值 a 不大于数值 b");
}

if 语句也可以实现多选一的条件判读。在比较两个数值的大小时,如果需要考虑两个数值相等的情况,则可以使用 else if 语句实现。如下例所示:

if (a > b)
{
	printf("数值 a 大于数值 b");
}
else if (a == b)
{
	printf("数值 a 等于数值 b");
}
else
{
	printf("数值 a 小于数值 b");
}

if 语句可多层嵌套,即在关联代码中,包含另外的 if 语句。需要注意的是,没组 if 语句要与同一层次的 else if 语句 和 else 语句条件相对应,否则会出现程序逻辑错误。前面的数值比较问题没有判读输入数值是否合法,可加入一组 if 语句解决此问题,如下例代码所示:

if (scanf("%d,%d", &a, &b) != 2)		// 根据 scanf()函数的返回值,检查输入是否为 2 个数值
{
	printf("输入的数值格式不合法");
}
else
{
	if (a > b)
	{
		printf("数值 a 大于 数值 b");
	}
	else if (a == b)
	{
		printf("数值 a 等于数值 b");
	}
	else
	{
		printf("数值 a 小于数值 b");
	}
}

上例利用了 scanf() 函数的返回值判读输入的数据是否合法,scanf() 函数会返回有效取得数值的个数。在第一组的 if 语句内,嵌套了比较两个变量大小的 if 语句。

注意:被嵌套的代码可增加每行前的空格缩进,这种书写习惯能提高代码的可读性,避免混淆了不同层次的条件语句。

 

3.3.2 switch 语句

当需要使用多选一的选择结构时,可使用 switch 语句实现相当于 if 语句与多个 else if 语句的组合,并且能实现将多个满足条件的分支执行。switch 语句的基本结构如下:

switch (表达式)
{
    case 常量表达式 1 :
        关联代码 1;
        <break 终止命令>
    case 常量表达式 2 :
        关联代码 2;
        <break 终止命令>
    .
    .
    .
    case 常量表达式 n :
        关联代码 n;
        <break 终止命令>
    default : 关联代码 n+1;
}

switch 语句的表达式与 case 子语句的常量表达式进行比较。如果结果相等,则执行 case 子语句内相关联的代码。switch 语句会依次执行每个满足条件的 case 子语句,当一个 case 子语句条件满足后,如果希望终止 switch 语句的执行,可加入 break 命令。break 命令执行后,其后的 case 子语句 和 default 子语句 和 default 子子语句都被跳过。default 子语句是默认执行条件,如果没有 case 子语句满足条件,或者 执行的case 子语句没有使用 break 命令终止 switch 语句执行,则 default相关联的代码被执行。如下例所示:

int c;
printf("请输入五分制成绩:");
scanf("%d", &c);
switch (c)
{
	case 5 :
		printf("\n成绩为 优秀");
		break;
	case 4 :
		printf("\n成绩为 良好");
		break;
	case 3 :
		printf("\n成绩为 及格");
		break;
	default :
		printf("\n成绩为 不及格");
}

switch 语句可嵌套使用,与 if 语句一样需要注意没组语句的对应关系。另外,case 子语句必须用常量表达式作为条件,否则会造成语法错误。

posted @ 2016-07-18 14:48  52php  阅读(451)  评论(0编辑  收藏  举报