C#-★结构体★
结构体:
结构体类型是用户自己定义的一种类型,它是由其他类型组合而成的,可包含构造函数、常数、字段、方法、属性、索引器、运算符、事件和嵌套类型的值类型。
结构体在几个方面不同于类:结构体为值类型而不是引用类型,并且结构体不支持继承。(继承:他爸爸有的他也有)
用结构的主要思想是用于创建小型的对象,如Point和FileInfo等等。这可以节省内存,因为没有如类对象所需的那样有额外的引用产生。
结构体是一个变量组,将一组变量放在一起,其实就是一个自定义的集合,里面可以包含各种类型的数据,用法和集合一样。
结构体一般定义在Main函数上面,位于Class下面,作为一个类,一般情况Struct定义在Main函数前面,Main函数里面的地方都可以使用,参数前面加上public代表公用变量。
格式:
struct 结构体名称
{
public int+变量名:
public string+变量名:
public int+变量名:
}
练习:输入人数,输入学号、姓名、性别、总分,并打印
//请输入班级人数,输入每个人的学号,姓名,和语文分数、数学分数和英语分数(要求使用结构体)
//求班级里两个语文分数是最高分的学生的所有信息;数学分数是最高分的两个学生的所有信息;英语平均分。 using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 练习
{
class Program
{
struct xinxi
{
public string xh;
public string name;
public Score fenshu;
}
struct Score
{
public double yufen;
public double shufen;
public double yingfen;
} static void Main(string[] args)
{
ArrayList al = new ArrayList();
Console.Write("请输入班级人数:");
int s = int.Parse(Console.ReadLine());
for (int i = ; i < s; i++)
{
xinxi xx = new xinxi();
Console.Write("请输入第{0}个人的学号:", i + );
xx.xh = Console.ReadLine();
Console.Write("请输入第{0}个人的姓名:", i + );
xx.name = Console.ReadLine();
Console.Write("请输入第{0}个人的语文分数:", i + );
xx.fenshu.yufen = int.Parse(Console.ReadLine());
Console.Write("请输入第{0}个人的数学分数:", i + );
xx.fenshu.shufen = int.Parse(Console.ReadLine());
Console.Write("请输入第{0}个人的英语分数:", i + );
xx.fenshu.yingfen = int.Parse(Console.ReadLine());
al.Add(xx);
}
xinxi xyx = new xinxi();
xyx.xh = "";
xyx.name = "零";
xyx.fenshu.yufen=;
xyx.fenshu.shufen=;
xyx.fenshu.yingfen=;
al.Add(xyx);
Console.WriteLine("输入完毕,按回车键继续");
Console.ReadLine();
//
Console.WriteLine();
Console.WriteLine("语文分数最高分的两个学生的信息是:");
for (int i = ; i < s - ; i += )
{
xinxi xx1 = (xinxi)al[i];
for (int j = i + ; j < s; j += )
{
xinxi xx2 = (xinxi)al[j];
if (xx1.fenshu.yufen < xx2.fenshu.yufen)
{
al[s] = al[i];
al[i] = al[j];
al[j] = al[s];
}
}
}
for (int i = ; i <= ; i++)
{
xinxi xxx = (xinxi)al[i];
Console.WriteLine("学号{0},姓名{1},语文{2}分,数学{3}分,英语{4}分。", xxx.xh, xxx.name, xxx.fenshu.yufen, xxx.fenshu.shufen, xxx.fenshu.yingfen);
} //
Console.WriteLine();
Console.WriteLine("数学分数最高分的两个学生的信息是:");
for (int i = ; i < s - ; i += )
{
xinxi xx1 = (xinxi)al[i];
for (int j = i + ; j < s; j += )
{
xinxi xx2 = (xinxi)al[j];
if (xx1.fenshu.shufen < xx2.fenshu.shufen)
{
al[s] = al[i];
al[i] = al[j];
al[j] = al[s];
}
}
}
for (int i = ; i <= ; i++)
{
xinxi xxx = (xinxi)al[i];
Console.WriteLine("学号{0},姓名{1},语文{2}分,数学{3}分,英语{4}分。", xxx.xh, xxx.name, xxx.fenshu.yufen, xxx.fenshu.shufen, xxx.fenshu.yingfen);
}
//
Console.WriteLine();
double sum = ;
for (int i = ; i < s;i++ )
{
xinxi yysum=(xinxi)al[i];
sum += yysum.fenshu.yingfen;
}
double avg = sum / s;
Console.WriteLine("英语平均分为:"+avg);
Console.ReadLine();
}
}
}
结构体练习
C#-★结构体★的更多相关文章
- Go结构体实现类似成员函数机制
Go语言结构体成员能否是函数,从而实现类似类的成员函数的机制呢?答案是肯定的. package main import "fmt" type stru struct { testf ...
- C#基础回顾(二)—页面值传递、重载与重写、类与结构体、装箱与拆箱
一.前言 -孤独的路上有梦想作伴,乘风破浪- 二.页面值传递 (1)C#各页面之间可以进行数据的交换和传递,页面之间可根据获取的数据,进行各自的操作(跳转.计算等操作).为了实现多种方式的数据传递,C ...
- go语言结构体
定义: 是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体. 成员: 每个值称为结构体的成员. 示例: 用结构体的经典案例处理公司的员工信息,每个员工信息包含一个唯一的员工编号.员工的名字. ...
- C语言中的结构体
用户自己建立自己的结构体类型 1. 定义和使用结构体变量 (1).结构体的定义 C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体. (2).声明一个结构体类型的一般形式为: ...
- C++_系列自学课程_第_12_课_结构体
#include <iostream> #include <string> using namespace std; struct CDAccount { double bal ...
- java socket传送一个结构体给用C++编写的服务器解析的问题
另一端是Java写客户端程序,两者之间需要通信.c++/c接收和发送的都是结构体,而Java是直接发送的字节流或者byte 数组.解决方法:c++/c socket 在发送结构体的时候其实发送的也是字 ...
- swift学习笔记3——类、结构体、枚举
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- HDOJ 1009. Fat Mouse' Trade 贪心 结构体排序
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- C语言结构体对齐
1.结构体变量中的元素如何访问? (1)数组中元素的访问方式:表面上有2种方式(数组下标方式和指针方式):实质上都是指针方式访问.(2)结构体变量中的元素访问方式:只有一种,用.或者->的方式来 ...
- C与指针(结构体指针,函数指针,数组指针,指针数组)定义与使用
类型 普通指针 指针数组(非指针类型) 数组指针 结构体指针 函数指针 二重指针 定义方式 int *p; int *p[5]; int (*p)[5]; int a[3][5]; struct{.. ...
随机推荐
- spring+springmvc+mybatis+redis 实现两重数据缓存
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http:// ...
- C++ 重载操作符- 02 重载输入输出操作符
重载输入输出操作符 本篇博客主要介绍两个操作符重载.一个是 <<(输出操作符).一个是 >> (输入操作符) 现在就使用实例来学习:如何重载输入和输出操作符. #include ...
- [C++] Deep copy ,Shallow copy, copy constructor,"="
Deep copy ,Shallow copy, copy constructor,"=" Dog.h #pragma once class Dog { public: char ...
- code3728 联合权值
一开始暴搜,超时3个点... 后来看了题解: 首先,两个点的距离为2当且仅当它们都与一个点直接相连 反过来说,一个点所有的出边的终点都是互相距离2的(最大值可以依靠这个方法,前向星处理的时候将每个点的 ...
- python3--json反序列化
# Auther: Aaron Fan # 加载文件中的数据 import json with open('test.txt','r',encoding='utf-8') as f: info = j ...
- struts2标签使用详解
Struts2常用标签总结一 介绍1.Struts2的作用 Struts2标签库提供了主题.模板支持,极大地简化了视图页面的编写,而且,struts2的主题.模板都提供了很好的扩展性.实现了更好的代码 ...
- sublime Text2常见插件介绍
zen coding 一种快速编写HTML/CSS代码的方法,已改名为Emmet,并且搭建了一个新的网站:docs.emmet.io Sublime Text 2安装插件Emmet后,打开sublim ...
- linux mysql 权限
原文地址:http://www.cnblogs.com/eczhou/archive/2012/07/12/2588187.html Linux下mysql新建账号及权限设置 1.权限赋予 说明:my ...
- [Asp.net Mvc]为js,css静态文件添加版本号
方式一: 思路 string version = ViewBag.Version; @Scripts.RenderFormat("<script type=\"text/ja ...
- C#连接SQL server数据库
C#连接SQL server数据库 创建一个Windows应用程序,在窗体中添加TextBox控件.Button控件.Label控件. private void button1_Click(objec ...