if…else 结构包含一个条件和两个分支:条件是 bool 类型表达式,写在 if 后面的圆括号里;分支写在 2 个 {} 里。 当条件为 true 时,执行 if 后面的分支,当条件为 false 时,执行 else 后面的分支。 语法结构:
if (判断条件)//条件,bool类型 {//分支1 执行语句1; } else {//分支2 执行语句2; }小栗子: 判断是否为成年人
namespace Test { class Program { static void Main(string[] args) { int age = 17;//年龄 if (age >= 18)//条件,bool类型 {//分支1 Console.WriteLine( "你是成年人"); } else {//分支2 Console.WriteLine("你是小盆友"); } } } }多重if判断语句:
if (判断条件1)//条件,bool类型 {//分支1 执行语句1; } else if (判断条件2) {//分支2 执行语句2; } else { 执行语句3;//都不满足 }注意 如果某个分支只包含一条命令,那么是可以省略大括号{}的 如果分支中包含2条以上的命令,是不能省略{} 编写条件结构时,尽可能加上 {} 可以省掉不必要的错误和麻烦。
C#提供了一种条件运算符,能够代替简单的 if…else 结构。这种条件运算符的语法如下: 条件表达式 ? 分支1 : 分支2 ?: 就是条件运算符,可以看到它有3个操作数,所以又被称为三元运算符。 它的运算逻辑是:当条件表达式为 true 时,执行分支1;当条件表达式为 false 时,执行分支2。
下面的例子中,根据年龄的大小,输出“成年人”或“未成年人”:
static void Main(string[] args) { int age = 17;//年龄 string backup //定义变量类型 backup = age >= 18 ? "成年人":"未成年人"; Console.WriteLine(backup); }判断输入的数是否为奇数 用到了数据转换(Convert.ToInt32)和交互输入(Console.ReadLine())
static void Main(string[] args) { Console.WriteLine("请输入一个数字"); int input_a = Convert.ToInt32(Console.ReadLine()); //存储输入的一个数,并转化为32位的int整型 if (input_a / 2 != 0) { Console.WriteLine("这是一个奇数!"); } else { Console.WriteLine("这是一个偶数!"); } Console.ReadLine(); }除了if…else 之外,C#中还有一种 switch 条件结构,可以用来对变量进行多个分支的等值判断。语法如下:
switch(变量) { case 常量1: 执行语句1; break; case 常量2: 执行语句2; break; case 常量3: 执行语句3; break; default 常量4: 执行语句4; break; }(变量)与每一个 case 后面的常量进行等值比较,如果相等,就执行对应的分支。 执行分支以后, break 关键字会使 switch 结构中止,不会再判断后面的常量。 如果变量与所有的常量都不相同,则执行 default 后面的分支。 注意:break不可省略 switch 中的(变量)只能是3种类型:整型(如 int )、字符型( char )、字符串类型( string )。
循环是由循环体(需要重复执行的命令)和循环条件组成。 运行时,先判断循环条件,若条件为 true ,就执行循环体一次,然后再判断条件…当条件为 false 时,结束循环。
C#中,可以用 while 循环结构来实现:
while (循环条件) { 循环体 }前面已经学习了 while 循环,C#中还有一种非常有用的 for 循环,适于“已知循环次数”的循环。
for (变量声明(初值);循环条件 ;变量自加 )//请填写代码 { 执行语句; }可以看出, while 循环有的变量声明、循环条件、变量自加, for 循环一个也不缺,但是 for 循环把这些跟循环次数有关的元素都放在 ( ; ; ) 中,使得{}中的循环体更加纯粹,程序结构更加清晰。
for 循环 ( ; ; ) 中的两个分号是不能缺少的。
for 循环运行时: 首先进行变量声明和赋值; 再判断循环条件,若为 true ,则执行循环体一次,若为 false ,则结束循环; 再变量自加。 再进入下一次循环。 注意:在声明变量和变量自加时可以使用多个表达式,例如:
for(i = 0,j = 1;j <=100; i++) { i += j; }下面比较一下三种循环的区别:
while: 特点:先判断后执行: 适于:每次执行需要先验证条件:如读取每行数据前需要先检查是否有数据
do–while 特点:先执行一次循环体再判断条件 适于:第一次执行无需验证条件:如先输入密码再判断密码对不对
for: 特点:与循环次数有关的元素都放在(变量声明;循环条件 ;变量自加) 适于:已知循环次数
循环中可以应用 continue 关键字中止一次循环,进入下一次。
小栗子: 代码循环输出 1-9 的整数,请使用 continue 关键字,使得 3 和 8 不会被打印。
for (int x = 1; x < 10; x++) { //请添加代码,过滤3和8 if (x==3 || x==8) { continue; } Console.Write(x); }前面学习 switch 结构时,我们曾经遇到过 break 关键字, break 在 switch 结构的作用是“跳出 switch 结构”。 break 关键字还可以用在循环中,作用是**“结束循环”**。
static void Main(string[] args) { int x = 1; while(true) { Console.Write(x); x++; if (x>5) { break; //当x>5时,跳出while循环 } } }学习过C#语言的语法,又学习了条件逻辑和循环逻辑,还学习了几种常用的算法,我们是否能够说掌握了编程的本领呢?让我们用一道有些难度的编程练习检验一下吧! 一次考试,各位同学的姓名和分数如下:
请编写程序,输出分数最高的同学的姓名和分数。
namespace projGetMaxScore { class Program { static void Main(string[] args) { string [] name = {"吴松","钱东宇","伏晨","陈露","周蕊","林日鹏","何坤","关欣"}; int [] num = {89,90,98,56,60,91,93,85};//分数与名字一一对应 int c = 0; //中间变量c用来存储最大值 int I = 0 ; //用来存储位置 for(int i = 0; i <= num.Length-1; i++)//寻找最大值标记位置并输出名字位置 { if (c > num[i])// 将c和每一个数比较 { continue; } else { c = num[i]; I = i; //标记位置 } } Console.Write("分数最高的是{0},分数是{1}",name[I],c); } } }运行结果:
分数最高的是伏晨,分数是98