笔记资料:C#开发轻松入门 慕课网 https://www.imooc.com/learn/422
.NET开发简介
Microsoft .NET
.NET 是微软公司推出的软件开发和运行平台,允许应用通过internet进行通讯和共享数据。 .NET平台与编程与无关,可以用任意的你喜欢的语言进行开发,其中C#语言是.NET平台上比较好的语言。
.NET的核心框架是.NET Framework,它赋予了.NET丰富强大的功能。
我的C#开发工具
参考资料
MSDN
Visual Studio编译器 按 快捷键F1 显示
编译器调试"Hello World!"
请查看简述 C# VScode MacOS https://www.jianshu.com/p/6bee73e9756b
App应用
Hello World
整体编码风格与C++一样
using System; //倒入微软提供的命名空间,以便于使用其中的类
namespace MyFirstApp //命名空间
{
class MainClass //class类 MainClass类的名字
{
public static void Main(string[] args) // Main方法,程序运行的起点,入口。
{
Console.WriteLine("Hello World!"); //;分号代表命令的结束。
}
}
}
类是C#程序的最小单元,C#程序是由一个一个的类组成的。
命名空间的作用是用来组织和管理类。
一个命名空间下可能有多个类。
C#基本语法
2.1 注释
与C++类似
using System;
using System.Collections.Generic;
using System.Text;
namespace Test
{
/// 文档注释:写在类、方法或属性的前面,不注释单个变量 (人为规定)
class Program
{
static void Main(string[] args)
{
/*
*多行注释:这是一段提示信息
*/
Console.WriteLine("积跬步,至千里");//单行注释:打印并换行
}
}
}
2.2 变量
const 表示省常量(与C++类似)
const string CITY = "布宜诺斯艾利斯";//常量,城市
const string NAME = "列奥波尔多·福图纳托·加尔铁里·卡斯特利";//常量,姓名
与JAVA类似,用➕拼接字符串
Console.WriteLine(NAME+"出生在"+CITY+"的一个工人家庭");//使用常量
变量声明与赋值
string hobby;//声明变量保存爱好
字符串类型 string ,存储用“”(双引号)括起来的一串字符
hobby = "剑道";//给爱好变量赋值
字符类型 char ,存储用 '' (单引号)括起来的一个字符,
char sex='男';//存储性别
哈哈哈,这个变量输出的格式还是比较独特的,{0},{1}...
string name = "曹少钦";//姓名,string类型
char sex = '男';//性别,char类型
int age = 19;//年龄,int类型
double height = 1.72;//身高,double类型
Console.WriteLine("我叫{0},是{1}生,今年{2}岁,身高{3}米。",name,sex,age,height);
低精度类型会自动转换为较高精度的类型。
较高精度的类型转低精度类型:强制类型转换
int i=(int)3.0;
double 型强制转换为int型将失去小数部分,比如(int)2.8,我们得到的将是2。
变量命名规则:
①标识符只能由英文字母、数字和下划线组成,不能包含空格和其他字符。
②变量名不能用数字开头。
③不能用关键字当变量名。
int _X;这样命名是正确的
Console.WriteLine(age++);作用等同于下面两句:
Console.WriteLine(age);//先打印
age=age+1;//后自加
Console.WriteLine(++age);作用等同于下面两句:
age=age+1;//先自加
Console.WriteLine(age);//后打印
布尔类型( bool ) 真与假用关键字 true 和 false
逻辑非( ! )
逻辑与( && ) 同真则真
逻辑或( || ) 一真则真
一元运算符的优先级高于二元运算符
加减乘除的优先性比 > < 高
x = 1
a = ++x * x
// ++x 后x值为2
a = 4
3 条件结构 (与C++相似)
if (age > 18)//条件,bool类型
{//分支1
Console.WriteLine( "你是成年人");
}
else
{//分支2
Console.WriteLine("你是小盆友");
}
错误:; expected 语句中缺少;分号
嵌套结构
if (job == "局长")
{
Console.WriteLine("发双黄月饼");
}
else if (job == "处长")
{
Console.WriteLine("发蛋黄月饼");
}
else if (job == "科长")//请输入
{
Console.WriteLine("发枣泥月饼");
}
else//请输入
{
Console.WriteLine("发五仁月饼");
}
if与else配对
①每一个 else 与前面离它最近的 if 配对。
②多个 else 都与同一个 if 相近时,最内层的 else 优先配对
规范代码:编写条件结构时,尽可能加上 {} 可以省掉不必要的错误和麻烦。
简单的多重判断demo:
using System;
using System.Collections.Generic;
using System.Text;
namespace Test
{
class Program
{
static void Main(string[] args)
{
double money = 60000.00;//存款金额
//请在这里补充多重条件判断
if (money >= 100000){
Console.WriteLine("送一台微波炉");
}
else if (money >= 50000 && money < 100000){
Console.WriteLine("送一套茶具");
}
else if (money >= 10000 && money < 50000){
Console.WriteLine("送一袋大米");
}
else{
Console.WriteLine("没有礼品");
}
}
}
}
三元运算符
与C++中一样
条件表达式 ? 分支1 : 分支2
运算逻辑是:当条件表达式为 true 时,执行分支1;当条件表达式为 false 时,执行分支2。
小例子:
static void Main(string[] args)
{
int year = 2015;//年份
string text = year%4 == 0 ? "闰年":"平年";//请填写代码
Console.WriteLine("今年是{0}",text);
}
switch结构
与c++中如出一辙,记得当时用控制台学XX管理系统的时候,界面都是同switch写的
static void Main(string[] args)
{
string job = "处长";//职务
switch (job)
{
case "局长":
Console.Write("发双黄月饼");
break;
case "处长":
Console.Write("发蛋黄月饼");
break;
case "科长":
Console.Write("发枣泥月饼");
break;
default :
Console.Write("发五仁月饼");
break;
}
}
少了break的时候会把下一个条件执行的语言也输出。知道break跳出switch
for 循环过程解释
for 循环运行时,首先进行变量声明和赋值;接下来判断循环条件,若条件为 true ,则执行循环体一次,若条件为 false ,则结束循环;执行循环体后,进行变量自加。然后会进入下一次循环。
do ... while 先执行循环体 再判断, while 是判断在执行循环体
总结:
continue 中止一次循环
break 跳出循环
代码规范,还是比较重要的。
namespace Test
{
class Program
{
static void Main(string[] args)
{
//请完善代码
for(int x=1;x<=7;x++)
{
for(int y=1;y<=7;y++)
{
if(x==y||x+y==8)
Console.Write("o");
else
Console.Write(".");
}
Console.WriteLine();
}
}
}
}
结果:
o.....o
.o...o.
..o.o..
...o...
..o.o..
.o...o.
o.....o
数组
数据类型[ ] 数组名 = new 数据类型[长度];
数组.Length 属性会返回数组的长度(即数组元素的个数)
foreach
C#中还存在一些类似于数组的数据组织方式,它们中有一些是没有元素索引的,对于这些元素,只能通过 foreach 遍历。
数组声明
二维数组
using System;
namespace MyFirstApp
{
class MainClass
{
public static void Main(string[] args) //Main方法,程序运行的起点,入口。
{
string[] name = { "吴️松", "钱东宇", "伏晨", "陈陆", "周蕊", "林日鹏", "何昆", "关欣" };
int[] score = { 89, 90, 98, 60, 91, 93, 85 };
int index = 0;
int max = 0;
for (int i = 0; i < score.Length; i++)
{
if (score[i] > max)
{
index = i;
max = score[i];
}
}
Console.WriteLine("分数最高的是{0},分数是{1}", name[index], score[index]);
}
}
}
假如不给index赋值为0的化,就没办法把局部变量的值掉出来。
在控制台接收、输入
using System;
namespace MyFirstApp
{
class MainClass
{
public static void Main(string[] args) //Main方法,程序运行的起点,入口。
{
string name;
Console.Write("输入:");
name = Console.ReadLine(); //接收用户输入的一个字符串
Console.WriteLine("输入字符串{0}", name);
int[] score = new int[3];
int sum = 0;
for (int i=0; i < score.Length; i++){
score[i] = int.Parse(Console.ReadLine()); //输入数字要类型转换
sum += score[i];
}
int avg = sum / score.Length;
Console.WriteLine(sum);
Console.WriteLine(avg);
}
}
}
在C#中进行断点跟踪及调试
using System;
namespace MyFirstApp
{
class MainClass
{
public static void Main(string[] args) //Main方法,程序运行的起点,入口。
{
string[] name = { "景珍", "林惠洋", "成蓉", "洪南昌", "龙玉民", "单江开", "田武山", "王三明" };
int[] score = {90, 65, 88, 70, 46, 81, 100, 68};
int sum = 0;
for (int i = 0; i < score.Length; i++){
sum += score[i];
}
int avg = sum / score.Length;
Console.WriteLine("平均分是{0},高于平均分的有:",avg);
for (int i = 0; i < score.Length; i++)
{
if (score[i] > avg)
{
Console.Write("{0} ", name[i]);
}
}
}
}
}
其实挺惭愧的,从开始写到现在发布出去已经有两三周的时间了,说好的要和我们家宝宝一起学习的,自己一直在拖后腿。
还有今天的事情,感觉自己当男朋友好不称职呀,老是惹她生气,虽然说她脾气也不好但是她却一直很包容着我,我很感激有这样可爱的女朋友。我好像很喜欢说别人可爱,但是我确信一点我女朋友的可爱可完全和其他人不一样哟!
18.04.21
好久没有写过代码了,感觉手生了好多,以后要多写。 18.04.23.