3.判断R=0,正确则N为最大公约数否则进行下一步 4.将N赋值给M,将R赋值给N,重复第一步 3.请叙述算法都有哪些特性。
答:①有穷性②群定性③有效性④有零个或多个输入⑤有一个或多个输入?? 4.请叙述什么是结构化程序设计以及结构
答:①只要有几种简单类型的借口,就可以构成任意复杂的程序。这样可以使程序设计规范化,便于用工程的方法来机型软件生产,??由顺序结构,选择结构,循环结构这三种基本结构组成的程序就是结构化程序。
二、算法设计题
1.设计算法求1+2+3+…+100的和。 #include#includemain(){
int I,S = 0;
for(I = 1;I<=100;I++) //求1-100的和 S=S+I;
printf(\ system(\ }
2.已知两个自然数M和N, 请设计算法输出它们的 最小公倍数。 #include #include #include
int fmax(int m,int n) //求最大公约数 {int r; r=m%n; while (r!=0)
{m=n;n=r;r=m%n;}
return n; }
int fmin(int m,int n) //最小公倍数=两个数的积除两个数的最大公约数 { return m*n/fmax(m,n);} main() { int a,b;
scanf(\
printf(\system(\
3.已知一个自然数N,请设计算法输出它所有真 约数的和。
#include #include
int f(int x) { int n=0,i,k=1,flag=1; while(flag) //求一个数的约数 { flag=0; for(i=k;x%i;i++); k=i+1;
if(x!=i) //判断是否到这个数本身 { flag=1; n+=i; //将约数累加到n中 } } return n; //是这个数本身时返回值为n }
int main() {
int m;
scanf(\
printf(\真约数之和=%d\\n\system(\
4.设计算法求出10000以内所有孪生素数对。 #include #include
int f(int x) //判断一个数是否为素数 {
int i; for(i=2;x%i;i++); if(x==i) return x; else return 0; }
main() {
int i,j=1,m=1,n=3; //n=3 n永远为m前一个素数
for(i=5;i<10000;i++) //因为最小的孪生素数对从为3,5 {
if(f(i)==0) //如果i非素数跳出这次循环进入下一次 continue;
m=f(i);
if(m-n==2) //输出孪生素数 {
printf(\第%d组孪生素数: %d , %d\\n\ j++; }
n=m; //n为m前一个素数 }
system(\
}
5.设计算法输出10000以内所有亲和数对。 //如果两个数a和b,a的所有真因数之和等
//于b,b的所有真因数之和等于a,则称a,b是一对亲和数。 真因数:除了他本身 #include int qhs(int a) { int i; int s = 0; for (i = 1; i * i < a; i++) //求一个数的真约数和 if (a % i == 0) s += i + a / i; if (i * i == a) s += i; s -= a; return s; } int main(void) //返回值为空 { int i, j; for (i = 0; i < 100000; i++)
{ j = qhs(i); if (j > i && i == qhs(j))//判断这个数是否有真约数有的话输出 printf(\ } scanf(\ return 0; }
6.已知一个自然数N,设计算法输出它的素分解 式。
#include #include
void f(int x) { int i,flag=1,k=1; while(flag) { for(i=k;x%i;i++); k=i+1; printf(\ x=x/i; if(x<2||i>=x) flag=0; } if(x>1)
printf(\}
int main() { int n; scanf(\ f(n);
system(\
7.输入一个正整数,输出其所有正真约数,写出 算法。
#include#includevoid yueshu(int num) { for(int i=1;i<=num;i++) { if(num%i==0) printf(\