C#入门笔记

C#入门笔记 

using System; //引入命名空间
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MyApp01  //命名空间,组织和管理类
{
    class Program  //类,是C#的最小单元;
    {
        ///
        /// 文档注释用三个斜杠,
        /// 写在类、方法或属性的前面
        ///
        //Main方法,程序入口;关键字:小写字母组成,static静态的,void无返回值的
        static void Main(string[] args)  
        {
            /*这是一个多行注释
             * 的使用符号,
             * 可以包含多行
             */
            Console.WriteLine("WriteLine打印后会换行01");//命名,以分号结束
            Console.Write("Write打印后不换行02");//打印双引号里面的内容
            Console.WriteLine("WriteLine打印后换行03");
            Console.WriteLine("WriteLine打印后换行04");
            
            //const 表明是一个常量;double 表明类型为“双精度浮点型”
            //常量在声明时赋值,并且之后不能修改
            const double PI = 3.1415926; //自定义常量PI,表示圆周率
            Console.Write("半径为4的圆的周长为:");//字符串常量
            Console.WriteLine(2*PI*4);//应用自定义常量PI
            Console.Write("半径为4的圆的面积为:");
            Console.WriteLine(PI*4*4);
            const string CITY = "杭州";
            Console.WriteLine(CITY + "是一个常量,城市名");

            //声明变量的语法:数据类型 变量名;
            int nianling=18;//声明变量,类型为int,变量名为age,并赋值
            string hobby = "剑道";
            Console.WriteLine("我的年龄是{0}岁" + " 我的爱好是{1}", nianling, hobby);

            //算法:交换
            string a = "milk";
            string b = "coffee";
            string temp;//声明一个中间变量,相当于空杯
            Console.WriteLine("开始的a=" + a + " b=" + b);
            temp = a; //将牛奶先倒入空杯
            a = b;    //将咖啡倒入牛奶杯
            b = temp; //将之前空杯中的牛奶再倒入咖啡杯中
            //完成了a和b的交换
            Console.WriteLine("此时的a="+ a +" b="+ b);

            //数据类型
            //字符类型char,存储用' '单引号。
            char sex = '男';
            //字符串类型string,存储用" "双引号。
            string name = "张三";
            //整数类型int,存储整数。
            int age = 23;
            //双精度浮点型double,存储小数。
            double salary = 27991.63;
            //浮点型float,值后面加f;
            float height = 1.75f;
            //字符串中用{0}~{4}表示将会输出5个变量的值,而五个变量依次写在字符串后面。
            Console.WriteLine("我叫{0},是{1}生,今年{2}岁,身高{3}米,薪水{4}元。", name, sex, age, height, salary);

            /* 类型转换
             * 自动类型转换:2中不同类型的数据运算,低精度类型会自动转换为较高精度的类型。
             * 例如:3.5+8会转换为3.5+8.0
             * 例如:double d=2; 2会自动转换为2.0
             * 但是,int i=3.0;会出错,double型精度高,无法自动转换为int类型
             * 强制类型转换:无法自动转换为需要的类型,可以强制类型转换
             * 例如:int i=(int)3.6;这样3.6会被强制转换为3
             */

            /* C#标识符的命名规则
             * 程序中的变量名、常量名、类名、方法名,都叫做标识符。
             * C#有一套标识符的命名规则:
             * 标识符只能由英文字母、数字和下划线组成,不能包含空格和其他字符。
             * 变量名不能用数字开头。
             * 变量名不能用关键字。
             */

            /* 算术运算符
             * 加号有2个用途:
             * 当用加号连接两个数字时,会计算出这两个数字的和。
             * 当加号两边包含字符串的时候,会把两边的表达式连接成新的字符串。
             */
            Console.WriteLine("(int)3.6+字符串2.2={0}", (int)3.6 + "2.2");//输出为32.2

            //除号的作用是求2数相除的商。
            Console.WriteLine("2除以0.5等于{0}", 2 / 0.5);//输出4.0
            //2个整数相除,结果仅保留整数部分,小数部分会被舍去。
            Console.WriteLine("5除以10等于{0}", 5 / 10);//输出0
            //取余运算符%的作用是求两个数字相除的余数
            Console.WriteLine("19除以5的商等于", 19 / 5);//输出3
            Console.WriteLine("19除以5的余数", 19 % 5);//输出4(商3余4)
            //编程中,%常常用来检查一个数字是否能被另一个数字整除。
            int number = 29;
            Console.WriteLine("求某数字除以2的余数为{0},输出1表示该数为奇数", number % 2);
            //如果输出0,表示没有余数,即number能够被2整除(是偶数);
            //如果输出1,表示有余数,即number不能被2整除(是奇数)。

            //++,叫做自加运算符。
            age++;//与age=age+1;作用相同,都是变量的值+1。也可以写作++age
            Console.WriteLine("今年23岁,明年为{0}岁", age);
            //--,叫做自减运算符。
            age=23;
            Console.WriteLine("今年23岁,去年为{0}岁", --age);

            ++age;
            Console.WriteLine(age);
            //如果与其他运算在同一语句中,++写在变量前面或后面,算法不一样,请看下例:
            Console.WriteLine(age++);//输出值为age,并没有自加
            /* 作用等同于下面两句:
            Console.WriteLine(age);//先打印输出
            age = age + 1;//后自加,只是赋值,不输出
            */
            Console.WriteLine(++age);
            /*作用等同于下面两句:
            age = age + 1;//先自加
            Console.WriteLine(age);//后打印输出
            */

            /* 比较运算符
             * 比较运算的结果,为布尔类型(bool),表示逻辑上的成立(true)与不成立(falase)。
             * 全等于==; 不等于!=; 大于>; 小于<; 大于等于>=; 小于等于<=;
            
             * 逻辑运算符
             * 逻辑运算符用来连接多个 bool 类型表达式,实现多个条件的复合判断。
             * 逻辑运算符包括:非( ! )、与( && )、或( || )。
             * 逻辑非:用来对某一个 bool 类型表达式取反
             * 逻辑与:用来判断 2 个 bool 类型表达式是否同时为true。
             * 逻辑或:用来判断2个 bool 类型表达式中是否有一个为 true 
             * && 运算符,两边同真才算真,一边为假就算假; 
             * || 运算符,一边为真即为真,两边同假才是假。
             */
            Console.WriteLine(true || false);//输出True
            Console.WriteLine(true && false);//输出False
            Console.WriteLine(!false);//输出True

            /* 赋值运算符
            加赋值“+=”:先加后赋值;x+=2等同于x=x+2
            减赋值“-=”:先减后赋值;x-=2等同于x=x-2
            乘赋值“*=”:先乘后赋值;x*=2等同于x=x*2
            除赋值“/=”:先除后赋值;x/=2等同于x=x/2
            取余赋值“%=”:先取余后赋值;x%=2等同于x=x%2
            赋值运算符从右向左计算

             * 运算符优先级
             * ①括号。如果有多层括号,要从里向外计算。括号优先级最高。
             * ②一元运算符。只有一个操作数的叫做一元运算符,它们的优先级高于二元运算符。一
             * 元运算符包括:++(自加) 、 --(自减) 、 !(逻辑非)。
             * ③*(乘)、/(除)、%(取余)。
             * ④+(加)、-(减)。
             * ⑤>(大于)、<(小于)、>=(大于等于)、<=(小于等于)。
             * ⑥==(等于)、!=(不等于)。
             * ⑦&&(逻辑与)。
             * ⑧||(逻辑或)。
             * ⑨赋值运算符。包括:=、+=、-=、*=、/=、%=。
             * 优先级相同的运算符从左向右计算(赋值运算符相反)。
             */

            //if...else 结构包含一个条件和两个分支:
            //条件是 bool 类型表达式,写在 if 后面的圆括号里;
            //分支写在 2 个 {} 里。
            int num = 20;//待判断的数字
            if (num % 2 == 0)//条件,bool类型
            {//分支一
                Console.WriteLine(num + "是偶数");
            }
            else
            {//分支二
                Console.WriteLine(num + "是奇数");
            }
            
            ///////////////////////////////////////////////////////
            //多重 if 结构包含多个条件,每个条件对应一个分支。
            double money = 60000.00;
            if (money >= 10000.00)
            //大括号是为了表明if里面有哪些语句
            {
                if (money < 50000.00)
                    //若某分支只包含一条命令,那么可以省略大括号{}。
                    //若分支中包含2条以上的命令,是不能省略{}的。
                    Console.WriteLine("送一袋大米");

                else if (money < 100000.00)
                    Console.WriteLine("送一套茶具");

                else if (money >= 100000.00)
                    Console.WriteLine("送一台微波炉");
            }
            else
                Console.WriteLine("没有礼品");

            /* 条件运算符
             * 条件表达式 ? 分支1 : 分支2
             * ?就是条件运算符,有3个操作数,称为三元运算符。
             * 运算逻辑是:当条件表达式为 true 时,执行分支1;为 false 时,执行分支2。
             */
            int year = 2018;
            string text = year % 4 == 0 ? "闰年" : "平年";
            Console.WriteLine("今年是{0}", text);

            /* switch条件结构
             * 用来对变量进行多个分支的等值判断。
             * (变量)与每一个 case 后面的常量进行等值比较,如果相等,就执行对应的分支。
             * 执行分支以后, break 关键字会使 switch 结构中止,不会再判断后面的常量。
             * 如果变量与所有的常量都不相同,则执行 default 后面的分支。
             * switch 中的(变量)只能是3种类型:
             * 整型(如 int )、字符型( char )、字符串类型( string )。
             */
            string job = "处长";
            switch (job)
            {
                //break 在switch结构的作用是“跳出 switch 结构”。
                case "局长": Console.WriteLine("发双黄月饼"); break;
                case "处长": Console.WriteLine("发蛋黄月饼"); break;
                case "科长": Console.WriteLine("发枣泥月饼"); break;
                default:
                    Console.WriteLine("发五仁月饼"); break;
            }

            /* while循环
             * 1.通常有一个计数变量,循环开始前声明并初始化这个变量;
             * 2.需要有循环条件,当条件为true时,执行一次循环体,为false时,结束循环。
             * 3.循环体里面需要有计数变量的自加语句,否则循环可能无法退出(即“死循环”)。
             */
            int y = 1;//循环计数变量,并初始化变量值
            while (true)//循环条件,永远为true
            {//循环体
                Console.Write(y + " ");
                y++;//计数变量的自加语句
                if (y > 7) //结束循环的条件
                    break; //结束循环
            }

            int x = 1;
            int sum = 0;//求和,初始化为0
            while (x <= 100)
            {
                if(x%2 != 0)//条件为不能被2整除的数字
                sum += x;//将一个数字累加到sum
                x++;//变量自加
            }
            Console.WriteLine();//用来换行
            Console.WriteLine("1-100的奇数和:{0}",sum);
            //do...while范例:
            do
            {
                x++;//变成了102
                Console.WriteLine(x + " ");
            }
            while (x > 102 && x <= 104);

            /* for循环
             * 适合于“已知循环次数”的循环
             * for(①变量声明和赋值;②循环条件;④变量自加)
             * {③循环体}
             * for 循环 ( ; ; ) 两个分号是不能缺少的。

             * while循环:     先判断条件,后执行循环体。
             * 适用:每次均需先验证条件,比如读取每行数据前检查是否有数据。
             * do...while循环:先执行一次循环体,再判断条件。
             * 适用:第一次执行无需验证,比如输入密码,若错误则重新输入。
             * for循环:       与循环次数有关的元素都放在(;;)里面。
             * 适用:已知循环次数的。比如连续播放三次铃声。
               
             * 循环结构之continue
             * 当程序执行到continue;的时候,会立即停止本次循环体,直接进入下一次循环。
             * 使用 continue 关键字,在循环中剔除一些特殊的数据。
             */
            for (int z = 1; z <= 10; z++)
            {
                if (z == 3 || z == 8) //剔除3和8
                    continue;
                Console.Write(z + "_");
            }
            Console.WriteLine("换行");
            //循环结构之嵌套循环
            //决定每一行的循环次数,是内层的变量
            //嵌套循环至少包含2层循环,
            //外层循环体执行一次,内层循环体执行n次(n是内层循环的次数)
            //内层体被执行的总次数 = 内层循环次数 * 外层循环次数。
            for (int m = 1; m <= 7; m++)
            {
                for (int n = 1; n <= m; n++)
                {
                    Console.Write(n+"内层");
                }
                Console.WriteLine(" ——外层");//换行
            }
            //从左上到右下的对角线的特点是:行数==列数
            //从右上到左下的对角线的特点是:行数 + 列数 == 8
            for (int i = 1; i <= 7; i++)//循环7行
            {
                for (int j = 1; j <= 7; j++)//循环7列
                {
                    if (i == j || i + j == 8)//对角线打印O
                    {
                        Console.Write("O");
                    }
                    else
                    {
                        Console.Write(".");//其他位置打印
                    }
                }
                Console.WriteLine();//换行
            }
            //声明数组和赋值
            //数据类型[] 数组名 = new 数据类型[长度]; 
            //数据类型[] 数组名 = new 数据类型[]{初始值1,初始值2,...初始值3};
            //数组元素用索引来区分,索引从 0 开始递增。
            //数组.Length 属性会返回数组的长度(即数组元素的个数)
            //数组经过初始化以后,数组元素有默认的初始值:
            //double 类型为 0.0 , int 类型为 0 , char 类型为 'a' , bool 类型为 false , string 类型为 null 。
            string[] friends = new string[2];
            friends[0] = "钢铁侠";
            friends[1] = "叮当猫";
            Console.WriteLine("我有{0}个好朋友!",friends.Length); 

            /* C#中数组元素有多种初始化方式:
             * char[]a = new char[3];
             * char[]b = new char[]{"A","B","C"};
             * char[]c = {"A","B","C"};
             * char[]d = new char[3]{"A","B","C"};
             */
            string[] jobs = new string[] { "经理", "项目主管", "技术总监", "财务主管" };
            for (int i = 0; i < jobs.Length; i++)
            {
                Console.WriteLine(jobs[i]);
            }

            /* 算法——查找(一)
            * 循环访问一组数据,从中找出符合条件的数据,这样的算法叫做查找。
            * 写查找的算法,一是写循环访问每一个数据,二是对每一个数据进行验证。
            * 即写 2 个“条件”:循环条件和筛选条件。
            * 步骤:
            * 1、循环条件:使用循环访问数组中的每一个元素(必须能遍历每一个)
            * 2、筛选条件:在循环体中设置筛选条件,打印符合条件的元素
            */
            int[] nums = new int[] { 3, 34, 42, 2, 11, 19, 30, 55, 20 };
            for (int i = 0; i < nums.Length; i++)//循环访问所有数字
            {
                if (nums[i] % 2 == 0)//筛选出偶数
                    Console.Write(nums[i] + ",");
            }

            /* 算法——查找(二)
             * 查找有没有符合条件的数据
             * 一组数据中只要有一个符合条件,就可以认为“有符合条件的数据”;
             * 但只有一组数据中每一个都不符合条件,才能认为“没有符合条件的数据”
             * 一个相等即为"有",全都不等才是"无"。
             */
            int[] score = { 85, 76, 98, 100, 62, 60 };
            bool hasNopass = false;//记录是否有不及格的,默认没有
            for (int i = 0; i < score.Length; i++)
            {
                if (score[i] < 60)//找到符合条件的元素:有不及格的
                {
                    hasNopass = true;//记录为有
                    break;
                }
            }
            if (hasNopass)//如果为true,说明找到过;如果为false,说明没有找到
                Console.WriteLine("有人不及格");
            else
                Console.WriteLine("都及格啦!");

            /*foreach关键字
             * for 循环使我们可以通过索引访问数组元素;
             * foreach 循环则可以不依赖索引而读取每一个数组元素。
             * 语法:
             * foreach(数据类型 迭代变量名 in 数组名)
             * {
             * 使用迭代变量 //只能读不能赋值
             * }
             */
            //查找其中有没有7的整倍数
            int[] numbers = new int[] { 3, 34, 43, 2, 11, 19, 30, 55, 20 };
            bool has7 = false; ////记录有没有7的整倍数,假设没有
            foreach (int k in numbers) //遍历每一个数字
            {
                if (k % 7 == 0) //设置筛选条件,查找7的整倍数
                {
                    has7 = true; //找到后,记录为true
                    break;//跳出foreach,结束查找
                }
            }
            if (has7)//判断结果并输出
                Console.WriteLine("有7的整倍数");
            else
                Console.WriteLine("没有7的整倍数");

            /* 二维数组的声明和访问
             * 包含2个一维数组,每个一维数组包含3个变量,总共2*3=6个数组元素
             * 二维数组元素有2个索引,都是从0开始,以arr数组为例,元素索引从[0,0]到[1,2]
             */
            //[4,2]表示包含4个一维数组,每个一维数组包含2个变量
            int[,] arr = new int[4, 2] { { 89,86}, { 67,45}, { 64,92}, { 82,100} };
            Console.WriteLine("同学们的分数是:");
            //GetLongLength(0)返回数组中一维数组的个数
            for (int i = 0; i < arr.GetLongLength(0); i++) 
            {
                Console.WriteLine("语文:{0},数学{1}",arr[i,0],arr[i,1]);
            }

            string name;
            Console.Write("请输入您的名字:");
            name = Console.ReadLine();
            Console.WriteLine("你好,{0}!",name);

            //算法-求最大值
            int[] num = new int[] {89, 90, 98, 56, 60, 91, 93, 85};
            string[] name = new string[]{"张三","李四","伏晨","陈璐","周蕊","林日彭","何坤","关欣"};
            int max;//最大值
            max = num[0];//初始化为第一个元素
            int index = 0;
            for (int i = 1; i < num.Length; i++)
            {
                if (num[i] > max)//若发现比max更大的值则赋值给max
			{
				max = num[i];
				index = i;
			}
            }
		Console.WriteLine("分数最高的是{0},分数是{1}",name[index],max);

            //求平均分,查找高于平均分的同学
            int[] num = new int[] {90, 65, 88, 70, 46, 81, 100, 68};
            string[] name = new string[]{"景珍","钱东宇","成蓉","陈璐","龙玉民","单江开","田武山","王三明"};
			int sum ;
			sum = 0;
			int avg ;
			avg = 0;
			
            for (int i = 0; i < num.Length; i++)
            {
				sum += num[i];
				avg = sum/num.Length;
            }
			Console.WriteLine("平均分是{0},高于平均分的有:",avg);
			for (int i = 0; i < num.Length; i++) 
			{
				if (num[i]>avg)
				Console.Write(name[i]+" ");
			}


            Console.ReadKey();
            }
            }
            }

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值