- C#项目结构
是依次包含的关系
解决方案→项目→程序文件→命名空间→类→方法(Main主方法 程序的入口 只能有一个)
→→→
→→
- 代码结构
using:导入其他命名空间 借用别人写好的东西
namespace(class的家):限制访问 你要写using才能用 {}是生效范围
class(method的家):也是限制访问 需要类名点出来里面的功能
method:分割代码 在这里可以写很多条代码 不同功能放在不同的类
- 注释
就是写个标签 不会被执行
//单行注释 注释这之后的东西
/**
多行注释
*/
/// 自动注释 会限定你的格式
/// <summary>
///
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
Console.WriteLine("HelloWorld");
Console.ReadLine();
}
- 执行
在Main函数里打一句
Console.WriteLine("HelloWorld");
//Console.ReadLine();
这个按钮或者直接F5(一般是快速运行看不到) 要么就是调试Ctrl+F5 要么用Console.ReadLine();阻塞
- 程序编写规范
1.字母、_、@开头,后面任意
2.不要与系统中的关键字重复
3.大小写是不一样的
4.命名尽量有意义 最好别中文 拼音有歧意
Camel命名法(namespace、class、method):首字母小写、后续的单词首字母大写 getValue
Pascal命名法(variable):所有单词首字母大写 GetValue
缩写的英文单词全部大写 适当缩写提高优雅度 GameManager→GM
一句代码建议写成一行
- 数据类型
C#里自带的除了object/Object 都是值类型
1.值类型 传递的是他本身的复制而不是本体 (如复印的卷子 我们在复印之后卷子上改 之前的卷子不会改变)
整型
Console.WriteLine(sbyte.MinValue);
Console.WriteLine(sbyte.MaxValue);
Console.WriteLine(int.MinValue);
Console.WriteLine(int.MaxValue);
Console.WriteLine(short.MinValue);
Console.WriteLine(short.MaxValue);
Console.WriteLine(long.MinValue);
Console.WriteLine(long.MaxValue);
浮点型 程序中的小数默认为double
// 浮点数的不精确性
double div = 0;
Console.WriteLine(1 / div);
字符型
// 汉字区间:\u4e00 - \u9fa5
char ch1 = '\u4e00';
Console.WriteLine(ch1);
// 阿拉伯数字
char ch2 = '0';
char ch3 = '9';
Console.WriteLine((int)ch2);
Console.WriteLine((int)ch3);
// 大写字母
char ch4 = 'A';
char ch5 = 'Z';
Console.WriteLine((int)ch4);
Console.WriteLine((int)ch5);
// 小写字母
char ch6 = 'a';
char ch7 = 'z';
Console.WriteLine((int)ch6);
Console.WriteLine((int)ch7);
布尔型
字符串
string name="大兔子";
// 取得名字中的某一个位置的字
// 数位置:从左向右
// name[第几个-1]
Console.WriteLine(name[1 - 1]);
// 取得字符串的字的个数
Console.WriteLine(name.Length);
祖宗类型/万能类型
Object data = "asdasd";
object data = 123;
2.引用类型 直接传递本体 (如叫你名字(引用)你给打针)
数组 相同类型数据的集合
类 面向对象的核心
接口 类的补充
委托 方法的传递
- 常量、变量
常量:运行期间保持不变
const int a = 1; 关键字 参数类型 自定义名字 = 要赋的值
变量:运行时可以改变的量
int a = 1;
- 用户交换
Console 程序目前唯一的交互平台
Console.Write("要显示的字符串,不换行");
Console.WriteLine("自动换行");
string line = Console.ReadLine(); //获取输入的一行 回车就判定
char ch = Console.ReadKey ().KeyChar;//获取按键上的某个字符
- 多数据输出 ```csharp int n1 = 1; int n2 = 100; int n3 = 54; int n4 = 69; int n5 = 121; // 连字符输出:+:字符串和任意数据进行相加时 Console.WriteLine(n1 + “ “ + n2 + “ “ + n3 + “ “ + n4 + “ “ + n5);
// 格式化输出:{n} // n:必须从0开始 依次+1 Console.WriteLine(“{4} {3} {2} {1}{1}{1} {0}”, n1, n2, n3, n4, n5);
- 类型转换
1.兼容类型:大数据类型中的小类型
```c
//无数据损失:隐式转换(自动转换)小转大
int a = 1;
long b = a;
//有数据损失:显式转换(强制转换)大转小
long lNum = 99999999;
// (类型)变量名表示强制转换
int num = (int)lNum;
2.非兼容类型:数据类型完全不同,但具备转换性
比如字符串和数字 需要想方法转换
//string→int
String input = Console.ReadLine();
int num = int.Parse(input);
//int→string
int num = 12345678;
String sNum = num.ToString();
- 运算符
每一行代码都可以当成一个表达式 里面会包括运算符
1.算术运算符
- c = a++: 先将 a 赋值给 c,再对 a 进行自增运算。
- c = ++a: 先将 a 进行自增运算,再将 a 赋值给 c 。
- c = a—: 先将 a 赋值给 c,再对 a 进行自减运算。
- c = —a: 先将 a 进行自减运算,再将 a 赋值给 c 。
2.关系运算符
3.逻辑运算符
4.位运算符
5.赋值运算符
然后就是=和其他运算符的组合
6.其他运算符
7.优先级 不用特别记忆需要优先加()即可
优先级从上到下 然后每个不同分类优先级看结合性
- 练习题目
1.C#语言是微软.NET公共语言运行环境中内置的核心程序设计语言,是一种( )。
(A)面向过程程序设计语言
(B)面向对象程序设计语言
(C)跨平台程序设计语言
(D)机器语言
2.C#语言支持面向对象程序设计概念,( )。
(A)但不支持继承
(B)而且支持多继承
(C)但仅支持单继承
(D)支持单继承和多继承
3.C#应用程序由一个或者多个类组成,一个应用程序的所有程序代码( )。
(A)必须封装在类中
(B)不能封装在类中
(C)必须封装在一个类中
(D)必须封装在多个个类中
4.C#应用程序中,导入其他系统预定义元素部分可以使用关键字( )。
(A)use
(B)namespace
(C)import
(D)using
5.命名空间是一种在程序中防止标识符命名冲突而引入的逻辑隔离机制,C#中使用关键字( )表示。
(A)using
(B)spacename
(C)class
(D)namespace
6.C#应用程序中,用主方法指明程序执行的开始点,主方法的名字规定为( )。
(A)class
(B)main
(C)Main
(D)MainWay
7.C#中的注释方法有三种,下列注释方法中错误的是( )。
(A)单行注释“//”
(B)多行注释“/*和/”
(C)XML注释“///”
(D)HTML注释“”
8.下列对控制台应用程序描述正确的是( )。
(A)控制台(Console)应用程序就是对设备进行控制的应用程序
(B)控制台(Console)应用程序包含了大量Windows系统的组成元素
(C)控制台(Console)应用程序是C#语言能够开发的应用程序类型之一
(D)控制台(Console)应用程序是基于标准C语言的单片机技术
9.在控制台应用程序中,如果在程序开头使用 using System; 语句引入了System命名空间,则下列方法调用错误的是( )。
(A)System.Console.Read();
(B)Console.Read();
(C)Console.read();
(D)Read();
思考题
1.简述C#语言的语句书写规则。
2.C#程序中可以使用哪些书写注释的方法?它们分别适合用于什么场合?
3.一个C#控制台应用程序主要由哪几个部分构成?
4.能列出C#中的所有的数据类型吗?
5.变量如何使用?
6.运算符有哪些?分类说明一下吧
- 作业
必做任务:
任务1:
模仿Hello world案例,写一个方法向控制台输出字符串”Hello Unity5”。
任务2:
在你的方法中定义变量,用这些变量存储游戏中一个敌人应该有的一些属性(比如用户名,等级,经验值,血量,魔法值等),定义尽可能多的变量。
任务3:
提示用户输入籍贯,当用户输入籍贯后,向用户显示”欢迎您来到某某” ,某某是用户输入的籍贯地。
任务4:
编写一个控制台应用程序,要求用户输入4个int值,并显示他们的乘积。
任务5:
让用户分别输入姓名,语文,数学,英语 三门课的成绩,然后给用户显示:XX,你的总成绩为XX分,平均成绩为XX分。
任务6:
编写一个程序,输入梯形的上底 下底 和高 ,计算出来梯形的面积并显示出来。
梯形的面积=(上底+下底)*高 /2
任务7:
编程实现计算指定的天数(如46天)是几周零几天。
由用户输入天数
任务8:
接受用户输入的两个整数,存储到两个变量里面,交换变量存储的值。
1.临时变量
2.求和法
3.异或法
可选任务:
任务9:
写一个方法,传递两个参数,分别代表年份和月份,计算这个月的天数(可选)。
注:闰年的 2 月有 29 天;能被 4 整除同时不能被 100 整除即为闰年;如果能被 400 整除的是闰年,除此两种条件,其他都是非闰年。
任务10:
从键盘输入一个三位的正整数,把百分位十分位个位数字的相反顺序输出。
思考题:
如何为大小写混杂的字符串排序?
例如: CabD=>abCD;
////任务1:
////模仿Hello world案例,写一个方法向控制台输出字符串"Hello Unity5"。
//Console.WriteLine("Hello Unity5");
//Console.ReadLine();
////任务2:
////在你的方法中定义变量,用这些变量存储游戏中一个敌人应该有的一些属性
////(比如用户名,等级,经验值,血量,魔法值等),定义尽可能多的变量。
//string userName = "小明";
//int level = 100;
//int exp = 999999;
//int hp = 100000;
//int mp = 50000;
////任务3:
////提示用户输入籍贯,当用户输入籍贯后,
////向用户显示"欢迎您来到某某" ,某某是用户输入的籍贯地。
//Console.WriteLine("请输入籍贯");
//string data = Console.ReadLine();
////老式调用
////Console.WriteLine("欢迎您来到{0}{1}",data,"123");
//Console.WriteLine($"欢迎您来到{data}");
////任务4:
////编写一个控制台应用程序,要求用户输入4个int值,并显示他们的乘积。
//Console.WriteLine("请输入4个整数");
//string data1 = Console.ReadLine();
//string data2 = Console.ReadLine();
//string data3 = Console.ReadLine();
//string data4 = Console.ReadLine();
////转换string到int 类型
//int data = int.Parse(data1) * int.Parse(data2) * int.Parse(data3) * int.Parse(data4);
//Console.WriteLine($"他们的乘积为{data}");
////任务5:
////让用户分别输入姓名,语文,数学,英语 三门课的成绩,
////然后给用户显示:XX,你的总成绩为XX分,平均成绩为XX分。
//Console.WriteLine("请分别输入您的姓名、语文、数学、英语成绩");
//string name = Console.ReadLine();
//string chinese = Console.ReadLine();
//string math = Console.ReadLine();
//string english = Console.ReadLine();
//int allPoint = int.Parse(chinese) + int.Parse(math) + int.Parse(english);
//float averagePoint = allPoint / 3F;
//Console.WriteLine($"{name},你的总成绩为{allPoint}分,平均成绩为{averagePoint}分。");
////任务6:
////编写一个程序,输入梯形的上底 下底 和高 ,计算出来梯形的面积并显示出来。
////梯形的面积 =(上底 + 下底)*高 / 2
//Console.WriteLine("请分别输入梯形的上底 下底 和高");
//int upBottom = int.Parse(Console.ReadLine());
//int downBottom = int.Parse(Console.ReadLine());
//int height = int.Parse(Console.ReadLine());
//Console.WriteLine($"梯形的面积为{(upBottom+downBottom)*height/2F}");
////任务7:
////编程实现计算指定的天数(如46天)是几周零几天。
//Console.WriteLine("请输入天数");
//int days = int.Parse(Console.ReadLine());
////%取模 比如7/3=2...1 这个1就是模 也叫余数
//Console.WriteLine($"是第{days / 7}周,零{days % 7}天");
//任务8:
//接受用户输入的两个整数,存储到两个变量里面,交换变量存储的值。
Console.WriteLine("请分别输入的两个整数");
int a = int.Parse(Console.ReadLine());
int b = int.Parse(Console.ReadLine());
//1.临时变量
//int temp = a;
//a = b;
//b = temp;
//Console.WriteLine($"a为{a},b为{b}");
//2.求和法 a+b(2+3)=5 5-a=3(b) 5-b=2(a)
//int sum = a + b;
//a = sum - a;
//b = sum - b;
//Console.WriteLine($"a为{a},b为{b}");
//3.异或法a^b 相同为0 不相同1 之后再^自己取反(取的是两个之前反数)
//a = a ^ b;
//b = a ^ b;
//a = a ^ b;
//简写
a ^= b;
b ^= a;
a ^= b;
Console.WriteLine($"a为{a},b为{b}");