上一章为C#中的变量和输出数据 这一章为C#运算符和选择语句
using System;
namespace a
{
class b
{
static void Main()
{
// 赋值运算符
int m=20; //赋值
m+=30; // =50 因为m已赋值 所以+=的意思为加等于号后面的数30
m*=3; // =150 代码是根据从前往后运行所以是根据上面的数值再乘3 累加形式
// += -= *= /= %=这个是求余数 用法都一致
// 算术运算符
int m=3,n=2;
int s=m+n; // 用于 “相加”
string str="你好"+"小明"+C; //+对字符串用于连接也是可以的
string s1=m+""; //由于是字符串 所以加号的作用为 “连接”
int d=-100; //负数
int e=d-200; //减法
Console.WriteLine("e={0}",e); //输出为 -300
int f=a*b*c //乘法
Console.WriteLine("f={0}",f);
int g=a/b; //除法:两个整数相除,结果为整数!!!
Console.WriteLine("g={0}",g);
//如果想要得到小数结果把其中一个数变成浮点型
int xj=m/n; //两个整数相除只能得到整数 这里用浮点型也不行。
Console.WriteLine(xj); // 求出的结果为整数
double xj=(double)m/n; // 如果非要除出小数 得用强制转换 转换一个赋值得数为小数就能求出小数。或者在赋值上变成3.0
//或 double xj=m/2.0;
double j=a/0.0; //除数不能为整数0,但是可以用小数的0.0
Console.WriteLine("j={0}",j); 结果为:无限大
int x=a%b;
Console.WriteLine("x={0}",x);
double y=7.5%3.5;
Console.WriteLine("y={0}",y); //求余数算法时,结果必须是整数
double ys=10.5%2;
Console.WriteLine(ys); // 0.5
int m=3,n;
// ++ 本身加一 -- 本身减一 //有两种写法
// m++ 前缀写法
// ++m 后缀写法
// 前缀写法优先级很高,后缀写法优先级很低。
//列; n=m++; n则等于3 m则等于4 因为优先给了n=m m则是m++所以是4
//n=++m n=4 m=4 因为++m等于4 n=m 所以n也等于4
int a=10;
a++; //++ 自增1 相当于 a=a+1 a+=1 前缀写法
Console.WriteLine("a={0}",a); //结果为a=11
++a; //++ 自增1 后缀写法
Console.WriteLine("a={0}",a); //输出结果为a=11
//前后缀 优先级不同
int a=10;
int b=a++; //先算= 再算后缀++
Console.WriteLine("a={0}b={1}",a,b); //a=11 b=10
int b=++a; //先前缀 再算=
Console.WriteLine("a={0}b={1}",a,b); //a=11 b=11
//说明前缀和后缀的区别在于:运算优先级不同 前缀优先级比较高 后缀优先级低
//(a++); ()不影响后缀优先级
// ++ -- 用法相同
运算符和流程分支结构
1.常见运算符;
赋值;=(赋值)、+=、-=、....
算数:+、-、*、/、%、++、--
关系;>、>=、<、<=、==(等于)、!=、
eg:
int a=10,b=20;
Console.WriteLine("{0}",a>b); //false
bool c=a<b; //保存关系表达式的结果
Console.WriteLine("{0}",c); //true
Console.WriteLine("{0}",a>=b); //false
Console.WriteLine("{0}",a<=b); //true
Console.WriteLine("{0}",a==b); //false
Console.WriteLine("{0}",a!=b); //true
逻辑; &&(与) ||(或) !(非)
A&&B:如果a和b同时成立,整个表达式结果为true 有一个不成立为false // 如果a不成立b则不需要计算(短路运算特点)
与运算用于多个条件同时满足时,多个条件就用&&连接!
eg:
int a=10;
Console.WriteLine("{0}",a>0&&a<100); //结果为true
Console.WriteLine("{0}",a<0&&a<100); //结果为false
|| 或运算 表示“或者”的意思 //多个满足一个就行
a||b :a和b只要有一个成立,整个表达式结果是true // a和b都不成立,整个表达式结果是false
如果a成立b则不需要计算(短路运算特点) 在多条件满足一个时,多个条件就用||连接!
!:非运算 表示“不是”的意思 “真为假 假为真”
(!(a)) 如果成立 结果为flase 如果不成立 结果为true
eg:判断成绩要大于等于60
条件写法;s>=60
!(s<60)
这两个写法是一样的。
运算符的优先级;
算术>关系>逻辑>赋值
有一些比较特殊的
1)前缀优先级高,后缀很低。
2)!优先级很高
关系和逻辑表达式常作为判断条件,比如:
判断一个整数a是偶数的条件: a%2==0
判断一个整数a是否在0-100之间的条件:a>=0 && a<=100
判断一个整数a是否小于1或大于12的条件:a<1 || a>12
判断一个字符c是否是字母的条件: c>='a' && c<='z' || c>='A' && c<='Z';
2.流程分支结构;
1)if结构;有三种写法;
a、形式一;
if(条件表达式)
{
条件成立时,要执行的操作
}
条件表达式;一般可以是关系表达式或逻辑表达式。
eg;
int a=100,b=20;
if(a>b) //如果a大于b
{
Console.WriteLine("a的值大于b的值!"); //条件成立才会输出
}
eg2;
Console.WriteLine("输入考试成绩");
int a=int.Parse(Console.ReadLine());
//如果成绩低于60,给你加上五分。
if(a=<60)
{
a+=5;
Console.WriteLine("加分后成绩为:{0}",a);
}
Console.WriteLine("您的成绩为:{0}",a); //如果上面不成立则会输出两个结果
b、形式二; //一般用于二选一的操作 判断效率低(判断多个哪怕判断一个成立时其他也会接着判断)
if (条件表达式)
{
条件成立时,要执行的操作;
}
else ()
{
条件不成立时,要执行的操作;
}
eg;
int a=100,b=50;
if (a>b) //判断
{
条件成立则会输出; //输出
}
else //不满足if
{
// 条件不满足时则会输出
}
c、形式三; //常用于三种以上的情况 //执行效率高当判断一个成立时就会放弃其他判断
if (条件表达式1)
{
当条件1成立时,执行的操作;
}
else if (条件表达式2)
{
当条件2成立时,要执行的操作; //可加多个else if
}
if语句中可以相互嵌套,就是if语句里可以再出现if语句,比如://输入性别年龄判断是否达到法律结婚年龄
if (a=="男")
{
if (b>=22)
{
Console.WriteLine("达到");
}
else
{
Console.WriteLine("没达到");
}
}
else (a=="女")
{
if (b>=20)
{
Console.WriteLine("达到");
}
else
{
Console.WreteLine("没有达到");
}
}
条件运算符?: (三目运算符)//三个操作数的意思 (++\--\! 是单目运算符 其他大多数是双目运算符)
条件表达式写法:
条件?表达式1:表达式2 //注意!!!一般来说:表达式1和2的类型应当保持一致
运算规则:
如果条件成立,表达式1就是整个式子的结果。
如果条件不成立,表达式2就是整个式子的结果。
eg:
int a=10,b=20,c=30;
Console.WriteLine("{0}",a>b?100:200); //a>b 不成立所以结果是200
Console.WriteLine("{0}",a<b?100:200); //a<b 成立所以结果是100
1>2?1:2 ---->结果是2
?:也可以嵌套
a>b?a:(b>c?b:c) //结果为c
eg:
//求两个数的最大值
//输入两个数为a,b。
int c=a>=b?a:b;
Console.WriteLine("这两个数{0}大",c);
eg:
string ch=a=="男"?"先生":"女士";
Console.WriteLine("您的称呼是{0}",ch);
switch:第二种流程分支语句。 用于等值判断!!!
写法:
switch (表达式)
{
case 常量表达式:处理语句;break; //相当于if成立之后执行的
case 常量表达式:处理语句;break;
.....
default:处理语句;break;
、 }
说明:
1)表达式一般是int、char、tring等类型的式子;
2) 表达式就是判断对象;
3) 常量表达式,一般就是具体的某个数据。
(表示要的表达式可能等于的值)
(多个case语句后的常量不能出现重复)
常量的类型要跟判断的表达式类型一致!
4) break表示跳出switch (表示结束)
5) 一个case语句就是只有一种可能的情形;
6) default语句是可以选的;如果有,只能有一个default语句,
default语句在所有的case都不满足时候执行,相当于if结构中的else部分。
7)case和default可以调整先后顺序。
eg:
//输入姓名变量为a 判断男女还是输入错误
switch (a) //a变量就是判断对象
{
case "男":Console.WriteLine("先生!");break;
case "女":Console.WriteLine("女士!");break;
default:Console.WriteLine("输入错误!");break;
}
//输入0-6代表周日到周六 输入一个变量保存为a //用if会很麻烦且长
switch (a)
{
case 0:Console.WriteLine("星期日");break;
case 1:Console.WriteLine("星期一");break;
case 2:Console.WriteLine("星期二");break;
case 3:Console.WriteLine("星期三");break;
case 4:Console.WriteLine("星期四");break;
case 5:Console.WriteLine("星期五");break;
case 6:Console.WriteLine("星期六");break;
default:Console.WriteLine("输入错误!");break;
}
//输入一个月份求出一个月有多少天 输入月份定义变量为a
switch (a)
{
//多个case属于同一种情形,进行相同处理时,可以只写一次处理语句
//省略break 会自动执行下一个case后的语句,直到遇到break才会跳出。
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:Console.WriteLine("31");break;
case 4:
case 6:
case 9:
case 11:Console.WriteLine("30");break;
case 2:Console.WriteLine("28");break;
default:Console.WriteLine("输入月份错误!");break;
}
//if和witch可以进行相互嵌套:
switch ()
{
case xx:
if ()
{
}
break;
}
if ()
{
switch ()
{
......
}
}
else
{
switch ()
{
.......
}
}
eg:
//输入一个月份求出一个月有多少天并且考虑闰年 输入月份定义变量为a年份为b
if (a>=1&&a<=12) //可以进行嵌套
{
switch (a)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:Console.WriteLine("31");break;
case 4:
case 6:
case 9:
case 11:Console.WriteLine("30");break;
case 2:
//判断年份是不是闰年
if (year%4==0&&year%100!=0||year%400==0)
{
Console.WriteLine("29");
}
else
{
Console.WriteLine("28");
}
break;
}
}
else
{
Console.WriteLine("输入错误");
}