超算第二次考核任务
超算第二次考核任务
感觉第一个部分的内容只是让我们熟悉一些基本的用法,说实话有些指令自己用着习惯就行也不是每一种指令都要掌握,比如有些指令或软件的基本的功能是一样的时候就可以选择合适自己的,比如我就更喜欢nano 而不是vim
Linux
在Ubuntu上使用C的方法
1)下载GCC编译器
2)学习一些指令
cd 去往一个目录
mkdir "文件名" 创建一个文件名
nano "filename.c" 创建一个c的文件
......漫长的编译
ctrl + s 保存
ctrl + x 退出到命令行
gcc "filename.c" 编译我们编好的代码 (系统自动给你一个输出文件 a.out (好拉))
gcc "filename.c" -o "我们喜欢的名字" 给输出的文件重新命名(不然就是a.out了😵)
如果我们在我们的filename 的目录下:./"我们喜欢的名字" 开始运行我们的代码
如果不在filename 的目录下面 就要输入详尽的地址 但是前面不用加点
Vim的使用(为啥感觉nano 更好用一点)
三种模式
命令模式(基础)从其他的模式中按esc键进入
前面有带n的意思是可以先输入一个数字n然后重复执行命令n次
i 进入前插入模式
I 到行首进入前插入模式
a 进入后插入模式
A 到行尾进入后插入模式
o 向上插入
O 向下插入
r 替换(replace)一次就结束
R 替换(replace)一直进行直到我们按下esc键,其中我们每覆盖一个单词就会往后移动一格
G 跳到最后一行
gg 按两下跳到第一行
/ 搜索 (按下回车进入搜索)
进入搜索后按 n 键向下继续,N 向上继续
nx 删除后n个单词
ndd 删除所在行
yy 复制一行
p 向下粘贴
P 向上粘贴
u 撤销命令
. 重复上一条的命令
ZZ 保存并退出
ZQ 强制退出不保存
插入模式 按 i 键进入
编辑模式(命令行在最底下)按:键进入
:q 退出
:w 保存
:wq 保存并退出
: q! 强制退出不保存
: set nu 显示行号
: set nonu 关闭行号
: m,ns/aaa/bbb/g 将第m行到n行的aaa替换成bbb
: %s/aaa/bbb/g 对全文进行操作
补充:cd ..回到上一个目录
ls 输出该目录下的文件名 不包括隐藏文件
ls -a 输出的所有的文件(包隐藏文件)
在Linux上运行C++(质数回文数)
上图!
用nano创建一个cpp文件,叫做huiwenshu.cpp
在huiwenshu.cpp中打上之前的代码
编译huiwenshu.cpp 并将huiwenshu.cpp 编译好的文件改成 huiwenshu.out以便自己区别
看看有没有这个文件
运行一下huiwenshu.cpp
输出结果
单链表
/*
链表的一些基本的操作(creation,insert,delete,clear,show)
还增加了一些容错和报错机制,算是弥补没有写学生管理系统的遗撼吧
*/
#include<bits/stdc++.h>
#include<stdlib.h>
#include<iostream>
#include<stdio.h>
using namespace std;
typedef struct ListCheat{
int number;
struct ListCheat *next;
}List;
class ManageList{
private:
List *Head;
int NodeNums=0;
public:
List *CreatNode();
void CreatList();
void InsertListNode();
void DeleteListNode();
void ClearList();
void ShowTheList();
};
List *ManageList::CreatNode() {
List *_Head = (List *)malloc(sizeof(List));
int data;
scanf("%d",&data);
_Head->number = data;
_Head->next = NULL;
return _Head;
}
void ManageList::CreatList(){
cout<<"请输入你要创建的链表的个数:"<<endl;
int n,i;
cin>>n;
NodeNums=n;
List *NewNode,*OldNode;
Head = (List *)malloc(sizeof(List));
OldNode = Head;
for(i=0;i<n;i++){
printf("第%d个数据:\n",i+1);
NewNode = CreatNode();
OldNode->next = NewNode;
OldNode = NewNode;
}
}
void ManageList::InsertListNode(){
if(NodeNums == 0){
cout<<"还没创建链表"<<endl;
return;
}
NodeNums++;
cout<<"请输入你要插入节点的位置:"<<endl;
int k,i;
scanf("%d",&k);
if(k > NodeNums){
cout<<"插入的位置超出了链表的长度!"<<endl;
return;
}
List *head,*rear;
head = Head;
rear = Head->next ;
for(i=1;i<k;i++){
head = head->next ;
rear = rear->next ;
}
cout<<"请输入你要插入的内容:"<<endl;
List *NewNode = CreatNode();
head->next = NewNode;
NewNode->next = rear;
}
void ManageList::DeleteListNode(){
if(NodeNums == 0){
cout<<"链表中没有可以删除的数据了!"<<endl;
return;
}
NodeNums--;
cout<<"请输入你要删去节点的位置:"<<endl;
int i,k;
scanf("%d",&k);
if(k > NodeNums){
cout<<"链表中没有"<<k<<"这个位置!"<<endl;
return;
}
List *head,*rear;
head = Head;
rear = Head->next ;
for(i=1;i<k;i++){
head = head->next ;
rear = rear->next ;
}
head->next = rear->next ;
}
void ManageList::ClearList(){
if(NodeNums == 0){
cout<<"链表中没有任何的数据了!"<<endl;
return;
}
NodeNums=0;
List *rear,*head;
head = Head->next ;
while(head != NULL){
rear = head->next ;
free(head);
head = rear;
}
}
void ManageList::ShowTheList(){
if(NodeNums == 0){
cout<<"链表中没有任何数据!"<<endl;
return;
}
cout<<"链表的数据如下:"<<endl;
int i;
List *rear;
rear=Head->next ;
for(i=1;i<=NodeNums;i++){
cout<<"第"<<i<<"个为:"<<endl;
printf("%d\n",rear->number);
rear = rear->next ;
}
cout<<"总计为"<<NodeNums<<"个"<<endl;
}
int main(){
ManageList kit;
string str;
cout<<"有创建(creat),插入(insert),删去(delete),清空(clear),展示(show),结束(over)指令"<<endl;
while(1){
cin>>str;
if(str == "creat"){
kit.CreatList();
}
else if(str == "insert"){
kit.InsertListNode();
}
else if(str == "delete"){
kit.DeleteListNode();
}
else if(str == "clear"){
kit.ClearList();
}
else if(str == "show"){
kit.ShowTheList();
}
else if (str == "over") break;
else printf("没有找到相关的指令\n");
}
return 0;
}
后缀表达式
/*
第一版中缀表达式便后缀表达式
*/
#include<iostream>
#include<bits/stdc++.h>
#include<string.h>
#define MAX 1001
using namespace std;
enum fuhao{
};
typedef class _stack
{
private:
char *express,*sign; //express存数字,sign存字符;
int exp_top = -1; //表示栈顶
int sign_top = -1;//表示栈顶
public:
void setin_length(int x);// 输入栈的大小;
void setin_sta(char *string);//用于输入栈中的每一个元素
void setout();//用于输出栈内元素;
void transform();//转移;
} sta;
void sta::setin_length(int x)
{
express=(char *)calloc(x+1,sizeof(char));
sign=(char *)calloc(x+1,sizeof(char));
}
void sta::setin_sta(char * str)
{
char ch;int i=0;
while(1){
ch=*(str + i);
if(ch >= '0' && ch <='9') express[++exp_top] = ch;
else if(ch >='(' && ch <='/') {
if(ch == '('){
sign[++sign_top] = ch;
}
else if(ch == ')') {
while(sign[sign_top] != '('){
char temp;
temp=sign[sign_top];
sign[sign_top] = 0;
sign_top--;
express[++exp_top]=temp;
}
sign[sign_top] =0;
sign_top--;
}
else {
if(sign_top == -1) {
sign[++sign_top] = ch;
}
else {
char temp;
temp=sign[sign_top];
if(((temp == '+'|| temp =='-' ) && (ch == '*' || ch == '/')) || (temp == '(') ) {
sign[++sign_top] = ch;
}
else if((temp=='+'||temp=='-')&&(ch=='+'||ch=='-')||(temp=='*'||temp=='/')&&(ch=='*'||ch=='/')){
char temp;
temp = sign[sign_top];
sign[sign_top] = ch;
express[++exp_top] = temp;
}
else {
transform();
sign[++sign_top] = ch;
}
}
}
}
else {
transform();
break;
}
i++;
}
}
void sta::setout()
{
int i;
for(i=0;i<=exp_top;i++){
cout<<express[i];
}
cout<<endl;
}
void sta::transform(){
char ch;
while(sign_top > -1){
ch=sign[sign_top];
sign_top--;
express[++exp_top]=ch;
}
}
int main()
{
sta kit;
char express[MAX];
int len;
cout<<"Please set down the size of your stack to prevent the stack flowed out:"<<endl;
cin>>len;
kit.setin_length(len);
cout<<"Please set down your expression:"<<endl;
scanf("%s",express);
cout<<"Your Express is transformed to :"<<endl;
kit.setin_sta(express);
kit.setout();
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现