[黑马程序员]c#基础学习笔记

.net指.net Framework框架,一种技术,一种平台
c#语言
.net可以开发桌面应用程序(Winform),Internet应用程序(asp.net、WebServer),手机开发wp7
.cs表示是类文件
Console.ReadKey();程序停在这里等待用户从键盘按下一个键。


四、变量
int number; (正负20亿左右)  
number=1000;
数据类型:数值(整型,非整数(double,decimal(财务金钱方面))),
          非数值(char,string)
string 就是把0个或1个或多个字符连接起来。string name="";(正确的)
                                         char sex='';(错误)char sex=' '(正确)
decimal money=10000.25M(10000.25m);精确到28位到29位,财务和货币计算
double精确15到16位(科学计数法)
在c#开发环境中直接写有小数点的数字是double类型的,在一个小数后加一个M/m就是告诉编译器是decimal类型的


变量的声明方法
1)int i;      2)int i=10;      3)int i,j;
  i=10;                          int zsAge=18,wwAge=20;
把警告当成错误!!!!!!!!!!
变量一定是,先声明,后赋值,最后使用。
vs编码格式UTF-8支持多国语言
命名规则
(骆驼命名法Camel)studentName,name。(Pascal命名法)SoftwareName
变量是可以重复赋值的,那么变量中的老值句不复存在了。
Console.Write()只输出第一个参数Console.Write("我叫"+name,"今年"+age+"岁");结果:我叫张三
不管程序是多么的小最好不要定义ab要定义一个有意义的变量。


五、输入
Console.ReadLine();用于让用户从键盘上输入一句话,当程序执行到这句话时,就会暂停,按回车将继续执行。如果想得到
用户输入输入的内容就需要定义一个string类型的变量,接受用户输入的内容string userName=Console.ReadLine();
凡是用户输入的全是string类型


六、字符串的转义
当我们需要在字符串中输入特殊字符时,半角引号,换行,退格,就需要使用转义字符,转义字符是一个字符,由一个\+一个字母组成具有特殊意义的饿一个字符。char ch='\"';
1)("c#中的字符要用\"\"引起来);
2)\n 换行
3)\b Backspace键
4)\t tab键,由多个空格组成的字符,有行与行之间的对齐功能。
5)\\ 表示一个\
6)@字符串里面的\不在转义;字符串换行;如果字符串前加@,有两个双引号代表一个双引号


七、数据类型的自动转换(隐式转换)
(1)int*double=double(将int转化为double类型)
(2)int a=10,b=3;double c=a\b;结果为3           double c=1.2+a\b结果是4.5
(3)当2种类型不一致时,满足以下会自动完成类型转化
   1)参与运算的两个数据类型必须兼容
   2)必须一边的数据类型表示的范围小,一边大,则把小的转向大的不丢失精度。
【注:隐式转化不可以丢失精度】


八、强制类型转换
相容类型可以强制转化
【注:丢失精度时需要程序员来写代码完成转化】
Math.Round()四舍五入
int a=(int)"33";错误!!!!!类型不一致
string age=(int)Console.ReadLine();错误!!!!!类型不一致
int age=Convert.ToInt32(Console.ReadLine());正确


九、try...catch异常捕获机制
try
{
 有可能出错的Code
}
catch
{
 错误处理Code
}


十、自加自减复合运算符-关系运算符
int age=18;
    age++;效率高于(age=age+1);
    age--;
一元运算符的优先级高于二元运算符
<,>,==,!=,>=,<=


十一、逻辑运算符(二元运算符)
&&  ||  !
与  或  非
表达式1&&表达式2(表达式1,2全部是bool类型的)结果也是bool类型
true&&true才为true
!取反
&&的优先级高于||
与或的短路问题
int a=10;
int b=5;
bool result=++a>50&&++b>1;
a=11,b=5;当++a为false时后面的就不再进行计算
bool result=++a>5&&++b>1;
当a=11,b=5;当++5为true时,后面就不再进行计算


十二、if..else...和switch....case和循环结构和三元表达式
break;是必须要写的
default的位置不影响执行结果.
if(flag=false)
{
 Console.WriteLine("工资:"+salary);
}
当flag被赋值后整个表达式的值为false,所以不会输出.
switch(month)                                 switch(month)
{                                             {
case 1:                                       case 1:Console.WriteLine("1月");
case 3:                                       case 3:
case 5:                                       case 5:
Console.WriteLine("31天");break;              Console.WriteLine("31天");break; 
}                                             }
【正确】                                       【错误】
do
{循环体}
while{条件};
1.执行循环体
2.判断条件是否成立,如果是true,转向1,false转向3
3.跳出循环
while循环中flag的巧妙的使用


十三、调试
编译错误
运行时逻辑错误


十四、break和continue和三元运算符
跳出循环(for,while,do..while..,foreach)
通常break和if结合使用
continue;用于循环中,程序一旦执行到continue语句,立即结束本次循环(就是不在执行continue下面的语句了),直接进行下一次循环,(do..while/while直接进行下一次循环条件的判断,如果成立,则再次进入循环)例:运动员跑步喝水的例子.


十五、常量枚举
const double PI=3.14;
确定几个值的取值范围
[public]enum Gender{male=1,female}
例:
enum QQStatus{online,offline,hiddle}
class Program
{
 static void Main()
 {
   QQStatus status=QQStatus.offline;
 }
}
【注:定义枚举类型时不能是int类型】
枚举类型都可以强制转化为int类型,枚举值有默认编号从0开始(除特殊情况)()
字符串转换为枚举类型
string s = Console.ReadLine();
Gender sex=(Gender)(Enum.Parse(typeof(Gender), s));
enum是说一个关键字Enum是一个class


十六、结构体(其实就相当于一种数据类型)
public struct person
    {
       public string name;
       public int age;
       public Gender gender;
       public void SayHi()
       {}
    }
【public勿忘】
 person per;
 per.name = "zdd";
 per.age = 23;
 per.gender = Gender.女;
 per.SayHi();
访问修饰符 struct 结构名
{
定义结构成员
}值类型先进后出栈,一般通过new的要分配空间


十七、数组
这些变量在内存中是连续存储的,通过索引器来访问
循环变量的生命周期
int类型的数组一旦声明就给就被初始化为0,decimal初始值为0,double初始值0.0;string初始值为null,char为0或\0(ASCII值)(也即null)
int[] nums=new int[3];
int[] nums={1,2,3};
int[] nums=new intr[]{1,2,3};


面试:关于枚举类型的,bool,int不是枚举类型;结构体是枚举类型,
初始值:string 为null,数字类型0,其他为null。


十八、冒泡排序
n个数走n-1趟
在n-1趟的比较过程中,第i趟+比较次数=元素个数
  public static int[] Sort(int[] nums)
        { 
          int temp = 0;
            //n-1趟,控制比较的趟数i
          for (int i = 0; i < nums.Length-1; i++)
          {
              //每一趟中比较的次数(所有元上的个数(nums.length)-已经确定的元素个数(i))
              for (int j = 0; j < nums.Length -1- i; j++)
              {
                 
                  if (nums[j] < nums[j+ 1])
                  {
                      temp = nums[j];
                      nums[j] = nums[j + 1];
                      nums[j + 1] = temp;
                  }
              }
             
          }
          return nums;
        }


十九、方法(函数)、参数、返回值
代码重用的一种机制
方法命名:开头大写eg:GetNameByFilter(),ShowUI()
int.Parse()
一个方法只能有一个返回值,多个参数.
一个变量一旦定义在方法外,类的里面买就叫做类的字段,静态方法只能访问静态字段,非静态方法既能访问静态字段,也能访问非静态字段(实例字段).
class Person
{
 //字段
 int age;
}
       
二十、方法的重载
public static int Max(int num1,int num2)
public static int Max(double num1,double num2)
public static int Max(decimal num1,decimal num2)
方法的重载:两个同名的方法,一般在同一个类中,
1)方法名同,
2)参数个数或者类型不同,即可构成方法的重载【联想Console.WriteLine()】
注:方法重载和返回值类型无关
一个方法返回多个值:通过参数可以返回多个值。在参数前面加out即可.
Code:
public static bool TryParse(string str,out int re)
        {
            try
            {
                re = Convert.ToInt32(str);
                return true;
            }
            catch
            {
                re = 0;
                return false;
            }
        }
 int num;
            bool b = TryParse(Console.ReadLine(),out num);
            Console.WriteLine("b="+b);
            Console.WriteLine("num="+num);
            Console.ReadKey();
如果参数是以out形式传入的,那么在传入前可以不赋值
ref引用传递(既可以往里传值也可以往外返回值)
out用于传出值
ref可以理解为双向的,既可以传入也可以传出
在传参的过程中如果参数有out,ref修饰的话,改变方法中参数的值,调用者方法





























原文地址:https://www.cnblogs.com/xinyuyuanm/p/3031624.html