c#小demo练习
环境配置
1创建项目
file-new project-windows application选择位置和项目名称。我项目名称是pricticeDemo。
2创建DLL动态链接库
DLL=程序的一个独立模块,类似于函数库,需要的时候调用导入就可以了。
1)先建立一个类库
项目右键没有这个选项,于是就如下解决:
记得记住你创建类库的位置
2)创建了之后会默认生成一个Class.cs文件,改名为MyClass.cs
3)在MyClass.cs里面添加代码如下:
由于引入System.Windows.Forms报错
解决如下
勾选确定就可以了
代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ClassLibrary
{
public class MyClass
{
public void HeeloWorld() { System.Windows.Forms.MessageBox.Show("hello world");
//弹出消息对话框
}
}
}
4)为项目添加引用写的类库
选择浏览,找到你类库的位置,确定
由于没找到dll文件,于是重新运行了一下类库,就可以找到了,位置就是类库位置\bin\Debug下面。我的完整位置是:E:\我的c#程序\PricticeDemos\DLL\ClassLibrary\ClassLibrary\bin\Debug\ClassLibrary.dll
-------------------------------------------------------------------
在form1.cs下面写入代码,代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using ClassLibrary;//注意引用
namespace PricticeDemos
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
MyClass myclass = new MyClass();
myclass.HeeloWorld();//声明引用
}
}
}
运行结果如下:
语法基础
1整数类型
常用整数类型及其取值范围:
类型 | 名称 | 位数 | 取值范围 |
---|---|---|---|
sbyte | 有符号字节型 | 8 | -128~127 |
byte | 无符号字节型 | 8 | 0~255 |
char | 字符型 | 16 | \u0000-\uffff |
short | 有符号短整型 | 16 | -32,768~32,767 |
ushort | 无符号短整型 | 16 | 0~65,535 |
int | 有符号整型 | 32 | -2,147,483,648~ 2,147,483,647 |
uint | 无符号整型 | 32 | 0 ~ 4,294,967,295 |
long | 有符号长整型 | 64 | -263-1~263 |
ulong | 无符号长整型 | 64 | 0 ~ 18,446,744,073,709,551,615 |
2浮点数
常用的三种浮点数
类型 | 名称 | 精度 |
---|---|---|
float | 单精度浮点型 | 7 |
double | 双精度浮点型 | 15-16 |
decimal | 高精度浮点型 | 28-29 |
3结构体和布尔型
判断矩形是否为长方形:
1)创建文件夹和类
2)类里面编写代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PricticeDemos.demoClasses
{
class Variables
{
//判断矩形是否为正方形
struct Rectangle
{
public int width;
public int height;
public bool IsSquare() { return width == height; }
}
public void RectangleisSquare() {
Rectangle rect = new Rectangle();
rect.width = 100;
rect.height = 105;
Console.WriteLine("矩阵宽为:{0},矩形高为:{1}", rect.width, rect.height);
bool isSquare = rect.IsSquare();
Console.WriteLine("矩形是否为正方形:{0}", isSquare);
}
}
}
3)form里面引用,运行
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
<font color=red>using PricticeDemos.demoClasses;</font>
namespace PricticeDemos
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Variables var = new Variables();
var.RectangleisSquare();
}
}
}
运行结果如下:
4枚举型
利用枚举型描述动物类型
1)类里面编写代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PricticeDemos.demoClasses
{
class Variables
{
//判断矩形是否为正方形
struct Rectangle
{
public int width;
public int height;
public bool IsSquare() { return width == height; }
}
//枚举列出动物类型
enum Animal : byte {
Dog=0,
Cat=1,
Mouse=2
}
public void RectangleisSquare() {
Rectangle rect = new Rectangle();
rect.width = 100;
rect.height = 105;
Console.WriteLine("矩阵宽为:{0},矩形高为:{1}", rect.width, rect.height);
bool isSquare = rect.IsSquare();
Console.WriteLine("矩形是否为正方形:{0}", isSquare);
}
public void Animalenum() {
Animal animal=Animal.Cat;
switch(animal){
case Animal.Dog:
Console.WriteLine("狗");
break;
case Animal.Cat:
Console.WriteLine("猫");
break;
case Animal.Mouse:
Console.WriteLine("老鼠");
break;
default:
break;
}
}
}
}
2)form调用
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using PricticeDemos.demoClasses;
namespace PricticeDemos
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Variables var = new Variables();
//var.RectangleisSquare();
var.Animalenum();
}
}
}
之后都是这样
5引用类型
修改圆柱的高度和底半径
代码如下:
//修改圆柱体的高度和底面积
struct Column {
public Circle Circle;
public int Height;
}
class Circle {
public int Radius;
}
----------------------------------------------------
public void editColumonHC() {
Column column1 = new Column();
Circle circle1 = new Circle();
column1.Height = 20;
column1.Circle = circle1;
circle1.Radius = 10;
Console.WriteLine("圆柱体1高度:{0}", column1.Height);
Console.WriteLine("圆柱体底面半径:{0}", column1.Circle.Radius);
Console.WriteLine("将圆柱体1赋值给圆柱体2");
//柱体2
Column column2 = column1;
Console.WriteLine("将圆形1半径改为30");
circle1.Radius = 30;
Console.WriteLine("将圆柱体1底面半径:{0}",column1.Circle.Radius);
Console.WriteLine("将圆柱体2底面半径:{0}", column2.Circle.Radius);
Console.WriteLine("将圆柱体1高度:{0}", column1.Height);
Console.WriteLine("将圆柱体2高度:{0}", column2.Height);
Console.WriteLine("将圆柱体2高度改为40");
column2.Height = 40;
Console.WriteLine("将圆柱体1高度:{0}", column1.Height);
Console.WriteLine("将圆柱体2高度:{0}", column2.Height);
}
6常量
计算圆形面积
代码如下:
//计算圆形面积
class CCircle {
const double PI = 3.1415926f;
public readonly int CRadius = 1;//只读半径
public CCircle(int radius) { CRadius = radius; }//构造函数
public double Area() { return PI * CRadius * CRadius; }//面积
}
---------------------------------------------------
public void CCirecleArea() {
CCircle circle = new CCircle(10);
Console.WriteLine("半径为{0}的圆形面积为{1}",circle.CRadius,circle.Area());
}
7变量
通过用户输入的高和宽,计算矩形的面积
代码如下:
//输入高宽计算矩形面积
class CRectangle {
public int Width, Height;//声明变量
public int TryArea() {//计算面积并检测数据溢出
checked {
int area = Width * Height;
return area;
}
}
public int Area() { return Width * Height; }//计算矩形面积
}
public void RectangleAreaByinput() {
CRectangle rect = new CRectangle();
Console.WriteLine("请输入矩形的宽度:");
rect.Width = int.Parse(Console.ReadLine());
Console.WriteLine("请输入矩形的高度:");
rect.Height = int.Parse(Console.ReadLine());
Console.WriteLine("矩形面积为:\n{0}",rect.Area());
//检测数据溢出
Console.WriteLine("矩形面积为:\n{0}", rect.TryArea());
}
直接运行需要输出无法运行,需要项目右键属性修改
8算数运算符
实现简单计算器:
代码如下:
//简单计算器
public void SampleCompute() {
Console.WriteLine("请输入第一个数:");
int num1 = int.Parse(Console.ReadLine());
Console.WriteLine("请输入算数运算符:");
string Operator = Console.ReadLine();
Console.WriteLine("请输入第二个数:");
int num2 = int.Parse(Console.ReadLine());
//计算
int result = 0;
switch (Operator) {
case "+":
result = num1 + num2;
break;
case "-":
result = num1 - num2;
break;
case "*":
result = num1 * num2;
break;
case "/":
result = num1 / num2;
break;
case "%":
result = num1% num2;
break;
default:
Console.WriteLine("计算出错!!");
break;
}
Console.WriteLine("{0}{1}{2}={3}", num1, Operator, num2, result);
}
9关系运算符
常用的关系运算符
关系运算符 | 关系运算符名称 |
---|---|
== | 等于 |
!= | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
对于数值来说是比较大小
对于引用类型来说就是看是不是引用同一个对象
10按位运算符
按字节提取整数型数值
代码如下:
//按字节提取整数型数值
public void getIntByByte() {
Console.WriteLine("请输入一个整数:");
int num = int.Parse(Console.ReadLine());
Console.WriteLine("{0}的十六进制形式为0x{1:X8}", num, num);
int numHex = num & 0x000000FF;//是0x不是Ox
Console.WriteLine("第1个字节是:0x{0:X2}", numHex);
numHex = num>>8 & 0x000000FF;//是0x不是Ox
Console.WriteLine("第2个字节是:0x{0:X2}", numHex);
numHex = num>>16 & 0x000000FF;//是0x不是Ox
Console.WriteLine("第3个字节是:0x{0:X2}", numHex);
numHex = num >> 24 & 0x000000FF;//是0x不是Ox
Console.WriteLine("第4个字节是:0x{0:X2}", numHex);
}
11条件运算符
条件运算符 | 解释 |
---|---|
& 和 && | 都表示并且,a&&b只要a为false就不计算后面的b了,称为短路运算符,&是把true看成1 ,把false看成0作位运算得到结果 |
| 和 || | 都表示或者,同样的 || 是短路运算符,和上面的基本思想相同 |
12三元运算符
语法如下:
条件表达式?表达式一:表达式二
例子:
a>b?c:d
a大于b就取c否则取d
注意
条件运算符是右结合的运算符,比如:
a>b?a:b>c?b:c 等价于
a>b?a:(b>c?b:c ) 而不是
(a>b?a:b>c)?b:c
13函数使用和引用传递
引用传递 指的是,会改变传入的值,值传递不会改变。
static 为静态函数,无法被实例化,也就是说,无法通过类名或者new的类来调用,并且他只能调用同为静态的变量和静态的方法。于是这里全部修改为public。
交换两个数的值代码如下:
public void Exchange(ref int num1, ref int num2) {
int temp = num1;
num1 = num2;
num2 = temp;
}
public void DataExchange( int num1, int num2)
{
int temp = num1;
num1 = num2;
num2 = temp;
}
public void SwapTwoNum() {
Console.WriteLine("请输入第一个数字:");
int num1 = int.Parse(Console.ReadLine());
Console.WriteLine("请输入第儿个数字:");
int num2 = int.Parse(Console.ReadLine());
DataExchange(num1, num2);
Console.WriteLine("值传递之后num1={0},num2={1}", num1, num2);
Exchange(ref num1, ref num2);//传入的时候也要用ref
Console.WriteLine("引用传递之后num1={0},num2={1}", num1, num2);
}
结果如下:
14函数的递归调用
计算一个数的阶乘
1.阶乘
阶乘(!)是小于某个数的所有正整数的乘积;
注意:0既不是正整数,又不是负整数;0是整数;
0!=1
1!=1
2!=2*1!=2
3!=3*2!=6
4!=4*3!=24
5!=5*4!=120
…
n!=n*(n-1)!
递归代码如下:
注:decimal—高精度浮点数
//求阶乘
public decimal Factorial(decimal n) {
if (n == 1) return 1;
else return n * Factorial(n - 1);
}
public void getJieCheng() {
Console.WriteLine("请输入一个整数:");
decimal num = decimal.Parse(Console.ReadLine());
Console.WriteLine("{0}的阶乘为{1}", num, Factorial(num));
}
15函数参数输出
求解多个数的乘法运算
代码如下:
//求解多个数相乘
public void GetMultResult(out int result, params int[] numbers) {
//params关键字修饰参数只能修饰最后一个且只能有一个,表示之后输入的所有的数,这里就是num1,num2,num3
//out关键字和ref都是引用传递,不一样的是out的不用初始化,直接声明就可以了
result = 1;
foreach (int num in numbers) result*= num;
}
public void getMultXiangCheng() {
Console.WriteLine("请输入第一个数:");
int num1 = int.Parse(Console.ReadLine());
Console.WriteLine("请输入第二个数:");
int num2 = int.Parse(Console.ReadLine());
Console.WriteLine("请输入第三个数:");
int num3 = int.Parse(Console.ReadLine());
int result;
GetMultResult(out result, num1, num2, num3);
Console.WriteLine("{0}*{1}*{2}={3}", num1, num2, num3, result);
}