头歌实践教学平台数据结构与算法:01抽象数据类型表示

该关卡内容较为简单,不在做过多阐述,直接上代码,第三关关卡左边也有描述

第一关

//定义复数类型
typedef  struct 
{
   //请输入你的代码,主要有可能不是整数哦
    float i;
    float j;
   //代码结束
}Complex;

//创建复数
void Create (Complex &c,float x,float y)
{
	//请输入你的代码
    c.i = x;
    c.j = y;
	//代码结束
}
//实现复数c1和c2的相加
Complex Add(Complex c1,Complex c2)
{
	//请输入你的代码
    Complex res;
    res.i = c1.i + c2.i;
    res.j = c1.j + c2.j;
    return res;

	//代码结束
}
//实现复数c1和c2的相减
Complex Sub(Complex c1,Complex c2)
{
	//请输入你的代码
    Complex res;
    res.i = c1.i - c2.i;
    res.j = c1.j - c2.j;
    return res;
	//代码结束
}

第二关

比较嫌弃题目麻烦,直接做了点改动

#include <iostream>
#include <string>
#include <string.h>
#include <exception>
using namespace std;

#define MaxSize 1000
//定义学生数据类型,至少能存储学号,姓名,性别,籍贯和专业等信息,建议使用英文参数
typedef struct student {
	//请输入你的代码
   int id;
   char Name[20];
   char Sex[4];
   char Home[20];
   char Major[30];
	//代码结束
} Student;
//定义学生列表数据类型,包含学生对象和学生数量
typedef struct StuList{
   Student *item;
   int length;
}StudentList;

int main()
{

   StudentList myList;
   //初始化myList列表
   myList.item = new Student[MaxSize];
   myList.length = 0;  
   try
   {
	   // 连续插入三个学生的信息
	   //形如:20210001 李斯 男 安徽合肥 网络空间安全
	   int index=0;
	   for(int index=0;index<3;index++)
	   {
		      cin>>myList.item[index].id>>myList.item[index].Name>>myList.item[index].Sex;
            cin>>myList.item[index].Home>>myList.item[index].Major;
		  	//请输入你的代码
			//将输入学员信息存储进myList
            myList.length ++;
	        //代码结束
		   
	   }
	   //打印学生列表信息
	   
	   for(index=0;index<myList.length;index++)
	   {
		    //请输入你的代码
			//打印学生列表,注意按照 姓名 性别 籍贯 专业 学号 的顺序
            cout<<myList.item[index].Name<<' '<<myList.item[index].Sex<< ' ' <<myList.item[index].Home;
            cout<< ' ' <<myList.item[index].Major<< ' ' <<myList.item[index].id << endl;

	        //代码结束
	   }

   }
   catch(exception e)
   {
       
	   cout<<"出现异常输入"<<endl;

   }
   return 0;
}

第三关

埃拉托色尼筛方便应用求某范围的质数

#include <iostream>
using namespace std;

#define SIZE 10000

void sieve(int n){
	//产生一个数组“0 0 2 3 4 5 ...”
	int A[SIZE] = {0};
	int i = 0;
	int j = 0;
	//初始化
	A[0] = 0;
	A[1] = 0;
	for(i=2;i<=n;i++)
	{
		A[i] = i;
	}
		
	//从索引2开始,不断地将筛去不是质数的数
    //
    //请输入你的代码
    for(int i = 2;i <= n ; i++)
        if(A[i] != 0)
            for(int j = i + i ;j <= n; j += i)
                A[j] = 0;
	//
	//打印质数结果
	for(i=2;i<=n;i++)
	{
		if(A[i]!=0)
        {
            cout<<A[i]<<"  ";

        }
	}
    cout<<endl;

	return;
}

int main(){
	int x = 0;
	cin>>x;
	sieve(x);
	return 0;	
}

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
汇编语言是一种低级编程语言,它直接对应于计算机的机器语言,但使用了人类可读的助记符和符号来替代机器语言中的二进制指令和地址。以下是关于汇编语言的详细说明: ### 基本概念与特性 1. **机器相关性**: - **面向特定体系结构**:汇编语言是为特定计算机体系结构(如x86、ARM、MIPS等)设计的,每种体系结构都有其专属的汇编语言。这意味着汇编程序通常不能直接在不同类型的处理器上运行,不具备源代码级别的可移植性。 2. **指令与操作码**: - **助记符表示**:汇编语言使用助记符(mnemonics)来代表特定的机器指令,这些助记符往往与指令的功能相关,如`MOV`(移动数据)、`ADD`(加法)、`JMP`(跳转)等。每个助记符对应一个特定的二进制操作码。 3. **低级操作**: - **直接硬件控制**:汇编语言允许程序员直接操控硬件资源,如寄存器、内存地址、I/O端口等,这使得它非常适合编写对时间和空间效率要求极高、需要精确控制硬件的程序,如设备驱动、实时系统内核、性能关键算法等。 4. **代码效率**: - **紧凑的代码**:汇编程序生成的目标代码通常比高级语言编译后的代码更为紧凑,占用内存较少。 - **快速执行**:由于直接对应于机器指令,汇编程序在执行时无需经过复杂的解释或编译过程,能够快速、高效地被执行。 5. **编写与调试难度**: - **复杂性高**:编写汇编程序需要深入了解计算机体系结构和指令集细节,即使是简单的任务也可能需要大量的指令。此外,程序逻辑的表述不如高级语言直观,容易出错且难以阅读和维护。 - **调试挑战**:由于代码高度依赖具体的硬件状态,调试汇编程序可能非常困难,尤其是在处理复杂的控制流、数据依赖性和异常处理时。 6. **工具支持**: - **汇编器**:汇编语言源代码通过汇编器(assembler)转换成机器语言(机器码或二进制码),汇编器负责将助记符和符号地址解析为具体的机器指令和物理地址。 - **链接器**:生成的机器码通常需要链接器(linker)进行链接,将多个目标文件合并为一个可执行文件,同时解决外部符号引用。 ### 应用场景与优势 汇编语言主要应用于以下几个方面: - **系统级编程**:操作系统内核、设备驱动、中断服务程序等底层软件开发,这些领域要求对硬件有精细控制,且性能要求高。 - **性能优化**:在高级语言编写的程序中,对性能敏感的部分可以用汇编重写以提升效率。 - **反病毒与安全研究**:理解和编写汇编代码有助于分析恶意软件行为、逆向工程及编写防病毒软件。 - **教学与理解计算机原理**:学习汇编语言有助于深入理解计算机体系结构、指令集、内存管理和硬件接口等基础概念。 ### 编程特点与挑战 - **手动管理内存**:程序员需要手动分配和释放内存,跟踪数据在内存中的位置,处理堆栈、堆和静态内存区域。 - **无高级抽象**:缺乏高级语言中的类、对象、函数库等高级抽象概念,所有编程结构如循环、条件分支等都需要手工实现。 - **依赖特定硬件**:汇编程序直接依赖于特定处理器的指令集、寄存器组织和寻址模式,更换硬件平台通常意味着重新编写代码。 尽管汇编语言具有上述挑战,但它在特定场景下提供了无可比拟的优势,如极高的执行效率、对硬件资源的精确控制以及在安全和反病毒领域的应用。随着编译器技术的进步,许多高级语言也能生成高效的目标代码,但在某些对性能和硬件控制有严格要求的情况下,汇编语言仍然是不可或缺的工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

biubiupiu~~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值