当前位置: 移动技术网 > IT编程>开发语言>c# > C#的结构和数组

C#的结构和数组

2019年12月26日  | 移动技术网IT编程  | 我要评论
下面我们继续学习C#的语法。结构struct,C#中的结构和我们PLC中建立的UDT(结构体)是一样的。里面存储了相关的不同类型的数据。 有一句话我觉得十分重要:方法是依存于结构和对象存在的。这以后我们会个更加深入的学习的。 Struct结构: 可以帮助我们一次性声明不同类型的变量。 语法: [pu ...

下面我们继续学习c#的语法。结构struct,c#中的结构和我们plc中建立的udt(结构体)是一样的。里面存储了相关的不同类型的数据。

有一句话我觉得十分重要:方法是依存于结构和对象存在的这以后我们会个更加深入的学习的。

struct结构:

可以帮助我们一次性声明不同类型的变量。

语法:

[public] struct 结构名

{

    成员;

}

如下例声明:

 

 1 using system;
 2 using system.collections.generic;
 3 using system.linq;
 4 using system.text;
 5 using system.threading.tasks;
 6 
 7 namespace 草稿
 8 {
 9     class program
10     {
11         public struct person
12         {
13             public string name;
14             public int age;
15             public char gender;
16         }
17         static void main(string[] args)
18         {
19             person zsperson;
20             zsperson.name = "张三";
21             zsperson.age = 18;
22             zsperson.gender = '男';
23 
24             console.readkey();
25         }
26     }
27 }

 

值得我们注意的是,在声明结构的时候,如果我们没加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:从一个整数数组中求出最大值,最小值,总和和平均值。

 

 1 using system;
 2 using system.collections.generic;
 3 using system.linq;
 4 using system.text;
 5 using system.threading.tasks;
 6 
 7 namespace 草稿
 8 {
 9     class program
10     {
11         static void main(string[] args)
12         {
13             int[] nums = { 1,2,3,4,5,6,7,8,9,0};
14             int max = nums[0];
15             int min = nums[0];
16             int sum = 0;
17 
18             for (int i = 0; i < nums.length; i++)
19             {
20                 if (nums[i] > max)
21                 {
22                     max = nums[i];
23                 }
24 
25                 if (nums[i] < min)
26                 {
27                     min = nums[i];
28                 }
29                 sum += nums[i];
30             }
31             console.writeline($"这个数组的最大值是{max},最小值是{min},总和是{sum},平均值是{sum/nums.length}");
32             console.readkey();
33         }
34     }
35 }

 

练习2:

 1 using system;
 2 using system.collections.generic;
 3 using system.linq;
 4 using system.text;
 5 using system.threading.tasks;
 6 
 7 namespace 草稿
 8 {
 9     class program
10     {
11         static void main(string[] args)
12         {
13             string[] names = { "老杨","老苏","老邹","老虎","老牛","老马"};
14             string str = null;
15 
16             for (int i = 0; i < names.length-1; i++)
17             {
18                 str += names[i] + "|";
19             }
20             console.writeline(str+names[names.length-1]);
21             console.readkey();
22         }
23     }
24 }

练习3:对一个整数数组做如下处理:若元素为正数将这个元素+1,若为负数,将这个元素-1,元素为0,不变。

 1 using system;
 2 using system.collections.generic;
 3 using system.linq;
 4 using system.text;
 5 using system.threading.tasks;
 6 
 7 namespace 草稿
 8 {
 9     class program
10     {
11         static void main(string[] args)
12         {
13             int[] nums = { 1,-2,3,-4,5,6,0};
14             for (int i = 0; i < nums.length; i++)
15             {
16                 if (nums[i] > 0)
17                 {
18                     nums[i] += 1;
19                 }
20                 else if (nums[i] < 0)
21                 {
22                     nums[i] -= 1;
23                 }
24                 else
25                 {
26 
27                 }
28             }
29 
30             for (int i = 0; i < nums.length; i++)
31             {
32                 console.writeline(nums[i]);
33             }
34             console.readkey();
35         }
36     }
37 }

练习4:

 

 

 1 using system;
 2 using system.collections.generic;
 3 using system.linq;
 4 using system.text;
 5 using system.threading.tasks;
 6 
 7 namespace 草稿
 8 {
 9     class program
10     {
11         static void main(string[] args)
12         {
13             string[] names = { "我","是","好人"};
14             for (int i = 0; i < names.length/2; i++)
15             {
16                 string temp = names[i];
17                 names[i] = names[names.length - 1 - i];
18                 names[names.length - 1 - i] = temp;
19             }
20             for (int i = 0; i < names.length; i++)
21             {
22                 console.write(names[i]);
23             }
24             console.readkey();
25         }
26     }
27 }

 

练习5:冒泡排序:就是将一个数组中的元素从大到小,从小到大排列。

       分析:需要两个循环,外层循环,控制比较次数,内层循环,控制交换次数。

 

 1 using system;
 2 using system.collections.generic;
 3 using system.linq;
 4 using system.text;
 5 using system.threading.tasks;
 6 
 7 namespace 草稿
 8 {
 9     class program
10     {
11         static void main(string[] args)
12         {
13             int[] nums = { 9,8,7,6,5,4,3,2,1,0};
14             for (int i = 0; i < nums.length-1; i++)
15             {
16                 for (int j = 0; j < nums.length-1-i; j++)
17                 {
18                     if (nums[j] > nums[j+1])
19                     {
20                         int temp = nums[j];
21                         nums[j] = nums[j + 1];
22                         nums[j + 1] = temp;
23                     }
24                 }
25             }
26             for (int i = 0; i < nums.length; i++)
27             {
28                 console.writeline(nums[i]);
29             }
30             console.readkey();
31         }
32     }
33 }

 

这里面有一点值得我们注意,c#中的数组下标和我们plc中数组下标正好相反,c#中数组下标的0从左面元素开始计算。

其实,这种冒泡方式的写法也就在面试的时候会用到,在我们c#中,可以直接用一个方法解决array.sort();(只能升序)

array.reverse();(反转排列)若想降序:先调用array.sort();后调用array.reverse()。

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网