
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( 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 高斯列主元求解方程组,以及子程序调用子程序问题。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)