常量:----永远不变的量
常量的声明: Const 类型 常量名=常量值
const int num=10 ;
变量----- 经常会改变值的量
结构体(struct):
在C#中,结构体是值类型数据结构,它使得一个单一变量可以存储各种数据类型的相关数据
Struct 关键字用于创建结构体。
举例:
在图书馆中每本书有很多属性: title,author,subject , bookID
定义结构体:
当我们在定义结构体的时候必须使用 struct语句
struct语句为程序定义了一个带有多个成员的新的数据类型
举个栗子:
//定义结构体
struct Books
{
public string title;
public string author;
public string subject;
public int book_id;
};
//调用结构体
public static void Main(string[] args)
{
Books Book1; /* 声明 Book1,类型为 Book */
Books Book2; /* 声明 Book2,类型为 Book */
/* book 1 详述 */
Book1.title = "C Programming";
Book1.author = "Nuha Ali";
Book1.subject = "C Programming Tutorial";
Book1.book_id = 6495407;
声明一个结构体:
public struct person
{
public string _name; //字段
public char _gender;
}
调用结构体:
Person laosu;
Laosu._name //输入点后就会自动显示出来;
很多人会对类和结构之间搞混,其实他们之间是有很大的差别的:
类VS结构体:
1.类是引用类型,结构是值类型
2.结构不支持继承
3.结构不能声明默认的构造函数
4.结构体中声明的字段无法赋初值,类可以
比如:
struct test001 { private int aa = 1; }
执行以上代码将出现“结构中不能实例属性或字段初始值设定”的报错,而类中无此限制,代码如下:
class test002 { private int aa = 1; }
枚举法:
枚举是一组命名整型常量,枚举类型是使用enum关键字声明的
举个栗子:
enum Day { Sun, Mon, Tue, Wed, Thu, Fri, Sat };
static void Main()
{
int x = (int)Day.Sun;
int y = (int)Day.Fri;
Console.WriteLine("Sun = {0}", x);
Console.WriteLine("Fri = {0}", y);
}
结果:
Sun = 0
Fri = 5
注: 结构体和枚举可以一起使用:
Public enum Gender
{
男,
女
}
//声明了一个枚举 ;
Public struct Person
{
Public string _name ;
Public int _age;
Public Gender _gender ;
}
使用:
Class Program
{
Static void main(string() args)
{
Person zsperson;
Zsperson._name="张三";
Zsperson._age=90;
Zsperson._gender=Gender.男;
}
}
数组:
数组是一个存储相同类型元素的固定大小的顺序集合。
数组用来存储数据的集合,通常认为数组是一个同一类型变量的集合
//数组声明:
第一种方式: Int[] number=new int[] {2,4,5} 初始化数组
第二种方式: int[] nus= new int[10] 初始化数组
在nus的内存中存入了10个 int 类型的空间 ;
第三种方式: datatype[] arrayName;
- datatype 用于指定被存储在数组中的元素的类型。
- [ ] 指定数组的秩(维度)。秩指定数组的大小。
- arrayName 指定数组的名称。
几乎任意类型都可以声明数组:
Int 【3】
int【】 nums={ 5,3,8}
Int【】 number=new int【3】{1,3,5} //个数和声明数必须一致
Int [] number=new int[] {2,4,5}
举个栗子:
//在一次语文测试后,老师让班长统计每一个学生的成绩并计算全班的平均成绩,
//然后把所有成绩显示出来
Console.WriteLine("请输入班级人数");
int number = 0;
int sum = 0;
if (int.TryParse(Console.ReadLine(), out number))
{
int[] scores = new int[number];//声明一个数组用来存成绩
for (int i = 0; i < number; i++)
{
Console.WriteLine("请输入第{0}个人的成绩", i + 1);
scores[i] = int.Parse(Console.ReadLine());//把用户输入的成绩转换为int类型并存入到数组中
sum += scores[i];//求和
}
Console.WriteLine("总成绩为{0},平均成绩为{1}",sum, sum / number);
}
else
{
Console.WriteLine("输入有误");
}
Console.ReadKey();
知识点延伸:
三种方法转换字符串变成数字
- Convert.toint32(age);
- Int age=int.parse(字符串类型的数值)
虽然这俩种方法都能把字符串类型的数字转换成数字,但是如果输入的不是数字型的字符串就会报错
第三种方法:
strNUM是字符串类型的。
Int num=0
bool result = Int.TryParse(strNUM,out int age)
这个方法的返回值是 Bool类型,或者 直白一点,这一行代码int.tryparse()要用bool类型的变量来接收
下面用一个例子来解释:
int i = -1;
bool b = int.TryParse(null, out i);
执行完毕后,b等于false,i等于0,而不是等于-1,切记。
int i = -1;
bool b = int.TryParse("123", out i);
执行完毕后,b等于true,i等于123;
int.TryParse与 int.Parse 又较为类似,但它不会产生异常,转换成功返回 true,转换失败返回 false。
求数组中的最大值和最小值:
//求数组最大值 ;
int[] numbers = new int[] { 1, 3, 4, -556, 5, 4, 34, 64, 34 };
int temp = int.MinValue ;
for (int i = 0; i < numbers.Length; i++)
{
if (numbers[i] > temp)
{
temp = numbers[i];
}
}
Console.WriteLine("最大的值为{0}", temp);
Console.ReadKey();
//求数组的最大值和最小值
int[] numb = new int[] { 2, 43, 55, 23, -45, 54 };
int min = int.MaxValue;// 最小值
int max = int.MinValue;
for (int i = 0; i < numb.Length; i++)
{
if (numb[i] > max)
{
max = numb[i];
}
if (numb[i] < min)
{
min = numb[i];
}
}
Console.WriteLine("最大值为{0}",max);
Console.WriteLine("最小值为{0}",min);
Console.ReadKey();
可变数组: Parames数组
一般情况下的数组:
static void Main(string[] args)
{
show("{0}{1}{2}{3}{4}{5}{6}{7}{8}", 1, "2", 4, 5, 6, 7, 8, 4, 6);
}
public static void show(string str, params int []strs)
{
}
这个时候系统就会报错,因为这里的类型无法正常匹配,但是我们如果用了可变数组,效果就杠杠的!
可以将代码改成:
static void Main(string[] args)
{
show("{0}{1}{2}{3}{4}{5}{6}{7}{8}", 1, "2", 4, 5, 6, 7, 8, 4, 6);
}
public static void show(string str, params object []strs)
{
}
这样就可以正常运行而且不会报错了