C语言 分支结构(第三章)
if()语句
- if…else语句 如果if()括号为真则执行if后的语句,否则执行else语句。
if()对于省略else的语句,如果if()括号内为真则执行if语句,否则什么也不做。 - 在if…else语句中{ }花括号的作用
1、使if语句后复合语句成为一个整体
if子句或者else子句只能控制执行其后面的一条语句,当if…else后有多条复合语句时,应当用{ }花括号把复合语句括起来使复合语句逻辑上形成一个整体,当做一条语句执行。
#include<stdio.h>
int main()
{
int a,b;
scanf("%d %d",&a,&b);
if(a>0) // if() 1
if(a>b) //if()2
a=b; //只执行后面第一行代码
printf("%d",a);
else
printf("%d",b);//只执行这一行代码
printf("%d",b);
return 0;
}
2、关于if和else配对问题
在嵌套的if语句中可能出现多个if和else,上述代码中,认为第一个if和第一个else有相同的缩进格式而且对齐了,所以希望出现的结果是if()1和else1配对,但事实上,else使就近原则配对,他会和离他最近的if()2 配对。使用{ }花括号就能解决问题。
#include<stdio.h>
int main()
{
int a,b;
scanf("%d %d",&a,&b);
if(a>0) // if() 1
{ if(a>b) //if()2
a=b; //只执行后面第一行代码
printf("%d",a);
}
else
{
printf("%d",b);//只执行这一行代码
printf("%d",b);
}
return 0;
}
条件表达式:(表达式1) ?表达式2:表达式3
(a>b)? a:b 求解表达式1 的值如果表达式1 非0求解表达式2 的值,如果表达式1的值为0 则求解表达式3的值
字符
- 字符数据的输入输出
定义字符型变量: char ch;
法一:scanf("%c",&ch);
printf("%c",ch);
法二:ch= getchar();
putchar(ch);
字母、空格如何表达
’ 字符 ’
if(变量==‘A’)
对于字符数据而言,所有的输入都是有效输入,包括空格和回车等空白符号。
i++ 即 i自+1
i + = 1 即 i = i + 1
switch
解决某些判断分支情况较多的问题时,if语句多层嵌套可能会有错误出现,switch语句能很方便的解决问题,而且一般switch语句速度比if语句快。
输入两个实数和一个运算符,并得出运算结果
#include<stdio.h>
int main()
{
double a,b;
char op;
scanf("%lf %c %lf",&a,&op,&b);
switch(op)
{
case '+': printf("%.2f",a+b); break;
case '-': printf("%.2f",a-b); break;
case '*': printf("%.2f",a*b); break;
case '/': printf("%.2f",a/b); break;/*这里不考虑分母为0的情况。*/
default : printf("运算符错误\n");break;
}
return 0;
}
- switch语句中表达式注意事项
-
控制表达式
switch 后边的必须跟着由圆括号括起来的整形表达式,在C语言中字符当做整数处理,所以switch可以对字符进行判定,但是表达式不能用浮点数、字符串。可以把switch()表达式的值强行转换成int switch((int)a) -
分支标号
case 常量表达式 :
其后常量表达式可以是不包含变量和函数调用的任何表达式,并且表达式的值必须是整数或者字符。 -
每个分支标号的后面可以有很多条语句,而且也不需要用花括号括起来,因为语句后会有break结束语句跳出switch。
没有break也可以,没有break的话输出的结果是每一种case后的语句都会执行,他会从符合的那一条case后执行每一条case
switch(op)
{
case '+': printf("%.2f",a+b);
case '-': printf("%.2f",a-b);
case '*': printf("%.2f",a*b);
case '/': printf("%.2f",a/b);
default : printf("运算符错误\n");
}
如果op=‘-’ 则执行上述代码后,输出为a-b、ab、a/b的值
如果op=‘’ 则执行上述代码后,输出为a*b、a/b的值
default也可以省略。