unity学习日记——C#入门20201128至20201205

一、创建项目

点击“文件”——“新建”——“项目”,选择其他项目类型中的“Visual Studio 解决方案”,点击空白解决方案,编辑名称或使用默认名称,选择位置,再点击确定,即可创建新项目。
在这里插入图片描述

屏幕右方有一个“解决方案资源管理器”
在解决方案上右键,添加,新建项目,选择控制台程序,起名字,确定。
在这里插入图片描述

为了写代码方便,可以改变一下字体。在工具——选项——字体和颜色里改变字体和大小,在工具——选项——文本编辑器——所有语言里勾选行号。一般字体选择Arial Black,大小12。
在这里插入图片描述

二、代码

C#代码的本质是文本,所以不仅可以用vs2013打开,还可以用最简单的Windows记事本打开。
在这里插入图片描述
在这里插入图片描述
基本代码:Console 控制台
WriteLine()将括号内的内容显示到控制台上
ReadLine()读取用户在控制台输入的内容,读取到程序中。这时会暂停程序,直至输入回车键。
在这里插入图片描述

小结:Console是类【工具库】,WriteLine/ReadLine是方法【功能】,Title是属性【修饰】
using是引入命名空间,namespace是定义命名空间【类的住址】对类进行逻辑上的划分,防止重名,class是定义类【做工具】,static是定义方法【做功能】

  • 调用语句:类.方法();
  • 对齐语句快捷键:Ctrl + K + F
  • 注释选中代码快捷键:Ctrl + K + C
  • 取消注释:Ctrl + K + U
    在这里插入图片描述

三、变量

在这里插入图片描述

1.定义

程序都是在内存中运行的。
程序是用来处理数据的。
变量就是在内存中开辟一块用于存储数据的空间。

2.内置数据类型

容量的单位

在这里插入图片描述

整型

  • 使用整型数据时一般使用int(4个字节组成,数据范围 -231~231

非整型

在这里插入图片描述

  • 小数类型较多,一般根据实际情况确定数据类型。

非数值型

在这里插入图片描述

  • char只能存储单个字符,使用单引号。string可以存储单个或多个字符(字符串),使用双引号。
  • bool定义的变量只会返回True或False。
    在这里插入图片描述
    在这里插入图片描述

3.变量的声明

在这里插入图片描述

建议命名规则:

  • 以小写字母开头
  • 如果包含多个单词,除第一个单词外其他单词首字母大写
  • 增加类型前缀便于理解
  • 多用英文单词,不会就查

4.变量的赋值

在这里插入图片描述
在编写代码时经常出现隐藏的错误,这时就需要我们具备排除错误的能力,学会调试。

  • 在可能出错的行添加断点
  • 按F5 启动调试
  • 按F11 逐语句执行
  • 按Shift + F5 停止调试

小练习:枪支信息

在这里插入图片描述

占位符

在Write Line语句中,常常需要不断进行字符和变量的转换,比如弹夹子弹数目:XX,考试成绩:XX等,这时若只用Write Line就显得很长且不美观,所以有了占位符的概念。
在这里插入图片描述
这里有一个叫str的字符串,它采用字符格式Format,编写了一段代码,融合了文字字符串和变量,这里就用到了占位符{ },这里将文字字符串写在前,并在需要插入变量的位置输入占位符{数字},然后在后面依次输入变量名称,实现了字符串和变量融合输出的目的。需要注意,占位符里的数字要从0开始每次增1,否则会出现格式异常(format exception)

标准数字格式字符串

在这里插入图片描述

在Console(控制台)Write Line(输出)使用占位符时,可以运用标准数字字符串格式化来快速改变数字字符格式,如货币、时分、精度、百分数等。

转义符
在这里插入图片描述
在输出时,当我们需要输出的符号有其在C#中的特殊应用,如双引号""、单引号’、或者输出空字符,需要在他们前面加上转义符 \

其他字符
此外,在输出时常用的字符还有\r\n回车换行、\t水平制表符

  • 了解内容
    在这里插入图片描述

四、数据的基本运算

在这里插入图片描述

1.运算符

赋值运算符 =

  • 将右边的值复制给左边
  • 赋值表达式自身也有值,其本身值为所赋值,如num 1 = num 2 = 1;

除法运算符 /

  • 计算两数的商(注意数的类型,若为整型会截断小数位)

取模运算符 %

  • 取余数
  • 判断一个数字能否被另一个数字整除 bool r1 = n1 % 2 == 0;
  • 获取整数的个位 int r2 = n1 % 10;

比较运算符 > < >= <= == !=

  • 进行数值的比较
  • ==和!=还可应用于bool中判断文本是否相同

逻辑运算符 && || !

  • 与&& 表示并且的关系,有一假俱假的性质
  • 或|| 表示或者的关系,有一真俱真的性质
  • 非 !表示取反 true和false相互转换
  • 常用于bool运算

快捷运算符 += *= /= %=

  • += 先加再赋值给自身
  • *= 先乘再赋值给自身
  • /= 先除再赋值给自身
  • %=先取模再赋值给自身

(以上运算符均为二元运算符)

一元运算符 ++ - -

  • ++自增1,- -自减1
  • 无论放在变量前还是变量后,对于下一条指令,都是自增(自减)后的
  • 先加先自增,后返回值;后加后自增,先返回值(针对输出语句)

三元运算符 条件表达式?表达式1:表达式2

  • 先判断条件表达式是否正确,正确将表达式1赋给变量,否则将表达式2赋给变量
    在这里插入图片描述

优先级

  • 先乘除 后加减 小括号优先级最高

2.数据类型转换

Parse转换:将string转换为其他数据类型

  • 待转换数据必须与转换后的数据“相像”

ToString转换:将任意类型转换为string类型

在这里插入图片描述

隐式转换

  • byte可直接转换为int
  • 隐式转换是由大范围到小范围的转换,不会出错,所以可以自动转换
    在这里插入图片描述

显式转换

  • 由大范围到小范围的强制转换
  • 数据转换时若超过内存范围,会发生精度的丢失,如int 300转换成byte时成了44
  • 不知道该如何转换时要看看划红线的提示
    在这里插入图片描述

(由多种变量参与运算,结果自动向较大类型提升)

五、语句

1.选择语句

if(条件) else + 结果
(C#和C语言的选择语句基本相同,不再详细记录)
switch(变量名) case + 确定值 break
(常用于变量值确定的多分支结构)
在这里插入图片描述
在这里插入图片描述

2.循环语句

for(初始化;循环条件;增减变量)
(与C语言基本相同)
while (条件)
(与C语言基本相同)
do while(条件);
(与C语言基本相同)

猜数字游戏

Random random = new Random();

            int number = random.Next(1, 101);
            int inputnumber;
            int count=0;
            Console.WriteLine("欢迎玩猜数字游戏,系统已产生一个1到100之间的随机数,请您猜猜它是:");
            do
            {
                count++;
                inputnumber = int.Parse(Console.ReadLine());

                if (inputnumber > number)
                Console.WriteLine("大了!");
                else if (inputnumber < number)
                 Console.WriteLine("小了!");
                else if (inputnumber == number)
                 Console.WriteLine("恭喜你!猜对了!总共猜了{0}次",count);
                    
                

            } while (inputnumber!=number);

3.跳转语句

在这里插入图片描述

  • continue 用在循环体内部,结束本次循环,继续下次循环

  • 在这里插入图片描述

  • break 退出最近的循环体或switch语句
    在这里插入图片描述

六、方法

在这里插入图片描述

1.定义

在这里插入图片描述

语法

在这里插入图片描述

方法是类里面的一个概念,是对一系列语句的命名,表示一个功能或行为。visual studio控制台会自动调用Main()方法,除此之外的任何方法想要被使用都需要主动调用,即在Main()中调用方法名。

2.返回值类型

方法表示功能,那么返回值就是功能的结果

  • 返回的数据必须与返回值类型兼容(可以隐式转换)
  • return + 返回值 ,可以用其他语句接收这个返回值
  • return; 没有返回值的方法,也可以写return关键字,直接跟分号,表示退出方法。
    在这里插入图片描述

3.参数列表

方法中的参数列表表示从主方法读取的数据,也叫形参列表,主方法中的数据叫实参。

  • 定义方法时叫形式参数,简称形参;
  • 调用方法时叫实际参数,简称实参;
  • 实参和形参要一一对应(类型、数量、顺序)

笔记1

使用C#时,我们经常需要调用系统自带的方法甚至是别人编写的方法,这时候就需要我们快速理解方法是怎么使用的
在这里插入图片描述
在这里插入图片描述
Insert:在字符串的指定位置插入字符。
Index:查找指定字符在字符串中的索引,并返回位置。
Remove:删除指定位置之后的所有字符,并返回新字符串。
Replace:替换指定字符为另一个字符
StratsWith:确定此字符串的开头是否和指定的字符串匹配

///(文档注释):为方法提供注释

4.如何定义方法

方法的定义要根据其访问类型、功能、返回值等综合考虑,最重要的是先明确其功能。

练习:在console控制台显示年历

在这里插入图片描述

在console控制台显示年历——C#练习代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            //显示年历
            Console.WriteLine("请输入年份");
            int year = int.Parse(Console.ReadLine());
            int month = 1;
            for (int i = 0; i < 12; i++)
            {
                monthlyCalendar(year, month);
                month++;
                Console.WriteLine("\n");
            }
            Console.ReadLine();
        }
        //显示月历
        static void monthlyCalendar(int year, int month)
        {
            //显示表头
            Console.WriteLine(month + "月");
            Console.WriteLine("日\t一\t二\t三\t四\t五\t六");
            for (int i = 0; i < GetWeekByDay(year, month, 1); i++)
            {
                Console.Write("\t");
            }
            int days = CountDayOfMonth(year, month);
            for (int i = 1; i < days + 1; i++)
            {
                Console.Write(i);
                Console.Write("\t");
                int j = GetWeekByDay(year, month, i);
                while (j == 6)
                {
                    Console.Write("\n");
                    break;
                }
            }
        }

        /// <summary>
        /// 根据年月日,计算星期数的方法。
        /// </summary>
        /// <param name="year">年份</param>
        /// <param name="month">月份</param>
        /// <param name="day">天</param>
        /// <returns>星期数</returns>
        private static int GetWeekByDay(int year, int month, int day)
        {
            DateTime dt = new DateTime(year, month, day);
            return (int)dt.DayOfWeek;
        }
        /// <summary>
        /// 计算每月的天数
        /// </summary>
        /// <param name="year">形参年份</param>
        /// <param name="month">形参月份</param>
        /// <returns>月份的天数</returns>
        private static int CountDayOfMonth(int year, int month)
        {
            switch (month)
            {
                case 2:
                    return FebruaryDays(year);
                case 4:
                    return 30;
                case 6:
                    return 30;
                case 9:
                    return 30;
                case 11:
                    return 30;
                default:
                    return 31;
            }
        }
        //计算闰年二月天数
        public static int FebruaryDays(int year)
        {
            if (year % 4 == 0 && year % 100 != 0)
                return 29;
            else if (year % 400 == 0)
                return 29;
            else return 28;
        }
    }
}

参考意见:
1.判断闰年可以用bool和三元运算符,bool方法来判断是否为闰年,再用三元运算符输出天数。
2.使用多层判断嵌套时要注意减少程序复杂度,提高可读性,可以减少嵌套就尽量减少。
在这里插入图片描述
利用return 0 短路先排除输入错误的情况,若没错就往下运行。这样减少了嵌套。
3.善用英文起方法名,要易懂,让其他人也能一看就懂。
4.switch case语句若返回值相同,可以省略之前的return,只留最后一个return。

在这里插入图片描述

5.方法重载

在这里插入图片描述
如何查看方法重载信息
方法:
1、光标在括号中间,Ctrl+Shift+空格键

2、写有重载的方法名后,按shift+(

七、递归与数组

1.递归

递归的定义:方法内部又调用自身的过程。

核心思想:将问题转移给范围小的子问题。

例1 计算阶乘

在这里插入图片描述
递归性能不如循环语句,因为每次需要在内存开辟一块空间,但递归能把复杂的问题简单化,所以递归适合复杂且重复的问题

例2 计算1-2+3-4+5······

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(GetFactorical(3));
            Console.WriteLine(GetIsometric(8));
        }
        //计算阶乘
        private static int GetFactorical(int num)
        {
            if (num == 1) return 1;
            return num * GetFactorical(num - 1);
        }
        //计算1-2+3-4+5······
        private static int GetIsometric(int num)
        {
            if (num == 1) return 1;
            if (num % 2 == 0)
                return GetIsometric(num - 1) - num;
            else
                return GetIsometric(num - 1) + num;
        }
    }
}

2.数组

在这里插入图片描述

什么是数组

  • 从Array类派生的,一组数据类型相同的变量组合
  • 一种空间连续的数据结构
  • 元素通过索引(位置的序号)进行操作。
  • 起始位置默认为0

数组初始化

1.声明一块内存 //int [] a;
2.初始化 new 数据类型 [容量]; //a = new int [6];
3.通过索引读写每个元素 // a[0] = 1;

  • 数组名.length :提取数组长度

练习:在控制台录入学生成绩float[]

要求:如果成绩不在0–100之间,则提示成绩有误

 static void Main()
        {
            float[] scoreArray = CreatScoreArray();
        }
        static float[] CreatScoreArray()
        {
            Console.WriteLine("请输入学生总数:");
                int count = int.Parse(Console.ReadLine());
            float[] scoreArray = new float[count];
            for (int i =0;i<count;)
            {
                Console.WriteLine("请输入第{0}个学生的成绩:",i+1);
                float score = float.Parse(Console.ReadLine());
                if (score >= 0 && score <= 100)
                    scoreArray[i++] = score;
                else
                    Console.WriteLine("成绩有误");
            }
            return scoreArray;
        }

获取最大值方法

      private static float GetMax(float[] array)
        {
            float max = array[0];
            for (int i = 0; i < array.Length; i++)
            {
                if (max < array[i])
                    max = array[i];
            }
            return max;
        }

数组的其他写法

1.初始化 + 赋值

  • 括号里的数字要么不写,要么写的数字必须和赋值的数量相等

2.声明 +初始化 + 赋值(最简便的写法)

在这里插入图片描述

练习:根据年月日确定当天是本年的第几天

//根据年月日确定当天是本年的第几天
        static void Main()
        {
            Console.WriteLine("请输入年月日,以回车隔开:");
            int year = int.Parse(Console.ReadLine());
            int month = int.Parse(Console.ReadLine());
            int day = int.Parse(Console.ReadLine());
            Console.WriteLine("当天是本年的第{0}天", totaldays(year, month, day));
        }
        //计算当天是本年的第几天
        static int totaldays(int year, int month, int day)
        {
            int[] leapyearday = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
            if (IsLeapYear(year)) leapyearday[1] = 29;
            int days = 0;
            for (int i = 0; i < month - 1; i++)
            {
                days += leapyearday[i];
            }
            days += day;
            return days;
        }
        //判断是否为闰年
        private static bool IsLeapYear(int year)
        {
            if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
                return true;
            else
                return false;
        }

笔记2

依次读取数组数据不仅可以用循环,也可以用foreach
foreach:从头到尾依次读取数组元素
在这里插入图片描述
在这里插入图片描述

  • var:推断类型:根据所赋数据,推断出类型
  • 适用性 :数据类型名称较长
  • collection:要循环访问的集合或数组名称

笔记3

在这里插入图片描述
在这里插入图片描述

数组常用方法及属性

在这里插入图片描述

  • 数组名.length:取数组元素总数
  • Array.Clear:将指定数组从索引位置往后自定义个长度设置为零、false或null,具体取决于元素类型。
    在这里插入图片描述
  • Array.copy:从第一个元素开始,复制指定数组的一系列元素,将他们粘贴到另一个数组中。
  • 数组名.克隆:创建一个浅表副本,类型为object,一般需要将object转换为其他类型使用。
  • Array.IndexOf:搜索指定的对象,并返回数组中第一个匹配项的索引
  • Array.LastIndexOf:搜索指定的对象,并返回数组中最后一个匹配项的索引
  • Array.Sort:对数组元素进行排序
  • Array.Reverse:反转整个数组中元素的顺序
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值