第二轮考核

考核二

A.linux系统的学习

一.安装虚拟机

1.安装VMware √

2.下载镜像Ubuntu √

3.在VMware上安装上相应的Linux操作系统 √

二.掌握基本的linux操作

1.自主学习掌握: 基本的文件操作vi/vim的使用方法简单的shell语法

Linux笔记

2.实训作业:

注册并登入超算习堂 https://easyhpc.net/,进入在线实训部分,完成在线实训内容:

(1)linux基础入门√

(2)vim入门教程√

也记录在Linux笔记里面

3.编译运行程序 将第一次考核中的 8. 判断回文质数 代码,在虚拟机内的linux环境下编译运行

代码:

#include<iostream>
#include<cmath>
using namespace std;

bool isPrime(unsigned a);//质数 

bool isHuiwen(unsigned b);//回文 

int main()
{
	unsigned x;
	cin>>x;
	if(isPrime(x)&&isHuiwen(x)){
		cout<<"YES."<<endl;
	}else{
		cout<<"NO."<<endl;
	}
	
	return 0;
}

bool isPrime(unsigned a)
{
	int ret=1;
	int i;
	double n=sqrt(a);
	if(a==1||a==0){
		ret=0;
	}else{
		for(i=2;i<=n;i++){
			if(a%i==0){
				ret=0;
				break;
			}
		}
	}
	return ret==1;
}

bool isHuiwen(unsigned b)
{
	int ret=0,t=b,d;
	while(b>0){
		d=b%10;
		ret=ret*10+d;
		b/=10;
	}
	return t==ret;
}

运行:

yang@yang-virtual-machine:~$ g++ huiwenzhishu.cpp -o huiwenzhishu
yang@yang-virtual-machine:~$ ./huiwenzhishu
151
YES.
yang@yang-virtual-machine:~$ ./huiwenzhishu
121
NO.
yang@yang-virtual-machine:~$ ./huiwenzhishu
191
YES.
yang@yang-virtual-machine:~$ ./huiwenzhishu
55
NO.

B.编程语言的学习

一.基本数据结构学习

链表学习记录

队列和栈

1.实现一个单链表,链表初始为空,支持三种操作:

  1. 向链表头插入一个数;
  2. 删除第 k 个插入的数后面的数;
  3. 在第 k 个插入的数后插入一个数

考察内容:链表的基本使用

#include<stdio.h>
#include<stdlib.h> 
typedef struct MyLinkedList{
	int val;
	struct MyLinkedList* next;
} MyLinkedList;


MyLinkedList* myLinkedListCreate() {//创建链表 
	MyLinkedList *node=(MyLinkedList*)malloc(sizeof(MyLinkedList));
	node->next=NULL;
	return node;
}

void myLinkedListAddAtHead(MyLinkedList* obj, int val) {//向链表头插入一个数 
	MyLinkedList *head=(MyLinkedList*)malloc(sizeof(MyLinkedList));
	head->val=val;
	head->next=obj->next;//obj->next指向插入的第一个数 
	obj->next=head;
}

void myLinkedListAddAtIndex(MyLinkedList* obj, int k, int val) {//在第k个插入的数后插入一个数,k=0相当于在表头插入一个数,k小于0不插入。 
	if(k<0){//k小于0的时候不插入 
		printf("插入失败!\n");
		return ; 
	}
	int i;
	MyLinkedList *p=obj;
	for(i=0;i<k;i++){
	 	
	 	if(p->next==NULL){
	 		printf("插入失败!\n");
	 		return ;
		 }else{
		 	p=p->next;
		 }
	 }
	MyLinkedList *mid=(MyLinkedList*)malloc(sizeof(MyLinkedList));
	mid->val=val;
	mid->next=p->next;
	p->next=mid;
}


void myLinkedListDeleteAtIndex(MyLinkedList* obj, int k) {//删除第k个插入的数后面的数,k=0删除链表第一个数。 
	if(k<0){//k小于0的时候不删除 
		printf("删除失败!\n");
		return ;
	}
	 MyLinkedList* p=obj,*q;
	 int i;
	 for(i=0;i<k;i++){
	 	if(p->next==NULL){
	 		printf("删除失败!\n");
	 		return ;
		 }else{
		 	p=p->next;
		 }
	 }
	 if(p->next==NULL){
	 	printf("删除失败!\n");
	 	return ;
	 }//第k个插入的数后面没有数 
	 q=p->next;
	 p->next=q->next;
}

void myLinkedListPrint(MyLinkedList* obj){
	MyLinkedList *p=obj->next;
	printf("链表:");
	if(p==NULL){
		printf("Empty!");
	} 
	while(p){
		printf("%d ",p->val);
		p=p->next;
	}
	printf("\n");
}

int main()
{
	MyLinkedList *a=myLinkedListCreate(); 
	int num,k,i=0;
	
	printf("初始化链表(输入-1结束):");
	scanf("%d",&num); 
	while(num!=-1){
		myLinkedListAddAtIndex(a,i,num);
		scanf("%d",&num); 
		i++;
	} 
	myLinkedListPrint(a);
	
	printf("输入一个要向链表头插入的数:");
	scanf("%d",&num);
	myLinkedListAddAtHead(a,num);
	myLinkedListPrint(a);
	
	printf("在第k个插入的数后面插入一个数(k=0相当于在表头插入一个数),输入k和要插入的数:");
	scanf("%d %d",&k,&num);
	myLinkedListAddAtIndex(a,k,num);
	myLinkedListPrint(a);
	
	printf("删除第k个插入的数后面的数,输入k值:");
	scanf("%d",&k);
	myLinkedListDeleteAtIndex(a,k);
	 myLinkedListPrint(a);
	
	return 0;
 } 
  1. 将中缀表达式转化成对应的后缀表达式

所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计 算按运算符号出现的顺序,严格地由左而右进行(不用考虑运算符的优先级)

例1:中缀表达式: 3(5–2)+7 对应的后缀表达式为:352-7+

例2:中缀表达式: 2+48+(88+1)/3 对应的后缀表达式为 248+881+3/+

考察内容:栈的基本使用

#include<iostream> 
#include<string>
#include<stack>
using namespace std;
int main()
{
	string a;
	getline(cin,a);
	stack<char> symbolx;
	int i,flag=0;//flag=0表示表达式的开头,flag=1表示不是开头,-1+2*2或者2*(-9)  
	for(i=0;i<a.length();i++){
		if(flag==0){
			if(a[i]=='-'){//表达式开头如果有负号,需要输出 
				flag=-1;
				continue;
			}else if(a[i]=='+'){//开头正号不需要输出 
				flag=1;
				continue;
			}
		}
		if(a[i]>='0'&&a[i]<='9'){//遇到数字,直接输出 
			if(flag==-1){
				cout<<'-';//输出表达式式开头的符号 
			}
			flag=1;
			while((i<a.length())&&(a[i]<='9'&&a[i]>='0'||a[i]=='.')){//可能有小数 
				cout<<a[i];
				i++;
			}
			i--;//多加了,减回去 
		}else{
			if(a[i]=='('){//左括号入栈 
				flag=0;
				symbolx.push(a[i]);
				continue;
			}
			if(a[i]==')'){//遇到右括号,不断出栈输出,直到栈空(一般不会)或遇到左括号 
				while(!symbolx.empty()&&symbolx.top()!='('){
					cout<<symbolx.top();
					symbolx.pop();
				}
				if(!symbolx.empty()&&symbolx.top()=='('){//弹出左括号 
					symbolx.pop();
				}
				continue;
			}
		}
		switch(a[i]){//+-*/
			case '-':
			case '+':
				//优先级:乘除>加减>左括号,所以不断出栈输出,直到栈空或者遇到左括号,然后入栈 
				while(!symbolx.empty()&&symbolx.top()!='('){
					cout<<symbolx.top();
					symbolx.pop();
				}
				symbolx.push(a[i]);
				break;
			case '*':
			case '/':
				//若栈顶符号不为乘除,只入栈;为乘除,先取出栈顶符号再入栈 
				if(!symbolx.empty()&&symbolx.top()!='('){
					if(symbolx.top()=='*'||symbolx.top()=='/'){
						cout<<symbolx.top();
						symbolx.pop();
					}
				}
				symbolx.push(a[i]);
				break;
			default:
			break;	
		}
	}
	while(!symbolx.empty()){//出栈输出非左括号的,直到栈空 
		if(symbolx.top()!='('){
			cout<<symbolx.top();
		}
		symbolx.pop();
	}
	return 0;
}

感受:

  • 小心空指针访问
  • 非void函数记得返回相应内容
  • Linux指令必须自己尝试一遍才知道可不可以,可能会有个别不太一样比如tmux的不是参考博客中说的ctrl+a,而是ctrl+b等等
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值