C#的结构和数组
下面我们继续学习C#的语法。结构struct,C#中的结构和我们PLC中建立的UDT(结构体)是一样的。里面存储了相关的不同类型的数据。
有一句话我觉得十分重要:方法是依存于结构和对象存在的。这以后我们会个更加深入的学习的。
Struct结构:
可以帮助我们一次性声明不同类型的变量。
语法:
[public] struct 结构名
{
成员;
}
如下例声明:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 草稿
{
class Program
{
public struct Person
{
public string name;
public int age;
public char gender;
}
static void Main(string[] args)
{
Person zsPerson;
zsPerson.name = "张三";
zsPerson.age = ;
zsPerson.gender = '男'; Console.ReadKey();
}
}
}
值得我们注意的是,在声明结构的时候,如果我们没加public,我们是建立不了给结构赋值的,不加public系统默认为private私有的。并且我们在命名空间之下Main之上创建的变量其实不叫变量,而是叫字段。
变量和字段的区别在于:变量可以存一个值,之后不停被覆盖,而字段类似我们PLC背景数据,可以存储若干个数值。
而且我在这要提出一个问题,我看了几个视频和数据,对于字段的命名说法不一样的,总结如下
(1)字段和变量要区别命名,例如:_Name
(2)也有反对这种命名方式的,理由是:在复杂的编程任务中,可能影响与其他语言的交互引用的作用,例如VB。net。
这在以后深入学习过程中我们在慢慢体会,也欢迎大神们给我解惑。
数组
一次性存储多个相同类型的变量。
语法:
数组的类型[] 数组名 = new 数组类型[数组长度];
数组的长度一旦固定了,就不能在被改变了。
对于int[]类型的数组,初值为0,string[]数组初值为null,bool[]数组初值为false。
下面我们介绍几种声明数组的方式
int[] nums = new int[10]; //没有声明数组元素,推荐
int[] nums = {1,2,3,4,5,6}; //隐式声明了元素和长度,推荐
int[] nums = new int[3]{1,2,3}; //不推荐,麻烦且长度和元素数量必须一致。
int[] nums = new int[]{1,2,3,4,5}; //类似第2种
下面看一个练习1:从一个整数数组中求出最大值,最小值,总和和平均值。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 草稿
{
class Program
{
static void Main(string[] args)
{
int[] nums = { ,,,,,,,,,};
int max = nums[];
int min = nums[];
int sum = ; for (int i = ; i < nums.Length; i++)
{
if (nums[i] > max)
{
max = nums[i];
} if (nums[i] < min)
{
min = nums[i];
}
sum += nums[i];
}
Console.WriteLine($"这个数组的最大值是{max},最小值是{min},总和是{sum},平均值是{sum/nums.Length}");
Console.ReadKey();
}
}
}
练习2:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 草稿
{
class Program
{
static void Main(string[] args)
{
string[] names = { "老杨","老苏","老邹","老虎","老牛","老马"};
string str = null; for (int i = ; i < names.Length-; i++)
{
str += names[i] + "|";
}
Console.WriteLine(str+names[names.Length-]);
Console.ReadKey();
}
}
}
练习3:对一个整数数组做如下处理:若元素为正数将这个元素+1,若为负数,将这个元素-1,元素为0,不变。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 草稿
{
class Program
{
static void Main(string[] args)
{
int[] nums = { ,-,,-,,,};
for (int i = ; i < nums.Length; i++)
{
if (nums[i] > )
{
nums[i] += ;
}
else if (nums[i] < )
{
nums[i] -= ;
}
else
{ }
} for (int i = ; i < nums.Length; i++)
{
Console.WriteLine(nums[i]);
}
Console.ReadKey();
}
}
}
练习4:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 草稿
{
class Program
{
static void Main(string[] args)
{
string[] names = { "我","是","好人"};
for (int i = ; i < names.Length/; i++)
{
string temp = names[i];
names[i] = names[names.Length - - i];
names[names.Length - - i] = temp;
}
for (int i = ; i < names.Length; i++)
{
Console.Write(names[i]);
}
Console.ReadKey();
}
}
}
练习5:冒泡排序:就是将一个数组中的元素从大到小,从小到大排列。
分析:需要两个循环,外层循环,控制比较次数,内层循环,控制交换次数。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 草稿
{
class Program
{
static void Main(string[] args)
{
int[] nums = { ,,,,,,,,,};
for (int i = ; i < nums.Length-; i++)
{
for (int j = ; j < nums.Length--i; j++)
{
if (nums[j] > nums[j+])
{
int temp = nums[j];
nums[j] = nums[j + ];
nums[j + ] = temp;
}
}
}
for (int i = ; i < nums.Length; i++)
{
Console.WriteLine(nums[i]);
}
Console.ReadKey();
}
}
}
这里面有一点值得我们注意,C#中的数组下标和我们PLC中数组下标正好相反,C#中数组下标的0从左面元素开始计算。
其实,这种冒泡方式的写法也就在面试的时候会用到,在我们C#中,可以直接用一个方法解决Array.Sort();(只能升序)
Array.Reverse();(反转排列)若想降序:先调用Array.Sort();后调用Array.Reverse()。
最新文章
- eclipse build workspace太慢或者 js出错问题解决
- iconv 失败
- centos 防火墙配置
- jedis操作
- C#中的Collections命名空间
- Hug the princess(思维,位运算)
- swift3 控件创建
- 对MySQL数据量日益增长产生的一点小想法
- nyoj_762:第k个互质数
- TensorFlow与主流深度学习框架对比
- android中xml tools属性详解(转)
- Celery
- Git 教程(三):仓库与分支
- 使用ENCKEYS方法加密数据
- 机器人关节空间轨迹规划--S型速度规划
- spring-batch批处理框架
- openssl编译安装-各种蛋疼
- Scala包的使用
- 20145105 《Java程序设计》第7周学习总结
- vue基础——组件基础
热门文章
- 轻松理解JS中的面向对象,顺便搞懂prototype和__proto__
- WARNING: The host &#39;$hostname&#39; could not be looked up with resolveip. (转)
- linux使用和基础操作
- 流处理引擎(SPE)中的的分布式一致性语义之Exactly-Once和Effectively-Onece区别
- 复杂系统架构设计<;1>;
- count(1)比count(*)效率高?
- CentOS7安装MySQL报错,解决Failed to start mysqld.service: Unit not found
- Ubuntu-Server18.04开启无线网卡并配置静态ip
- sql server 基本操作
- vue ----element-ui 文件上传upload 组件 实现 及其后台