c#运算符,异常捕获,九九乘法表,冒泡排序

1. 实现通用打印泛型类,可以打印各个集合中的值,方便调试。

internal class ArrTools  //定义一个类
{
    //定义一个静态泛型方法,参数类型为IEnumerable<T>,可以处理任何实现了 IEnumerable<T> 接口的集合类型
    static public void OutPrint<T>(IEnumerable<T> collection)
    {
        //用foreach遍历集合并打印输出
        foreach (T item in collection) 
        { 
            Console.Write(item+" ");
        }
        Console.WriteLine();
    }
}

2. 计算遍历目录的耗时。

  • 用 Stopwatch 统计程序执行的时间。
  • 用 Directory.GetFiles 获取目录下的文件。
  • 用 Directory.GetDirectories 获取目录下的子目录。
internal class Program
{

    static void Main(string[] args)
    {
        string filepath = @"D:\Nodejs";
        Stopwatch sw = new Stopwatch();

        //开始计时
        sw.Start();
        traverse(filepath);

        //停止计时
        sw.Stop();

        //输出总耗时
        Console.WriteLine($"检索总时间为{sw.ElapsedMilliseconds}ms");
        Console.ReadKey();
    }

    //创建一个静态方法用于查询文件
    static void traverse(string path)
    {
        // 遍历目录下的所有文件
        foreach (string file in Directory.GetFiles(path))
        {
            Console.WriteLine(file);
        }
        //遍历目录下的所有子目录
        foreach (string directory in Directory.GetDirectories(path))
        {
            // 递归遍历子目录
            traverse(directory);
        }
    }

运行结果如下:

3. 有哪些算术运算符,有哪些关系运算符,有哪些逻辑运算符,有哪些位运算符,有哪些赋值运算符。

3.1. 算数运算符

运算符

含义

示例

+

x+y; x+3

-

x - y; x-3

*

x * y;

/

x / y

%

取模

x % y; 11%3

++

递增

++x ; x++

--

递减

--x ; x--

注意:

进行除运算时,两个操作数都是整型数据类型时,其计算结果也是整型。

5/2 = 2;
4/2 = 2;
5/2.0 = 2.5;

"%"模运算,获得整数除法运算的余数,所以也称取余。

11%3 		// 结果等于2
12%3  	    // 结果等于0 
11.0%3   	// 结果等于2,可作用于浮点类型的操作数

递增和递减操作

++x   // 先将x加一个单位,然后再将计算结果作为表达式的值。
x++   // 先将x的值作为表达式的值,然后再将x加一个单位

int  x , y ;
x=5 ;  y=++x ;    	// x和y都等于6
x=5 ;  y=x++ ;    	// x的值是6,y的值是5 

3.2. 关系运算符

运算符

操作

结果(操作 x,y)

>

x>y

如果x大于y,则为true,否则为false

>=

x>=y

如果x大于等于y,则为true,否则为false

<

x<y

如果x小于y,则为true,否则为false

<=

x<=y

如果x小于等于y,则为true,否则为false

==

x==y

如果x等于y,则为true,否则为false

!=

x!=y

如果x不等于y,则为true,否则为false

3.3. 逻辑运算符

运算符

操作

含义

逻辑与(&&)

x && y

当x,y都为true,运算结果为true

逻辑或( || )

x || y

当x,y其中一个为true,结果为true

逻辑非(!)

! x

当x为true,将x变为false

x

y

!x

x && y

x || y

true

true

false

true

true

true

false

false

false

true

false

true

true

false

true

false

false

true

false

false

3.4. 位运算符

运算符

含义

运算符

含义

&

按位与

~

按位取反

|

按位或

>>

右移

^

按位异或

<<

左移

3.5. 赋值运算符

运算符

操作

含义

简单赋值(=)

x = 10

给x赋值

加法赋值(+=)

x += 3

等价于 x = x + 3

减法赋值(-=)

x -= 2

等价于 x = x - 2

乘法赋值(*=)

x *= 4

等价于 x = x * 4

除法赋值(/=)

x /= 2

等价于x = x / 2

取模赋值(%=)

x %= 5

等价于 x = x % 5

按位与赋值(&=)

x &= 0xFF(十六进制数)

x = x & 0xFF

按位或赋值(|=)

x |= 0x0F(十六进制数)

x = x | 0x0F

按位异或赋值(^=)

x ^= 0xF0(十六进制数)

x = x ^ 0xF0

左移赋值(<<=)

x <<= 2

等价于 x = x << 2

右移赋值(>>=)

x >>= 3

等价于 x = x >> 3

0x代表这是一个十六进制数

按位与赋值(&=)

x = x & 0xFF ,0xFF转化为二进制数为(1111 1111)。

x 的二进制数为 1010 1010  ,进行按位与赋值  两数都为1,结果即为1
              1111 1111
运算结果		  1010 1010   十进制数 170

按位或赋值(|=)

x = x | 0x0F,0x0F 二进制数为(0000 1111)

x的二进制数为  1010 1010  两数有一个为1,结果即为1
              0000 1111
结果          1010 1111   十进制数 175

按位异或赋值(^=)

x ^= 0xF0 0xF0 二进制为(1111 0000)

异或运算  两个对应的二进制位相同,结果为 0,否则为 1
x为   1010 1010
      1111 0000
结果   0101 1010   十进制数 90

4. 三目表达式举例

运算规则

(表达式) ?  (x1) : (x2)
当表达式条件为true 返回x1
当表达式条件为false 返回x1

举例

int x = 5, y = 10;
int max = (x > y) ? x : y; //max = 10

5. 优先级口诀:有括号先括号,后乘除再加减,然后位移再关系,逻辑完后再条件。

根据它们所执行运算的特点和它们的优先级,将它们归为7个等级:1、单元运算符和括号。2、常规算术运算符。3、位移运算符。4、比较运算符。5、逻辑运算符。6、各种赋值运算符。7、右位(后缀)单元运算符。

无论是横向还是竖向,越靠前优先级越高

第1级

++、--(做为前缀)、()、+、-(做为单元运算符时)、!、~。

第2级

*、/、%、+、-。

第3级

<<、>>。

第4级

<、>、<=、>=、==、!=。

第5级

&、^、|、&&、||。

第6级

=、*=、/=、%=、+=、-=、<<=、>>=、&=、^=、|=。

第7级

++、--(做为后缀)。

6. 写个例子展示break、continue、ruturn的区别

6.1. break

break直接退出整个循环

static void Main(string[] args)
{
   for(int i = 0; i < 10; i++)
    {
        if(i == 3) //当i=3时,进入if
        {
            break; //此时退出整个循环,整个程序输出结果为0 1 2
        }
        Console.Write(i);
    }
    Console.ReadKey();
}

6.2. continue

退出本次循环,继续下一次循环

static void Main(string[] args)
{
   for(int i = 0; i < 10; i++)
    {
        if(i == 3)
        {
            continue; //执行到此,退出本次循环,开始下一次循环
        }
        Console.Write(i+" "); //整个程序输出结果为0 1 2 4 5 6 7 8 9
        
    }
    Console.ReadKey();
}

6.3. return

return 语句主要用于从函数中返回一个值或对象,这个值或对象就是函数的执行结果。当 return 语句执行时,会立即退出当前函数,后续的函数代码不会被执行。

internal class Program
{

    static void Main(string[] args)
    {
        Console.WriteLine(Fun(3)); //输出结果为1
        Console.ReadKey();
    }

    //创建一个静态方法用于查询文件
    public static int Fun(int num)
    {
        if(num == 3)
        {
            return 1; //执行该语句后,退出Fun函数,后续代码不会执行
        }
        Console.WriteLine("我在return后边");
        return 0;
    }
}

7. 写个冒泡排序

 static void Main(string[] args)
 {
     int[] arr = {3,2,6,4,1,9,18,30,21 };
     //外层循环控制排序的轮数
     for(int i = 0; i < arr.Length - 1; i++)
     {
         //内层循环比较相邻的两个元素,如果前一个元素比后一个元素大,就交换它们的位置。
         //首轮i=0,j的长度需要-1,防止j到数组的最后一个元素造成程序异常,比较一轮会排除一个
         //最大的数,所以还需要减 i 排除已经有序的元素
         for(int j = 0; j < arr.Length -i-1; j++)
         {
             int temp = 0;
             if (arr[j] > arr[j+1])
             {
                 temp = arr[j];
                 arr[j] = arr[j+1];
                 arr[j+1] = temp;
             }
         }
     }
     foreach(var i in arr)
     {
         Console.Write(i+" ");
         //输出结果为1 2 3 4 6 9 18 21 30
     }
     Console.ReadKey();
 }

8. 写个九九乘法表

 static void Main(string[] args)
 {
     //外层循环控制层数
     for (int i = 1;i<=9;i++)
     {
         //内层循环根据层数确定范围进行计算
         for (int j = 1; j<=i ; j++)
         {
             Console.Write($"{j}*{i}={i*j}   ");
         }
         Console.WriteLine();
     }
     Console.ReadKey();
 }

输出结果为

9. 实现文件找不到抛出异常

异常捕获应用 try-catch ,将可能出现异常的代码放入 try 里,处理异常的代码放入catch中

在catch中可以做很多操作:

  • 记录异常信息,如打印堆栈跟踪信息。
  • 采取适当的措施来恢复程序的正常执行。
  • 返回一个合理的默认值。
  • 向上抛出更高层级的异常。

同时还可以使用 finally 块来确保某些代码无论是否抛出异常都会执行。

try
{
    // 可能抛出异常的代码
}
catch (Exception ex)
{
    // 处理异常的代码
}
finally
{
    //代码
}
try
{
    //File.OpenRead() 方法在文件不存在时会抛出 FileNotFoundException 异常。
    FileStream fs = File.OpenRead("D:\\temp\\temp.txt");
}
catch(FileNotFoundException ex) //捕获异常
{
    Console.WriteLine("文件不存在");//文件不存在时执行该代码
}
finally {
    Console.WriteLine("666"); //无论是否有异常都会执行
}
Console.ReadKey();

//文件存在时输出:666
//文件不存在时输出: 文件不存在
//                  666
  • 29
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值