下面我们继续学习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()。

C#的结构和数组的更多相关文章

  1. C#调用C/C++动态库 封送结构体,结构体数组

    一. 结构体的传递 #define JNAAPI extern "C" __declspec(dllexport) // C方式导出函数 typedef struct { int ...

  2. [C语言入门笔记]分支结构与数组

    分支结构与数组 什么是分支结构? 分支结构是用户或者程序可以选择下一步执行哪个语句 分支结构有哪些? If If Else If Else If Switch 在初学者的学习过程中第一种和第二种比较普 ...

  3. 【C语言入门教程】7.2 结构体数组的定义和引用

    7.2 结构体数组的定义和引用 当需要使用大量的结构体变量时,可使用结构体定义数组,该数组包含与结构体相同的数据结构所组成的连续存储空间.如下例所示: struct student stu_a[50] ...

  4. Delphi结构体数组指针的问题

    //这段代码在Delphi 2007和delphi 7下是可以执行的,所以正确使用结构体数组和指针应该是这样的,已验证 unit Unit1; interface uses Windows, Mess ...

  5. C语言中的结构体,结构体数组

    C语言中的结构体是一个小难点,下面我们详细来讲一下:至于什么是结构体,结构体为什么会产生,我就不说了,原因很简单,但是要注意到是结构体也是连续存储的,但要注意的是结构体里面类型各异,所以必然会产生内存 ...

  6. 结构体数组(C++)

    1.定义结构体数组 和定义结构体变量类似,定义结构体数组时只需声明其为数组即可.如: struct Student{ int num; char name[20]; char sex[5]; int ...

  7. c语言学习之基础知识点介绍(十七):写入读取结构体、数组、结构体数组

    一.结构体的写入和读取 //写入结构体 FILE *fp = fopen("/Users/ios/Desktop/1.data", "w"); if (fp) ...

  8. c语言结构体数组定义的三种方式

    struct dangdang { ]; ]; ]; int num; int bugnum; ]; ]; double RMB; int dangdang;//成员名可以和类名同名 }ddd[];/ ...

  9. C#调用C++DLL传递结构体数组的终极解决方案

    在项目开发时,要调用C++封装的DLL,普通的类型C#上一般都对应,只要用DllImport传入从DLL中引入函数就可以了.但是当传递的是结构体.结构体数组或者结构体指针的时候,就会发现C#上没有类型 ...

  10. 绝对好文C#调用C++DLL传递结构体数组的终极解决方案

    C#调用C++DLL传递结构体数组的终极解决方案 时间 2013-09-17 18:40:56 CSDN博客相似文章 (0) 原文  http://blog.csdn.net/xxdddail/art ...

随机推荐

  1. Vscode开发Java环境搭建

    VSCode 开发 JAVA 微软为 Java 开发者推出了一个 Visual Studio Code 的安装程序.Visual Studio Code 中目前提供了许多 Java 扩展. 该软件包可 ...

  2. codewars--js--Happy numbers++无穷大判断

    问题描述: A happy number is a number defined by the following process: starting with any positive intege ...

  3. 使用Python批量更新服务器文件【新手必学】

    买了个Linux服务器,Centos系统,装了个宝塔搭建了10个网站,比如有时候要在某个文件上加点代码,就要依次去10个文件改动,虽然宝塔是可视化页面操作,不需要用命令,但是也麻烦,虽然还有git的h ...

  4. 《ASP.NET Core应用开发入门教程》与《ASP.NET Core 应用开发项目实战》正式出版

    “全书之写印,实系初稿.有时公私琐务猬集,每写一句,三搁其笔:有时兴会淋漓,走笔疾书,絮絮不休:有时意趣萧索,执笔木坐,草草而止.每写一段,自助覆阅,辄摇其首,觉有大不妥者,即贴补重书,故剪刀浆糊乃不 ...

  5. HA: Chanakya Vulnhub Walkthrough

    靶机链接: https://www.vulnhub.com/entry/ha-chanakya,395/ 网络主机探测: 主机端口扫描: nmap -p- -sC -sV 10.10.202.136 ...

  6. 常量, char[], const char[], char*, const char*, char* const以及const char* const的详解

    注意,这里用char类型只是举了一个例子,其他的int之类的也通用. 1: 常量: 例子: char str[] = "Hello world!"; char ch = 'a'; ...

  7. Ubuntu切换为阿里镜像源

    前言 在VM虚拟机搭建Ubuntu系统学习或者测试时,常常要使用apt安装测试,但是由于系统自带的下载源在国外服务器上,下载速度慢的无法忍受.所以我们需要切换为国内镜像源,能显著加快安装包下载速度. ...

  8. 使用 linux kernel +busybox 定制linux系统

    目的: 了解linux的启动过程 主要内容: 1.grub 是启动程序的bootloader 2.linux-kernel 是linux的开源内核 3.busybox 是linux的工具集合 启动顺序 ...

  9. Python基础之基础知识

    目录 Python基础知识 Python 变量 Python 字符编码 Python 二进制 Python 十六进制 Python bytes Python 注释 Python 用户输入 Python ...

  10. 【Android】Retrofi的基础使用教程

    文章参考学习自 阳光沙滩 ,是我在B站上发现的宝藏Up主,超级棒! 在前段时间我写了一个java web后台,想做一个安卓端的打卡社区,后来发现请求和解析过于麻烦,就耽搁了. 趁着空闲,研究了一下大部 ...