选择结构的初步学习

选择结构
介绍以下内容:
关键字: if、 else、 switch、 continue、 break、 case、 default、 goto
运算符: &&、 ||、 ?:
函数: getchar()、 putchar()、 ctype.h系列
如何使用if和if else语句, 如何嵌套它们
在更复杂的测试表达式中用逻辑运算符组合关系表达式
C的条件运算符
switch语句
break、 continue和goto语句
使用C的字符I/O函数: getchar()和putchar()
ctype.h头文件提供的字符分析函数系列
单纯if语句

if students’grade is greater than or equai to 60
print ‘’ pass’’

if (grade >= 60)
	{
	puts("passed");//永远不要忘记加分号
	}//end if

if else语句
如果学生成绩60以上则输出“passed”
60分以下则 fialed

if(grade >= 60)
{
	printf("passed");
}
else {printf("failed");}//end else

如果是仅有单个语句,可以不加花括号

if(grade >= 60)
printf("passed");
else 
printf("failed");

逻辑运算符
?: 三目运算
|| 或
&& 并
&&的优先级比||高

printf("grade >= 60?passed:failed");
printf(grade >= 60?"passed":"failed");//right
grade >= 60 ? puts("passed"): puts("failed");//equal

介绍putchar与getchar

ch = getchar();
//equal to 
scanf("%c",ch);
//注意ch的数据类型是字符

事实上,较小的整型也可用字符型表示。
getchar和putchar都只能对单个字符输入和输出
优势:因为它只对字符起作用,因此较于printf等函数,不需要转换说明,更快更简洁
if的嵌套

if(grade >= 90) 
puts("A");
else if(grade>=80)
puts("B");
else if(grade>=70)
puts("C");
else puts("D");

虽然说单个语句可以不加花括号,但是最好还是要严谨。

多重选择switch

示例

switch (ch)
{ 
	case 'a':
	printf("argali, a wild sheep of Asia\n");
	break;
	case 'b':
	printf("babirusa, a wild pig of Malay\n");
	break;
	case 'c':
	printf("coati, racoonlike mammal\n");
	break;
	case 'd':
	printf("desman, aquatic, molelike critter\n");
	break;
	case 'e':
	printf("echidna, the spiny anteater\n");
	break;
	case 'f':
	printf("fisher, brownish marten\n");
	break;
	default:
	printf("that's a stumper \n");
}	

要对紧跟在关键字 switch 后圆括号中的表达式求值。该表达式是刚输入给 ch的值。 然后程序扫描标签(这里指, case ‘a’ : case ‘b’ :等) 列表, 直到发现一个匹配的值为止。 然后程序跳转至那一行。
如果没有匹配的标签怎么办? 如果有default :标签行, 就跳转至该行; 否
则, 程序继续执行在switch后面的语句
break 语句
break使之跳出switch,它让程序离开switch语句, 跳至switch语
句后面的下一条语句 。 如果没有break语句, 就会从匹配标签开
始执行到switch末尾。

switch在圆括号中的测试表达式的值应该是一个整数值(包括char类
型) 。 case标签必须是整数类型(包括char类型) 的常量或整型常量表达式
(即, 表达式中只包含整型常量) 。 不能用变量作为case标签。 switch的构
造如下:

switch ( 整型表达式)
{ case 常量1:
语句 <--可选
case 常量2:
语句 <--可选
default : <--可选
语句 <--可选
}

switch的多重标签

switch(ch = getchar())
{	case'a';
	case 'A':
	printf("this is A or a");
	breakcase'b';
	case'B': 
	printf("this is B or b");
	break;
}//意思就是一个语句可以有多个标签

因为case‘a’后面没有break

switch 与if else
何时使用switch? 何时使用if else? 你经常会别无选择。 如果是根据浮
点类型的变量或表达式来选择, 就无法使用 switch。 如果根据变量在某范围
内决定程序流的去向, 使用 switch 就很麻烦, 这种情况用if就很方便:
if (integer < 1000 && integer > 2)
使用switch要涵盖以上范围, 需要为每个整数(3~999) 设置case标
签。 但是, 如果使用switch, 程序通常运行快一些, 生成的代码少一些

常出现的错误
if (a < x < z) // 错误, 没有使用逻辑运算符
if(ch != ‘q’ && != ‘Q’) // 错误, 缺少完整的测试表达式
以上是参考c primer plus做的学习总结

来看看不加花括号会出现什么问题
悬挂else问题
编译器通常将else与上一个if关联,除非用花括号来指定关联关系

来确定x= 9 ,y = 1和x = 11,y=9时,下列程序的输出

if(x < 10)
if(y > 10)
puts("****");
else
puts("####");
puts("$$$$");
if(x > 10)
{ 	if (y > 10)
	puts("****");
}
else 
{	puts("####");
	puts("$$$$");
}

发布了4 篇原创文章 · 获赞 0 · 访问量 134

猜你喜欢

转载自blog.csdn.net/weixin_45407700/article/details/103947876