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()。
C#的结构和数组的更多相关文章
- C#调用C/C++动态库 封送结构体,结构体数组
一. 结构体的传递 #define JNAAPI extern "C" __declspec(dllexport) // C方式导出函数 typedef struct { int ...
- [C语言入门笔记]分支结构与数组
分支结构与数组 什么是分支结构? 分支结构是用户或者程序可以选择下一步执行哪个语句 分支结构有哪些? If If Else If Else If Switch 在初学者的学习过程中第一种和第二种比较普 ...
- 【C语言入门教程】7.2 结构体数组的定义和引用
7.2 结构体数组的定义和引用 当需要使用大量的结构体变量时,可使用结构体定义数组,该数组包含与结构体相同的数据结构所组成的连续存储空间.如下例所示: struct student stu_a[50] ...
- Delphi结构体数组指针的问题
//这段代码在Delphi 2007和delphi 7下是可以执行的,所以正确使用结构体数组和指针应该是这样的,已验证 unit Unit1; interface uses Windows, Mess ...
- C语言中的结构体,结构体数组
C语言中的结构体是一个小难点,下面我们详细来讲一下:至于什么是结构体,结构体为什么会产生,我就不说了,原因很简单,但是要注意到是结构体也是连续存储的,但要注意的是结构体里面类型各异,所以必然会产生内存 ...
- 结构体数组(C++)
1.定义结构体数组 和定义结构体变量类似,定义结构体数组时只需声明其为数组即可.如: struct Student{ int num; char name[20]; char sex[5]; int ...
- c语言学习之基础知识点介绍(十七):写入读取结构体、数组、结构体数组
一.结构体的写入和读取 //写入结构体 FILE *fp = fopen("/Users/ios/Desktop/1.data", "w"); if (fp) ...
- c语言结构体数组定义的三种方式
struct dangdang { ]; ]; ]; int num; int bugnum; ]; ]; double RMB; int dangdang;//成员名可以和类名同名 }ddd[];/ ...
- C#调用C++DLL传递结构体数组的终极解决方案
在项目开发时,要调用C++封装的DLL,普通的类型C#上一般都对应,只要用DllImport传入从DLL中引入函数就可以了.但是当传递的是结构体.结构体数组或者结构体指针的时候,就会发现C#上没有类型 ...
- 绝对好文C#调用C++DLL传递结构体数组的终极解决方案
C#调用C++DLL传递结构体数组的终极解决方案 时间 2013-09-17 18:40:56 CSDN博客相似文章 (0) 原文 http://blog.csdn.net/xxdddail/art ...
随机推荐
- rysnc知识梳理
rsync语法: Local: rsync [OPTION...] SRC... [DEST] #<===本地传输数据 Access via remote shell: #<===借助通道 ...
- http各个版本(1/1.1/2)对比
参考的文章: 从理论到实践 全面理解HTTP/2 HTTP协议以及HTTP2.0/1.1/1.0区别 综合阐述http1.0/1.1/2和https 目录: http1.1 长连接 HTTP 1.1支 ...
- Executor 任务执行器
Executor: 是一个接口 用于执行提交的任务 解耦任务提交和执行(线程的创建及调度) Executor的实现可以根据实际需求延展不同的逻辑:1. 对于提交的任务同步或者异步执行,如下同步执行: ...
- Android中实现自定义View组件并使其能跟随鼠标移动
场景 实现效果如下 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 新建An ...
- Android事件分发与责任链模式
一.责任链模式 责任链模式是一种行为模式,为请求创建一个接收者的对象链.这样就避免,一个请求链接多个接收者的情况.进行外部解耦.类似于单向链表结构. 优点: 1. 降低耦合度.它将请求的发送者和接收者 ...
- MySql 部分字段去重
select * from personal_question_answer where answer_id in ( select min(answer_id) from personal_ques ...
- STT-MRAM存在的两个弊端
随着自旋转移矩效应的发现以及材料和结构的优化,基于自旋转移矩效应的STT-MRAM器件应运而生.自从自旋转移矩效应被证实以来,一方面研究人员通过大量的努力尝试降低磁化反转的临界电流,增加热稳定性:另一 ...
- nginx: [warn] conflicting server name "aaa.7yule.cn" on 0.0.0.0:80, ignored
故障现象: 修改nginx配置参数后,使用nginx -t检查配置,出现告警提示 nginx: [warn] conflicting server name "aaa.7yule.cn&qu ...
- 案例研究RAID控制器应用程序中的everspin mram
everspin MRAM是为LSI Corporation(现在的Avago Technologies)RAID控制器卡上的日志存储器选择的存储器,该RAID卡具有6Gb/s和12Gb/sSAS存储 ...
- 纪中21日T3 2118. 【2016-12-30普及组模拟】最大公约数
纪中21日T3 2118. 最大公约数 (File IO): input:gcd.in output:gcd.out 时间限制: 1000 ms 空间限制: 262144 KB 具体限制 Goto ...