选择结构和条件判断
1,if:双分支
2,switch:多分支
1,if例子
例题:
继续用上一篇文章的一个例子(第一题)
题目: 求一元二次方程ax2+bx+c=0的根,其中a,b,c由键盘输入。
原代码段:
#include<stdio.h>
#include<math.h>
int main()
{
double a, b, c, d, x1, x2, p, q;
scanf("%lf,%lf,%lf", &a, &b, &c);
d = b * b - 4 * a * c;
p = -b / (2.0 * a);
q = sqrt(d) / (2.0 * a);
x1 = p + q;
x2 = p - q;
printf("x1=%7.2llf\nx2=%7.2lf\n", x1, x2);
return 0;
问题所在:倘若方程无实根便解决不了问题了。
所以尝试使用选择结构来解决。
#include<stdio.h>
#include<math.h> //程序中要调用求平方根函数sqrt
int main()
{ double a,b,c,disc,x1,x2,p,q; //disc是判别式sqrt(b*b-4ac)
scanf("%lf,%lf,%lf",&a,&b,&c); //输入双精度浮点型变量的值要用格式声明"%lf"
disc=b*b-4*a*c;
if(disc<0) //若b*b-4ac<0
printf("This equation hasn't real roots\n"); //输出“此方程无实根”
else //b*b-4ac≥0
{ p=-b/(2.0*a);
q=sqrt(disc)/(2.0*a);
x1=p+q;x2=p-q; //求出方程的两个根
printf("real roots:\nx1=%7.2f\nx2=%7.2f\n",x1,x2); //输出方程的两个根
}
return 0;
}
2,switch例子
#include <stdio.h>
int main()
{
char X;
scanf("%c",&X);
switch(X)
{
case 'A': printf("balabla\n");break;
//break:直接到switch尾部"}"处,case后面跟常量
case 'B': printf("balabla\n");break;
case 'C': printf("balbaal\n");break;
case 'D': printf("adafgdaf\n");break;
default: printf("sdga\n");
}
return 0;
}
/*switch得到X的值并把它和各case中给定的值(′A′,′B′,′C′,′D′之一)相比较,
如果相同,进入冒号后面的语句
注意!
1,各个case标号出现次序不影响执行结果。
2,每一个case常量必须互不相同;否则就会出现互相矛盾的现象。*/
if\switch书写规范
独自占一行,执行语句不得紧跟其后。不论执行语句有多少都要加“{ }”。
这样做的目的是便于阅读,同时也有利于代码的维护。
针对选择结构,私人总结的一些常考的点:
1,if的三种形式
//1
if(表达式) 语句1
//2
if (表达式)
语句1
else
语句2
/3
if(表达式1) 语句1
else if(表达式2) 语句2
else if(表达式3) 语句3
⋮ ⋮
else if(表达式m) 语句m
else 语句m+1
2,优先级问题
1,关系运算符
1,<
2,<=
3,>
4,>=
5,==
6,!=
2,逻辑运算符
1,!(not)
2,&& (and)
3,|| (or)
相同时从左到右进行判断,为了提升速度C#不会判断全部的逻辑运算符
eg. (1+3==2)&&(1+1==2)&&(1+1==2)
{
(1+3==2) //此处判断为假,停止继续判断,输出>>>0
}
&&(1+1==2)&&(1+1==2)