Linux下C、C++、和Java程序设计

1.创建用户和之前一样。

RHEL7.2用户名和密码的创建以及DHCP服务的安装_封奚泽优的博客-CSDN博客https://blog.csdn.net/weixin_64066303/article/details/130763469?spm=1001.2014.3001.55012.用yum安装(分别是c,c++,java,javac)(之前我以为是分开安装的,后面老师说只是版本不一样,安装之后java和javac都安装好了)5月29日补:可能需要先yum install java 才有后面的那个yum install java-1.8.0-openjdk-devel.x86_64。不然就是一直在尝试其他镜像。

[root@localhost 桌面]# yum install gcc -y
[root@localhost 桌面]# yum install gcc-c++ -y
[root@localhost 桌面]# yum install java -y
[root@localhost 桌面]# yum install java-1.8.0-openjdk-devel.x86_64 -y
[root@localhost 桌面]# java
[root@localhost 桌面]# javac

 参考链接:linux:centos7 yum命令安装java环境并配置JAVA_HOME环境变量_as57147的博客-CSDN博客https://blog.csdn.net/as57147/article/details/109295471

编写一个Java程序看看(不知道是不是我之前配置过环境变量的原因,这个可以直接编译运行

这个可能不是,用yum安装环境变量好像是自动配置好了。

public class hello {
	public static void main(String[] args) {
		System.out.println("hello world");
	}
}
[root@localhost java]# javac hello.java
[root@localhost java]# java hello
hello world
[root@localhost java]# echo $JAVA_HOME
usr/java/jdk1.8.0_361

3.编写C或C++和Java的语言程序,我这里是用c++和java写的。

 参考链接:

(3条消息) 求范围内的质数的个数_封奚泽优的博客-CSDN博客https://blog.csdn.net/weixin_64066303/article/details/130451290?spm=1001.2014.3001.5502

代码分析:通过用户输入可以得到各自的学号,首先判断他本身是否是质数,如果不是质数就可以将他拆分,那么如何拆分,我们判断质数的时候如果他有因子就不是质数,在将他除以这个因子重复这个过程,整个翻译成程序就是如果他是质数就直接跳出循环,如果他不是质数就将他拆成质数乘以质数的形式,自己本身越来越靠近质数,最后跳出循环把自己也输出就得到了最终的表达式,整个程序不是很难想到,主要就是要注意int类型数据越界的情况

#include<iostream>
using namespace std;
//202140200126

bool isPrime(long long sno);
 
int main(){
	//用int类型数据越界 
	long long sno=0;
	cout<<"请输入您的学号:"; 
	cin>>sno;
	cout<<sno<<"=";
	while(!isPrime(sno)){
		for(long long i=2;i<sno;i++){
			//直接输出因子 
			if(sno%i==0){
				cout<<i<<"*";
				sno/=i;
				//直接进入下一次的循环 
				break;
			}
		}
	}
	cout<<sno<<endl;
	return 0;
}

//判断sno是否是质数 
bool isPrime(long long sno){
	for(long long i=2;i<sno;i++){
		if(sno%i==0){
			return false;
		}
	}
	return true;
}

 思路知道了用什么语言写就是转换一下就可以了。

import java.util.Scanner;
//202140200126
public class Test {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.print("请输入您的学号:");
        long sno=sc.nextLong();
        System.out.print(sno+"=");
        while(!isPrime(sno)){
            for(long i=2;i<sno;i++){
                if(sno%i==0){
                    System.out.print(i+"*");
                    sno/=i;
                    break;
                }
            }
        }
        System.out.println(sno);
    }
    //判断sno是否是质数
    public static boolean isPrime(long sno){
        for(long i=2;i<sno;i++){
            if(sno%i==0){
                return false;
            }
        }
        return true;
    }
}

[root@localhost java]# gedit Test.java
[root@localhost java]# javac Test.java
[root@localhost java]# java Test
请输入您的学号:202140200126
202140200126=2*25339*3988717

 出现这个说明之前没有那个文件,现在是创建一个新的文件。

** (gedit:5177): WARNING **: 获取文件“/root/桌面/he”的信息出错:没有那个文件或目录

** (gedit:5177): WARNING **: Set document metadata failed: 设置文件元数据出错:没有那个文件或目录

说明:这个寻找质因子是采取一种比较笨的方法,所以整个的效率比较低,对于一些的学号会很久才出来结果,可以通过修改来优化整个程序,如:寻找不用判断每一种可能,主要判断质数就行,因为合数可以拆分成质数和质数相乘的形式,有因为需要时最小的因子,所以总会有一个质数比这个合数大。详细的思路还是看之前的参考链接。 

类似参考:

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

//202140200126

bool isPrime(long long sno);
 
int main(){
	//用int类型数据越界 
	long long sno=0;
	cout<<"请输入您的学号:"; 
	cin>>sno;
	cout<<sno<<"=";
	while(!isPrime(sno)){
		long long i=0; 
		//同样2拿出来单独判断 
		if(sno%2==0){
			//输出2,sno除以2 
		 	cout<<2<<"*";
			sno/=2;
			//这里就不是用break了 
			continue; 
		}
		double tmp=sqrt(sno);
		//缩小可能的范围 
		for(i=3;i<=tmp;i+=2){
			//直接输出因子 
			if(sno%i==0){
				cout<<i<<"*";
				sno/=i;
				//直接进入下一次的循环 
				break;
			}
		}
	}
	cout<<sno<<endl;
	return 0;
}

//判断sno是否是质数 
bool isPrime(long long sno){
	//把2单独拿出来判断 
	if(sno%2==0){
		return false;
	}
	double tmp=sqrt(sno);
	//之后就仅仅考虑奇数,而且范围也可以缩小 
	for(long long i=3;i<=tmp;i+=2){
		if(sno%i==0){
			return false;
		}
	}
	return true;
}

c++编写的程序用gcc编译就会发生报,所以应该要用g++来编译。

[root@localhost c]# gedit sno.c
[root@localhost c]# gcc sno.c -o sno.o
sno.c:1:19: 致命错误:iostream:没有那个文件或目录
 #include<iostream>
                   ^
编译中断。
[root@localhost c]# g++ sno.c -o sno.o
[root@localhost c]# ./sno.o
请输入您的学号:202140200126
202140200126=2*25339*3988717

4.这个题目还不确定是什么意思,我是先把.c的文件准备好,如何编写makefile文件。

[root@localhost c]# gedit Makefile

写下面这几行代码 

sno.o:sno.c
	g++ sno.c -o sno.o

如果出现这个,说明之前已经编译过了,可以删除之后重新执行

[root@localhost c]# make -f Makefile
make: “sno.o”是最新的。
[root@localhost c]# rm -f sno.o
[root@localhost c]# make -f Makefile
g++ sno.c -o sno.o

也可以增加一个clean,修改之前的文件就是成这样了。

sno:sno.c
	g++ sno.c -o sno
clean:
	rm -f *.o
	rm -f sno

之前有一直以为的是,下面是执行sno和clean一起执行,这就导致我的理解是他生成了sno的目标文件然后又删除了。其实不是,他的意思是只执行Makefile里面的clean。也就是我们要删除的时候可以执行这条语句。

[root@localhost c]# make -f Makefile clean
[root@localhost c]# ls
a.out  cdx  cdx.c  Makefile  sno.c

[root@localhost c]# make -f Makefile
g++ sno.c -o sno
[root@localhost c]# ls
a.out  cdx  cdx.c  Makefile  sno  sno.c

[root@localhost c]# ./sno
请输入您的学号:202140200126
202140200126=2*25339*3988717

[root@localhost c]# make -f Makefile clean
rm -f *.o
rm -f sno

[root@localhost c]# ls
a.out  cdx  cdx.c  Makefile  sno.c

 当然这个老师上课是讲过的,也确实书上还有笔记,以为要在多个文件,为此还特地把文件拆开来用。直接看文件内容吧。(这里我是提前创建了文件,而且把内容写到里面的,所以用cat查看,如果有感兴趣的可以直接创建文件,把内容写进去,我这没有写填写过程,因为我感觉写在一个文件夹里面貌似也是可以的

[root@localhost make]# ls
bar.c  bar.h  foo.c  foo.h  Makefile

[root@localhost make]# cat foo.h
#include<iostream>
using namespace std;

[root@localhost make]# cat foo.c
#include "foo.h"
#include "bar.h"

bool isPrime(long long sno);

int main(){
	//用int类型数据越界 
	long long sno=0;
	cout<<"请输入您的学号:"; 
	cin>>sno;
	cout<<sno<<"=";
	while(!isPrime(sno)){
		for(int i=2;i<sno;i++){
			//直接输出因子 
			if(sno%i==0){
				cout<<i<<"*";
				sno/=i;
				//直接进入下一次的循环 
				break;
			}
		}
	}
	cout<<sno<<endl;
	return 0;
}

[root@localhost make]# cat bar.h
#include<iostream>
using namespace std;

[root@localhost make]# cat bar.c
#include "foo.h"
#include "bar.h"

//判断sno是否是质数 
bool isPrime(long long sno){
	for(long long i=2;i<sno;i++){
		if(sno%i==0){
			return false;
		}
	}
	return true;
}

[root@localhost make]# cat Makefile
sno:foo.o bar.o
	g++ foo.o bar.o -o sno
foo.o:foo.c foo.h
	g++ -c foo.c -o foo.o
bar.o:bar.c foo.h bar.h
	g++ -c bar.c -o bar.o
clean:
	rm -f *.o
	rm -f sno
[root@localhost make]# 

然后就是编译运行,和之前就是一样的了。

[root@localhost make]# ls
bar.c  bar.h  foo.c  foo.h  Makefile
[root@localhost make]# make -f Makefile
g++ -c foo.c -o foo.o
g++ -c bar.c -o bar.o
g++ foo.o bar.o -o sno

[root@localhost make]# ls
bar.c  bar.h  bar.o  foo.c  foo.h  foo.o  Makefile  sno
[root@localhost make]# ./sno
请输入您的学号:202140200126
202140200126=2*25339*3988717

[root@localhost make]# make -f Makefile clean
rm -f *.o
rm -f sno

[root@localhost make]# ls
bar.c  bar.h  foo.c  foo.h  Makefile
[root@localhost make]# 

5.我刚开始还以为是环境变量的问题,现在感觉应该是权限的问题。(文件夹位置没有发生改变

先切换到普通用户,执行上面的语句。发现权限不够,这个时候就想到了sudo。

[root@localhost make]# su lj200126
[lj200126@localhost make]$ ls
bar.c  bar.h  foo.c  foo.h  Makefile
[lj200126@localhost make]$ make -f Makefile
g++ -c foo.c -o foo.o
Assembler messages:
Fatal error: can't create foo.o: 权限不够
make: *** [foo.o] 错误 1

 结果还是不行。被报告是什么意思,让我们重新回到root用户。(这里是要输入普通用户的密码,不是root用户的密码)

[lj200126@localhost make]$ sudo make -f Makefile
[sudo] password for lj200126: 
lj200126 不在 sudoers 文件中。此事将被报告。
[lj200126@localhost make]$ 

 切回到root用户。(也可以用su root

[lj200126@localhost make]$ exit
exit
您在 /var/spool/mail/root 中有新邮件
[root@localhost make]# 

 咋还有邮件来了,我到要看看是什么。(末尾显示这个,原来他在打"小报告",会记录这违规的事情)

[root@localhost make]# cat /var/spool/mail/root

localhost.localdomain : May 23 20:51:56 : lj200126 : 用户不在 sudoers 中 ; TTY=pts/0 ; PWD=/root/make ; USER=root ; COMMAND=/bin/make -f Makefile

 那现在的思路就是提升他的权限了。

把只读权限修改为可写权限。

[root@localhost make]# ls -l /etc/sudoers
-r--r-----. 1 root root 4188 7月   7 2015 /etc/sudoers
[root@localhost make]# chmod u+w /etc/sudoers
[root@localhost make]# ls -l /etc/sudoers
-rw-r-----. 1 root root 4188 7月   7 2015 /etc/sudoers
[root@localhost make]# 

 编辑配置文件(增加下面一行,详细思路看参考链接)

[root@localhost make]# gedit /etc/sudoers

恢复权限(440就是9位权限码,里面的每一位就是rwx读,写,可执行,三位对应的是user,group,other。440就是自己是可读的不可写不可执行,组里面也是可读的不可写不可执行,对于其他用户是不可读不可写不可执行的

[root@localhost make]# ls -l /etc/sudoers
-rw-r----- 1 root root 4209 5月  23 21:05 /etc/sudoers
[root@localhost make]# chmod 440 /etc/sudoers
[root@localhost make]# ls -l /etc/sudoers
-r--r----- 1 root root 4209 5月  23 21:05 /etc/sudoers
[root@localhost make]#

 重新编译

[lj200126@localhost make]$ make -f Makefile
g++ -c foo.c -o foo.o
Assembler messages:
Fatal error: can't create foo.o: 权限不够
make: *** [foo.o] 错误 1

[lj200126@localhost make]$ sudo make -f Makefile
[sudo] password for lj200126: 
g++ -c foo.c -o foo.o
g++ -c bar.c -o bar.o
g++ foo.o bar.o -o sno

[lj200126@localhost make]$ ls
bar.c  bar.h  bar.o  foo.c  foo.h  foo.o  Makefile  sno

[lj200126@localhost make]$ ./sno
请输入您的学号:202140200126
202140200126=2*25339*3988717
[lj200126@localhost make]$ 

参考链接:

 (1条消息) 解决Linux系统下,出现“不在sudoers文件中,此事将被报告”的问题_不在 sudoers 文件中。此事将被报告。_正积分的博客-CSDN博客https://blog.csdn.net/weixin_46984358/article/details/121497015

6.官网下载,可以不用捐助。我是在windows下面下载在移动到虚拟机里面的。.tar.gz后缀的压缩包Thank You for Downloading Eclipse | The Eclipse Foundationhttps://www.eclipse.org/downloads/download.php?file=/oomph/epp/2023-03/R/eclipse-inst-jre-linux64.tar.gz&mirror_id=1142

[root@localhost 下载]# ls
eclipse-inst-linux64.tar.gz
[root@localhost 下载]# tar -zxvf eclipse-inst-linux64.tar.gz

 理论上是解压之后进入解压后的文件夹,然后打开eclipse-inst就可以了,但是我这里报错了,不知道是不是文件不对。

[root@localhost eclipse]# cd eclipse-installer
[root@localhost eclipse-installer]# ls
artifacts.xml  eclipse-inst      features  p2       readme
configuration  eclipse-inst.ini  icon.xpm  plugins
[root@localhost eclipse-installer]# ./eclipse-inst

 坐等老师发文件。

 我的启动没成功。(应该是版本不兼容的原因,官网下载的是最新版的,但是rhel7不是)

老师最终没有发文件,还是要靠自己,终于功夫不负有心人找到一个链接。

RHEL7.2 安装Eclipse-oxygen Hadoop开发环境 - ccskun - 博客园 (cnblogs.com)https://www.cnblogs.com/ccskun/p/7822277.html先下载(可以直接复制到虚拟机里面,然后就直接下载了

[root@localhost 下载]# wget http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/oxygen/1a/eclipse-java-oxygen-1a-linux-gtk-x86_64.tar.gz

 查找文件名字

[root@localhost 下载]# ls -lrt|grep eclipse
-rw-r--r--  1 root root 186642081 10月 10 2017 download.php?file=%2Ftechnology%2Fepp%2Fdownloads%2Frelease%2Foxygen%2F1a%2Feclipse-java-oxygen-1a-linux-gtk-x86_64.tar.gz
drwxr-xr-x  8 root root      4096 5月  24 18:50 eclipse

解压

[root@localhost 下载]# tar -zxvf download.php?file=%2Ftechnology%2Fepp%2Fdownloads%2Frelease%2Foxygen%2F1a%2Feclipse-java-oxygen-1a-linux-gtk-x86_64.tar.gz

 出现eclipse文件

 点击文件

 搞定了

 

 接下来的操作大家比我熟悉了吧。

他这个不能直接移动到桌面来,要配置一下,感兴趣的同学可以自己尝试一下。 

然后把之前写的程序拷贝过来看一下是否可以运行。那就搞定了。

5月25日还是更新一下方法吧移动到桌面的方法吧。

进入目录创建文件,并编辑他。

[root@localhost 桌面]# cd /usr/share/applications
[root@localhost applications]# gedit eclipse.desktop

 文件信息

[Desktop Entry]
Encoding=UTF-8
Name=Eclipse
Comment=Eclipse IDE
Comment=Eclipse Luna
Exec=/root/下载/eclipse/eclipse
Icon=/root/下载/eclipse/icon.xpm
Terminal=false
StartupNotify=true
Type=Application
Categories=Application;Development;

 可以通过先找到之前的文件然后右键在终端打开

[root@localhost 下载]# cd eclipse
[root@localhost eclipse]# pwd
/root/下载/eclipse

 其实就是下面这两个文件的路径把他复制下来粘贴到 eclipse.desktop文件相对应的位置。

 保存之后就可以看到图标了。

 网上说是可以右键直接发送到桌面,但是我这里右键直接加入软件了,所以还是要用指令拷贝的方式到桌面来。

[root@localhost 桌面]# pwd
/root/桌面
[root@localhost 桌面]# cp /usr/share/applications/eclipse.desktop /root/桌面

 注意勾选这个以后每次进入软件的时候就不会总是询问你了。当然路径是自己选择的,自己记得在哪里就行了。

5月27日更新一下eclipse中的c++。

Windows系统下下载下面的安装包(后缀.zip格式)

http://www.eclipse.org/downloads/download.php?file=/tools/cdt/releases/juno/sr2/cdt-master-8.1.2.zip&mirror_id=1093http://www.eclipse.org/downloads/download.php?file=/tools/cdt/releases/juno/sr2/cdt-master-8.1.2.zip&mirror_id=1093解压后移动到虚拟机中。

 把features和plugins文件夹复制粘贴到上面的eclipse文件夹中(eclipse文件夹也是你之前编辑配置文件的那个)因为有同名的文件,选择合并,一定是合并不然编译器用不了。(--zsy)

 然后再次重启eclipse,就是再次打开这个软件。

7.保存命令也和之前是一样的了。

(1条消息) RHEL7.2用户名和密码的创建以及DHCP服务的安装_封奚泽优的博客-CSDN博客https://blog.csdn.net/weixin_64066303/article/details/130763469?spm=1001.2014.3001.5501

 整个的这篇写下来的不只是怎么操作,仅仅是敲代码,敲指令的话没有什么效果,更加重要的是应该去试错,命令报错可以直接把错误的内容复制粘贴到浏览器上面,基本上互联网上面都会有人同样也出现这种错误,并且有类似的解决方案,我听到一种说法就是如果你的错误在网上没有,那么你就是这个领域的佼佼者了。这就是我把错误的部分也写里面,把解决写在错误后面原因,也不能说这些错误没有意义,至少当有人来问我的时候我可以自信地说这个我之前也错过,但是我现在知道了。

猜你喜欢

转载自blog.csdn.net/weixin_64066303/article/details/130825487