编写程序,求1-1000之间满足“除3余2,除5余3,除7余2”的数,一行输出5个数

编写程序,求1-1000之间满足“除3余2,除5余3,除7余2”的数,一行输出5个数,第1张

var

i,j:longint;

begin

for i:=1 to 1000 do

begin

if (i mod 3=2) and (i mod 5=3) and (i mod 7=2) then begin inc(j); write(i,' '); end;

if j=5 then begin writeln; j:=0; end;

end;

end

int sum;

for(int i =1; i <= 1000; i++)

{

if(i % 9 == 0)

{

ConsoleWrite(iToString() + " ");具体语法咋写不记得了

sum += i;

}

}

ConsoleWriteLine("");

ConsoleWrite(sumToString());

AB(:,:) 这种定义虚参的方法,叫 “假定形状”。

类似 AB( ) 这种定义虚参的方法,叫 “假定大小”(不建议使用该方法定义)

而显示给出 AB 大小的方法,类似 AB( n , n+1 ) 这种,是常规定义。

对于假定形状的函数声明,需要书写 interface 接口,以便使得编译器了解该函数的参数及其意义。

书写 interface 比较繁琐。我一般尽量避免书写 interface。更好的方法,是把子程序封装成 module,这样可以避免书写 interface。(我是说尽量避免,但书写 interface 的方法我还是建议你学习一下,认真看一本教材。)

以下是封装成 Module 的代码:(!// 为我的注释)

module Gauss_Mod !// 定义一个 Gauss_Mod 的模块

Contains !// 把高斯相关的两个函数 Contains 包含在模块内

subroutine Gauss_elimination(A,B,X)

implicit none

real(8),allocatable::AB(:,:)

real(8) A(:,:),B(:),X(:)

real(8) m,temp

integer i,j,n,k,rmax

n=size(B)

allocate(AB(n,(n+1)))

AB(:,1:n)=A(:,:)

AB(:,n+1)=B(:)

do k=1,n-1

temp=0d0

rmax=0d0

!选主元

do i=k,n

if(abs(temp)<abs(AB(i,k))) then

temp=AB(i,k)

rmax=i

endif

if(AB(rmax,k)==0) goto 1000

end do

if(rmax/=k) then

call swap(AB(:,:),rmax,k)

endif

do i=k+1,n

m=AB(i,k)/AB(k,k)

do j=1,n+1

AB(i,j)=AB(i,j)-AB(k,j)m

enddo

enddo

enddo

if(AB(n,n)==0) goto 1000

temp=0d0

do i=1,n

temp=temp+AB(i,n+1)

end do

if(temp==0) goto 1000

A(:,:)=AB(:,1:n)

B(:)=AB(:,n+1)

X(n)=B(n)/A(n,n)

do i=n-1,1,-1

temp=0

do j=i+1,n

temp=temp+A(i,j)B(j)

enddo

X(i)=(B(i)-temp)/A(i,i)

enddo

1000 write(,) "found no zero solution!"

deallocate(AB)

return

end subroutine Gauss_elimination

subroutine swap(A,rmax,k)

implicit none

real(8) A(:,:)

real(8),allocatable::temp(:)

integer i,m,n,rmax,k

m=size(A,1)

n=size(A,2)

write(,) m,n

allocate(temp(n))

if((rmax==k)or(rmax<1)or(rmax>m)or(k<1)or(k>m)) then

A=A

else

temp(:)=A(rmax,:)

A(rmax,:)=A(k,:)

A(k,:)=temp(:)

endif

return

end subroutine swap

End Module Gauss_Mod !// 结束模块

program main

Use Gauss_Mod !// 主程序 Use 使用 Gauss_Mod 模块

implicit none

real(8) A(3,3),B(3),X(3)

A(1,1)=0001

A(2,1)=-1000

A(3,1)=-2000

A(1,2)=2000

A(2,2)=3712

A(3,2)=1072

A(1,3)=3000

A(2,3)=4623

A(3,3)=5643

B(1)=1000

B(2)=2000

B(3)=3000

call Gauss_elimination(A,B,X)

write(,) X

end program main

我试了一下,有3个错误:

1、第9行少一个右括号;

2、第17行多了一个左括号;

3、第28行,调用子程序不是这么写的,是call sushu(n,a,m)。

×××××××××××××××××××××××××××××××××××××××××××××××××××××

另外,子程序算法写的有问题吧,运行一遍结果只有一个1。

还有像if(a(i)>0) then……end if没什么意义,都已知是1到1000的数了为什么还判断是否大于0呢?

我简单改了一下:

subroutine sushu(n,a,m)

integer a(n)

logical temp

m=1

do i=2,n

temp=true

do j=2,i-1

if(mod(i,j)==0)then

temp=false

exit

endif

enddo

if(temp)then

a(m)=i

m=m+1

endif

enddo

end subroutine

program sushu_pro

parameter(n=1000)

integer a(n)

call sushu(n,a,m)

do i=1,m-1

write(,100) a(i)

enddo

100 format(1x,8i10)

end program

program main

implicit none

integer::i

real::a(1000)=(/(i,i=1,1000)/)

a=2a

write(,)a

pause

endprogram

一百万的数组我机子带不动,先给一千你试试,要一百万自己把一千改成一百万。

program main

integer i, j

integer,parameter :: n = 1000

logical(1):: flag(n)

integer :: num = 0

flag = true

do i = 2, sqrt(real(n))

if(notflag(i)) cycle

do j = i, n/i

flag(ij) = false

enddo

enddo

do i = 2, n

if(flag(i)) then

num = num + 1

write(,) i

endif

enddo

end

很久以前写过的一个。

至于输出,自己看书总能弄出来的。

上面前辈的建议很对啊,自己多写才是王道。

~~兴趣也蛮重要的。

加油

import javaioFile;

import javaioFileWriter;

import javaioIOException;

import javautilArrayList;

import javautilCollections;

import javautilScanner;

public class Polly

{

public static void main(String[] args) throws IOException

{

FileWriter fw = new FileWriter("datatxt");

for(int i = 0; i < 100; i++)

{

int rand = (int) (Mathrandom()  1000);

fwwrite(rand + " ");

}

fwflush();

fwclose();

Scanner scanner = new Scanner(new File("datatxt"));

scanneruseDelimiter("(:(![\\-\\+]\\d+)[\\s\\S])+");

ArrayList<Integer> list = new ArrayList<Integer>();

while(scannerhasNext())

{

listadd(IntegerparseInt(scannernext()));

}

scannerclose();

Collectionssort(list);

Systemoutprintln(list);

}

}

以上就是关于编写程序,求1-1000之间满足“除3余2,除5余3,除7余2”的数,一行输出5个数全部的内容,包括:编写程序,求1-1000之间满足“除3余2,除5余3,除7余2”的数,一行输出5个数、用C#编写一控制台应用程序,输出1~1000之间的所有能被9整除的数,并计算和输出其和。、Fortran 高斯列主元求解方程组,以及子程序调用子程序问题。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10139328.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存