实验二 算法设计

实验二 算法设计

 

一、实验目的和要求:

掌握算法设计方法,熟悉简单的C程序设计方法。 

 

二、实验内容:

1. 1+2+3+...+100的值。要求:用N-S流程图设计算法,用C语言实现算法并运行出结果。

2. 5!。要求:用N-S流程图设计算法,用C语言实现算法并运行出结果。

3. 1*3*5*7*9的值。要求:用N-S流程图设计算法,用C语言实现算法并运行出结果。

4. 判定2000—2500年中的每一年是否闰年,并将结果输出。要求:用N-S流程图设计算法,用C语言实现算法并运行出结果。

5. 依次将10个数输入,要求输出其中最大的数。要求:用结构化流程图表示算法。

6. 判断一个数n能否同时被35整除。要求:用伪代码设计算法。

7. 100~200之间的素数输出。要求:用结构化流程图或N-S流程图表示算法。

8. 求两个数mn的最大公约数。要求:用N-S流程图设计算法。

 

三、实验步骤与结果

1.求1+2+3+...+100的值。

1)设计思路

累加跳出

2)程序源码(加注释)

#include<stdio.h>

int main()

{

int i,sum;

sum=0;

for(i=1;i<=100;i++)

sum+=i;

printf("\nsum=%d",sum);

}

3运行结果与分析

 

 

2.求5!。要求:用N-S流程图设计算法,用C语言实现算法并运行出结果。

 

1)设计思路

累乘跳出

2)程序源码(加注释)

#include<stdio.h>

 int main()

 {

    int i=1,mul=1;

    printf("5!=");

    do

    {

    mul=mul*i;

    i++;

}

while(i<=5);

printf("%d\n",mul);

return 0;

 }

3)运行结果与分析

 

 

  1. 1*3*5*7*9的值。要求:用N-S流程图设计算法,用C语言实现算法并运行出结果。

1)设计思路

while循环累加累乘

2)程序源码(加注释)

#include<stdio.h>

void main()

{

int a = 1;

int s = 1;

while (a <=11)

{

s = s * a;

a = a + 2;

}

printf("s=%d", s);

}

3运行结果与分析

 

 

  1. 判定2000—2500年中的每一年是否闰年,并将结果输出。要求:用N-S流程图设计算法,用C语言实现算法并运行出结果。

1)设计思路

数据判断

(2)程序源码(加注释)

#include <stdio.h>

#include <stdlib.h>

void input_year(int y[], int n, int sy);

void leap_year(int y[], int n);

int main()

{

int year[501];    // 定义数组 ,因为运行需要501才能满足跳出循环.

input_year(year, 501, 2000);

leap_year(year, 501);

system("pause");

return 0;

}

void input_year(int y[], int n, int sy)

{

int i;

for(i=0; i<n; i++)

y[i]=sy++;

}

void leap_year(int y[], int n)

{

int i;

for(i=0; i<n; i++){

if ((y[i]%4==0&&y[i]%100!=0)||y[i]%400==0)

printf("%d 是闰年!\n", y[i]);

else

printf("%d 不是闰年!\n", y[i]);    

}

}

(3)运行结果与分析

 

 

 

5. 依次将10个数输入,要求输出其中最大的数。要求:用结构化流程图表示算法。

1)设计思路

利用起泡法

2)程序源码(加注释)

#include <stdio.h>

#include <stdlib.h>

int main()

{

    int num[10], i, j, temp;

    for (i=0; i<10; i++)

        scanf("%d", &num[i]);

    for (i=0, j=i+1; j<10; j++)

if(num[i]<num[j]){

temp=num[i];

num[i]=num[j];

num[j]=temp;

}

    printf("Max=%d\n", num[0]);

    system("pause");

    return 0;

}

3运行结果与分析

 

 

 

6. 判断一个数n能否同时被35整除。要求:用伪代码设计算法。

1)设计思路

取模判断

2)程序源码(加注释)

begin

输入一个数n

 if (n%3==0&&n%5==0)

 Printf n

 else

 printf n

end

//只需要输入的数字满足以下条件

 if (n%3==0&&n%5==0)就能被35同时整除

 

3运行结果与分析

 

 

  1. 100~200之间的素数输出。要求:用结构化流程图或N-S流程图表示算法。

1)设计思路

取模判断

2)程序源码(加注释)

#include<stdio.h>

int main()

{

int count=0;

int i=0;

for(i=100;i<=200;i++)

{

int j;

for(j=2;j<i;j++)//用i去对除了1和它本身以外的数求余

{

if(i%j==0)

break;

}

if(j==i)

{

count++;

printf("%d\n",i);

}

 

}

printf("\n");

printf("素数个数为:%d\n",count);

return 0;

 

}3运行结果与分析

 

 

 

 

 

 

 

  1. 求两个数mn的最大公约数。要求:用N-S流程图设计算法。

1)设计思路

分解质因数法

2)程序源码(加注释)

#include<stdio.h>

int main()

{

int count=0;

int i=0;

for(i=100;i<=200;i++)

{

int j;

for(j=2;j<i;j++)//用i去对除了1和它本身以外的数求余

{

if(i%j==0)

break;

#include <stdio.h>

#include <math.h>

// 输入两个数的最大公因数

int main() {

int m,n,s,i;

scanf("%d,%d",&m,&s);

printf("%d,%d 的最大公约数是:",m,s);

n=(m>s)?s:m;

for(i=n;i>0;i--){

if((m%i!=0)||(s%i!=0))continue;

printf("%2d\n",i);

printf("最小公倍数%5d",m*s/i);

return 0;

}

return 0;

}

 

}3运行结果与分析

 

 

四、实验总结与心得

 

总结:

还是需要有自己的思路才能更快的写出代码

 

画图要画标准,不要花里胡俏的,表达的意思到位就行

 

N-S流程图是对整个程序的一个最初的构思

心得:
代码写错了,就是无非就是粗心

posted @ 2020-12-16 08:28  刘磊i  阅读(310)  评论(0编辑  收藏  举报